diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2013-09-24 18:37:49 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2013-09-24 18:37:49 +0000 |
commit | 7e720f485f32b255671793ad6d7312681752462a (patch) | |
tree | aea433eba935304e368b929389bd7f0e1e708cfd /test/Transforms | |
parent | 4da61345ec553a4f3ab3cedf6f21452374f1fda1 (diff) | |
download | external_llvm-7e720f485f32b255671793ad6d7312681752462a.zip external_llvm-7e720f485f32b255671793ad6d7312681752462a.tar.gz external_llvm-7e720f485f32b255671793ad6d7312681752462a.tar.bz2 |
Verify that we don't optimize null return checks to the nothrow_t version of operator new.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191325 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms')
-rw-r--r-- | test/Transforms/InstSimplify/call.ll | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/test/Transforms/InstSimplify/call.ll b/test/Transforms/InstSimplify/call.ll index 89d4238..fd854c5 100644 --- a/test/Transforms/InstSimplify/call.ll +++ b/test/Transforms/InstSimplify/call.ll @@ -122,6 +122,29 @@ cast.end: ; preds = %cast.notnull, %entr declare noalias i8* @_Znwm(i64) +%"struct.std::nothrow_t" = type { i8 } +@_ZSt7nothrow = external global %"struct.std::nothrow_t" + +define i8* @operator_new_nothrow_t() { +entry: + %call = tail call noalias i8* @_ZnamRKSt9nothrow_t(i64 8, %"struct.std::nothrow_t"* @_ZSt7nothrow) + %cmp = icmp eq i8* %call, null + br i1 %cmp, label %cast.end, label %cast.notnull + +cast.notnull: ; preds = %entry + %add.ptr = getelementptr inbounds i8* %call, i64 4 + br label %cast.end + +cast.end: ; preds = %cast.notnull, %entry + %cast.result = phi i8* [ %add.ptr, %cast.notnull ], [ null, %entry ] + ret i8* %cast.result + +; CHECK-LABEL: @operator_new_nothrow_t +; CHECK: br i1 %cmp, label %cast.end, label %cast.notnull +} + +declare i8* @_ZnamRKSt9nothrow_t(i64, %"struct.std::nothrow_t"*) nounwind + define i8* @malloc_can_return_null() { entry: %call = tail call noalias i8* @malloc(i64 8) |