| ; RUN: opt < %s -passes='cgscc(inline)' -S | FileCheck %s |
| |
| declare ptr @malloc(i64) |
| declare ptr @helper() |
| |
| define internal ptr @wrapper(i64 %size) alwaysinline { |
| ; Not returned: must not inherit the token. |
| %h = call ptr @helper() |
| %p = call ptr @malloc(i64 %size) |
| ret ptr %p |
| } |
| |
| ; CHECK-LABEL: define ptr @inherits( |
| ; CHECK: call ptr @helper(){{$}} |
| ; CHECK: call ptr @malloc(i64 4){{.*}}, !alloc_token [[MD:![0-9]+]] |
| define ptr @inherits() { |
| %c = call ptr @wrapper(i64 4), !alloc_token !0 |
| ret ptr %c |
| } |
| |
| define internal ptr @wrapper_own(i64 %size) alwaysinline { |
| %p = call ptr @malloc(i64 %size), !alloc_token !1 |
| ret ptr %p |
| } |
| |
| ; Metadata the wrapper set itself is never overwritten. |
| ; CHECK-LABEL: define ptr @no_overwrite( |
| ; CHECK: call ptr @malloc(i64 4){{.*}}, !alloc_token [[OWN:![0-9]+]] |
| define ptr @no_overwrite() { |
| %c = call ptr @wrapper_own(i64 4), !alloc_token !0 |
| ret ptr %c |
| } |
| |
| ; CHECK-DAG: [[MD]] = !{!"Outer", i1 true} |
| ; CHECK-DAG: [[OWN]] = !{!"Inner", i1 false} |
| !0 = !{!"Outer", i1 true} |
| !1 = !{!"Inner", i1 false} |