forked from OSchip/llvm-project
Handle parameter attributes when tentative parsing for function/variable disambiguation.
Fixes rdar://8739801. llvm-svn: 121228
This commit is contained in:
parent
8d842da572
commit
ac3b3e8781
|
@ -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.
|
||||
|
|
|
@ -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)) );
|
||||
|
|
Loading…
Reference in New Issue