@@ -304,6 +304,59 @@ define void @custom_malloc_no_escape() {
304304 ret void
305305}
306306
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: store i8 0, ptr [[M]], align 1
326+ ; CHECK-NEXT: ret void
327+ ;
328+ %m = call ptr @malloc (i64 24 )
329+ call void @use.ptr (ptr captures(address) %m )
330+ store i8 0 , ptr %m
331+ ret void
332+ }
333+
334+ define void @malloc_provenance_escape () {
335+ ; CHECK-LABEL: @malloc_provenance_escape(
336+ ; CHECK-NEXT: [[M:%.*]] = call ptr @malloc(i64 24)
337+ ; CHECK-NEXT: call void @use.ptr(ptr captures(provenance) [[M]])
338+ ; CHECK-NEXT: store i8 0, ptr [[M]], align 1
339+ ; CHECK-NEXT: ret void
340+ ;
341+ %m = call ptr @malloc (i64 24 )
342+ call void @use.ptr (ptr captures(provenance) %m )
343+ store i8 0 , ptr %m
344+ ret void
345+ }
346+
347+ define void @malloc_read_provenance_escape () {
348+ ; CHECK-LABEL: @malloc_read_provenance_escape(
349+ ; CHECK-NEXT: [[M:%.*]] = call ptr @malloc(i64 24)
350+ ; CHECK-NEXT: call void @use.ptr(ptr captures(read_provenance) [[M]])
351+ ; CHECK-NEXT: store i8 0, ptr [[M]], align 1
352+ ; CHECK-NEXT: ret void
353+ ;
354+ %m = call ptr @malloc (i64 24 )
355+ call void @use.ptr (ptr captures(read_provenance) %m )
356+ store i8 0 , ptr %m
357+ ret void
358+ }
359+
307360define void @test21 () {
308361; CHECK-LABEL: @test21(
309362; CHECK-NEXT: ret void
@@ -484,7 +537,7 @@ define i32 @test32(i1 %c, ptr %p, i32 %i, i1 %arg) {
484537; CHECK: bb1:
485538; CHECK-NEXT: store i32 [[V]], ptr [[P]], align 4
486539; CHECK-NEXT: call void @unknown_func()
487- ; CHECK-NEXT: br i1 %arg , label [[BB1]], label [[BB2:%.*]]
540+ ; CHECK-NEXT: br i1 [[ARG:%.*]] , label [[BB1]], label [[BB2:%.*]]
488541; CHECK: bb2:
489542; CHECK-NEXT: ret i32 0
490543;
0 commit comments