]> granicus.if.org Git - clang/commitdiff
Make sure we or together the overflow flags of the multiply and add, so the
authorEli Friedman <eli.friedman@gmail.com>
Sat, 9 Apr 2011 19:54:33 +0000 (19:54 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 9 Apr 2011 19:54:33 +0000 (19:54 +0000)
check is triggered appropriately.  Reported on cfe-dev.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129231 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprCXX.cpp
test/CodeGenCXX/arm.cpp

index 8eee4a0b0c0d5d5f16856b6380782478788218d9..777036bc3b3741e286bce2be558e34cfd1f15679 100644 (file)
@@ -595,7 +595,7 @@ static llvm::Value *EmitCXXNewAllocSize(ASTContext &Context,
       Size = CGF.Builder.CreateExtractValue(AddRes, 0);
 
       llvm::Value *AddDidOverflow = CGF.Builder.CreateExtractValue(AddRes, 1);
-      DidOverflow = CGF.Builder.CreateAnd(DidOverflow, AddDidOverflow);
+      DidOverflow = CGF.Builder.CreateOr(DidOverflow, AddDidOverflow);
     }
 
     Size = CGF.Builder.CreateSelect(DidOverflow,
index 672ca01007888bdb0a760d2efce945e1656f988c..8d74d003c3d69ac7d989b2db14720b27108e0d4c 100644 (file)
@@ -117,7 +117,8 @@ namespace test3 {
     // CHECK: [[N:%.*]] = load i32*
     // CHECK: @llvm.umul.with.overflow.i32(i32 [[N]], i32 4)
     // CHECK: @llvm.uadd.with.overflow.i32(i32 {{.*}}, i32 8)
-    // CHECK: [[SZ:%.*]] = select
+    // CHECK: [[OR:%.*]] = or i1
+    // CHECK: [[SZ:%.*]] = select i1 [[OR]]
     // CHECK: call noalias i8* @_Znam(i32 [[SZ]])
     // CHECK: store i32 4
     // CHECK: store i32 [[N]]