[Bug c++/29209] ICE optimizing passing long double to abstract method while in other abstract's impl
------- Comment #8 from dave at hiauly1 dot hia dot nrc dot ca 2007-02-04 01:50 -------
Subject: Re: ICE optimizing passing long double to abstract method while in
other abstract's impl
> > ------- Comment #5 from tbm at cyrius dot com 2007-02-03 09:45 -------
> > I don't see this with Linux on HPPA hardware. Steve Ellcey, can you try on
> > HPUX please?
>
> I can no longer duplicate this using 4.1.1 (I recently rebuilt it
> with an updated version of gmp/mpfr). Trunk also doesn't ICE.
Ignore the above. Whether or not an ICE occurs depends to some extent
on checking being enabled. With checking enabled, I see this on 4.1
and the trunk.
The ICE is here:
result = expand_expr (exp, target, tmode,
modifier == EXPAND_INITIALIZER
? EXPAND_INITIALIZER : EXPAND_CONST_ADDRESS);
/* If the DECL isn't in memory, then the DECL wasn't properly
marked TREE_ADDRESSABLE, which will be either a front-end
or a tree optimizer bug. */
gcc_assert (MEM_P (result));
This is "result":
(gdb) p debug_rtx ($ret0)
(reg/v:TF 96 [ value ])
(gdb) p debug_tree (exp)
<parm_decl 7adede10 value
type <real_type 7adf2b40 long double TF
size <integer_cst 7ade1540 constant invariant 128>
unit size <integer_cst 7ade1558 constant invariant 16>
align 64 symtab 0 alias set 18 precision 128
pointer_to_this <pointer_type 7adf2c60>>
addressable used TF file pr29209.cc line 19 size <integer_cst 7ade1540 128>
unit size <integer_cst 7ade1558 16>
align 64 context <function_decl 7ae66380
_ZTv0_n12_N21DataOutputStream_impl16write_longdoubleEe> initial <real_type
7adf2b40 long double>
(reg/v:TF 96 [ value ]) arg-type <real_type 7adf2b40 long double>
incoming-rtl (reg:SI 25 %r25 [ value ])>
(gdb) bt
#0 expand_expr_addr_expr_1 (exp=0x7adede10, target=0x0, tmode=SImode,
modifier=EXPAND_NORMAL) at ../../gcc/gcc/expr.c:6336
#1 0x0018c9a8 in expand_expr_real_1 (exp=0x7ae65f40, target=0x0,
tmode=SImode, modifier=EXPAND_NORMAL, alt_rtl=0x0)
at ../../gcc/gcc/expr.c:6423
#2 0x00190c2c in expand_expr_real (exp=0x7ae65f40, target=0x0,
tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0)
at ../../gcc/gcc/expr.c:6536
#3 0x001539bc in expand_call (exp=0x7adef7a8, target=0x0, ignore=1)
at ../../gcc/gcc/expr.h:493
#4 0x0018dd74 in expand_expr_real_1 (exp=0x7adef7a8, target=0x7ade5210,
tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0)
at ../../gcc/gcc/expr.c:7493
#5 0x00190b3c in expand_expr_real (exp=0x7adef7a8, target=0x0,
tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0)
at ../../gcc/gcc/expr.c:6530
#6 0x001ff1ac in expand_expr_stmt (exp=0x7adef7a8)
at ../../gcc/gcc/stmt.c:1357
#7 0x0039b720 in expand_gimple_basic_block (bb=0x7ae94000, dump_file=0xc)
at ../../gcc/gcc/cfgexpand.c:1188
#8 0x0039c840 in tree_expand_cfg () at ../../gcc/gcc/cfgexpand.c:1626
#9 0x00227460 in execute_one_pass (pass=0x40014e28)
at ../../gcc/gcc/passes.c:827
...
In frame 1, exp looks like this:
(gdb) p debug_tree (exp)
<addr_expr 7ae65f40
type <pointer_type 7adf2c60
type <real_type 7adf2b40 long double TF
size <integer_cst 7ade1540 constant invariant 128>
unit size <integer_cst 7ade1558 constant invariant 16>
align 64 symtab 0 alias set 18 precision 128
pointer_to_this <pointer_type 7adf2c60>>
unsigned SI
size <integer_cst 7ade12d0 constant invariant 32>
unit size <integer_cst 7ade1060 constant invariant 4>
align 32 symtab 0 alias set -1>
invariant
arg 0 <parm_decl 7adede10 value type <real_type 7adf2b40 long double>
addressable used TF file pr29209.cc line 19 size <integer_cst 7ade1540
128> unit size <integer_cst 7ade1558 16>
align 64 context <function_decl 7ae66380
_ZTv0_n12_N21DataOutputStream_impl16write_longdoubleEe> initial <real_type
7adf2b40 long double>
(reg/v:TF 96 [ value ]) arg-type <real_type 7adf2b40 long double>
incoming-rtl (reg:SI 25 %r25 [ value ])>>
The ICE occurs in the expand pass.
Dave
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29209
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
Reply to: