@@ -304,6 +304,58 @@ define void @custom_malloc_no_escape() {
304
304
ret void
305
305
}
306
306
307
+ declare void @use.ptr (ptr )
308
+
309
+ define void @malloc_no_escape_via_attr () {
310
+ ; CHECK-LABEL: @malloc_no_escape_via_attr(
311
+ ; CHECK-NEXT: [[M:%.*]] = call ptr @malloc(i64 24)
312
+ ; CHECK-NEXT: call void @use.ptr(ptr captures(none) [[M]])
313
+ ; CHECK-NEXT: ret void
314
+ ;
315
+ %m = call ptr @malloc (i64 24 )
316
+ call void @use.ptr (ptr captures(none) %m )
317
+ store i8 0 , ptr %m
318
+ ret void
319
+ }
320
+
321
+ define void @malloc_address_only_escape () {
322
+ ; CHECK-LABEL: @malloc_address_only_escape(
323
+ ; CHECK-NEXT: [[M:%.*]] = call ptr @malloc(i64 24)
324
+ ; CHECK-NEXT: call void @use.ptr(ptr captures(address) [[M]])
325
+ ; CHECK-NEXT: ret void
326
+ ;
327
+ %m = call ptr @malloc (i64 24 )
328
+ call void @use.ptr (ptr captures(address) %m )
329
+ store i8 0 , ptr %m
330
+ ret void
331
+ }
332
+
333
+ define void @malloc_provenance_escape () {
334
+ ; CHECK-LABEL: @malloc_provenance_escape(
335
+ ; CHECK-NEXT: [[M:%.*]] = call ptr @malloc(i64 24)
336
+ ; CHECK-NEXT: call void @use.ptr(ptr captures(provenance) [[M]])
337
+ ; CHECK-NEXT: store i8 0, ptr [[M]], align 1
338
+ ; CHECK-NEXT: ret void
339
+ ;
340
+ %m = call ptr @malloc (i64 24 )
341
+ call void @use.ptr (ptr captures(provenance) %m )
342
+ store i8 0 , ptr %m
343
+ ret void
344
+ }
345
+
346
+ define void @malloc_read_provenance_escape () {
347
+ ; CHECK-LABEL: @malloc_read_provenance_escape(
348
+ ; CHECK-NEXT: [[M:%.*]] = call ptr @malloc(i64 24)
349
+ ; CHECK-NEXT: call void @use.ptr(ptr captures(read_provenance) [[M]])
350
+ ; CHECK-NEXT: store i8 0, ptr [[M]], align 1
351
+ ; CHECK-NEXT: ret void
352
+ ;
353
+ %m = call ptr @malloc (i64 24 )
354
+ call void @use.ptr (ptr captures(read_provenance) %m )
355
+ store i8 0 , ptr %m
356
+ ret void
357
+ }
358
+
307
359
define void @test21 () {
308
360
; CHECK-LABEL: @test21(
309
361
; CHECK-NEXT: ret void
@@ -484,7 +536,7 @@ define i32 @test32(i1 %c, ptr %p, i32 %i, i1 %arg) {
484
536
; CHECK: bb1:
485
537
; CHECK-NEXT: store i32 [[V]], ptr [[P]], align 4
486
538
; CHECK-NEXT: call void @unknown_func()
487
- ; CHECK-NEXT: br i1 %arg , label [[BB1]], label [[BB2:%.*]]
539
+ ; CHECK-NEXT: br i1 [[ARG:%.*]] , label [[BB1]], label [[BB2:%.*]]
488
540
; CHECK: bb2:
489
541
; CHECK-NEXT: ret i32 0
490
542
;
0 commit comments