[PATCH] D137059: [Driver] [Modules] Introduce -fsave-std-c++-module-file= to specify the path of the module file (2/2)
Chuanqi Xu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 15 19:11:34 PST 2022
ChuanqiXu updated this revision to Diff 475664.
ChuanqiXu added a comment.
Use tests with `-###`
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D137059/new/
https://reviews.llvm.org/D137059
Files:
clang/include/clang/Driver/Options.td
clang/lib/Driver/Driver.cpp
clang/test/Driver/save-std-c++-module-file.cpp
Index: clang/test/Driver/save-std-c++-module-file.cpp
===================================================================
--- clang/test/Driver/save-std-c++-module-file.cpp
+++ clang/test/Driver/save-std-c++-module-file.cpp
@@ -7,9 +7,16 @@
//
// RUN: %clang -std=c++20 %t/Hello.cppm -fsave-std-c++-module-file -o %t/output/Hello.o \
// RUN: -### 2>&1 | FileCheck %t/Hello.cppm -DPREFIX=%t --check-prefix=CHECK-WITH-OUTPUT
+//
+// RUN: %clang -std=c++20 %t/Hello.cppm -fsave-std-c++-module-file=%t/tmp/H.pcm \
+// RUN: -### 2>&1 | FileCheck %t/Hello.cppm -DPREFIX=%t --check-prefix=CHECK-SPECIFIED
+//
+// RUN: %clang -std=c++20 %t/Hello.cppm -fsave-std-c++-module-file=%t/tmp/H.pcm -o %t/Hello.o \
+// RUN: -### 2>&1 | FileCheck %t/Hello.cppm -DPREFIX=%t --check-prefix=CHECK-SPECIFIED
//--- Hello.cppm
export module Hello;
// CHECK: "-o" "[[PREFIX]]/Hello.pcm"
// CHECK-WITH-OUTPUT: "-o" "[[PREFIX]]/output/Hello.pcm"
+// CHECK-SPECIFIED: "-o" "[[PREFIX]]/tmp/H.pcm"
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -5553,15 +5553,21 @@
}
// If `-fsave-std-c++-module-file` is specfied, then:
- // - If `-o` is specified, the module file is writing to the same path
+ // - If `-fsave-std-c++-module-file` has a value, the module file is
+ // writing to the value.
+ // - Else if `-o` is specified, the module file is writing to the same path
// with the output file in module file's suffix.
- // - If `-o` is not specified, the module file is writing to the same path
+ // - Else, the module file is writing to the same path
// with the input file in module file's suffix.
if (!AtTopLevel && isa<PrecompileJobAction>(JA) &&
JA.getType() == types::TY_ModuleFile &&
- C.getArgs().hasArg(options::OPT_fsave_std_cxx_module_file)) {
+ (C.getArgs().hasArg(options::OPT_fsave_std_cxx_module_file) ||
+ C.getArgs().hasArg(options::OPT_fsave_std_cxx_module_file_EQ))) {
SmallString<128> TempPath;
- if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o))
+
+ if (Arg *ModuleFilePath = C.getArgs().getLastArg(options::OPT_fsave_std_cxx_module_file_EQ))
+ TempPath = ModuleFilePath->getValue();
+ else if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o))
TempPath = FinalOutput->getValue();
else
TempPath = BaseInput;
Index: clang/include/clang/Driver/Options.td
===================================================================
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -2285,6 +2285,8 @@
PosFlag<SetTrue, [], "Look up implicit modules in the prebuilt module path">,
NegFlag<SetFalse>, BothFlags<[NoXarchOption, CC1Option]>>;
+def fsave_std_cxx_module_file_EQ : Joined<["-"], "fsave-std-c++-module-file=">, Flags<[NoXarchOption, CC1Option]>,
+ HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">;
def fsave_std_cxx_module_file : Flag<["-"], "fsave-std-c++-module-file">, Flags<[NoXarchOption, CC1Option]>,
HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D137059.475664.patch
Type: text/x-patch
Size: 3241 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20221116/ceb0a6c0/attachment.bin>
More information about the cfe-commits
mailing list