Author: Chuanqi Xu Date: 2024-04-30T14:43:57+08:00 New Revision: ec527b21bb4196355184aa95ef31aa561b8e8b7b
URL: https://github.com/llvm/llvm-project/commit/ec527b21bb4196355184aa95ef31aa561b8e8b7b DIFF: https://github.com/llvm/llvm-project/commit/ec527b21bb4196355184aa95ef31aa561b8e8b7b.diff LOG: [C++20] [Modules] Don't skip pragma diagnostic mappings Close https://github.com/llvm/llvm-project/issues/75057 Previously, I thought the diagnostic mappings is not meaningful with modules incorrectly. And this problem get revealed by another change recently. So this patch tried to rever the previous "optimization" partially. Added: clang/test/Modules/pr75057.cppm Modified: clang/lib/Frontend/FrontendActions.cpp clang/lib/Serialization/GeneratePCH.cpp Removed: ################################################################################ diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index 04eb1041326713..480dfa8c975933 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -274,7 +274,6 @@ GenerateModuleInterfaceAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { CI.getHeaderSearchOpts().ModulesSkipDiagnosticOptions = true; CI.getHeaderSearchOpts().ModulesSkipHeaderSearchPaths = true; - CI.getHeaderSearchOpts().ModulesSkipPragmaDiagnosticMappings = true; std::vector<std::unique_ptr<ASTConsumer>> Consumers = CreateMultiplexConsumer(CI, InFile); diff --git a/clang/lib/Serialization/GeneratePCH.cpp b/clang/lib/Serialization/GeneratePCH.cpp index bed74399098d7f..a2ddbe4624aae4 100644 --- a/clang/lib/Serialization/GeneratePCH.cpp +++ b/clang/lib/Serialization/GeneratePCH.cpp @@ -117,7 +117,6 @@ void ReducedBMIGenerator::HandleTranslationUnit(ASTContext &Ctx) { getPreprocessor().getHeaderSearchInfo().getHeaderSearchOpts(); HSOpts.ModulesSkipDiagnosticOptions = true; HSOpts.ModulesSkipHeaderSearchPaths = true; - HSOpts.ModulesSkipPragmaDiagnosticMappings = true; PCHGenerator::HandleTranslationUnit(Ctx); diff --git a/clang/test/Modules/pr75057.cppm b/clang/test/Modules/pr75057.cppm new file mode 100644 index 00000000000000..96781b3ccacc0b --- /dev/null +++ b/clang/test/Modules/pr75057.cppm @@ -0,0 +1,66 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// Treat the behavior of using headers as baseline. +// RUN: %clang_cc1 -std=c++20 %t/use-header.cc -isystem %t -fsyntax-only -verify +// +// RUN: %clang_cc1 -std=c++20 %t/a.cppm -isystem %t -emit-module-interface -o %t/a.pcm +// RUN: %clang_cc1 -std=c++20 %t/use-module.cc -isystem %t -fmodule-file=a=%t/a.pcm -fsyntax-only -verify + +// Test again with reduced BMI. +// RUN: %clang_cc1 -std=c++20 %t/a.cppm -isystem %t -emit-reduced-module-interface -o %t/a.pcm +// RUN: %clang_cc1 -std=c++20 %t/use-module.cc -isystem %t -fmodule-file=a=%t/a.pcm -fsyntax-only -verify + +//--- sys.h +#ifndef SYS_H +#define SYS_H + +#pragma GCC system_header + +template <class C> +struct [[deprecated]] iterator {}; + +_Pragma("GCC diagnostic push") +_Pragma("GCC diagnostic ignored \"-Wdeprecated\"") +_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") + +template <class C> +struct reverse_iterator +: public iterator<C> {}; + +_Pragma("GCC diagnostic pop") + +template <class T> +class C { +public: + void i() { + reverse_iterator<T> i; + } +}; + +#endif + +//--- use-header.cc +// expected-no-diagnostics +// However, we see unexpected warnings +#include <sys.h> + +void use() { + C<int>().i(); +} + +//--- a.cppm +module; +#include <sys.h> +export module a; +export using ::iterator; +export using ::C; + +//--- use-module.cc +// expected-no-diagnostics +import a; + +void use() { + C<int>().i(); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits