зеркало из https://github.com/microsoft/clang-1.git
Retain the source location of the constructor when building an implicit member
initialization. I tried several ideas but couldn't come up with a test case for this that didn't rely on a Clang bug to report a diagnostic after template instantiation of the constructor due to the implicit initializers. Suggestions welcome. This fixes the source location aspect of PR7402. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107226 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
acb0bd85d3
Коммит
f186b54cc6
|
@ -1580,8 +1580,9 @@ BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
|
|||
if (Field->isInvalidDecl())
|
||||
return true;
|
||||
|
||||
SourceLocation Loc = Constructor->getLocation();
|
||||
|
||||
if (ImplicitInitKind == IIK_Copy) {
|
||||
SourceLocation Loc = Constructor->getLocation();
|
||||
ParmVarDecl *Param = Constructor->getParamDecl(0);
|
||||
QualType ParamType = Param->getType().getNonReferenceType();
|
||||
|
||||
|
@ -1689,7 +1690,7 @@ BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
|
|||
if (FieldBaseElementType->isRecordType()) {
|
||||
InitializedEntity InitEntity = InitializedEntity::InitializeMember(Field);
|
||||
InitializationKind InitKind =
|
||||
InitializationKind::CreateDefault(Constructor->getLocation());
|
||||
InitializationKind::CreateDefault(Loc);
|
||||
|
||||
InitializationSequence InitSeq(SemaRef, InitEntity, InitKind, 0, 0);
|
||||
Sema::OwningExprResult MemberInit =
|
||||
|
@ -1701,10 +1702,9 @@ BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor,
|
|||
|
||||
CXXMemberInit =
|
||||
new (SemaRef.Context) CXXBaseOrMemberInitializer(SemaRef.Context,
|
||||
Field, SourceLocation(),
|
||||
SourceLocation(),
|
||||
Field, Loc, Loc,
|
||||
MemberInit.takeAs<Expr>(),
|
||||
SourceLocation());
|
||||
Loc);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче