]> granicus.if.org Git - clang/commitdiff
Fix regression from r259622: the operand of an increment that is the operand of
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 3 Feb 2016 18:48:43 +0000 (18:48 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 3 Feb 2016 18:48:43 +0000 (18:48 +0000)
a cast expression is not the operand of a cast expression itself, so if it's
parenthesized we need to form a ParenExpr not a ParenListExpr.

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

lib/Parse/ParseExpr.cpp
test/Parser/cxx-ambig-paren-expr.cpp

index f76e2297337d4d72faf1ad09e8b8830817dc7b7b..8a6bcb3b37bd55366b3d4717d249f6afef0ae2f7 100644 (file)
@@ -516,7 +516,7 @@ class CastExpressionIdValidator : public CorrectionCandidateCallback {
 /// \p isAddressOfOperand exists because an id-expression that is the operand
 /// of address-of gets special treatment due to member pointers. NotCastExpr
 /// is set to true if the token is not the start of a cast-expression, and no
-/// diagnostic is emitted in this case.
+/// diagnostic is emitted in this case and no tokens are consumed.
 ///
 /// \verbatim
 ///       cast-expression: [C99 6.5.4]
@@ -1020,7 +1020,7 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
     // determine whether the '++' is prefix or postfix.
     Res = ParseCastExpression(!getLangOpts().CPlusPlus,
                               /*isAddressOfOperand*/false, NotCastExpr,
-                              isTypeCast);
+                              NotTypeCast);
     if (NotCastExpr) {
       // If we return with NotCastExpr = true, we must not consume any tokens,
       // so put the token back where we found it.
index 1535b009725137370eccdcbca1e079bf7742ea96..cc509f7b059f30a4859609f4aed8aea419b28d43 100644 (file)
@@ -28,6 +28,7 @@ void f() {
   int &postfix_incr = (X()[3])++;
   (X())++ ++; // ok, not a C-style cast
   (X())++ ++X(); // expected-error {{C-style cast from 'int' to 'X ()'}}
+  int q = (int)++(x);
 }
 
 // Make sure we do tentative parsing correctly in conditions.