aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2021-01-15 08:48:54 -0800
committerNathan Sidwell <nathan@acm.org>2021-01-15 08:56:20 -0800
commit492b90f33dfb37576dc7ae424d67b2be8b959bf2 (patch)
tree4b1e530bbf268ab2ac27b844ea2a9f738fea35a1 /gcc
parent5a783f42d77b2f00a1ed171c119b020e8df8e521 (diff)
downloadgcc-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.h40
-rw-r--r--gcc/testsuite/g++.dg/modules/pr98591.H3
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