forked from OSchip/llvm-project
Don't try to set the "array filler" in a InitListExpr twice.
llvm-svn: 142695
This commit is contained in:
parent
43114f9084
commit
d4590a5d5f
|
@ -3400,6 +3400,10 @@ public:
|
|||
}
|
||||
void setArrayFiller(Expr *filler);
|
||||
|
||||
/// \brief Return true if this is an array initializer and its array "filler"
|
||||
/// has been set.
|
||||
bool hasArrayFiller() const { return getArrayFiller(); }
|
||||
|
||||
/// \brief If this initializes a union, specifies which field in the
|
||||
/// union to initialize.
|
||||
///
|
||||
|
|
|
@ -1394,6 +1394,7 @@ Expr *InitListExpr::updateInit(ASTContext &C, unsigned Init, Expr *expr) {
|
|||
}
|
||||
|
||||
void InitListExpr::setArrayFiller(Expr *filler) {
|
||||
assert(!hasArrayFiller() && "Filler already set!");
|
||||
ArrayFillerOrUnionFieldInit = filler;
|
||||
// Fill out any "holes" in the array due to designated initializers.
|
||||
Expr **inits = getInits();
|
||||
|
|
|
@ -416,7 +416,8 @@ InitListChecker::FillInValueInitializations(const InitializedEntity &Entity,
|
|||
ElementEntity.getKind() == InitializedEntity::EK_VectorElement)
|
||||
ElementEntity.setElementIndex(Init);
|
||||
|
||||
if (Init >= NumInits || !ILE->getInit(Init)) {
|
||||
Expr *InitExpr = (Init < NumInits ? ILE->getInit(Init) : 0);
|
||||
if (!InitExpr && !ILE->hasArrayFiller()) {
|
||||
InitializationKind Kind = InitializationKind::CreateValue(Loc, Loc, Loc,
|
||||
true);
|
||||
InitializationSequence InitSeq(SemaRef, ElementEntity, Kind, 0, 0);
|
||||
|
@ -460,7 +461,7 @@ InitListChecker::FillInValueInitializations(const InitializedEntity &Entity,
|
|||
}
|
||||
}
|
||||
} else if (InitListExpr *InnerILE
|
||||
= dyn_cast<InitListExpr>(ILE->getInit(Init)))
|
||||
= dyn_cast_or_null<InitListExpr>(InitExpr))
|
||||
FillInValueInitializations(ElementEntity, InnerILE, RequiresSecondPass);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue