Verify that we don't optimize null return checks to the nothrow_t version of operator new.

llvm-svn: 191325
This commit is contained in:
Benjamin Kramer 2013-09-24 18:37:49 +00:00
parent dd36e9387b
commit d59bf255d5
1 changed files with 23 additions and 0 deletions

View File

@ -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)