]> granicus.if.org Git - clang/commitdiff
PR27989: only enqueue binary operators into the data recursive int expression
authorRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 4 Jun 2016 00:22:31 +0000 (00:22 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 4 Jun 2016 00:22:31 +0000 (00:22 +0000)
evaluator if they are actually int expressions.

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

lib/AST/ExprConstant.cpp
test/SemaCXX/constant-expression-cxx1y.cpp

index 6b0eae143b2cfae918100845cb3dfa2f574f61ab..10192be7bdf1e516a7726f285ab44f4cb2a1f886 100644 (file)
@@ -7112,7 +7112,9 @@ public:
   static bool shouldEnqueue(const BinaryOperator *E) {
     return E->getOpcode() == BO_Comma ||
            E->isLogicalOp() ||
-           (E->getLHS()->getType()->isIntegralOrEnumerationType() &&
+           (E->isRValue() &&
+            E->getType()->isIntegralOrEnumerationType() &&
+            E->getLHS()->getType()->isIntegralOrEnumerationType() &&
             E->getRHS()->getType()->isIntegralOrEnumerationType());
   }
 
index d67cbf6f3a53047de93ef5ba3da644583bd36d16..f8103224af89b25f473dac8883f3f675d76f334e 100644 (file)
@@ -949,3 +949,11 @@ namespace SpeculativeEvalWrites {
 
   static_assert(!f(), "");
 }
+
+namespace PR27989 {
+  constexpr int f(int n) {
+    int a = (n = 1, 0);
+    return n;
+  }
+  static_assert(f(0) == 1, "");
+}