diff options
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index 9ef43cc81f6..0dd040faff0 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -429,9 +429,6 @@ InitListChecker::FillInValueInitializations(const InitializedEntity &Entity, bool &RequiresSecondPass) { assert((ILE->getType() != SemaRef.Context.VoidTy) && "Should not have void type"); - SourceLocation Loc = ILE->getLocStart(); - if (ILE->getSyntacticForm()) - Loc = ILE->getSyntacticForm()->getLocStart(); if (const RecordType *RType = ILE->getType()->getAs<RecordType>()) { const RecordDecl *RDecl = RType->getDecl(); @@ -489,6 +486,9 @@ InitListChecker::FillInValueInitializations(const InitializedEntity &Entity, } else ElementType = ILE->getType(); + SourceLocation Loc = ILE->getLocEnd(); + if (ILE->getSyntacticForm()) + Loc = ILE->getSyntacticForm()->getLocEnd(); for (unsigned Init = 0; Init != NumElements; ++Init) { if (hadError) @@ -505,6 +505,11 @@ InitListChecker::FillInValueInitializations(const InitializedEntity &Entity, InitializationSequence InitSeq(SemaRef, ElementEntity, Kind, None); if (!InitSeq) { InitSeq.Diagnose(SemaRef, ElementEntity, Kind, None); + if (NumInits < NumElements && + InitSeq.getFailureKind() == + InitializationSequence::FK_ConstructorOverloadFailed && + InitSeq.getFailedOverloadResult() == OverloadingResult::OR_Deleted) + SemaRef.Diag(Loc, diag::note_omitted_element_default_constructed); hadError = true; return; } |