https://github.com/Serafean created https://github.com/llvm/llvm-project/pull/173670
Modelled after commit 08e18126431878373abfa33136768d0ec7c13def, which did the same for If statements. Tested with KDevelop : with a patched clang, initializers in switch statement get cursors. >From c9eb5326f87f6f75a4b7dece04ec444894d81ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Bedn=C3=A1r?= <[email protected]> Date: Fri, 26 Dec 2025 17:20:08 +0100 Subject: [PATCH] [libclang]: visit C++17 switch init statements This makes the previously unaccessible AST nodes for C++17 "switch with init statements" accessible to consumers of libclang. --- .../Index/cxx17-switch-with-initializer.cpp | 18 ++++++++++++++++++ clang/tools/libclang/CIndex.cpp | 1 + 2 files changed, 19 insertions(+) create mode 100644 clang/test/Index/cxx17-switch-with-initializer.cpp diff --git a/clang/test/Index/cxx17-switch-with-initializer.cpp b/clang/test/Index/cxx17-switch-with-initializer.cpp new file mode 100644 index 0000000000000..ffa77f318e97a --- /dev/null +++ b/clang/test/Index/cxx17-switch-with-initializer.cpp @@ -0,0 +1,18 @@ +// Test is line- and column-sensitive; see below. + +void foo() { + switch (int bar = true; bar) { + } +} + +// RUN: c-index-test -test-load-source all -std=c++17 %s | FileCheck -check-prefix=CHECK %s +// CHECK: cxx17-switch-with-initializer.cpp:3:6: FunctionDecl=foo:3:6 (Definition) Extent=[3:1 - 6:2] +// CHECK: cxx17-switch-with-initializer.cpp:3:12: CompoundStmt= Extent=[3:12 - 6:2] +// CHECK: cxx17-switch-with-initializer.cpp:4:3: SwitchStmt= Extent=[4:3 - 5:4] +// CHECK: cxx17-switch-with-initializer.cpp:4:11: DeclStmt= Extent=[4:11 - 4:26] +// CHECK: cxx17-switch-with-initializer.cpp:4:15: VarDecl=bar:4:15 (Definition) Extent=[4:11 - 4:25] +// CHECK: cxx17-switch-with-initializer.cpp:4:21: UnexposedExpr= Extent=[4:21 - 4:25] +// CHECK: cxx17-switch-with-initializer.cpp:4:21: CXXBoolLiteralExpr= Extent=[4:21 - 4:25] +// CHECK: cxx17-switch-with-initializer.cpp:4:27: UnexposedExpr=bar:4:15 Extent=[4:27 - 4:30] +// CHECK: cxx17-switch-with-initializer.cpp:4:27: DeclRefExpr=bar:4:15 Extent=[4:27 - 4:30] +// CHECK: cxx17-switch-with-initializer.cpp:4:32: CompoundStmt= Extent=[4:32 - 5:4] diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index 32e84248c1b27..78a42e3877b6b 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -3217,6 +3217,7 @@ void EnqueueVisitor::VisitStmt(const Stmt *S) { EnqueueChildren(S); } void EnqueueVisitor::VisitSwitchStmt(const SwitchStmt *S) { AddStmt(S->getBody()); AddStmt(S->getCond()); + AddStmt(S->getInit()); AddDecl(S->getConditionVariable()); } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
