summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2016-04-08 19:57:40 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2016-04-08 19:57:40 +0000
commitfe1bc708b53016d0800b54342b268c09b8c52a6f (patch)
tree1bba4b57484d4783544a23a1d74fb93ad1e04283 /clang/lib/Sema/SemaInit.cpp
parentfec5c64b633fbdb2e7871fa237467397b6663e6f (diff)
downloadbcm5719-llvm-fe1bc708b53016d0800b54342b268c09b8c52a6f.tar.gz
bcm5719-llvm-fe1bc708b53016d0800b54342b268c09b8c52a6f.zip
[modules] Handle merged fields in designated initializers.
llvm-svn: 265838
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r--clang/lib/Sema/SemaInit.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index bd8522d5977..81b5312d87a 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -2227,8 +2227,10 @@ InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity,
for (auto *FI : RT->getDecl()->fields()) {
if (FI->isUnnamedBitfield())
continue;
- if (KnownField == FI)
+ if (declaresSameEntity(KnownField, FI)) {
+ KnownField = FI;
break;
+ }
++FieldIndex;
}
@@ -2241,11 +2243,11 @@ InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity,
FieldIndex = 0;
if (!VerifyOnly) {
FieldDecl *CurrentField = StructuredList->getInitializedFieldInUnion();
- if (CurrentField && CurrentField != *Field) {
+ if (CurrentField && !declaresSameEntity(CurrentField, *Field)) {
assert(StructuredList->getNumInits() == 1
&& "A union should never have more than one initializer!");
- // we're about to throw away an initializer, emit warning
+ // We're about to throw away an initializer, emit warning.
SemaRef.Diag(D->getFieldLoc(),
diag::warn_initializer_overrides)
<< D->getSourceRange();
OpenPOWER on IntegriCloud