From: Argyrios Kyrtzidis Date: Sun, 5 Oct 2008 15:19:49 +0000 (+0000) Subject: Fix Parser::isCXXConditionDeclaration to properly resolve declarations. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca35baa788ccba7a213365b9d64d6b2f7bdb9afe;p=clang Fix Parser::isCXXConditionDeclaration to properly resolve declarations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57111 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseTentative.cpp b/lib/Parse/ParseTentative.cpp index 95512a6269..1209b573d0 100644 --- a/lib/Parse/ParseTentative.cpp +++ b/lib/Parse/ParseTentative.cpp @@ -259,11 +259,9 @@ bool Parser::isCXXConditionDeclaration() { // declarator TPR = TryParseDeclarator(false/*mayBeAbstract*/); - PA.Revert(); - // In case of an error, let the declaration parsing code handle it. if (TPR == TPR_error) - return true; + TPR = TPR_true; if (TPR == TPR_ambiguous) { // '=' @@ -275,6 +273,8 @@ bool Parser::isCXXConditionDeclaration() { TPR = TPR_false; } + PA.Revert(); + assert(TPR == TPR_true || TPR == TPR_false); return TPR == TPR_true; } diff --git a/test/SemaCXX/decl-expr-ambiguity.cpp b/test/SemaCXX/decl-expr-ambiguity.cpp index 5b4ddbea0b..7c274dea99 100644 --- a/test/SemaCXX/decl-expr-ambiguity.cpp +++ b/test/SemaCXX/decl-expr-ambiguity.cpp @@ -19,4 +19,5 @@ void f() { typeof(int[])(f) = { 1, 2 }; // expected-warning {{statement was disambiguated as declaration}} void(b)(int); int(d2) __attribute__(()); // expected-warning {{statement was disambiguated as declaration}} + if (int(a)=1) {} }