diff options
author | Sebastian Poeplau <poeplau@adacore.com> | 2023-11-24 17:11:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-24 21:41:17 +0530 |
commit | 7091ca1ae3a87479b6febdf1c3a324d707c633d9 (patch) | |
tree | d3d6e3cea03f385af4d4b7ae763e186aac7da92b | |
parent | e9fdb965f9b016d5df819969f37c49a8075e70b6 (diff) | |
download | llvm-7091ca1ae3a87479b6febdf1c3a324d707c633d9.zip llvm-7091ca1ae3a87479b6febdf1c3a324d707c633d9.tar.gz llvm-7091ca1ae3a87479b6febdf1c3a324d707c633d9.tar.bz2 |
[clang] Add missing LinkageSpec case to getCursorKindForDecl (#72401)
The LinkageSpec case was omitted, and there is a declared CXCursor_Kind
for it. Adapt the testsuite drivers to print mangled names for
declarations with extern linkage. Also update the test baseline for the
recursive-cxx-member-calls.cpp test.
Co-authored-by: Matthieu Eyraud <eyraud@adacore.com>
-rw-r--r-- | clang/docs/ReleaseNotes.rst | 2 | ||||
-rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 3 | ||||
-rw-r--r-- | clang/test/Index/recursive-cxx-member-calls.cpp | 10 | ||||
-rw-r--r-- | clang/tools/c-index-test/c-index-test.c | 4 |
4 files changed, 14 insertions, 5 deletions
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 362ce41..0ce1516 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -938,6 +938,8 @@ libclang -------- - Exposed arguments of ``clang::annotate``. +- ``clang::getCursorKindForDecl`` now recognizes linkage specifications such as + ``extern "C"`` and reports them as ``CXCursor_LinkageSpec``. Static Analyzer --------------- diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 3355336..6169144 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -4165,6 +4165,9 @@ CXCursorKind clang::getCursorKindForDecl(const Decl *D) { case Decl::Concept: return CXCursor_ConceptDecl; + case Decl::LinkageSpec: + return CXCursor_LinkageSpec; + default: if (const auto *TD = dyn_cast<TagDecl>(D)) { switch (TD->getTagKind()) { diff --git a/clang/test/Index/recursive-cxx-member-calls.cpp b/clang/test/Index/recursive-cxx-member-calls.cpp index 09f3f41..be908c5 100644 --- a/clang/test/Index/recursive-cxx-member-calls.cpp +++ b/clang/test/Index/recursive-cxx-member-calls.cpp @@ -216,9 +216,9 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) { // CHECK-tokens: Punctuation: "}" [4:63 - 4:64] ClassTemplate=pair:4:44 (Definition) // CHECK-tokens: Punctuation: ";" [4:64 - 4:65] Namespace=std:3:11 (Definition) // CHECK-tokens: Punctuation: "}" [5:1 - 5:2] Namespace=std:3:11 (Definition) -// CHECK-tokens: Keyword: "extern" [6:1 - 6:7] -// CHECK-tokens: Literal: ""C"" [6:8 - 6:11] UnexposedDecl=:6:8 (Definition) -// CHECK-tokens: Punctuation: "{" [6:12 - 6:13] UnexposedDecl=:6:8 (Definition) +// CHECK-tokens: Keyword: "extern" [6:1 - 6:7] LinkageSpec=:6:8 (Definition) +// CHECK-tokens: Literal: ""C"" [6:8 - 6:11] LinkageSpec=:6:8 (Definition) +// CHECK-tokens: Punctuation: "{" [6:12 - 6:13] LinkageSpec=:6:8 (Definition) // CHECK-tokens: Keyword: "int" [7:3 - 7:6] FunctionDecl=memcmp:7:7 // CHECK-tokens: Identifier: "memcmp" [7:7 - 7:13] FunctionDecl=memcmp:7:7 // CHECK-tokens: Punctuation: "(" [7:13 - 7:14] FunctionDecl=memcmp:7:7 @@ -232,7 +232,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) { // CHECK-tokens: Punctuation: "," [7:40 - 7:41] FunctionDecl=memcmp:7:7 // CHECK-tokens: Identifier: "size_t" [7:42 - 7:48] TypeRef=size_t:2:25 // CHECK-tokens: Punctuation: ")" [7:48 - 7:49] FunctionDecl=memcmp:7:7 -// CHECK-tokens: Punctuation: ";" [7:49 - 7:50] UnexposedDecl=:6:8 (Definition) +// CHECK-tokens: Punctuation: ";" [7:49 - 7:50] LinkageSpec=:6:8 (Definition) // CHECK-tokens: Identifier: "size_t" [8:3 - 8:9] TypeRef=size_t:2:25 // CHECK-tokens: Identifier: "strlen" [8:10 - 8:16] FunctionDecl=strlen:8:10 // CHECK-tokens: Punctuation: "(" [8:16 - 8:17] FunctionDecl=strlen:8:10 @@ -1532,7 +1532,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) { // CHECK: 4:20: TemplateTypeParameter=_T1:4:20 (Definition) Extent=[4:14 - 4:23] // CHECK: 4:31: TemplateTypeParameter=_T2:4:31 (Definition) Extent=[4:25 - 4:34] // CHECK: 4:55: FieldDecl=second:4:55 (Definition) Extent=[4:51 - 4:61] -// CHECK: 6:8: UnexposedDecl=:6:8 (Definition) Extent=[6:1 - 9:2] +// CHECK: 6:8: LinkageSpec=:6:8 (Definition) Extent=[6:1 - 9:2] // CHECK: 7:7: FunctionDecl=memcmp:7:7 Extent=[7:3 - 7:49] // CHECK: 7:26: ParmDecl=:7:26 (Definition) Extent=[7:14 - 7:26] // CHECK: 7:40: ParmDecl=:7:40 (Definition) Extent=[7:28 - 7:40] diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index 9d66a22..2c0c9cb 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -1838,6 +1838,8 @@ static enum CXChildVisitResult PrintMangledName(CXCursor cursor, CXCursor p, CXString MangledName; if (clang_isUnexposed(clang_getCursorKind(cursor))) return CXChildVisit_Recurse; + if (clang_getCursorKind(cursor) == CXCursor_LinkageSpec) + return CXChildVisit_Recurse; PrintCursor(cursor, NULL); MangledName = clang_Cursor_getMangling(cursor); printf(" [mangled=%s]\n", clang_getCString(MangledName)); @@ -1853,6 +1855,8 @@ static enum CXChildVisitResult PrintManglings(CXCursor cursor, CXCursor p, return CXChildVisit_Recurse; if (!clang_isDeclaration(clang_getCursorKind(cursor))) return CXChildVisit_Recurse; + if (clang_getCursorKind(cursor) == CXCursor_LinkageSpec) + return CXChildVisit_Recurse; if (clang_getCursorKind(cursor) == CXCursor_ParmDecl) return CXChildVisit_Continue; PrintCursor(cursor, NULL); |