summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2014-12-08 08:48:37 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2014-12-08 08:48:37 +0000
commit80537a41461de3bec0fa5037a1b35c7e6c2ee07d (patch)
tree3b26051ae3c6eb63a4f0b2dff4fe5677f05cb245
parentf66cef75757ae3c35ad1ce18c6efe22b82a1903e (diff)
downloadbcm5719-llvm-80537a41461de3bec0fa5037a1b35c7e6c2ee07d.tar.gz
bcm5719-llvm-80537a41461de3bec0fa5037a1b35c7e6c2ee07d.zip
[libclang] Encode location info for anonymous embedded tag decls.
Otherwise the USR will conflict with different embedded tag decls. llvm-svn: 223633
-rw-r--r--clang/lib/Index/USRGeneration.cpp6
-rw-r--r--clang/test/Index/usrs.cpp6
2 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Index/USRGeneration.cpp b/clang/lib/Index/USRGeneration.cpp
index ad092a20ed4..29a1b3dcd12 100644
--- a/clang/lib/Index/USRGeneration.cpp
+++ b/clang/lib/Index/USRGeneration.cpp
@@ -471,9 +471,13 @@ void USRGenerator::VisitTagDecl(const TagDecl *D) {
Buf[off] = 'A';
Out << '@' << *TD;
}
- else
+ else {
+ if (D->isEmbeddedInDeclarator() && !D->isFreeStanding()) {
+ printLoc(Out, D->getLocation(), Context->getSourceManager(), true);
+ } else
Buf[off] = 'a';
}
+ }
// For a class template specialization, mangle the template arguments.
if (const ClassTemplateSpecializationDecl *Spec
diff --git a/clang/test/Index/usrs.cpp b/clang/test/Index/usrs.cpp
index 0b66a2211ce..95d121d4829 100644
--- a/clang/test/Index/usrs.cpp
+++ b/clang/test/Index/usrs.cpp
@@ -87,6 +87,9 @@ void funWithChar(char c) {}
void funWithChar(unsigned char c) {}
void funWithChar(signed char c) {}
+struct { int x; } embedS1;
+struct { int x; } embedS2;
+
// RUN: c-index-test -test-load-source-usrs all %s | FileCheck %s
// CHECK: usrs.cpp c:@N@foo Extent=[1:1 - 4:2]
// CHECK: usrs.cpp c:@N@foo@x Extent=[2:3 - 2:8]
@@ -159,3 +162,6 @@ void funWithChar(signed char c) {}
// CHECK: usrs.cpp c:@F@funWithChar#C# Extent=[86:1 - 86:28]
// CHECK: usrs.cpp c:@F@funWithChar#c# Extent=[87:1 - 87:37]
// CHECK: usrs.cpp c:@F@funWithChar#r# Extent=[88:1 - 88:35]
+
+// CHECK: usrs.cpp c:usrs.cpp@S@usrs.cpp@1483@FI@x Extent=[90:10 - 90:15]
+// CHECK: usrs.cpp c:usrs.cpp@S@usrs.cpp@1510@FI@x Extent=[91:10 - 91:15]
OpenPOWER on IntegriCloud