More anonymous struct/union redesign. This one deals with anonymous field used in a constructor initializer list:

struct X {
  X() : au_i1(123) {}
  union {
    int au_i1;
    float au_f1;
  };
};

clang will now deal with au_i1 explicitly as an IndirectFieldDecl.

llvm-svn: 120900
This commit is contained in:
Francois Pichet
2010-12-04 09:14:42 +00:00
parent 211e699754
commit d583da04d0
17 changed files with 153 additions and 142 deletions

View File

@@ -3608,7 +3608,8 @@ void Sema::CodeCompleteConstructorInitializer(Decl *ConstructorD,
InitializedBases.insert(
Context.getCanonicalType(QualType(Initializers[I]->getBaseClass(), 0)));
else
InitializedFields.insert(cast<FieldDecl>(Initializers[I]->getMember()));
InitializedFields.insert(cast<FieldDecl>(
Initializers[I]->getAnyMember()));
}
// Add completions for base classes.
@@ -3670,8 +3671,8 @@ void Sema::CodeCompleteConstructorInitializer(Decl *ConstructorD,
if (!InitializedFields.insert(cast<FieldDecl>(Field->getCanonicalDecl()))) {
SawLastInitializer
= NumInitializers > 0 &&
Initializers[NumInitializers - 1]->isMemberInitializer() &&
Initializers[NumInitializers - 1]->getMember() == *Field;
Initializers[NumInitializers - 1]->isAnyMemberInitializer() &&
Initializers[NumInitializers - 1]->getAnyMember() == *Field;
continue;
}