forked from OSchip/llvm-project
Preserve source location information for qualified names used in a constructor
initializer list to name a base class. Patch by Shahms King! llvm-svn: 255420
This commit is contained in:
parent
9497cc2bf8
commit
97047d8cb6
|
@ -2980,10 +2980,15 @@ Sema::BuildMemInitializer(Decl *ConstructorD,
|
|||
if (BaseType.isNull()) {
|
||||
BaseType = Context.getTypeDeclType(TyD);
|
||||
MarkAnyDeclReferenced(TyD->getLocation(), TyD, /*OdrUse=*/false);
|
||||
if (SS.isSet())
|
||||
// FIXME: preserve source range information
|
||||
if (SS.isSet()) {
|
||||
BaseType = Context.getElaboratedType(ETK_None, SS.getScopeRep(),
|
||||
BaseType);
|
||||
TInfo = Context.CreateTypeSourceInfo(BaseType);
|
||||
ElaboratedTypeLoc TL = TInfo->getTypeLoc().castAs<ElaboratedTypeLoc>();
|
||||
TL.getNamedTypeLoc().castAs<TypeSpecTypeLoc>().setNameLoc(IdLoc);
|
||||
TL.setElaboratedKeywordLoc(SourceLocation());
|
||||
TL.setQualifierLoc(SS.getWithLocInContext(Context));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
namespace ns1 {
|
||||
struct Base {};
|
||||
struct Derived : Base {
|
||||
Derived() : ns1::Base() {}
|
||||
};
|
||||
}
|
||||
|
||||
// RUN: c-index-test -test-load-source all %s | FileCheck %s
|
||||
// CHECK: namespaced-base-ctor-init.cpp:4:15: NamespaceRef=ns1:1:11 Extent=[4:15 - 4:18]
|
||||
// CHECK: namespaced-base-ctor-init.cpp:4:20: TypeRef=struct ns1::Base:2:8 Extent=[4:20 - 4:24]
|
Loading…
Reference in New Issue