diff options
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 3 | ||||
-rw-r--r-- | test/SemaCXX/direct-initializer.cpp | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 7d1a9bb4b6..c541a1336f 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -1279,6 +1279,7 @@ void Parser::ParseParenDeclarator(Declarator &D) { // direct-declarator: '(' declarator ')' // direct-declarator: '(' attributes declarator ')' if (isGrouping) { + bool hadGroupingParens = D.hasGroupingParens(); D.setGroupingParens(true); if (Tok.is(tok::kw___attribute)) @@ -1287,6 +1288,8 @@ void Parser::ParseParenDeclarator(Declarator &D) { ParseDeclaratorInternal(D); // Match the ')'. MatchRHSPunctuation(tok::r_paren, StartLoc); + + D.setGroupingParens(hadGroupingParens); return; } diff --git a/test/SemaCXX/direct-initializer.cpp b/test/SemaCXX/direct-initializer.cpp index bb0aab6500..c756e473dd 100644 --- a/test/SemaCXX/direct-initializer.cpp +++ b/test/SemaCXX/direct-initializer.cpp @@ -1,8 +1,10 @@ -// RUN: clang -fsyntax-only %s +// RUN: clang -fsyntax-only -verify %s int x(1); +int (x2)(1); void f() { int x(1); + int (x2)(1); // expected-warning {{statement was disambiguated as declaration}} for (int x(1);;) {} } |