Author: kadir çetinkaya Date: 2023-10-18T10:51:31+02:00 New Revision: 48a53509e851c93f352c967da1feb1c8fb2abd9a
URL: https://github.com/llvm/llvm-project/commit/48a53509e851c93f352c967da1feb1c8fb2abd9a DIFF: https://github.com/llvm/llvm-project/commit/48a53509e851c93f352c967da1feb1c8fb2abd9a.diff LOG: [clang][USR] Encode full decl-context also for anon namespaces (#68325) Otherwise we create collisions, e.g. a struct named Foo inside an anonymous namespace will get the same USR no matter what the surrounding decl-context is. Added: clang/test/Index/USR/decl-context.cpp Modified: clang/lib/Index/USRGeneration.cpp Removed: ################################################################################ diff --git a/clang/lib/Index/USRGeneration.cpp b/clang/lib/Index/USRGeneration.cpp index f778a6208d5122d..614f5d8d2cad520 100644 --- a/clang/lib/Index/USRGeneration.cpp +++ b/clang/lib/Index/USRGeneration.cpp @@ -9,6 +9,7 @@ #include "clang/Index/USRGeneration.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Attr.h" +#include "clang/AST/DeclCXX.h" #include "clang/AST/DeclTemplate.h" #include "clang/AST/DeclVisitor.h" #include "clang/Basic/FileManager.h" @@ -368,14 +369,14 @@ void USRGenerator::VisitTemplateTemplateParmDecl( } void USRGenerator::VisitNamespaceDecl(const NamespaceDecl *D) { + if (IgnoreResults) + return; + VisitDeclContext(D->getDeclContext()); if (D->isAnonymousNamespace()) { Out << "@aN"; return; } - - VisitDeclContext(D->getDeclContext()); - if (!IgnoreResults) - Out << "@N@" << D->getName(); + Out << "@N@" << D->getName(); } void USRGenerator::VisitFunctionTemplateDecl(const FunctionTemplateDecl *D) { diff --git a/clang/test/Index/USR/decl-context.cpp b/clang/test/Index/USR/decl-context.cpp new file mode 100644 index 000000000000000..a57137a5c89b5fd --- /dev/null +++ b/clang/test/Index/USR/decl-context.cpp @@ -0,0 +1,14 @@ +// RUN: c-index-test core -print-source-symbols -- -std=c++20 %s | FileCheck %s + +namespace ns { +namespace { +struct Foo {}; +// CHECK: [[@LINE-1]]:8 | struct/C | Foo | c:decl-context.cpp@N@ns@aN@S@Foo +} +} +namespace ns2 { +namespace { +struct Foo {}; +// CHECK: [[@LINE-1]]:8 | struct/C | Foo | c:decl-context.cpp@N@ns2@aN@S@Foo +} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits