]> granicus.if.org Git - clang/commitdiff
Patch for PR2334, and a similar ObjC bug.
authorEli Friedman <eli.friedman@gmail.com>
Fri, 16 May 2008 17:37:11 +0000 (17:37 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Fri, 16 May 2008 17:37:11 +0000 (17:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51193 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprScalar.cpp
test/CodeGen/conditional.c

index bdd7975fa0cadc8009d1a3e2a0e08429303b7094..8442b8174e2be0794552373a2849c40a81d5792f 100644 (file)
@@ -1050,7 +1050,8 @@ VisitConditionalOperator(const ConditionalOperator *E) {
   // Handle the GNU extension for missing LHS.
   Value *LHS;
   if (E->getLHS())
-    LHS = Visit(E->getLHS());
+    LHS = EmitScalarConversion(Visit(E->getLHS()), E->getLHS()->getType(),
+                               E->getType());
   else    // Perform promotions, to handle cases like "short ?: int"
     LHS = EmitScalarConversion(CondVal, E->getCond()->getType(), E->getType());
   
@@ -1059,7 +1060,8 @@ VisitConditionalOperator(const ConditionalOperator *E) {
   
   CGF.EmitBlock(RHSBlock);
   
-  Value *RHS = Visit(E->getRHS());
+  Value *RHS = EmitScalarConversion(Visit(E->getRHS()), E->getRHS()->getType(),
+                                    E->getType());
   Builder.CreateBr(ContBlock);
   RHSBlock = Builder.GetInsertBlock();
   
index ae4420711502dbf4a29ccbb36bfaf94cbf5973e3..d3e5c0b9384b98077dab9033935e2d5a33945235 100644 (file)
@@ -25,3 +25,8 @@ void test5() {
   void* vp;
   cip = 0 ? vp : cip;
 }
+
+void test6();
+void test7(int);
+void* test8() {return 1 ? test6 : test7;}
+