http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54824
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
CC| |hubicka at gcc dot gnu.org
AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org
|gnu.org |
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> 2012-10-12
11:03:55 UTC ---
The issue is how we handle the case of "vanishing" noreturn,
either via LTO symbol merging or via inlining. We end up with
if (_12 == 0)
goto <bb 9>;
else
goto <bb 10>;
;; succ: 9
;; 10
;; basic block 9, loop depth 0
;; Invalid sum of incoming frequencies 214, should be 430
;; pred: 8
;; 6
;; succ:
that is a basic-block without a successor.
Code isn't really prepared to do sth sensible with this and we will end up
generating weird code that falls through to wahtever basic-block happens
to be next.
We have code to deal with noreturn appearing out of nowhere, but not
the other way around.
I'll try to plug the hole somewhere. Honza, any good idea?