https://github.com/zhanyi22333 updated https://github.com/llvm/llvm-project/pull/85745
>From 61b24269867dcec12c8fcab0c26b444f33a57454 Mon Sep 17 00:00:00 2001 From: root <root@DESKTOP-15IK7GA> Date: Sun, 21 Apr 2024 16:43:17 +0800 Subject: [PATCH 1/2] [clang][frontend] change DumpModuleInfoAction test cases. --- .../test/Modules/cxx20-module-file-info-macros.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/clang/test/Modules/cxx20-module-file-info-macros.cpp b/clang/test/Modules/cxx20-module-file-info-macros.cpp index 3b67e9b9acd410..567d21cf1fa43d 100644 --- a/clang/test/Modules/cxx20-module-file-info-macros.cpp +++ b/clang/test/Modules/cxx20-module-file-info-macros.cpp @@ -40,6 +40,11 @@ // CHECK-DAG: FUNC_Macro // CHECK-DAG: CONSTANT // CHECK-DAG: FOO +// CHECK: Macro Definition Bodies: +// CHECK-DAG: REDEFINE +// CHECK-DAG: FUNC_Macro(X) (X+1) +// CHECK-DAG: CONSTANT 43 +// CHECK-DAG: FOO // CHECK-NEXT: === //--- include_foo.h @@ -49,6 +54,10 @@ // CHECK-DAG: CONSTANT // CHECK-DAG: FUNC_Macro // CHECK-DAG: FOO +// CHECK: Macro Definition Bodies: +// CHECK-DAG: FUNC_Macro(X) (X+1) +// CHECK-DAG: CONSTANT 43 +// CHECK-DAG: FOO // CHECK-NEXT: === //--- import_foo.h @@ -58,6 +67,10 @@ import "foo.h"; // CHECK-DAG: CONSTANT // CHECK-DAG: FUNC_Macro // CHECK-DAG: FOO +// CHECK: Macro Definition Bodies: +// CHECK-DAG: FUNC_Macro +// CHECK-DAG: CONSTANT +// CHECK-DAG: FOO // CHECK-NEXT: === //--- named_module.cppm @@ -66,3 +79,4 @@ module; export module M; #define M_Module 43 // CHECK-NOT: Macro Definitions: +// CHECK-NOT: Macro Definition Bodies: >From ce3e5abfe2d994974d3a41b98f7e152e358afdb7 Mon Sep 17 00:00:00 2001 From: root <root@DESKTOP-15IK7GA> Date: Sun, 21 Apr 2024 16:45:04 +0800 Subject: [PATCH 2/2] [clang][frontend] Make DumpModuleInfoAction emit the full macro. --- clang/lib/Frontend/FrontendActions.cpp | 61 ++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index 04eb1041326713..3800958e34cca5 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -943,17 +943,62 @@ void DumpModuleInfoAction::ExecuteAction() { for (/*<IdentifierInfo *, MacroState> pair*/ const auto &Macro : FilteredMacros) Out << " " << Macro.first->getName() << "\n"; - } - // Now let's print out any modules we did not see as part of the Primary. - for (const auto &SM : SubModMap) { - if (!SM.second.Seen && SM.second.Mod) { - Out << " " << ModuleKindName(SM.second.Kind) << " '" << SM.first - << "' at index #" << SM.second.Idx - << " has no direct reference in the Primary\n"; + // Emit the macro definition bodies completely. + Out << " Macro Definition Bodies:\n"; + for (const auto &Macro : FilteredMacros) { + Out << " " << Macro.first->getName(); + clang::MacroInfo *MI = PP.getMacroInfo(Macro.first); + if (MI == nullptr) { + Out << '\n'; + continue; + } + if (MI->isFunctionLike()) { + Out << '('; + if (!MI->param_empty()) { + MacroInfo::param_iterator AI = MI->param_begin(), + E = MI->param_end(); + for (; AI + 1 != E; ++AI) { + Out << (*AI)->getName(); + Out << ','; + } + + // Last argument. + if ((*AI)->getName() == "__VA_ARGS__") + Out << "..."; + else + Out << (*AI)->getName(); + } + + if (MI->isGNUVarargs()) + // #define foo(x...) + Out << "..."; + + Out << ')'; + } + + SmallString<128> SpellingBuffer; + bool First = true; + for (const auto &T : MI->tokens()) { + if (First || T.hasLeadingSpace()) + Out << " "; + First = false; + + Out << PP.getSpelling(T, SpellingBuffer); + } + Out << '\n'; + } + + // Now let's print out any modules we did not see as part of the Primary. + for (const auto &SM : SubModMap) { + if (!SM.second.Seen && SM.second.Mod) { + Out << " " << ModuleKindName(SM.second.Kind) << " '" << SM.first + << "' at index #" << SM.second.Idx + << " has no direct reference in the Primary\n"; + } } + Out << " ====== ======\n"; } - Out << " ====== ======\n"; } // The reminder of the output is produced from the listener as the AST _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits