forked from OSchip/llvm-project
PR11410 - Confusing diagnostic when trailing array element tries to call deleted default constructor
llvm-svn: 209869
This commit is contained in:
parent
cc28bc1816
commit
e27de09de8
|
@ -1490,6 +1490,9 @@ def warn_uninit_byref_blockvar_captured_by_block : Warning<
|
|||
InGroup<Uninitialized>, DefaultIgnore;
|
||||
def note_block_var_fixit_add_initialization : Note<
|
||||
"maybe you meant to use __block %0">;
|
||||
def note_omitted_element_default_constructed : Note<
|
||||
"initializer list shorter than initialized object, omitted element was "
|
||||
"implicitly default constructed">;
|
||||
def note_var_fixit_add_initialization : Note<
|
||||
"initialize the variable %0 to silence this warning">;
|
||||
def note_uninit_fixit_remove_cond : Note<
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -375,3 +375,14 @@ namespace PR19729 {
|
|||
};
|
||||
B *p = new ({123}) B;
|
||||
}
|
||||
|
||||
namespace PR11410 {
|
||||
struct A {
|
||||
A() = delete; // expected-note {{deleted here}}
|
||||
A(int);
|
||||
};
|
||||
|
||||
A a[3] = {
|
||||
{1}, {2}
|
||||
}; // expected-error {{call to deleted constructor}} expected-note {{implicitly default constructed}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue