diff options
Diffstat (limited to 'llvm/test/Transforms/FunctionAttrs/nonnull.ll')
-rw-r--r-- | llvm/test/Transforms/FunctionAttrs/nonnull.ll | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/test/Transforms/FunctionAttrs/nonnull.ll b/llvm/test/Transforms/FunctionAttrs/nonnull.ll index 63b2380a7fc..7e7b1ad2143 100644 --- a/llvm/test/Transforms/FunctionAttrs/nonnull.ll +++ b/llvm/test/Transforms/FunctionAttrs/nonnull.ll @@ -545,6 +545,30 @@ define weak_odr void @weak_caller(i32* nonnull %a) { ret void } +; Expect nonnull +; ATTRIBUTOR: define internal void @control(i32* nocapture nonnull readnone align 16 dereferenceable(8) %a) +define internal void @control(i32* dereferenceable(4) %a) { + call void @use_i32_ptr(i32* %a) + ret void +} +; Avoid nonnull as we do not touch naked functions +; ATTRIBUTOR: define internal void @naked(i32* dereferenceable(4) %a) +define internal void @naked(i32* dereferenceable(4) %a) naked { + call void @use_i32_ptr(i32* %a) + ret void +} +; Avoid nonnull as we do not touch optnone +; ATTRIBUTOR: define internal void @optnone(i32* dereferenceable(4) %a) +define internal void @optnone(i32* dereferenceable(4) %a) optnone noinline { + call void @use_i32_ptr(i32* %a) + ret void +} +define void @make_live(i32* nonnull dereferenceable(8) %a) { + call void @naked(i32* nonnull dereferenceable(8) align 16 %a) + call void @control(i32* nonnull dereferenceable(8) align 16 %a) + call void @optnone(i32* nonnull dereferenceable(8) align 16 %a) + ret void +} attributes #0 = { "null-pointer-is-valid"="true" } attributes #1 = { nounwind willreturn} |