forked from OSchip/llvm-project
Just because a declaration has the same name as its containing class doesn't mean that it's a constructor. Fixes rdar://problem/6815988.
llvm-svn: 70436
This commit is contained in:
parent
e5f93b1e58
commit
118b098cd9
|
@ -1982,16 +1982,7 @@ void Parser::ParseDirectDeclarator(Declarator &D) {
|
||||||
|
|
||||||
if (Tok.is(tok::identifier)) {
|
if (Tok.is(tok::identifier)) {
|
||||||
assert(Tok.getIdentifierInfo() && "Not an 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 (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();
|
ConsumeToken();
|
||||||
goto PastIdentifier;
|
goto PastIdentifier;
|
||||||
} else if (Tok.is(tok::annot_template_id)) {
|
} else if (Tok.is(tok::annot_template_id)) {
|
||||||
|
@ -2101,6 +2092,15 @@ void Parser::ParseDirectDeclarator(Declarator &D) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ParseFunctionDeclarator(ConsumeParen(), D);
|
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)) {
|
} else if (Tok.is(tok::l_square)) {
|
||||||
ParseBracketDeclarator(D);
|
ParseBracketDeclarator(D);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -40,3 +40,8 @@ extern y b;
|
||||||
struct Length {
|
struct Length {
|
||||||
Length l() const { return *this; }
|
Length l() const { return *this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// <rdar://problem/6815988>
|
||||||
|
struct mmst_reg{
|
||||||
|
char mmst_reg[10];
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue