~/trunk-install/bin/g++ -O3 -fwhopr a.ii b.ii -r -nostdlib
leads to
<function_decl 0x7ffff71d6800
_Z20POVMS_AssertFunctioniPKcS0_i.part.0.2033.constprop.2
type <function_type 0x7ffff71d83f0
type <integer_type 0x7ffff7ed8498 public SI
size <integer_cst 0x7ffff7ec7708 constant 32>
unit size <integer_cst 0x7ffff7ec7410 constant 4>
align 32 symtab 0 alias set -1 canonical type 0x7ffff7ed8498
precision 32 min <integer_cst 0x7ffff7ec7690 -2147483648> max <integer_cst
0x7ffff7ec76b8 2147483647>
pointer_to_this <pointer_type 0x7ffff7ee53f0>>
QI
size <integer_cst 0x7ffff7ec74d8 constant 8>
unit size <integer_cst 0x7ffff7ec7500 constant 1>
align 8 symtab 0 alias set -1 canonical type 0x7ffff71d83f0
arg-types <tree_list 0x7ffff71d9118 value <pointer_type 0x7ffff71d82a0>
chain <tree_list 0x7ffff71d9140 value <integer_type 0x7ffff7ed8498>
chain <tree_list 0x7ffff7ec7fa0 value <void_type
0x7ffff7ed8d20>>>>>
addressable used nothrow static external QI file b.ii line 39 col 11 align
8 abstract_origin <function_decl 0x7ffff71d6700 POVMS_AssertFunction>
arguments <parm_decl 0x7ffff7eceaa0 str
type <pointer_type 0x7ffff71d82a0 type <integer_type 0x7ffff71d8000
char>
unsigned DI
size <integer_cst 0x7ffff7ec77d0 constant 64>
unit size <integer_cst 0x7ffff7ec77f8 constant 8>
align 64 symtab 0 alias set -1 canonical type 0x7ffff71d82a0>
used unsigned DI file b.ii line 39 col 54 size <integer_cst
0x7ffff7ec77d0 64> unit size <integer_cst 0x7ffff7ec77f8 8>
align 64 context <function_decl 0x7ffff71d6600
_Z20POVMS_AssertFunctioniPKcS0_i.part.0> abstract_origin <parm_decl
0x7ffff7ece908 str> arg-type <pointer_type 0x7ffff71d82a0>
chain <parm_decl 0x7ffff7eceb28 filename type <pointer_type
0x7ffff71d82a0>
used unsigned DI file b.ii line 39 col 71 size <integer_cst
0x7ffff7ec77d0 64> unit size <integer_cst 0x7ffff7ec77f8 8>
align 64 context <function_decl 0x7ffff71d6600
_Z20POVMS_AssertFunctioniPKcS0_i.part.0> abstract_origin <parm_decl
0x7ffff7ece990 filename> arg-type <pointer_type 0x7ffff71d82a0> chain
<parm_decl 0x7ffff7ecebb0 line>>>
result <result_decl 0x7ffff7ed0380 D.2026 type <integer_type
0x7ffff7ed8498>
used ignored SI file b.ii line 39 col 89 size <integer_cst
0x7ffff7ec7708 32> unit size <integer_cst 0x7ffff7ec7410 4>
align 32 context <function_decl 0x7ffff71d6600
_Z20POVMS_AssertFunctioniPKcS0_i.part.0> abstract_origin <result_decl
0x7ffff7ed0300 D.2022>>>
Instead of: <function_decl 0x7ffff71d6600
_Z20POVMS_AssertFunctioniPKcS0_i.part.0
type <function_type 0x7ffff71d81f8
type <integer_type 0x7ffff7ed8498 public SI
size <integer_cst 0x7ffff7ec7708 constant 32>
unit size <integer_cst 0x7ffff7ec7410 constant 4>
align 32 symtab 0 alias set -1 canonical type 0x7ffff7ed8498
precision 32 min <integer_cst 0x7ffff7ec7690 -2147483648> max <integer_cst
0x7ffff7ec76b8 2147483647>
pointer_to_this <pointer_type 0x7ffff7ee53f0>>
QI
size <integer_cst 0x7ffff7ec74d8 constant 8>
unit size <integer_cst 0x7ffff7ec7500 constant 1>
align 8 symtab 0 alias set -1 canonical type 0x7ffff71d81f8
arg-types <tree_list 0x7ffff71cfe38 value <pointer_type 0x7ffff71d82a0>
chain <tree_list 0x7ffff71cfe60 value <pointer_type 0x7ffff71d82a0>
chain <tree_list 0x7ffff71cfe88 value <integer_type
0x7ffff7ed8498>
chain <tree_list 0x7ffff7ec7fa0 value <void_type
0x7ffff7ed8d20>>>>>
pointer_to_this <pointer_type 0x7ffff71dfa80>>
addressable used static QI file b.ii line 39 col 11 align 8 initial <block
0x7ffff71f6478> abstract_origin <function_decl 0x7ffff71d6700
POVMS_AssertFunction>
arguments <parm_decl 0x7ffff7eceaa0 str
type <pointer_type 0x7ffff71d82a0 type <integer_type 0x7ffff71d8000
char>
unsigned DI
size <integer_cst 0x7ffff7ec77d0 constant 64>
unit size <integer_cst 0x7ffff7ec77f8 constant 8>
align 64 symtab 0 alias set -1 canonical type 0x7ffff71d82a0>
used unsigned DI file b.ii line 39 col 54 size <integer_cst
0x7ffff7ec77d0 64> unit size <integer_cst 0x7ffff7ec77f8 8>
align 64 context <function_decl 0x7ffff71d6600
_Z20POVMS_AssertFunctioniPKcS0_i.part.0> abstract_origin <parm_decl
0x7ffff7ece908 str> arg-type <pointer_type 0x7ffff71d82a0>
chain <parm_decl 0x7ffff7eceb28 filename type <pointer_type
0x7ffff71d82a0>
used unsigned DI file b.ii line 39 col 71 size <integer_cst
0x7ffff7ec77d0 64> unit size <integer_cst 0x7ffff7ec77f8 8>
align 64 context <function_decl 0x7ffff71d6600
_Z20POVMS_AssertFunctioniPKcS0_i.part.0> abstract_origin <parm_decl
0x7ffff7ece990 filename> arg-type <pointer_type 0x7ffff71d82a0> chain
<parm_decl 0x7ffff7ecebb0 line>>>
result <result_decl 0x7ffff7ed0380 D.2026 type <integer_type
0x7ffff7ed8498>
used ignored SI file b.ii line 39 col 89 size <integer_cst
0x7ffff7ec7708 32> unit size <integer_cst 0x7ffff7ec7410 4>
align 32 context <function_decl 0x7ffff71d6600
_Z20POVMS_AssertFunctioniPKcS0_i.part.0> abstract_origin <result_decl
0x7ffff7ed0300 D.2022>>
struct-function 0x7ffff71dbb48>
_Z20POVMS_AssertFunctioniPKcS0_i.constprop.0/10(-1) @0x7ffff71e2d70 (asm:
_Z20POVMS_AssertFunctioniPKcS0_i.constprop.0.2043) (inline copy in
POVMSObject_Copy/7) (clone of _Z20POVMS_AssertFunctioniPKcS0_i.constprop.0/14)
availability:local analyzed 7 time, 15 benefit 7 size, 6 benefit reachable body
local finalized inlinable
called by: _Z16POVMSObject_CopyP9POVMSDataS0_.part.2/8 (0.01 per call)
(inlined) (can throw external)
calls: _Z20POVMS_AssertFunctioniPKcS0_i.part.0.2033.constprop.2/1 (0.00 per
call) (nested in 2 loops)
References:
Refering this function:
--
Summary: ICE at lto1: error: edge points to wrong declaration
while compiling povray
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: lto
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hubicka at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45679