public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [pph] Do not emit PCH if generating PPH (issue4591061)
@ 2011-06-09 18:55 Diego Novillo
  2011-06-10 15:53 ` Diego Novillo
  0 siblings, 1 reply; 2+ messages in thread
From: Diego Novillo @ 2011-06-09 18:55 UTC (permalink / raw)
  To: reply, gchare, crowl, gcc-patches


We were trying to generate PCH and PPH information at the same time.
We never noticed because PPH is generated after PCH, so we were just
clobbering over the previous dump.

Found it by accident while debugging a GC ICE.  This should make
testing slightly faster.

Committed to the branch.



	* lang-specs.h (@c++-header): Do not emit PCH if any -fpph flag is
	present.

diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
index a73aba3..9943446 100644
--- a/gcc/cp/lang-specs.h
+++ b/gcc/cp/lang-specs.h
@@ -48,8 +48,8 @@ along with GCC; see the file COPYING3.  If not see
       cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
 	      %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
 	%(cc1_options) %2\
-	%{!fsyntax-only:%{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
-        %W{o*:--output-pch=%*}}%V}}}}",
+	%{!fsyntax-only:%{!fpph*:%{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
+        %W{o*:--output-pch=%*}}}%V}}}}",
      CPLUSPLUS_CPP_SPEC, 0, 0},
   {"@c++",
     "%{E|M|MM:cc1plus -E %(cpp_options) %2 %(cpp_debug_options)}\

--
This patch is available for review at http://codereview.appspot.com/4591061

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [pph] Do not emit PCH if generating PPH (issue4591061)
  2011-06-09 18:55 [pph] Do not emit PCH if generating PPH (issue4591061) Diego Novillo
@ 2011-06-10 15:53 ` Diego Novillo
  0 siblings, 0 replies; 2+ messages in thread
From: Diego Novillo @ 2011-06-10 15:53 UTC (permalink / raw)
  To: reply, Gabriel Charette, Lawrence Crowl, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1020 bytes --]

On Thu, Jun 9, 2011 at 11:49, Diego Novillo <dnovillo@google.com> wrote:
>
> We were trying to generate PCH and PPH information at the same time.
> We never noticed because PPH is generated after PCH, so we were just
> clobbering over the previous dump.
>
> Found it by accident while debugging a GC ICE.  This should make
> testing slightly faster.
>
> Committed to the branch.

This version had problems and it was still abusing the PCH options
from specs.  The problem is that when compiling header files
separately, the compiler assumes that we want to generate PCH files.

In the long term, I think we will want to replace PCH with PPH, but
until then I'm adding a new flag -fpph-gen to distinguish the PCH from
the PPH generation.  So, when compiling a header file, if you want a
PPH image, you need to:

$ gcc -fpph-gen foo.h

This generate foo.pph instead of foo.gch.

The new patch also adds documentation on the three user-facing flags
used for pph.

Tested on x86_64.


Diego.

