This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/28915] [4.2 regression] ICE: tree check: expected class 'constant', have 'declaration' (var_decl) in build_vector, at tree.c:973
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 6 Sep 2006 06:33:24 -0000
- Subject: [Bug middle-end/28915] [4.2 regression] ICE: tree check: expected class 'constant', have 'declaration' (var_decl) in build_vector, at tree.c:973
- References: <bug-28915-12387@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #10 from pinskia at gcc dot gnu dot org 2006-09-06 06:33 -------
Note I think the PPC-linux-gnu crash is actually caused by:
2006-06-20 Roger Sayle <roger@eyesopen.com>
* expr.c (expand_expr_real_1) <VECTOR_CST>: For vector constants with
integer modes, attempt to directly construct an integer constant.
But I have not checked but the backtrace is:
(gdb)
#8 0x085cda79 in copy_constant (exp=0xb7d40cd8) at ../../gcc/varasm.c:2742
2742 ce->value = copy_constant (value);
(gdb)
#9 0x085ce18b in build_constant_desc (exp=0xb7d40cd8)
at ../../gcc/varasm.c:2815
2815 desc->value = copy_constant (exp);
(gdb)
#10 0x085ce4be in output_constant_def (exp=0xb7d40cd8, defer=1)
at ../../gcc/varasm.c:2885
2885 desc = build_constant_desc (exp);
(gdb)
#11 0x0834d3f4 in expand_expr_constant (exp=0xb7d40cd8, defer=1,
modifier=EXPAND_NORMAL) at ../../gcc/expr.c:6433
6433 mem = output_constant_def (exp, defer);
(gdb) up
#12 0x0835084f in expand_expr_real_1 (exp=0xb7d40cd8, target=0xb7d2b954,
tmode=V4SImode, modifier=EXPAND_NORMAL, alt_rtl=0xbf977bf8)
at ../../gcc/expr.c:7119
7119 rtx constructor = expand_expr_constant (exp, 1, modifier);
(gdb)
#13 0x0834df9d in expand_expr_real (exp=0xb7d40cd8, target=0xb7d2b954,
tmode=V4SImode, modifier=EXPAND_NORMAL, alt_rtl=0xbf977bf8)
at ../../gcc/expr.c:6706
6706 ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl);
(gdb)
#14 0x08340493 in store_expr (exp=0xb7d40cd8, target=0xb7d2b954,
call_param_p=0)
at ../../gcc/expr.c:4370
4370 temp = expand_expr_real (exp, target, GET_MODE (target),
(gdb)
#15 0x0833f7dc in expand_assignment (to=0xb7d37660, from=0xb7d40cd8)
at ../../gcc/expr.c:4249
4249 result = store_expr (from, to_rtx, 0);
(gdb)
And then we go into an infinite loop calling copy_constant on a decl.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |sayle at gcc dot gnu dot org
GCC target triplet|x86-64-linux |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28915