[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
@@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: sharadhr wrote: This is required to get rid of the `Wunused-argument: /std:c++20` warning. I realised that the input file was `TY_ModuleFile` which led the Clang-CL driver to interpret it as a C file, and not a CXX file, and then eventually emitting this error. https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/4] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From 182cff89e777b6f22d34fb074c79814e521a7a88 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 2/4] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 8daa27a9d45b85a55f180e5f84ae9b7fa8c11572 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 16:28:46 +0100 Subject: [PATCH 3/4] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; >From 865a8e57af0ede6f6d6ec60ebd837f6827019aec Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 4/4] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd7..842eb59b7382d 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_P
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/5] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From 182cff89e777b6f22d34fb074c79814e521a7a88 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 2/5] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 8daa27a9d45b85a55f180e5f84ae9b7fa8c11572 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 16:28:46 +0100 Subject: [PATCH 3/5] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; >From 865a8e57af0ede6f6d6ec60ebd837f6827019aec Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 4/5] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd7..842eb59b7382d 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_P
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
@@ -0,0 +1,65 @@ +// REQUIRES: system-windows + +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t + +// RUN: %clang_cl /std:c++20 --precompile "%/t/Hello.cppm" "/Fo%/t/Hello.pcm" sharadhr wrote: This outputs `Hello.pcm` in `\tools\clang\test\Driver` instead of in the temporary directory specified by `%t` and the next `RUN` command fails. I'm not the most familiar with the LLVM testing infrastructure; I'd like this to be reviewed. https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/6] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From 182cff89e777b6f22d34fb074c79814e521a7a88 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 2/6] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 8daa27a9d45b85a55f180e5f84ae9b7fa8c11572 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 16:28:46 +0100 Subject: [PATCH 3/6] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; >From 865a8e57af0ede6f6d6ec60ebd837f6827019aec Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 4/6] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd7..842eb59b7382d 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_P
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/7] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From 182cff89e777b6f22d34fb074c79814e521a7a88 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 2/7] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 8daa27a9d45b85a55f180e5f84ae9b7fa8c11572 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 16:28:46 +0100 Subject: [PATCH 3/7] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; >From 865a8e57af0ede6f6d6ec60ebd837f6827019aec Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 4/7] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd7..842eb59b7382d 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_P
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/5] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From eda96d01d1e698b8f246cbbdb481356f67797260 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 16:28:46 +0100 Subject: [PATCH 2/5] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; >From 994ca23255888b14fe14c8abddb2d37eaa578ce3 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 16 Jul 2024 23:49:08 +0100 Subject: [PATCH 3/5] `clang-cl` C++20 modules compile test --- clang/test/Driver/cl-cxx20-modules.cppm | 65 + 1 file changed, 65 insertions(+) create mode 100644 clang/test/Driver/cl-cxx20-modules.cppm diff --git a/clang/test/Driver/cl-cxx20-modules.cppm b/clang/test/Driver/cl-cxx20-modules.cppm new file mode 100644 index 0..84807324b4cbc --- /dev/null +++ b/clang/test/Driver/cl-cxx20-modules.cppm @@ -0,0 +1,65 @@ +// REQUIRES: system-windows + +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t + +// RUN: %clang_cl /std:c++20 --precompile "%/t/Hello.cppm" "/Fo%/t/Hello.pcm" +// RUN: %clang_cl /std:c++20 %/t/use.cpp -fmodule-file=Hello=%/t/Hello.pcm %/t/Hello.pcm /Fo%/t/SimpleHelloWorld.exe 2>&1 + +// RUN: %/t/SimpleHelloWorld.exe +// CHECK: Simple Hello World! + +//--- Hello.cppm +module; +#include +export module Hello; +export void hello() { + std::cout << "Simple Hello World!\n"; +} + +//--- use.cpp +import Hello; +int main() { + hello(); + return 0; +} + +//--- M.cppm +export module M; +export import :interface_part; +import :impl_part; +export void Hello(); + +//--- interface_part.cpp +export module M:interface_part; +export void World(); + +//--- impl_part.cppm +module; +#inc
[clang] [clang][driver] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
https://github.com/sharadhr created https://github.com/llvm/llvm-project/pull/99300 Relates to #98761: `-fmodule-file` requires `/std:c++20` or greater, but passing that option results in an unused argument warning. This resolves that. >From 11aaae5439b33ac636e8580b96d16b6d0d9dbd0a Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 1/2] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From fe0e22ae80572f8b084b94c80c8f27098b74d1a3 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 2/2] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd7..842eb59b7382d 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: + case TY_CXXModule: + case TY_PP_CXXModule: + case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
@@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: sharadhr wrote: Commits have been moved to #99300. https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/99300 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
@@ -0,0 +1,65 @@ +// REQUIRES: system-windows + +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t + +// RUN: %clang_cl /std:c++20 --precompile "%/t/Hello.cppm" "/Fo%/t/Hello.pcm" sharadhr wrote: I've looked at the other tests but I don't quite follow how `-###` works—could you describe an example, please? Thanks! https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/6] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From eda96d01d1e698b8f246cbbdb481356f67797260 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 16:28:46 +0100 Subject: [PATCH 2/6] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; >From 994ca23255888b14fe14c8abddb2d37eaa578ce3 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 16 Jul 2024 23:49:08 +0100 Subject: [PATCH 3/6] `clang-cl` C++20 modules compile test --- clang/test/Driver/cl-cxx20-modules.cppm | 65 + 1 file changed, 65 insertions(+) create mode 100644 clang/test/Driver/cl-cxx20-modules.cppm diff --git a/clang/test/Driver/cl-cxx20-modules.cppm b/clang/test/Driver/cl-cxx20-modules.cppm new file mode 100644 index 0..84807324b4cbc --- /dev/null +++ b/clang/test/Driver/cl-cxx20-modules.cppm @@ -0,0 +1,65 @@ +// REQUIRES: system-windows + +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t + +// RUN: %clang_cl /std:c++20 --precompile "%/t/Hello.cppm" "/Fo%/t/Hello.pcm" +// RUN: %clang_cl /std:c++20 %/t/use.cpp -fmodule-file=Hello=%/t/Hello.pcm %/t/Hello.pcm /Fo%/t/SimpleHelloWorld.exe 2>&1 + +// RUN: %/t/SimpleHelloWorld.exe +// CHECK: Simple Hello World! + +//--- Hello.cppm +module; +#include +export module Hello; +export void hello() { + std::cout << "Simple Hello World!\n"; +} + +//--- use.cpp +import Hello; +int main() { + hello(); + return 0; +} + +//--- M.cppm +export module M; +export import :interface_part; +import :impl_part; +export void Hello(); + +//--- interface_part.cpp +export module M:interface_part; +export void World(); + +//--- impl_part.cppm +module; +#inc
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
@@ -0,0 +1,65 @@ +// REQUIRES: system-windows + +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t + +// RUN: %clang_cl /std:c++20 --precompile "%/t/Hello.cppm" "/Fo%/t/Hello.pcm" sharadhr wrote: So, I've tried to write the test like you've suggested exactly, but I end up with these errors: ``` Testing: FAIL: Clang :: Driver/cl-cxx20-modules.cppm (1 of 19831) TEST 'Clang :: Driver/cl-cxx20-modules.cppm' FAILED Exit Code: 1 Command Output (stdout): -- # RUN: at line 1 r:\llvm-project\build\x64-release\bin\clang.exe --driver-mode=cl /std:c++20 --precompile -### -- R:\llvm-project\clang\test\Driver\cl-cxx20-modules.cppm 2>&1 | r:\llvm-project\build\x64-release\bin\filecheck.exe R:\llvm-project\clang\test\Driver\cl-cxx20-modules.cppm # executed command: 'r:\llvm-project\build\x64-release\bin\clang.exe' --driver-mode=cl /std:c++20 --precompile '-###' -- 'R:\llvm-project\clang\test\Driver\cl-cxx20-modules.cppm' # executed command: 'r:\llvm-project\build\x64-release\bin\filecheck.exe' 'R:\llvm-project\clang\test\Driver\cl-cxx20-modules.cppm' # .---command stderr # | // CHECK: --precompile # | ^ # | :1:1: note: scanning from here # | clang version 19.0.0git (https://github.com/sharadhr/llvm-project.git e6386de2ef7dcb4650073c81e2da99bbd3446c99) # | ^ # | :6:744: note: possible intended match here # | "D:\\Libraries\\Documents\\_Documents\\Repositories\\llvm-project\\build\\x64-release\\bin\\clang.exe" "-cc1" "-triple" "x86_64-pc-windows-msvc19.40.33812" "-emit-module-interface" "-disable-free" "-clear-ast-before-backend" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "cl-cxx20-modules.cppm" "-mrelocation-model" "pic" "-pic-level" "2" "-mframe-pointer=none" "-relaxed-aliasing" "-fmath-errno" "-ffp-contract=on" "-fno-rounding-math" "-mconstructor-aliases" "-fms-volatile" "-funwind-tables=2" "-target-cpu" "x86-64" "-mllvm" "-x86-asm-syntax=intel" "-tune-cpu" "generic" "-D_MT" "-flto-visibility-public-std" "--dependent-lib=libcmt" "--dependent-lib=oldnames" "-stack-protector" "2" "-fdiagnostics-format" "msvc" "-fdebug-compilation-dir=R:\\llvm-project\\build\\x64-release\\tools\\clang\\test\\Driver" "-fcoverage-compilation-dir=R:\\llvm-project\\build\\x64-release\\tools\\clang\\test\\Driver" "-resource-dir" "D:\\Libraries\\Documents\\_Documents\\Repositories\\llvm-project\\build\\x64-release\\lib\\clang\\19" "-internal-isystem" "D:\\Libraries\\Documents\\_Documents\\Repositories\\llvm-project\\build\\x64-release\\lib\\clang\\19\\include" "-internal-isystem" "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.40.33807\\include" "-internal-isystem" "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Tools\\MSVC\\14.40.33807\\ATLMFC\\include" "-internal-isystem" "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\VC\\Auxiliary\\VS\\include" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.22621.0\\ucrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10include\\10.0.22621.0um" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10include\\10.0.22621.0shared" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10include\\10.0.22621.0winrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\10include\\10.0.22621.0cppwinrt" "-internal-isystem" "C:\\Program Files (x86)\\Windows Kits\\NETFXSDK\\4.8\\include\\um" "-fdeprecated-macro" "-ferror-limit" "19" "-fno-use-cxa-atexit" "-fms-extensions" "-fms-compatibility" "-fms-compatibility-version=19.40.33812" "-std=c++20" "-fno-implicit-modules" "-fskip-odr-check-in-gmf" "-faddrsig" "-o" "cl-cxx20-modules.pcm" "-x" "c++" "R:\\llvm-project\\clang\\test\\Driver\\cl-cxx20-modules.cppm" # | ^ # | # | Input file: # | Check file: R:\llvm-project\clang\test\Driver\cl-cxx20-modules.cppm # | # | -dump-input=help explains the following input dump. # | # | Input was: # | << # |1: clang version 19.0.0git (https://github.com/sharadhr/llvm-project.gi
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
@@ -0,0 +1,65 @@ +// REQUIRES: system-windows + +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t + +// RUN: %clang_cl /std:c++20 --precompile "%/t/Hello.cppm" "/Fo%/t/Hello.pcm" sharadhr wrote: I notice there's a very long test in `cl-options.c` that seem to test Clang-specific options. Could I just slide these three options in the long list of `//RUN: -fsomeoption`? In particular, this part: https://github.com/llvm/llvm-project/blob/d48d4805f792adbdac58d480f890449def4964ea/clang/test/Driver/cl-options.c#L724-L733 https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Improve Clang-CL support for C++20 standard modules (PR #98761)
https://github.com/sharadhr created https://github.com/llvm/llvm-project/pull/98761 This PR is the first step in improving the situation for `clang-cl` detailed in [this LLVM Discourse thread](https://discourse.llvm.org/t/clang-cl-exe-support-for-c-modules/72257/28). There has been some work done in #89772. I believe this is somewhat orthogonal. This is a work-in-progress; the functionality has only been tested with the [basic 'Hello World' example](https://clang.llvm.org/docs/StandardCPlusPlusModules.html#quick-start), and proper test cases need to be written. Additionally, the `/std:c++20` command-line argument is considered unused (although it is very much required, and compilation fails without it) with the following warning: ``` clang: warning: argument unused during compilation: '/std:c++20' [-Wunused-command-line-argument] ``` I suspect the issue is somewhere around https://github.com/llvm/llvm-project/blob/8802c9fd73da9451e69e15eed53b396c7d44a866/clang/lib/Driver/ToolChains/Clang.cpp#L6285-L6300 I'd like some thoughts on this, thanks! >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Improve Clang-CL support for C++20 standard modules (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/2] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From 182cff89e777b6f22d34fb074c79814e521a7a88 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 2/2] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Improve Clang-CL support for C++20 standard modules (PR #98761)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Improve Clang-CL support for C++20 standard modules (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 1fed92a00f0d732a2575861c2bf6a6d053407255 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 13 Jul 2024 19:25:47 +0100 Subject: [PATCH 1/3] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From 182cff89e777b6f22d34fb074c79814e521a7a88 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 2/3] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 8daa27a9d45b85a55f180e5f84ae9b7fa8c11572 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 16:28:46 +0100 Subject: [PATCH 3/3] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
sharadhr wrote: @ChuanqiXu9, do make a re-review when you can, thanks! https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/98761 >From 2f499e793050cd0256d658f19e5a4da73c941962 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 6 Aug 2024 11:00:54 +0100 Subject: [PATCH 1/7] Allow `--precompile` and `-fprebuilt-module-path` to be passed directly into CL driver without `/clang:` prefix --- clang/include/clang/Driver/Options.td | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 4ab8638175dd3..ca7cfef8453a0 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3085,7 +3085,7 @@ def fmodules_user_build_path : Separate<["-"], "fmodules-user-build-path">, Grou HelpText<"Specify the module user build path">, MarshallingInfoString>; def fprebuilt_module_path : Joined<["-"], "fprebuilt-module-path=">, Group, - Flags<[]>, Visibility<[ClangOption, CC1Option]>, + Flags<[]>, Visibility<[ClangOption, CLOption, CC1Option]>, MetaVarName<"">, HelpText<"Specify the prebuilt module path">; defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", @@ -5874,6 +5874,7 @@ def _output : Separate<["--"], "output">, Alias; def _param : Separate<["--"], "param">, Group; def _param_EQ : Joined<["--"], "param=">, Alias<_param>; def _precompile : Flag<["--"], "precompile">, Flags<[NoXarchOption]>, + Visibility<[ClangOption, CLOption]>, Group, HelpText<"Only precompile the input">; def _prefix_EQ : Joined<["--"], "prefix=">, Alias; def _prefix : Separate<["--"], "prefix">, Alias; >From 9bf377f4d9c1939a0577571d32e2b57eff2e9d6b Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 6 Aug 2024 11:00:55 +0100 Subject: [PATCH 2/7] Support more `fmodule-*` options from CL driver --- clang/include/clang/Driver/Options.td | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index ca7cfef8453a0..bfe369a6284fe 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3094,11 +3094,11 @@ defm prebuilt_implicit_modules : BoolFOption<"prebuilt-implicit-modules", NegFlag, BothFlags<[], [ClangOption, CC1Option]>>; def fmodule_output_EQ : Joined<["-"], "fmodule-output=">, - Flags<[NoXarchOption]>, Visibility<[ClangOption, CC1Option]>, + Flags<[NoXarchOption]>, Visibility<[ClangOption, CLOption, CC1Option]>, MarshallingInfoString>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; def fmodule_output : Flag<["-"], "fmodule-output">, Flags<[NoXarchOption]>, - Visibility<[ClangOption, CC1Option]>, + Visibility<[ClangOption, CLOption, CC1Option]>, HelpText<"Save intermediate module file results when compiling a standard C++ module unit.">; defm skip_odr_check_in_gmf : BoolOption<"f", "skip-odr-check-in-gmf", @@ -3278,8 +3278,10 @@ def fretain_comments_from_system_headers : Flag<["-"], "fretain-comments-from-sy Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag>; def fmodule_header : Flag <["-"], "fmodule-header">, Group, + Visibility<[ClangOption, CLOption]>, HelpText<"Build a C++20 Header Unit from a header">; def fmodule_header_EQ : Joined<["-"], "fmodule-header=">, Group, + Visibility<[ClangOption, CLOption]>, MetaVarName<"">, HelpText<"Build a C++20 Header Unit from a header that should be found in the user (fmodule-header=user) or system (fmodule-header=system) search path.">; >From d0491d3addff528017b97f2896e8ea886608d9da Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 6 Aug 2024 11:00:55 +0100 Subject: [PATCH 3/7] `clang-cl` C++20 modules compile test --- clang/test/Driver/cl-cxx20-modules.cppm | 65 + 1 file changed, 65 insertions(+) create mode 100644 clang/test/Driver/cl-cxx20-modules.cppm diff --git a/clang/test/Driver/cl-cxx20-modules.cppm b/clang/test/Driver/cl-cxx20-modules.cppm new file mode 100644 index 0..84807324b4cbc --- /dev/null +++ b/clang/test/Driver/cl-cxx20-modules.cppm @@ -0,0 +1,65 @@ +// REQUIRES: system-windows + +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t + +// RUN: %clang_cl /std:c++20 --precompile "%/t/Hello.cppm" "/Fo%/t/Hello.pcm" +// RUN: %clang_cl /std:c++20 %/t/use.cpp -fmodule-file=Hello=%/t/Hello.pcm %/t/Hello.pcm /Fo%/t/SimpleHelloWorld.exe 2>&1 + +// RUN: %/t/SimpleHelloWorld.exe +// CHECK: Simple Hello World! + +//--- Hello.cppm +module; +#include +export module Hello; +export void hello() { + std::cout << "Simple Hello World!\n"; +} + +//--- use.cpp +import Hello; +int main() { + hello(); + return 0; +} + +//--- M.cppm +export module M; +export import :interface_part; +import :impl_part; +export void Hello(); + +//--- interface_part.cpp +export module M:interface_part; +export void World(); + +//--- impl_part.cppm +module; +#includ
[clang] [clang][driver][clang-cl] Support `--precompile` and `-fmodule-*` options in Clang-CL (PR #98761)
sharadhr wrote: I've done a git rebase with `--reset-author`. Hopefully this is correct. https://github.com/llvm/llvm-project/pull/98761 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/99300 >From 51e74869c87de8ed8b37e7a9391428f3dfc1ac1a Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 1/2] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From cbe5a79ca48a888917863dd807ebcfefb2385d74 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 2/2] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd7..842eb59b7382d 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: + case TY_CXXModule: + case TY_PP_CXXModule: + case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
sharadhr wrote: Not quite sure how to handle the test for this; I'm struggling to find a `.pcm` file that can be used. https://github.com/llvm/llvm-project/pull/99300 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/99300 >From 51e74869c87de8ed8b37e7a9391428f3dfc1ac1a Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 1/2] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2..c6a03f4491dd7 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 3b9c3d251bbbfd44b0d7d900d795343b0e4fa474 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 2/2] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd7..2b9b391c19c9f 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: + case TY_CXXModule: + case TY_PP_CXXModule: + case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/99300 >From 51e74869c87de8ed8b37e7a9391428f3dfc1ac1a Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 1/3] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2b..c6a03f4491dd79 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 3b9c3d251bbbfd44b0d7d900d795343b0e4fa474 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 2/3] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd79..2b9b391c19c9fd 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: + case TY_CXXModule: + case TY_PP_CXXModule: + case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From f1d83d67b0cc72c4f55cd96e654ed9e9962b48a5 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Wed, 7 Aug 2024 20:41:39 +0100 Subject: [PATCH 3/3] Add a test to check that warning is gone --- clang/test/Driver/cl-cxx20-modules.cppm | 8 1 file changed, 8 insertions(+) diff --git a/clang/test/Driver/cl-cxx20-modules.cppm b/clang/test/Driver/cl-cxx20-modules.cppm index 06df929c42342f..fd1d3ba05a422b 100644 --- a/clang/test/Driver/cl-cxx20-modules.cppm +++ b/clang/test/Driver/cl-cxx20-modules.cppm @@ -1,3 +1,6 @@ +// RUN: rm -rf %t +// RUN: split-file %s %t + // RUN: %clang_cl /std:c++20 --precompile -### -- %s 2>&1 | FileCheck --check-prefix=PRECOMPILE %s // PRECOMPILE: -emit-module-interface @@ -6,3 +9,8 @@ // RUN: %clang_cl /std:c++20 --fprebuilt-module-path=. -### -- %s 2>&1 | FileCheck --check-prefix=FPREBUILT %s // FPREBUILT: -fprebuilt-module-path=. + +// RUN: %clang_cl %t/test.pcm /std:c++20 -### 2>&1 | FileCheck --check-prefix=CPP20WARNING %t/test.pcm + +//--- test.pcm +// CPP20WARNING-NOT: clang-cl: warning: argument unused during compilation: '/std:c++20' [-Wunused-command-line-argument] \ No newline at end of file ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/99300 >From 51e74869c87de8ed8b37e7a9391428f3dfc1ac1a Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 14 Jul 2024 11:05:57 +0100 Subject: [PATCH 1/3] `TY_ModuleFile` should be a 'CXX' file type --- clang/lib/Driver/Types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index a7b6b9000e1d2b..c6a03f4491dd79 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,7 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: + case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From 3b9c3d251bbbfd44b0d7d900d795343b0e4fa474 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman <3754080+shara...@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:10:12 +0100 Subject: [PATCH 2/3] Resolve `clang-format` issues --- clang/lib/Driver/Types.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Types.cpp b/clang/lib/Driver/Types.cpp index c6a03f4491dd79..2b9b391c19c9fd 100644 --- a/clang/lib/Driver/Types.cpp +++ b/clang/lib/Driver/Types.cpp @@ -242,7 +242,9 @@ bool types::isCXX(ID Id) { case TY_CXXHUHeader: case TY_PP_CXXHeaderUnit: case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: - case TY_CXXModule: case TY_PP_CXXModule: case TY_ModuleFile: + case TY_CXXModule: + case TY_PP_CXXModule: + case TY_ModuleFile: case TY_PP_CLCXX: case TY_CUDA: case TY_PP_CUDA: case TY_CUDA_DEVICE: case TY_HIP: >From ad840c46168e4202c0850e3cbe1b044f239ca7d6 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Wed, 7 Aug 2024 20:41:39 +0100 Subject: [PATCH 3/3] Add a test to check that warning is gone --- clang/test/Driver/cl-cxx20-modules.cppm | 8 1 file changed, 8 insertions(+) diff --git a/clang/test/Driver/cl-cxx20-modules.cppm b/clang/test/Driver/cl-cxx20-modules.cppm index 06df929c42342f..43dbf517485a05 100644 --- a/clang/test/Driver/cl-cxx20-modules.cppm +++ b/clang/test/Driver/cl-cxx20-modules.cppm @@ -1,3 +1,6 @@ +// RUN: rm -rf %t +// RUN: split-file %s %t + // RUN: %clang_cl /std:c++20 --precompile -### -- %s 2>&1 | FileCheck --check-prefix=PRECOMPILE %s // PRECOMPILE: -emit-module-interface @@ -6,3 +9,8 @@ // RUN: %clang_cl /std:c++20 --fprebuilt-module-path=. -### -- %s 2>&1 | FileCheck --check-prefix=FPREBUILT %s // FPREBUILT: -fprebuilt-module-path=. + +// RUN: %clang_cl %t/test.pcm /std:c++20 -### 2>&1 | FileCheck --check-prefix=CPP20WARNING %t/test.pcm + +//--- test.pcm +// CPP20WARNING-NOT: clang-cl: warning: argument unused during compilation: '/std:c++20' [-Wunused-command-line-argument] ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
sharadhr wrote: Just to clarify—you'd like me to open another PR to `release/19.X`? I can do that. In fact I'm a little more ambitious because this and #98761 are honestly very simple PRs—I'd like them to be backported as far as Clang 16 (which is when modules support first appeared) if possible. https://github.com/llvm/llvm-project/pull/99300 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang][driver][clang-cl] Fix unused argument warning for `/std:c++20` for precompiled module inputs to `clang-cl` (PR #99300)
sharadhr wrote: Ah. That's a pity but no problem. I'll create the PR now. Thanks! https://github.com/llvm/llvm-project/pull/99300 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: I think I need to be a little more nuanced—with my changes, PCHs requested with `/Fo` and `/Fp` aren't output, causing the PCH test failures. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: The Linux tests that failed nearly instantaneously seem to have failed because of a CI permissions issue and are hence irrelevant. There are more critical Windows/macOS failures that have to do with PCHs when running with `clang-cl`, and I shall investigate them. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From 3a84b5906330c4f6308e10c50381f06956c27e2d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/6] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f6479..67b5e7268051aea 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,7 +6099,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From 1a471fe6ef2549c53b393ac407756f4a4bbc7363 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/6] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 67b5e7268051aea..41c30899807c528 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,8 +6099,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From fe69cf4b4de805b67b877e7b30165e32a986dedc Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/6] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 41c30899807c528..32d87a4eaa59ca6 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6100,7 +6100,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From d7b7e93fb04fc624e7ce3758bd385bdea1a388a9 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 12 Jan 2025 21:44:33 + Subject: [PATCH 4/6] Account for /Yc when generating PCH --- clang/lib/Driver/Driver.cpp | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 32d87a4eaa59ca6..a59f7108c076029 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,11 +6099,11 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { +// CL and not building a PCH. Not sure why the GNU-style driver doesn't need +// this. May need to rethink. Arg *FinalOutput = -// CL and not generating a PCH: test for Fo, Fp, and Yc -IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && -C.getArgs().hasArg(options::OPT__SLASH_Fp)) -? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) +? C.getArgs().getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From 1f40c12decf6faef58dc4e268dd3aac0c3c1874a Mon Sep 17 00:00:00 2001 From:
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From b6bda7bd5980f3ff9bb9bd680846eb1bb05ac7c7 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Fri, 7 Feb 2025 21:24:12 + Subject: [PATCH] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 21 - 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f6479..36749a90750010a 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6097,10 +6097,29 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, } llvm::PrettyStackTraceString CrashInfo("Computing output path"); + // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +bool IsCLNonPCH = +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) && +(isa(JA) || isa(JA)); +bool HasAnyOutputArg = C.getArgs().hasArg( +options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); + +Arg *FinalOutput = nullptr; +if (IsCLNonPCH && HasAnyOutputArg) { + FinalOutput = C.getArgs().getLastArg( + options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); +} else if (IsCLNonPCH) { + FinalOutput = C.getArgs().getLastArg(options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON); +} else { + FinalOutput = C.getArgs().getLastArg(options::OPT_o); +} + +if (FinalOutput) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: Ready for review; all relevant tests passing. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: A quick bump. I'd like to get this reviewed hopefully in time for the Clang 20.x release. I think having it in 19.x is a lost battle, it's a bit too late for that. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From 3a84b5906330c4f6308e10c50381f06956c27e2d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/6] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f6479..67b5e7268051aea 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,7 +6099,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From 1a471fe6ef2549c53b393ac407756f4a4bbc7363 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/6] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 67b5e7268051aea..41c30899807c528 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,8 +6099,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From fe69cf4b4de805b67b877e7b30165e32a986dedc Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/6] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 41c30899807c528..32d87a4eaa59ca6 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6100,7 +6100,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From d7b7e93fb04fc624e7ce3758bd385bdea1a388a9 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 12 Jan 2025 21:44:33 + Subject: [PATCH 4/6] Account for /Yc when generating PCH --- clang/lib/Driver/Driver.cpp | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 32d87a4eaa59ca6..a59f7108c076029 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,11 +6099,11 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { +// CL and not building a PCH. Not sure why the GNU-style driver doesn't need +// this. May need to rethink. Arg *FinalOutput = -// CL and not generating a PCH: test for Fo, Fp, and Yc -IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && -C.getArgs().hasArg(options::OPT__SLASH_Fp)) -? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) +? C.getArgs().getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From 1f40c12decf6faef58dc4e268dd3aac0c3c1874a Mon Sep 17 00:00:00 2001 From:
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From b6bda7bd5980f3ff9bb9bd680846eb1bb05ac7c7 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Fri, 7 Feb 2025 21:24:12 + Subject: [PATCH 1/2] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 21 - 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f6479..36749a90750010a 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6097,10 +6097,29 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, } llvm::PrettyStackTraceString CrashInfo("Computing output path"); + // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +bool IsCLNonPCH = +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) && +(isa(JA) || isa(JA)); +bool HasAnyOutputArg = C.getArgs().hasArg( +options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); + +Arg *FinalOutput = nullptr; +if (IsCLNonPCH && HasAnyOutputArg) { + FinalOutput = C.getArgs().getLastArg( + options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); +} else if (IsCLNonPCH) { + FinalOutput = C.getArgs().getLastArg(options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON); +} else { + FinalOutput = C.getArgs().getLastArg(options::OPT_o); +} + +if (FinalOutput) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From acad422d098855251252c0c5925f571f1b38631d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sat, 8 Feb 2025 21:24:53 + Subject: [PATCH 2/2] Add a test for the -fmodule-output BMI output file --- clang/test/Driver/cl-cxx20-modules.cppm | 8 1 file changed, 8 insertions(+) diff --git a/clang/test/Driver/cl-cxx20-modules.cppm b/clang/test/Driver/cl-cxx20-modules.cppm index 43dbf517485a058..8744745019d15eb 100644 --- a/clang/test/Driver/cl-cxx20-modules.cppm +++ b/clang/test/Driver/cl-cxx20-modules.cppm @@ -14,3 +14,11 @@ //--- test.pcm // CPP20WARNING-NOT: clang-cl: warning: argument unused during compilation: '/std:c++20' [-Wunused-command-line-argument] + +// test whether the following outputs %Hello.bmi +// RUN: %clang_cl /std:c++20 --precompile -x c++-module -fmodule-output=%t/Hello.bmi -Fo"%t/Hello.bmi" -c %t/Hello.cppm -### 2>&1 | FileCheck %s +// CHECK: "-emit-module-interface" +// CHECK: "-o" "{{.*}}Hello.bmi" + +//--- Hello.cppm +export module Hello; \ No newline at end of file ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
@@ -14,3 +14,11 @@ //--- test.pcm // CPP20WARNING-NOT: clang-cl: warning: argument unused during compilation: '/std:c++20' [-Wunused-command-line-argument] + +// test whether the following outputs %Hello.bmi +// RUN: %clang_cl /std:c++20 --precompile -x c++-module -fmodule-output=%t/Hello.bmi -Fo"%t/Hello.bmi" -c %t/Hello.cppm -### 2>&1 | FileCheck %s sharadhr wrote: > This is just one invocation, but the logic in GetNamedOutputPath() seems to > cover many cases. Agreed; once again; open to suggestions for more test cases. > Also, is it -fmodule-output or /Fo that sets the output filename (or both?) >From the [Clang user >guide](https://clang.llvm.org/docs/StandardCPlusPlusModules.html#how-to-build-projects-using-modules), > it appears _both_ are required, and CMake in particular uses the 'one-phase >compilation' method. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
@@ -6097,10 +6097,29 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, } llvm::PrettyStackTraceString CrashInfo("Computing output path"); + // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +bool IsCLNonPCH = +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) && +(isa(JA) || isa(JA)); +bool HasAnyOutputArg = C.getArgs().hasArg( +options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); + +Arg *FinalOutput = nullptr; +if (IsCLNonPCH && HasAnyOutputArg) { + FinalOutput = C.getArgs().getLastArg( + options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); +} else if (IsCLNonPCH) { + FinalOutput = C.getArgs().getLastArg(options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON); +} else { + FinalOutput = C.getArgs().getLastArg(options::OPT_o); +} sharadhr wrote: I've updated the OP message with the reasoning for this. This logic in particular is to resolve `lit` test cases that failed when `/Yp` was passed to `clang-cl.exe`, i.e. PCHs were generated. I believe this is because `/Yp` uses `/Fo` for the PCH output, and therefore this invocation needs to use `/o` (or `-o`). `HasAnyOutputArg` was written _specifically_ to resolve `llvm-project\clang\test\ClangScanDeps\target-filename.cpp` failing. It feels like a weird hack and I'm open to suggestions. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver][HIP] Do not pass -dependency-file flag for HIP Device offloading (PR #125646)
sharadhr wrote: @Prabhuk not quite sure why I was mentioned here—which change are you referring to? https://github.com/llvm/llvm-project/pull/125646 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From 3a84b5906330c4f6308e10c50381f06956c27e2d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/4] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f647..67b5e7268051ae 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,7 +6099,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From 1a471fe6ef2549c53b393ac407756f4a4bbc7363 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/4] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 67b5e7268051ae..41c30899807c52 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,8 +6099,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From fe69cf4b4de805b67b877e7b30165e32a986dedc Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/4] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 41c30899807c52..32d87a4eaa59ca 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6100,7 +6100,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From ff22639d751a38e633a5b2e4fe42586d81b36499 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 12 Jan 2025 21:44:33 + Subject: [PATCH 4/4] Account for /Yc when generating PCH --- clang/lib/Driver/Driver.cpp | 10 -- 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 32d87a4eaa59ca..1bab4efc75db17 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,12 +6099,10 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -Arg *FinalOutput = -// CL and not generating a PCH: test for Fo, Fp, and Yc -IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && -C.getArgs().hasArg(options::OPT__SLASH_Fp)) -? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, - options::OPT__SLASH_Fo_COLON) +// CL and not building a PCH. Not sure why the GNU-style driver doesn't need this. +// May need to rethink. +Arg *FinalOutput = IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) +? C.getArgs().getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); if (FinalOutput != nullptr) { _
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From 3a84b5906330c4f6308e10c50381f06956c27e2d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/5] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f647..67b5e7268051ae 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,7 +6099,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From 1a471fe6ef2549c53b393ac407756f4a4bbc7363 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/5] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 67b5e7268051ae..41c30899807c52 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,8 +6099,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From fe69cf4b4de805b67b877e7b30165e32a986dedc Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/5] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 41c30899807c52..32d87a4eaa59ca 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6100,7 +6100,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From d7b7e93fb04fc624e7ce3758bd385bdea1a388a9 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 12 Jan 2025 21:44:33 + Subject: [PATCH 4/5] Account for /Yc when generating PCH --- clang/lib/Driver/Driver.cpp | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 32d87a4eaa59ca..a59f7108c07602 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,11 +6099,11 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { +// CL and not building a PCH. Not sure why the GNU-style driver doesn't need +// this. May need to rethink. Arg *FinalOutput = -// CL and not generating a PCH: test for Fo, Fp, and Yc -IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && -C.getArgs().hasArg(options::OPT__SLASH_Fp)) -? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) +? C.getArgs().getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From 1f40c12decf6faef58dc4e268dd3aac0c3c1874a Mon Sep 17 00:00:00 2001 From: Sharadh
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From 3a84b5906330c4f6308e10c50381f06956c27e2d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/4] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f647..67b5e7268051ae 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,7 +6099,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From 1a471fe6ef2549c53b393ac407756f4a4bbc7363 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/4] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 67b5e7268051ae..41c30899807c52 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,8 +6099,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From fe69cf4b4de805b67b877e7b30165e32a986dedc Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/4] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 41c30899807c52..32d87a4eaa59ca 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6100,7 +6100,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From d7b7e93fb04fc624e7ce3758bd385bdea1a388a9 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 12 Jan 2025 21:44:33 + Subject: [PATCH 4/4] Account for /Yc when generating PCH --- clang/lib/Driver/Driver.cpp | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 32d87a4eaa59ca..a59f7108c07602 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,11 +6099,11 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { +// CL and not building a PCH. Not sure why the GNU-style driver doesn't need +// this. May need to rethink. Arg *FinalOutput = -// CL and not generating a PCH: test for Fo, Fp, and Yc -IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && -C.getArgs().hasArg(options::OPT__SLASH_Fp)) -? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) +? C.getArgs().getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); ___ cfe-commits mailing list cfe-commits@l
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: I'm not sure how to fix the `Driver/at_file.c` and `ClangScanDeps/target-filename.cpp` tests. I'd love some help with these. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From 3a84b5906330c4f6308e10c50381f06956c27e2d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/5] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f647..67b5e7268051ae 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,7 +6099,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From 1a471fe6ef2549c53b393ac407756f4a4bbc7363 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/5] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 67b5e7268051ae..41c30899807c52 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,8 +6099,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From fe69cf4b4de805b67b877e7b30165e32a986dedc Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/5] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 41c30899807c52..32d87a4eaa59ca 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6100,7 +6100,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From d7b7e93fb04fc624e7ce3758bd385bdea1a388a9 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 12 Jan 2025 21:44:33 + Subject: [PATCH 4/5] Account for /Yc when generating PCH --- clang/lib/Driver/Driver.cpp | 8 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 32d87a4eaa59ca..a59f7108c07602 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,11 +6099,11 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { +// CL and not building a PCH. Not sure why the GNU-style driver doesn't need +// this. May need to rethink. Arg *FinalOutput = -// CL and not generating a PCH: test for Fo, Fp, and Yc -IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && -C.getArgs().hasArg(options::OPT__SLASH_Fp)) -? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) +? C.getArgs().getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From a8390721b50a1dbbdf6ec99e9468554c4fcaabf6 Mon Sep 17 00:00:00 2001 From: Sharadh
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From 3a84b5906330c4f6308e10c50381f06956c27e2d Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/4] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d9492ea08f647..67b5e7268051ae 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,7 +6099,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From 1a471fe6ef2549c53b393ac407756f4a4bbc7363 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/4] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 67b5e7268051ae..41c30899807c52 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,8 +6099,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From fe69cf4b4de805b67b877e7b30165e32a986dedc Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/4] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 41c30899807c52..32d87a4eaa59ca 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6100,7 +6100,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); >From d7a2799e9025960c9d9a6d7d0ef9cb48b2fc94bf Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 12 Jan 2025 21:44:33 + Subject: [PATCH 4/4] Account for /Yc when generating PCH --- clang/lib/Driver/Driver.cpp | 10 -- 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 32d87a4eaa59ca..1bab4efc75db17 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -6099,12 +6099,10 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -Arg *FinalOutput = -// CL and not generating a PCH: test for Fo, Fp, and Yc -IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && -C.getArgs().hasArg(options::OPT__SLASH_Fp)) -? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, - options::OPT__SLASH_Fo_COLON) +// CL and not building a PCH. Not sure why the GNU-style driver doesn't need this. +// May need to rethink. +Arg *FinalOutput = IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) +? C.getArgs().getLastArg(options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); if (FinalOutput != nullptr) { _
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr edited https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: > Why is this submitted against the release/19.x branch? Is this a backport? If > so, please indicate which commit it backports. Not a backport but a fix. I have now re-submitted it against `main`, but I'd like it back-ported to `19.x` if possible. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: @ChuanqiXu9 are you able to have a look? https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
https://github.com/sharadhr updated https://github.com/llvm/llvm-project/pull/121046 >From a9f921227abccda6c82137bed0b95041f584a147 Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Tue, 24 Dec 2024 09:32:21 + Subject: [PATCH 1/3] Accept /Fo and -Fo in `-fmodule-output` when running under CL mode --- clang/lib/Driver/Driver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index bc5ce9f14ab698..268d836841a107 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -5978,7 +5978,7 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) return C.addResultFile(FinalOutput->getValue(), &JA); } >From bc9b68d11d8f4a2fe76b26b13d805126c40beafd Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Sun, 5 Jan 2025 14:09:24 + Subject: [PATCH 2/3] Use `IsCLMode` to guard cl-style output argument presence --- clang/lib/Driver/Driver.cpp | 9 - 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 268d836841a107..9ea9ea390216f3 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -5978,8 +5978,15 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, llvm::PrettyStackTraceString CrashInfo("Computing output path"); // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON)) +Arg *FinalOutput = +IsCLMode() +? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON) +: C.getArgs().getLastArg(options::OPT_o); + +if (FinalOutput != nullptr) { return C.addResultFile(FinalOutput->getValue(), &JA); +} } // For /P, preprocess to file named after BaseInput. >From 7487d8222defe3358c972999fe1ecd2bfefc9dba Mon Sep 17 00:00:00 2001 From: Sharadh Rajaraman Date: Thu, 9 Jan 2025 19:20:30 + Subject: [PATCH 3/3] Test for `/Yc` and `/Fp` under CL mode --- clang/lib/Driver/Driver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 9ea9ea390216f3..d7e9616cd0679e 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -5979,7 +5979,9 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { Arg *FinalOutput = -IsCLMode() +// CL and not generating a PCH: test for Fo, Fp, and Yc +IsCLMode() && !(C.getArgs().hasArg(options::OPT__SLASH_Yc) && +C.getArgs().hasArg(options::OPT__SLASH_Fp)) ? C.getArgs().getLastArg(options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON) : C.getArgs().getLastArg(options::OPT_o); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
sharadhr wrote: Fair point. Added a test. Additionally the CMake repository contains a bigger battery of tests that also all pass with this PR. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
@@ -6097,10 +6097,29 @@ const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, } llvm::PrettyStackTraceString CrashInfo("Computing output path"); + // Output to a user requested destination? if (AtTopLevel && !isa(JA) && !isa(JA)) { -if (Arg *FinalOutput = C.getArgs().getLastArg(options::OPT_o)) +bool IsCLNonPCH = +IsCLMode() && !C.getArgs().hasArg(options::OPT__SLASH_Yc) && +(isa(JA) || isa(JA)); +bool HasAnyOutputArg = C.getArgs().hasArg( +options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); + +Arg *FinalOutput = nullptr; +if (IsCLNonPCH && HasAnyOutputArg) { + FinalOutput = C.getArgs().getLastArg( + options::OPT_o, options::OPT__SLASH_Fo, options::OPT__SLASH_Fo_COLON); +} else if (IsCLNonPCH) { + FinalOutput = C.getArgs().getLastArg(options::OPT__SLASH_Fo, + options::OPT__SLASH_Fo_COLON); +} else { + FinalOutput = C.getArgs().getLastArg(options::OPT_o); +} sharadhr wrote: I do hope there's some scope for a response, as I'm not sure how to proceed. https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [clang-cl] Accept `cl`-style output arguments (`/Fo`, `-Fo`) for `--fmodule-output` (PR #121046)
@@ -14,3 +14,11 @@ //--- test.pcm // CPP20WARNING-NOT: clang-cl: warning: argument unused during compilation: '/std:c++20' [-Wunused-command-line-argument] + +// test whether the following outputs %Hello.bmi +// RUN: %clang_cl /std:c++20 --precompile -x c++-module -fmodule-output=%t/Hello.bmi -Fo"%t/Hello.bmi" -c %t/Hello.cppm -### 2>&1 | FileCheck %s sharadhr wrote: Coming back after a long while... Both arguments were provided to exercise [CMake's command-line invocation](https://gitlab.kitware.com/cmake/cmake/-/issues/25731#note_1603044) which given this information might be incorrect. @ChuanqiXu9 are you able to provide more information? https://github.com/llvm/llvm-project/pull/121046 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits