blob: 4e0e220ff8ae02a86fed8bfeacfed9671bcb4f16 [file] [edit]
; 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}