diff options
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 59e9ed6acbe..8b81c312d2e 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -1982,7 +1982,17 @@ void Parser::ParseDirectDeclarator(Declarator &D) { if (Tok.is(tok::identifier)) { assert(Tok.getIdentifierInfo() && "Not an identifier?"); - D.SetIdentifier(Tok.getIdentifierInfo(), Tok.getLocation()); + + // If this identifier is the name of the current class, it's a + // constructor name. + if (!D.getDeclSpec().hasTypeSpecifier() && + Actions.isCurrentClassName(*Tok.getIdentifierInfo(),CurScope)) { + D.setConstructor(Actions.getTypeName(*Tok.getIdentifierInfo(), + Tok.getLocation(), CurScope), + Tok.getLocation()); + // This is a normal identifier. + } else + D.SetIdentifier(Tok.getIdentifierInfo(), Tok.getLocation()); ConsumeToken(); goto PastIdentifier; } else if (Tok.is(tok::annot_template_id)) { @@ -2092,15 +2102,6 @@ void Parser::ParseDirectDeclarator(Declarator &D) { break; } ParseFunctionDeclarator(ConsumeParen(), D); - - // If this identifier is the name of the current class, it's a - // constructor name. - if (IdentifierInfo *II = D.getIdentifier()) { - if (Actions.isCurrentClassName(*II, CurScope)) - D.setConstructor(Actions.getTypeName(*II, D.getIdentifierLoc(), - CurScope), - D.getIdentifierLoc()); - } } else if (Tok.is(tok::l_square)) { ParseBracketDeclarator(D); } else { |