Clean up duplicated code in Sema::BuildMemInitializer.

llvm-svn: 142757
This commit is contained in:
Peter Collingbourne 2011-10-23 18:59:37 +00:00
parent 8953e7c923
commit 05156e3231
1 changed files with 3 additions and 14 deletions

View File

@ -1778,29 +1778,18 @@ Sema::BuildMemInitializer(Decl *ConstructorD,
// using a qualified name. ]
if (!SS.getScopeRep() && !TemplateTypeTy) {
// Look for a member, first.
FieldDecl *Member = 0;
DeclContext::lookup_result Result
= ClassDecl->lookup(MemberOrBase);
if (Result.first != Result.second) {
Member = dyn_cast<FieldDecl>(*Result.first);
if (Member) {
ValueDecl *Member;
if ((Member = dyn_cast<FieldDecl>(*Result.first)) ||
(Member = dyn_cast<IndirectFieldDecl>(*Result.first))) {
if (EllipsisLoc.isValid())
Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
<< MemberOrBase << SourceRange(IdLoc, Args.getEndLoc());
return BuildMemberInitializer(Member, Args, IdLoc);
}
// Handle anonymous union case.
if (IndirectFieldDecl* IndirectField
= dyn_cast<IndirectFieldDecl>(*Result.first)) {
if (EllipsisLoc.isValid())
Diag(EllipsisLoc, diag::err_pack_expansion_member_init)
<< MemberOrBase << SourceRange(IdLoc, Args.getEndLoc());
return BuildMemberInitializer(IndirectField, Args, IdLoc);
}
}
}
// It didn't name a member, so see if it names a class.