From 961e32c587cb2289e8c2873848b660a153ed5618 Mon Sep 17 00:00:00 2001 From: Kadir Cetinkaya Date: Wed, 22 Feb 2023 20:09:02 +0100 Subject: [PATCH] [include-cleaner] Check macros against stdlib database Differential Revision: https://reviews.llvm.org/D144579 --- clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp | 9 ++++++++- .../include-cleaner/unittests/LocateSymbolTest.cpp | 14 +++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp b/clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp index 60b18c2..78e783a 100644 --- a/clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp +++ b/clang-tools-extra/include-cleaner/lib/LocateSymbol.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "AnalysisInternal.h" +#include "clang-include-cleaner/Types.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclBase.h" #include "clang/AST/DeclCXX.h" @@ -53,6 +54,12 @@ std::vector> locateDecl(const Decl &D) { return Result; } +std::vector> locateMacro(const Macro &M) { + // FIXME: Should we also provide physical locations? + if (auto SS = tooling::stdlib::Symbol::named("", M.Name->getName())) + return {{*SS, Hints::CompleteSymbol}}; + return {{M.Definition, Hints::CompleteSymbol}}; +} } // namespace std::vector> locateSymbol(const Symbol &S) { @@ -60,7 +67,7 @@ std::vector> locateSymbol(const Symbol &S) { case Symbol::Declaration: return locateDecl(S.declaration()); case Symbol::Macro: - return {{S.macro().Definition, Hints::CompleteSymbol}}; + return locateMacro(S.macro()); } llvm_unreachable("Unknown Symbol::Kind enum"); } diff --git a/clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp b/clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp index 16a1852..9961b01 100644 --- a/clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp +++ b/clang-tools-extra/include-cleaner/unittests/LocateSymbolTest.cpp @@ -122,9 +122,17 @@ TEST(LocateSymbol, Decl) { } TEST(LocateSymbol, Stdlib) { - LocateExample Test("namespace std { struct vector; }"); - EXPECT_THAT(locateSymbol(Test.findDecl("vector")), - ElementsAre(*tooling::stdlib::Symbol::named("std::", "vector"))); + { + LocateExample Test("namespace std { struct vector; }"); + EXPECT_THAT( + locateSymbol(Test.findDecl("vector")), + ElementsAre(*tooling::stdlib::Symbol::named("std::", "vector"))); + } + { + LocateExample Test("#define assert(x)\nvoid foo() { assert(true); }"); + EXPECT_THAT(locateSymbol(Test.findMacro("assert")), + ElementsAre(*tooling::stdlib::Symbol::named("", "assert"))); + } } TEST(LocateSymbol, Macros) { -- 2.7.4