]> granicus.if.org Git - clang/commitdiff
Fix a crash for an edge case of the GNU ?: extension.
authorEli Friedman <eli.friedman@gmail.com>
Wed, 25 Jan 2012 05:04:17 +0000 (05:04 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 25 Jan 2012 05:04:17 +0000 (05:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148923 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExpr.cpp
test/CodeGenCXX/conditional-gnu-ext.cpp

index db87cba9a0fb51077eea327de9ed57417be2df2c..5c2061bed03a495623631950dab280a58cb7157c 100644 (file)
@@ -1999,6 +1999,8 @@ EmitConditionalOperatorLValue(const AbstractConditionalOperator *expr) {
     return EmitAggExprToLValue(expr);
   }
 
+  OpaqueValueMapping binding(*this, expr);
+
   const Expr *condExpr = expr->getCond();
   bool CondExprBool;
   if (ConstantFoldsToSimpleInteger(condExpr, CondExprBool)) {
@@ -2009,8 +2011,6 @@ EmitConditionalOperatorLValue(const AbstractConditionalOperator *expr) {
       return EmitLValue(live);
   }
 
-  OpaqueValueMapping binding(*this, expr);
-
   llvm::BasicBlock *lhsBlock = createBasicBlock("cond.true");
   llvm::BasicBlock *rhsBlock = createBasicBlock("cond.false");
   llvm::BasicBlock *contBlock = createBasicBlock("cond.end");
index 46c5e7fab6de7f6419116fb4f1baf4735ad24501..104a91d27356da54427a72ca7a3fdf1852c7464e 100644 (file)
@@ -140,3 +140,11 @@ namespace test3 {
   }
 
 }
+
+namespace test4 {
+  // Make sure this doesn't crash.
+  void f() {
+    const int a = 10, b = 20;
+    const int *c = &(a ?: b);
+  }
+}