[clang] [clang][deps] Recognize 'module;' in dependency directive scanner (PR #148685)
Naveen Seth Hanig via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 14 10:37:38 PDT 2025
https://github.com/naveen-seth created https://github.com/llvm/llvm-project/pull/148685
With this change, the dependency directive scanner now properly identifies "module;" as a directive, as per P1857R3.
Previously, the global module fragment was not recognized by the scanner.
>From 7a759271c54b78eb940bf12274bcc535a3df22e3 Mon Sep 17 00:00:00 2001
From: Naveen Seth Hanig <naveen.hanig at outlook.com>
Date: Mon, 14 Jul 2025 19:17:10 +0200
Subject: [PATCH] [clang][deps] Recognize 'module;' in dependency directive
scanner
With this change, the dependency directive scanner now properly identifies
"module;" as a directive, as per P1857R3.
Previously, the global module fragment was not recognized by the
scanner.
---
clang/lib/Lex/DependencyDirectivesScanner.cpp | 7 +++++++
clang/unittests/Lex/DependencyDirectivesScannerTest.cpp | 9 +++++----
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Lex/DependencyDirectivesScanner.cpp b/clang/lib/Lex/DependencyDirectivesScanner.cpp
index d894c265a07a2..8822e760274d0 100644
--- a/clang/lib/Lex/DependencyDirectivesScanner.cpp
+++ b/clang/lib/Lex/DependencyDirectivesScanner.cpp
@@ -728,6 +728,13 @@ bool Scanner::lexModule(const char *&First, const char *const End) {
return false;
break;
}
+ case ';': {
+ // Handle the global module fragment `module;`.
+ if (Id == "module" && !Export)
+ break;
+ skipLine(First, End);
+ return false;
+ }
case '<':
case '"':
break;
diff --git a/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp b/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp
index d2ef27155df94..92f6f401ec6b7 100644
--- a/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp
+++ b/clang/unittests/Lex/DependencyDirectivesScannerTest.cpp
@@ -1122,16 +1122,17 @@ ort \
)";
ASSERT_FALSE(
minimizeSourceToDependencyDirectives(Source, Out, Tokens, Directives));
- EXPECT_STREQ("#include \"textual-header.h\"\nexport module m;"
+ EXPECT_STREQ("module;#include \"textual-header.h\"\nexport module m;"
"exp\\\nort import:l[[rename]];"
"import<<=3;import a b d e d e f e;"
"import foo[[no_unique_address]];import foo();"
"import f(:sefse);import f(->a=3);"
"<TokBeforeEOF>\n",
Out.data());
- ASSERT_EQ(Directives.size(), 11u);
- EXPECT_EQ(Directives[0].Kind, pp_include);
- EXPECT_EQ(Directives[1].Kind, cxx_export_module_decl);
+ ASSERT_EQ(Directives.size(), 12u);
+ EXPECT_EQ(Directives[0].Kind, cxx_module_decl);
+ EXPECT_EQ(Directives[1].Kind, pp_include);
+ EXPECT_EQ(Directives[2].Kind, cxx_export_module_decl);
}
TEST(MinimizeSourceToDependencyDirectivesTest, ObjCMethodArgs) {
More information about the cfe-commits
mailing list