From 492b90f33dfb37576dc7ae424d67b2be8b959bf2 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Fri, 15 Jan 2021 08:48:54 -0800 Subject: [PATCH] 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. --- gcc/cp/lang-specs.h | 40 ++++++++++++++++---------- gcc/testsuite/g++.dg/modules/pr98591.H | 3 ++ 2 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 gcc/testsuite/g++.dg/modules/pr98591.H diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h index f16279142be..8902ae1d2ed 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 00000000000..ad397de2ecb --- /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