https://github.com/xgupta updated https://github.com/llvm/llvm-project/pull/69557
>From 96f6b90ed4a70430f94eab2d9ca317dd8367022a Mon Sep 17 00:00:00 2001 From: Shivam Gupta <shivam98....@gmail.com> Date: Thu, 19 Oct 2023 09:06:43 +0530 Subject: [PATCH 1/2] [RecursiveASTVisitor] Fix RecursiveASTVisitor (RAV) fails to visit the initializer of a bitfield Patch by Scott McPeak --- clang/include/clang/AST/RecursiveASTVisitor.h | 2 +- clang/unittests/Tooling/CMakeLists.txt | 1 + .../BitfieldInitializer.cpp | 34 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h index 3dd23eb38eeabfc..53bc15e1b19f668 100644 --- a/clang/include/clang/AST/RecursiveASTVisitor.h +++ b/clang/include/clang/AST/RecursiveASTVisitor.h @@ -2103,7 +2103,7 @@ DEF_TRAVERSE_DECL(FieldDecl, { TRY_TO(TraverseDeclaratorHelper(D)); if (D->isBitField()) TRY_TO(TraverseStmt(D->getBitWidth())); - else if (D->hasInClassInitializer()) + if (D->hasInClassInitializer()) TRY_TO(TraverseStmt(D->getInClassInitializer())); }) diff --git a/clang/unittests/Tooling/CMakeLists.txt b/clang/unittests/Tooling/CMakeLists.txt index 2fbe78e3fab7528..5a10a6b285390e9 100644 --- a/clang/unittests/Tooling/CMakeLists.txt +++ b/clang/unittests/Tooling/CMakeLists.txt @@ -25,6 +25,7 @@ add_clang_unittest(ToolingTests QualTypeNamesTest.cpp RangeSelectorTest.cpp RecursiveASTVisitorTests/Attr.cpp + RecursiveASTVisitorTests/BitfieldInitializer.cpp RecursiveASTVisitorTests/CallbacksLeaf.cpp RecursiveASTVisitorTests/CallbacksUnaryOperator.cpp RecursiveASTVisitorTests/CallbacksBinaryOperator.cpp diff --git a/clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp b/clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp new file mode 100644 index 000000000000000..676a491a43040ea --- /dev/null +++ b/clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp @@ -0,0 +1,34 @@ +//===- unittest/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp -===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "TestVisitor.h" +#include <string> + +using namespace clang; + +namespace { + +// Check to ensure that bitfield initializers are visited. +class BitfieldInitializerVisitor : public ExpectedLocationVisitor<BitfieldInitializerVisitor> { +public: + bool VisitIntegerLiteral(IntegerLiteral *IL) { + Match(std::to_string(IL->getValue().getSExtValue()), IL->getLocation()); + return true; + } +}; + +TEST(RecursiveASTVisitor, BitfieldInitializerIsVisited) { + BitfieldInitializerVisitor Visitor; + Visitor.ExpectMatch("123", 2, 15); + EXPECT_TRUE(Visitor.runOver( + "struct S {\n" + " int x : 8 = 123;\n" + "};\n")); +} + +} // end anonymous namespace >From 76c581fe567f66fbe30bd083c245217fda2d023a Mon Sep 17 00:00:00 2001 From: Shivam Gupta <shivam98....@gmail.com> Date: Thu, 19 Oct 2023 09:24:38 +0530 Subject: [PATCH 2/2] clang-format --- .../RecursiveASTVisitorTests/BitfieldInitializer.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp b/clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp index 676a491a43040ea..c11e726fe855284 100644 --- a/clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp +++ b/clang/unittests/Tooling/RecursiveASTVisitorTests/BitfieldInitializer.cpp @@ -14,7 +14,8 @@ using namespace clang; namespace { // Check to ensure that bitfield initializers are visited. -class BitfieldInitializerVisitor : public ExpectedLocationVisitor<BitfieldInitializerVisitor> { +class BitfieldInitializerVisitor + : public ExpectedLocationVisitor<BitfieldInitializerVisitor> { public: bool VisitIntegerLiteral(IntegerLiteral *IL) { Match(std::to_string(IL->getValue().getSExtValue()), IL->getLocation()); @@ -24,11 +25,10 @@ class BitfieldInitializerVisitor : public ExpectedLocationVisitor<BitfieldInitia TEST(RecursiveASTVisitor, BitfieldInitializerIsVisited) { BitfieldInitializerVisitor Visitor; - Visitor.ExpectMatch("123", 2, 15); - EXPECT_TRUE(Visitor.runOver( - "struct S {\n" - " int x : 8 = 123;\n" - "};\n")); + Visitor.ExpectMatch("123", 2, 15); + EXPECT_TRUE(Visitor.runOver("struct S {\n" + " int x : 8 = 123;\n" + "};\n")); } } // end anonymous namespace _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits