[PATCH] D15470: Preserve source location in namespaced base ctor initializers
Shahms King via cfe-commits
cfe-commits at lists.llvm.org
Fri Dec 11 15:35:32 PST 2015
shahms created this revision.
shahms added a subscriber: cfe-commits.
Resolved a FIXME to preserve source location in qualified base initializers.
This patch preserves location information for constructs such as:
namespace ns1 {
struct Base {};
struct Derived : Base {
Derived() : ns1::Base() {}
};
}
previously, the reference to ns1 would overlap the reference to Base. With
this patch it properly spans only ns1.
http://reviews.llvm.org/D15470
Files:
lib/Sema/SemaDeclCXX.cpp
test/Index/namespaced-base-ctor-init.cpp
Index: test/Index/namespaced-base-ctor-init.cpp
===================================================================
--- /dev/null
+++ test/Index/namespaced-base-ctor-init.cpp
@@ -0,0 +1,9 @@
+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]
Index: lib/Sema/SemaDeclCXX.cpp
===================================================================
--- lib/Sema/SemaDeclCXX.cpp
+++ lib/Sema/SemaDeclCXX.cpp
@@ -2980,10 +2980,14 @@
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.setElaboratedKeywordLoc(IdLoc);
+ TL.setQualifierLoc(SS.getWithLocInContext(Context));
+ }
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15470.42594.patch
Type: text/x-patch
Size: 1273 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151211/e6fa0ba9/attachment.bin>
More information about the cfe-commits
mailing list