@@ -304,6 +304,58 @@ 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: 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+
307359define void @test21 () {
308360; CHECK-LABEL: @test21(
309361; CHECK-NEXT: ret void
@@ -484,7 +536,7 @@ define i32 @test32(i1 %c, ptr %p, i32 %i, i1 %arg) {
484536; CHECK: bb1:
485537; CHECK-NEXT: store i32 [[V]], ptr [[P]], align 4
486538; 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:%.*]]
488540; CHECK: bb2:
489541; CHECK-NEXT: ret i32 0
490542;
0 commit comments