[-- Attachment #2: issue4591061_3001.diff.txt --]
[-- Type: text/plain, Size: 5976 bytes --]

Index: gcc/c-family/c-opts.c
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index e52583e..8fe566e 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -368,13 +368,11 @@ c_common_handle_option (size_t scode, const char *arg, int value,
       break;
 
     case OPT__output_pch_:
-      {
-        char *dot = strrchr (arg, '.');
-        if (dot != NULL && strcmp (dot, ".pph") == 0)
-          pph_out_file = arg;
-        else
-          pch_file = arg;
-      }
+      pch_file = arg;
+      break;
+
+    case OPT__output_pph_:
+      pph_out_file = arg;
       break;
 
     case OPT_A:
Index: gcc/c-family/c.opt
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 67708b8..bdc0fc9 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -139,6 +139,9 @@ C ObjC C++ ObjC++ Joined Alias(o)
 -output-pch=
 C ObjC C++ ObjC++ Joined Separate
 
+-output-pph=
+C++ Joined Separate
+
 -pedantic
 C ObjC C++ ObjC++ Alias(pedantic)
 
@@ -933,8 +936,12 @@ fpph-dump-tree
 C++ Var(flag_pph_dump_tree)
 -fpph-dump-tree	Dump global namespace tree around PPH reads/writes.
 
+fpph-gen
+C++
+-fpph-gen	Generate a PPH image from the input file
+
 fpph-hdr=
-C++ ObjC++ Joined MissingArgError(missing filename after %qs)
+C++ Joined MissingArgError(missing filename after %qs)
 -fpph-hdr=<base-name>   A mapping from <base-name>.h to <base-name>.pph
 
 fpph-logfile=
@@ -942,7 +949,7 @@ C++ Joined RejectNegative Var(flag_pph_logfile)
 -fpph-logfile=<file-name>	Emit PPH debug information to <file-name>
 
 fpph-map=
-C++ ObjC++ Joined MissingArgError(missing filename after %qs)
+C++ Joined MissingArgError(missing filename after %qs)
 -fpph-map=<file-name>   A file of mappings from #include to PPH file
 
 fpph-tracer=
Index: gcc/cp/lang-specs.h
diff --git a/gcc/cp/lang-specs.h b/gcc/cp/lang-specs.h
index a73aba3..ef03a39 100644
--- a/gcc/cp/lang-specs.h
+++ b/gcc/cp/lang-specs.h
@@ -48,8 +48,9 @@ along with GCC; see the file COPYING3.  If not see
       cc1plus %{save-temps*|no-integrated-cpp:-fpreprocessed %{save-temps*:%b.ii} %{!save-temps*:%g.ii}}\
 	      %{!save-temps*:%{!no-integrated-cpp:%(cpp_unique_options)}}\
 	%(cc1_options) %2\
-	%{!fsyntax-only:%{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
-        %W{o*:--output-pch=%*}}%V}}}}",
+	%{!fpph-gen:%{!fsyntax-only:%{!fdump-ada-spec*:-o %g.s %{!o*:--output-pch=%i.gch}\
+	%W{o*:--output-pch=%*}}}} \
+	%{fpph-gen:%{!o*:--output-pph=%b.pph}%W{o*:--output-pph=%*}}%V}}}",
      CPLUSPLUS_CPP_SPEC, 0, 0},
   {"@c++",
     "%{E|M|MM:cc1plus -E %(cpp_options) %2 %(cpp_debug_options)}\
Index: gcc/doc/invoke.texi
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 6207800..524471a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -195,6 +195,7 @@ in the following sections.
 -fno-threadsafe-statics -fuse-cxa-atexit  -fno-weak  -nostdinc++ @gol
 -fno-default-inline  -fvisibility-inlines-hidden @gol
 -fvisibility-ms-compat @gol
+-fpph-hdr -fpph-map -fpph-gen @gol
 -Wabi  -Wconversion-null  -Wctor-dtor-privacy @gol
 -Wnoexcept -Wnon-virtual-dtor  -Wreorder @gol
 -Weffc++  -Wstrict-null-sentinel @gol
@@ -2171,6 +2172,42 @@ option exists only for testing, and should not be used by end-users;
 it will result in inferior code and has no benefits.  This option may
 be removed in a future release of G++.
 
+@item -fpph-gen
+@opindex fpph-gen
+Generate a Pre-Parsed Header (PPH) file instead of a PCH file.  This option
+is only valid when compiling header files separately.  Instead of generating
+a PCH files, G++ will save the parsed declarations in a header file to
+a PPH file.  By default, the PPH image for a header file named @file{foo.h}
+is @file{foo.pph}.
+
+NOTE: This option is temporary.  It is only meant to serve the initial
+implementation of this feature.  The final user interface will likely
+use a different mechanism for PPH.
+
+@item -fpph-map=@var{file.map}
+@opindex fpph-map
+Use PPH mapping file @file{file.map} to determine what headers should be
+processed from their PPH images.  This file contains a list of file name
+pairs in the form ``@var{file.h} @var{file.pph}''.  When the pre-processor
+finds the directive @code{#include "file.h"}, and there exists a mapping
+between @var{file.h} and @var{file.pph} in @file{file.map}, then the
+compiler will instantiate the PPH image @var{file.pph}.  The text
+in @var{file.h} will be ignored.
+
+NOTE: This option is temporary.  It is only meant to serve the initial
+implementation of this feature.  The final user interface will likely
+use a different mechanism for PPH.
+
+@item -fpph-hdr=@var{file.h}
+@opindex fpph-hdr
+This is a short-hand notation to map a single header @file{file.h} to
+its image @file{file.pph}.  Multiple occurrences of this flag will
+introduce multiple mappings.
+
+NOTE: This option is temporary.  It is only meant to serve the initial
+implementation of this feature.  The final user interface will likely
+use a different mechanism for PPH.
+
 @item -nostdinc++
 @opindex nostdinc++
 Do not search for header files in the standard directories specific to
Index: gcc/testsuite/lib/dg-pph.exp
diff --git a/gcc/testsuite/lib/dg-pph.exp b/gcc/testsuite/lib/dg-pph.exp
index 2058959..c773aa0 100644
--- a/gcc/testsuite/lib/dg-pph.exp
+++ b/gcc/testsuite/lib/dg-pph.exp
@@ -33,7 +33,7 @@ proc dg-pph-hdr { subdir test options mapflag suffix } {
     verbose -log "\nTesting $nshort, $options"
 
     set dg-do-what-default preparse
-    dg-test -keep-output $test "$options $mapflag -I." ""
+    dg-test -keep-output $test "-fpph-gen $options $mapflag -I." ""
 
 }
 
@@ -51,7 +51,7 @@ proc dg-pph-neg { subdir test options mapflag suffix } {
     verbose -log "\nTesting $nshort, $options"
 
     set dg-do-what-default compile
-    dg-test -keep-output $test "$options $mapflag -I." ""
+    dg-test -keep-output $test "-fpph-gen $options $mapflag -I." ""
     if { ![file_on_host exists "$bname.s"] } {
 	file_on_host delete "$bname.s"
     }

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-06-10 15:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-09 18:55 [pph] Do not emit PCH if generating PPH (issue4591061) Diego Novillo
2011-06-10 15:53 ` Diego Novillo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).