diff options
Diffstat (limited to 'lib/Parse/ParseDecl.cpp')
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index e90d0eb9fe..27cc4843cf 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -155,7 +155,7 @@ void Parser::ParseGNUAttributes(ParsedAttributes &attrs, LA->Toks.push_back(Eof); } else { ParseGNUAttributeArgs(AttrName, AttrNameLoc, attrs, endLoc, - 0, AttrNameLoc, AttributeList::AS_GNU); + 0, SourceLocation(), AttributeList::AS_GNU); } } else { attrs.addNew(AttrName, AttrNameLoc, 0, AttrNameLoc, @@ -282,8 +282,9 @@ void Parser::ParseGNUAttributeArgs(IdentifierInfo *AttrName, SourceLocation RParen = Tok.getLocation(); if (!ExpectAndConsume(tok::r_paren, diag::err_expected_rparen)) { + SourceLocation AttrLoc = ScopeLoc.isValid() ? ScopeLoc : AttrNameLoc; AttributeList *attr = - Attrs.addNew(AttrName, SourceRange(AttrNameLoc, RParen), + Attrs.addNew(AttrName, SourceRange(AttrLoc, RParen), ScopeName, ScopeLoc, ParmName, ParmLoc, ArgExprs.data(), ArgExprs.size(), Syntax); if (BuiltinType && attr->getKind() == AttributeList::AT_IBOutletCollection) @@ -929,7 +930,7 @@ void Parser::ParseLexedAttribute(LateParsedAttribute &LA, Actions.ActOnReenterFunctionContext(Actions.CurScope, D); ParseGNUAttributeArgs(&LA.AttrName, LA.AttrNameLoc, Attrs, &endLoc, - 0, LA.AttrNameLoc, AttributeList::AS_GNU); + 0, SourceLocation(), AttributeList::AS_GNU); if (HasFunScope) { Actions.ActOnExitFunctionContext(); @@ -942,7 +943,7 @@ void Parser::ParseLexedAttribute(LateParsedAttribute &LA, // If there are multiple decls, then the decl cannot be within the // function scope. ParseGNUAttributeArgs(&LA.AttrName, LA.AttrNameLoc, Attrs, &endLoc, - 0, LA.AttrNameLoc, AttributeList::AS_GNU); + 0, SourceLocation(), AttributeList::AS_GNU); } } else { Diag(Tok, diag::warn_attribute_no_decl) << LA.AttrName.getName(); |