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 lto/44150] [4.6 regression] g++.dg/lto/20081109 cp_lto_20081109_0.o-cp_lto_20081109_1.o



------- Comment #2 from jason at gcc dot gnu dot org  2010-05-15 22:49 -------
OK, here's what's going wrong:

The LTO design is such that EH is only enabled if we encounter a function with
an EH personality.

With -fwhopr we process one translation unit at a time, so when we look at
20081109_1.C we only see foo(int).

Before my patch foo(int) contained an ERT_MUST_NOT_THROW region, so we required
the C++ personality function.  After my patch, it contains an ERT_CLEANUP
region instead, which doesn't require the C++ personality function

So cgraph doesn't set DECL_FUNCTION_PERSONALITY, so lto1 doesn't think that foo
needs EH, so it never sets flag_exceptions, so we don't get unwind information,
so the throw can't unwind through foo.

There seem to be two issues here:
1) lto1 incorrectly thinks foo doesn't need EH.
2) -fwhopr means that lto1 can make different decisions about EH for different
translation units, so things blow up when linked together.

With #2 fixed, #1 isn't as big a problem--but it could still be an issue if we
aren't compiling the entire program, i.e. a shared library wants to throw from
a callback.  If anything we call can throw, we need unwind information and
should turn on -fexceptions.


-- 

jason at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|jason at gcc dot gnu dot org|unassigned at gcc dot gnu
                   |                            |dot org
             Status|ASSIGNED                    |NEW
          Component|middle-end                  |lto


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


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