From 67e94c9dc8ff7ac49f2557e02fdf375edd850d76 Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Wed, 5 Jul 2023 09:29:11 +0200 Subject: [PATCH] [include-cleaner] Ignore the layering-violation errors for the standalone tool If the source code is compilable-but-layering-violation, we still want the tool to be functional on it (rather than bailing out). Differential Revision: https://reviews.llvm.org/D154477 --- clang-tools-extra/include-cleaner/test/Inputs/modules/a.h | 2 ++ clang-tools-extra/include-cleaner/test/Inputs/modules/module.map | 2 ++ clang-tools-extra/include-cleaner/test/module.cpp | 7 +++++++ clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp | 9 +++++++++ 4 files changed, 20 insertions(+) create mode 100644 clang-tools-extra/include-cleaner/test/Inputs/modules/a.h create mode 100644 clang-tools-extra/include-cleaner/test/Inputs/modules/module.map create mode 100644 clang-tools-extra/include-cleaner/test/module.cpp diff --git a/clang-tools-extra/include-cleaner/test/Inputs/modules/a.h b/clang-tools-extra/include-cleaner/test/Inputs/modules/a.h new file mode 100644 index 0000000..0b502e2 --- /dev/null +++ b/clang-tools-extra/include-cleaner/test/Inputs/modules/a.h @@ -0,0 +1,2 @@ +#pragma once +class A {}; diff --git a/clang-tools-extra/include-cleaner/test/Inputs/modules/module.map b/clang-tools-extra/include-cleaner/test/Inputs/modules/module.map new file mode 100644 index 0000000..510bfdb --- /dev/null +++ b/clang-tools-extra/include-cleaner/test/Inputs/modules/module.map @@ -0,0 +1,2 @@ +module XA { +} diff --git a/clang-tools-extra/include-cleaner/test/module.cpp b/clang-tools-extra/include-cleaner/test/module.cpp new file mode 100644 index 0000000..b344d16 --- /dev/null +++ b/clang-tools-extra/include-cleaner/test/module.cpp @@ -0,0 +1,7 @@ +// RUN: cp %s %t.cpp +// RUN: clang-include-cleaner -edit %t.cpp -- -I%S/Inputs/modules -fimplicit-module-maps -fmodules-strict-decluse -fmodule-name=XA +// RUN: FileCheck --match-full-lines --check-prefix=EDIT %s < %t.cpp + +// Verify the tool still works on compilable-but-layering-violation code. +#include "a.h" +// EDIT-NOT: {{^}}#include "a.h"{{$}} diff --git a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp index 574023f..62febb4 100644 --- a/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp +++ b/clang-tools-extra/include-cleaner/tool/IncludeCleaner.cpp @@ -95,6 +95,15 @@ class Action : public clang::ASTFrontendAction { RecordedPP PP; PragmaIncludes PI; + bool BeginInvocation(CompilerInstance &CI) override { + // We only perform include-cleaner analysis. So we disable diagnostics that + // won't affect our analysis to make the tool more robust against + // in-development code. + CI.getLangOpts().ModulesDeclUse = false; + CI.getLangOpts().ModulesStrictDeclUse = false; + return true; + } + void ExecuteAction() override { auto &P = getCompilerInstance().getPreprocessor(); P.addPPCallbacks(PP.record(P)); -- 2.7.4