// C++ [dcl.ref]p4: There shall be no references to references.
DeclaratorChunk& InnerChunk = D.getTypeObject(D.getNumTypeObjects() - 1);
if (InnerChunk.Kind == DeclaratorChunk::Reference) {
- Diag(InnerChunk.Loc, diag::err_illegal_decl_reference_to_reference)
- << (D.getIdentifier() ? D.getIdentifier()->getName() : "type name");
+ if (const IdentifierInfo *II = D.getIdentifier())
+ Diag(InnerChunk.Loc, diag::err_illegal_decl_reference_to_reference)
+ << II;
+ else
+ Diag(InnerChunk.Loc, diag::err_illegal_decl_reference_to_reference)
+ << "type name";
// Once we've complained about the reference-to-referwnce, we
// can go ahead and build the (technically ill-formed)
// Reject 'typedef int y; int test(x, y)', but continue parsing.
if (Actions.isTypeName(*ParmII, CurScope))
- Diag(Tok, diag::err_unexpected_typedef_ident) << ParmII->getName();
+ Diag(Tok, diag::err_unexpected_typedef_ident) << ParmII;
// Verify that the argument identifier has not already been mentioned.
if (!ParamsSoFar.insert(ParmII)) {
- Diag(Tok, diag::err_param_redefinition) <<ParmII->getName();
+ Diag(Tok, diag::err_param_redefinition) << ParmII;
} else {
// Remember this identifier in ParamInfo.
ParamInfo.push_back(DeclaratorChunk::ParamInfo(ParmII,
if (Tok.isNot(tok::l_paren)) {
if (!getLang().CPlusPlus) {
- Diag(Tok, diag::err_expected_lparen_after) << BuiltinII->getName();
+ Diag(Tok, diag::err_expected_lparen_after) << BuiltinII;
return;
}
memcpy(&SelectorName[3], Name->getName(), N);
SelectorName[3] = toupper(SelectorName[3]);
- IdentifierInfo *Setter =
- &Idents.get(SelectorName, &SelectorName[3 + N]);
+ IdentifierInfo *Setter = &Idents.get(SelectorName, &SelectorName[3 + N]);
delete[] SelectorName;
return Setter;
}