diff options
author | Nathan Sidwell <nathan@acm.org> | 2021-01-15 08:48:54 -0800 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2021-01-15 08:56:20 -0800 |
commit | 492b90f33dfb37576dc7ae424d67b2be8b959bf2 (patch) | |
tree | 4b1e530bbf268ab2ac27b844ea2a9f738fea35a1 /gcc | |
parent | 5a783f42d77b2f00a1ed171c119b020e8df8e521 (diff) | |
download | gcc-492b90f33dfb37576dc7ae424d67b2be8b959bf2.zip gcc-492b90f33dfb37576dc7ae424d67b2be8b959bf2.tar.gz gcc-492b90f33dfb37576dc7ae424d67b2be8b959bf2.tar.bz2 |
c++: Fix langspecs with -fsyntax-only [PR98591]
-fsyntax-only is handled specially in the driver and causes it to add
'-o /dev/null' (or a suitable OS-specific variant thereof). PCH is
handled in the language driver. I'd not sufficiently protected the
-fmodule-only action of adding a dummy assembler from the actions of
-fsyntax-only, so we ended up with two -o options.
PR c++/98591
gcc/cp/
* lang-specs.h: Fix handling of -fmodule-only with -fsyntax-only.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/lang-specs.h | 40 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/modules/pr98591.H | 3 |
2 files changed, 28 insertions, 15 deletions
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h index f162791..8902ae1 100644 --- a/gcc/cp/lang-specs.h +++ b/gcc/cp/lang-specs.h @@ -52,9 +52,11 @@ along with GCC; see the file COPYING3. If not see " %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}" " %{fmodules-ts:-fmodule-header %{fpreprocessed:-fdirectives-only}}" " %(cc1_options) %2" - " %{!S:-o %g.s%V}" - " %{!fsyntax-only:%{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:" - " %{!o*:--output-pch=%i.gch}%W{o*:--output-pch=%*}}}}}}}}", + " %{!fsyntax-only:" + " %{!S:-o %g.s%V}" + " %{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:" + " %{!o*:--output-pch=%i.gch}%W{o*:--output-pch=%*}}}}}" + "}}}", CPLUSPLUS_CPP_SPEC, 0, 0}, {"@c++-system-header", "%{E|M|MM:cc1plus -E" @@ -68,11 +70,14 @@ along with GCC; see the file COPYING3. If not see " %{fmodules-ts:-fdirectives-only}" " %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}" " %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}" - " %{fmodules-ts:-fmodule-header=system %{fpreprocessed:-fdirectives-only}}" + " %{fmodules-ts:-fmodule-header=system" + " %{fpreprocessed:-fdirectives-only}}" " %(cc1_options) %2" - " %{!S:-o %g.s%V}" - " %{!fsyntax-only:%{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:" - " %{!o*:--output-pch=%i.gch}%W{o*:--output-pch=%*}}}}}}}}", + " %{!fsyntax-only:" + " %{!S:-o %g.s%V}" + " %{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:" + " %{!o*:--output-pch=%i.gch}%W{o*:--output-pch=%*}}}}}" + "}}}", CPLUSPLUS_CPP_SPEC, 0, 0}, {"@c++-user-header", "%{E|M|MM:cc1plus -E" @@ -88,9 +93,11 @@ along with GCC; see the file COPYING3. If not see " %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}" " %{fmodules-ts:-fmodule-header=user %{fpreprocessed:-fdirectives-only}}" " %(cc1_options) %2" - " %{!S:-o %g.s%V}" - " %{!fsyntax-only:%{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:" - " %{!o*:--output-pch=%i.gch}%W{o*:--output-pch=%*}}}}}}}}", + " %{!fsyntax-only:" + " %{!S:-o %g.s%V}" + " %{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:" + " %{!o*:--output-pch=%i.gch}%W{o*:--output-pch=%*}}}}}" + "}}}", CPLUSPLUS_CPP_SPEC, 0, 0}, {"@c++", "%{E|M|MM:cc1plus -E %(cpp_options) %2 %(cpp_debug_options)}" @@ -101,13 +108,16 @@ along with GCC; see the file COPYING3. If not see " %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}" " %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}" " %(cc1_options) %2" - " %{fmodule-only:%{!S:-o %g.s%V}}" - " %{!fsyntax-only:%{!fmodule-only:%(invoke_as)}}}}}", + " %{!fsyntax-only:" + " %{fmodule-only:%{!S:-o %g.s%V}}" + " %{!fmodule-only:%(invoke_as)}}" + "}}}", CPLUSPLUS_CPP_SPEC, 0, 0}, {".ii", "@c++-cpp-output", 0, 0, 0}, {"@c++-cpp-output", "%{!E:%{!M:%{!MM:" " cc1plus -fpreprocessed %i %(cc1_options) %2" - " %{fmodule-only:%{!S:-o %g.s%V}}" - " %{!fsyntax-only:%{!fmodule-only:%{!fmodule-header*:" - " %(invoke_as)}}}}}}", 0, 0, 0}, + " %{!fsyntax-only:" + " %{fmodule-only:%{!S:-o %g.s%V}}" + " %{!fmodule-only:%{!fmodule-header*:%(invoke_as)}}}" + "}}}", 0, 0, 0}, diff --git a/gcc/testsuite/g++.dg/modules/pr98591.H b/gcc/testsuite/g++.dg/modules/pr98591.H new file mode 100644 index 0000000..ad397de --- /dev/null +++ b/gcc/testsuite/g++.dg/modules/pr98591.H @@ -0,0 +1,3 @@ +// { dg-additional-options {-fmodules-ts -fmodule-header -fsyntax-only} } +// PR 98591 -fsyntax-only -> output filename specified twice +// specs are hard |