From 7e720f485f32b255671793ad6d7312681752462a Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Tue, 24 Sep 2013 18:37:49 +0000 Subject: [PATCH 1/1] 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 --- test/Transforms/InstSimplify/call.ll | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/Transforms/InstSimplify/call.ll b/test/Transforms/InstSimplify/call.ll index 89d42381015..fd854c5b466 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) -- 2.34.1