aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2023-05-19 06:12:49 +0000
committerAndrew Pinski <apinski@marvell.com>2023-05-19 17:58:54 +0000
commitcddb6dd6668843db351807ab8d2ff7440109f39a (patch)
tree26805d16e4dbb312eb9b1c1297f0c65b9d20929d /gcc
parentc104ef4b5eb1f781bbef953e3c282ef1ca94c4f1 (diff)
downloadgcc-cddb6dd6668843db351807ab8d2ff7440109f39a.zip
gcc-cddb6dd6668843db351807ab8d2ff7440109f39a.tar.gz
gcc-cddb6dd6668843db351807ab8d2ff7440109f39a.tar.bz2
Fix driver/33980: Precompiled header file not removed on error
So the problem here is that in the spec files, we were not marking the pch output file to be removed on error. The way to fix this is to mark the --output-pch argument as the output file argument. For the C++ specs file, we had to move around where the %V was located such that it would be after the %w marker as %V marker clears the outputfiles. OK? Bootstrapped and tested on x86_64-linux-gnu. gcc/cp/ChangeLog: PR driver/33980 * lang-specs.h ("@c++-header"): Add %w after the --output-pch. ("@c++-system-header"): Likewise. ("@c++-user-header"): Likewise. gcc/ChangeLog: PR driver/33980 * gcc.cc (default_compilers["@c-header"]): Add %w after the --output-pch.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/lang-specs.h12
-rw-r--r--gcc/gcc.cc8
2 files changed, 10 insertions, 10 deletions
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
index c591d15..94bdd4d 100644
--- a/gcc/cp/lang-specs.h
+++ b/gcc/cp/lang-specs.h
@@ -53,9 +53,9 @@ along with GCC; see the file COPYING3. If not see
" %{fmodules-ts:-fmodule-header %{fpreprocessed:-fdirectives-only}}"
" %(cc1_options) %2"
" %{!fsyntax-only:"
- " %{!S:-o %g.s%V}"
+ " %{!S:-o %g.s}"
" %{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:"
- " %{!o*:--output-pch %i.gch}%W{o*:--output-pch %*}}}}}"
+ " %{!o*:--output-pch %w%i.gch}%W{o*:--output-pch %w%*}}}}%{!S:%V}}"
"}}}",
CPLUSPLUS_CPP_SPEC, 0, 0},
{"@c++-system-header",
@@ -74,9 +74,9 @@ along with GCC; see the file COPYING3. If not see
" %{fpreprocessed:-fdirectives-only}}"
" %(cc1_options) %2"
" %{!fsyntax-only:"
- " %{!S:-o %g.s%V}"
+ " %{!S:-o %g.s}"
" %{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:"
- " %{!o*:--output-pch %i.gch}%W{o*:--output-pch %*}}}}}"
+ " %{!o*:--output-pch %w%i.gch}%W{o*:--output-pch %w%*}}}}%{!S:%V}}"
"}}}",
CPLUSPLUS_CPP_SPEC, 0, 0},
{"@c++-user-header",
@@ -94,9 +94,9 @@ along with GCC; see the file COPYING3. If not see
" %{fmodules-ts:-fmodule-header=user %{fpreprocessed:-fdirectives-only}}"
" %(cc1_options) %2"
" %{!fsyntax-only:"
- " %{!S:-o %g.s%V}"
+ " %{!S:-o %g.s}"
" %{!fmodule-*:%{!fmodules-*:%{!fdump-ada-spec*:"
- " %{!o*:--output-pch %i.gch}%W{o*:--output-pch %*}}}}}"
+ " %{!o*:--output-pch %w%i.gch}%W{o*:--output-pch %w%*}}}}%{!S:%V}}"
"}}}",
CPLUSPLUS_CPP_SPEC, 0, 0},
{"@c++",
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 39a44fa..2ccca00 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -1454,13 +1454,13 @@ static const struct compiler default_compilers[] =
cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \
%(cc1_options)\
%{!fsyntax-only:%{!S:-o %g.s} \
- %{!fdump-ada-spec*:%{!o*:--output-pch %i.gch}\
- %W{o*:--output-pch %*}}%V}}\
+ %{!fdump-ada-spec*:%{!o*:--output-pch %w%i.gch}\
+ %W{o*:--output-pch %w%*}}%{!S:%V}}}\
%{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\
cc1 %(cpp_unique_options) %(cc1_options)\
%{!fsyntax-only:%{!S:-o %g.s} \
- %{!fdump-ada-spec*:%{!o*:--output-pch %i.gch}\
- %W{o*:--output-pch %*}}%V}}}}}}}", 0, 0, 0},
+ %{!fdump-ada-spec*:%{!o*:--output-pch %w%i.gch}\
+ %W{o*:--output-pch %w%*}}%{!S:%V}}}}}}}}", 0, 0, 0},
{".i", "@cpp-output", 0, 0, 0},
{"@cpp-output",
"%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 0, 0},