Handle parameter attributes when tentative parsing for function/variable disambiguation.

Fixes rdar://8739801.

llvm-svn: 121228
This commit is contained in:
Argyrios Kyrtzidis 2010-12-08 02:02:46 +00:00
parent 8d842da572
commit ac3b3e8781
2 changed files with 12 additions and 4 deletions

View File

@ -1119,10 +1119,11 @@ bool Parser::isCXXFunctionDeclarator(bool warnIfAmbiguous) {
/// parameter-declaration-list ',' parameter-declaration
///
/// parameter-declaration:
/// decl-specifier-seq declarator
/// decl-specifier-seq declarator '=' assignment-expression
/// decl-specifier-seq abstract-declarator[opt]
/// decl-specifier-seq abstract-declarator[opt] '=' assignment-expression
/// decl-specifier-seq declarator attributes[opt]
/// decl-specifier-seq declarator attributes[opt] '=' assignment-expression
/// decl-specifier-seq abstract-declarator[opt] attributes[opt]
/// decl-specifier-seq abstract-declarator[opt] attributes[opt]
/// '=' assignment-expression
///
Parser::TPResult Parser::TryParseParameterDeclarationClause() {
@ -1157,6 +1158,10 @@ Parser::TPResult Parser::TryParseParameterDeclarationClause() {
if (TPR != TPResult::Ambiguous())
return TPR;
// [GNU] attributes[opt]
if (Tok.is(tok::kw___attribute))
return TPResult::True();
if (Tok.is(tok::equal)) {
// '=' assignment-expression
// Parse through assignment-expression.

View File

@ -71,3 +71,6 @@ struct S5 {
int foo8() {
int v(int(S5::value)); // expected-warning{{disambiguated}} expected-error{{parameter declarator cannot be qualified}}
}
template<typename T>
void rdar8739801( void (T::*)( void ) __attribute__((unused)) );