http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54487

--- Comment #11 from H.J. Lu <hjl.tools at gmail dot com> 2012-09-06 20:06:55 
UTC ---
(In reply to comment #8)
> I think I have a solution for the issue that H.J. is encountering. Details
> below. Markus and H.J., would you be able to try the following patch to see if
> it addresses the failure you were seeing? Markus, were you only seeing 
> failures
> when using a parallel make?
> 
> Index: libgcc/libgcov.c
> ===================================================================
> --- libgcc/libgcov.c    (revision 191035)
> +++ libgcc/libgcov.c    (working copy)
> @@ -707,7 +707,9 @@ gcov_exit (void)
>          memcpy (cs_all, cs_prg, sizeof (*cs_all));
>        else if (!all_prg.checksum
>             && (!GCOV_LOCKED || cs_all->runs == cs_prg->runs)
> -           && memcmp (cs_all, cs_prg, sizeof (*cs_all)))
> +                   && memcmp (cs_all, cs_prg,
> +                              sizeof (*cs_all) - (sizeof (gcov_bucket_type)
> +                                                  * GCOV_HISTOGRAM_SIZE)))
>          {
>            fprintf (stderr, "profiling:%s:Invocation mismatch - some data 
> files
> may have been removed%s\n",
>                 gi_filename, GCOV_LOCKED
> 
> 

I applied it by hand:
diff --git a/libgcc/libgcov.c b/libgcc/libgcov.c
index fce8587..daf95af 100644
--- a/libgcc/libgcov.c
+++ b/libgcc/libgcov.c
@@ -707,7 +707,10 @@ gcov_exit (void)
       memcpy (cs_all, cs_prg, sizeof (*cs_all));
     else if (!all_prg.checksum
         && (!GCOV_LOCKED || cs_all->runs == cs_prg->runs)
-        && memcmp (cs_all, cs_prg, sizeof (*cs_all)))
+        && memcmp (cs_all, cs_prg, sizeof (*cs_all))
+        && memcmp (cs_all, cs_prg,
+              sizeof (*cs_all) - (sizeof (gcov_bucket_type)
+                   * GCOV_HISTOGRAM_SIZE)))
       {
         fprintf (stderr, "profiling:%s:Invocation mismatch - some data files
may have been removed%s\n",
             gi_filename, GCOV_LOCKED

and it still failed for me on Fedora/18 24 core x86-64
with -j 12:

/export/gnu/import/git/gcc/gcc/tree-cfg.c: In function ‘bool
gimple_can_merge_blocks_p(basic_block, basic_block)’:
/export/gnu/import/git/gcc/gcc/tree-cfg.c:7904:1: error: corrupted profile
info: edge from 52 to 53 exceeds maximal count
 }
 ^
/export/gnu/import/git/gcc/gcc/tree-cfg.c:7904:1: error: corrupted profile
info: edge from 54 to 55 exceeds maximal count
/export/gnu/import/git/gcc/gcc/tree-cfg.c:7904:1: error: corrupted profile
info: edge from 55 to 56 exceeds maximal count
/export/gnu/import/git/gcc/gcc/tree-cfg.c:7904:1: error: corrupted profile
info: edge from 56 to 57 exceeds maximal count
/export/gnu/import/git/gcc/gcc/tree-cfg.c:7904:1: internal compiler error: in
cgraph_create_edge_1, at cgraph.c:669
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make[4]: *** [tree-cfg.o] Error 1
make[4]: *** Waiting for unfinished jobs....
rm gcov.pod gcc.pod cpp.pod fsf-funding.pod gfdl.pod
make[4]: Leaving directory `/export/build/gnu/gcc-fdo/build-x86_64-linux/gcc'
make[3]: *** [all-stagefeedback-gcc] Error 2

Reply via email to