This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/44777] [4.4/4.5/4.6/4.7 Regression] ICE: SIGSEGV with -fprofile-use in gcc.c-torture/execute/comp-goto-2.c


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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #26239|0                           |1
        is obsolete|                            |

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-01-04 19:41:17 UTC ---
Created attachment 26242
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26242
gcc47-pr44777.patch

Unfortunately that patch regressed tree-prof/pr34999.c on i?86.  The bb's of
__builtin_setjmp_receiver (and __builtin_setjmp_dispatcher) contain abnormal
incoming and outgoing edges, therefore with the patch we want to split them,
which apparently is nothing the __builtin_setjmp_* expansion is prepared for.
In particular the code was first "optimized" so that the 64-bit counters are in
some places shadowed in local stack slots, but accessing those slots using %ebp
before the blockage from __builtin_setjmp_receiver means %ebp contains some bad
value rather than the correct one that __builtin_setjmp_receiver computes.
So, either we don't split bbs starting with these two builtins as done in this
new version of the patch, or perhaps we should just ignore some of the edges
between the 3 __builtin_setjmp_* builtins altogether for profiling purposes.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]