[Bug c++/37146] [4.4 Regression] Invalid types with COND_EXPR
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Aug 18 12:17:00 GMT 2008
------- Comment #1 from rguenth at gcc dot gnu dot org 2008-08-18 12:16 -------
confirmed.
#0 0x0000000000bca7e9 in bitmap_insert_into_set_1 (set=0x0, expr=0x1621e58,
allow_constants=0 '\0')
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:640
#1 0x0000000000bca82d in bitmap_insert_into_set (set=0x0, expr=0x1621e58)
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:650
#2 0x0000000000bcb036 in bitmap_value_replace_in_set (set=0x0, expr=0x1621e58)
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:846
#3 0x0000000000bd1162 in create_expression_by_pieces (block=0x7ffff7597b40,
expr=0x1621d18, stmts=0x7fffffffd7d8, domstmt=0x7ffff7eb7f50,
type=0x7ffff758f540)
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:2820
#4 0x0000000000bd0c5f in find_or_generate_expression (block=0x7ffff7597b40,
expr=0x1621dd8, stmts=0x7fffffffd7d8, domstmt=0x7ffff7eb7f50)
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:2682
#5 0x0000000000bd0f78 in create_expression_by_pieces (block=0x7ffff7597b40,
expr=0x1621e38, stmts=0x7fffffffd7d8, domstmt=0x7ffff7eb7f50, type=0x0)
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:2777
#6 0x0000000000bd4409 in do_SCCVN_insertion (stmt=0x7ffff7eb7f50,
ssa_vn=0x7ffff759bb60)
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:3761
#7 0x0000000000bd4816 in eliminate ()
at /space/rguenther/src/svn/trunk/gcc/tree-ssa-pre.c:3853
#8 0x0000000000bd5c0a in execute_pre (do_fre=1 '\001')
3848 tree val = VN_INFO (lhs)->valnum;
3849 if (val != VN_TOP
3850 && TREE_CODE (val) == SSA_NAME
3851 && VN_INFO (val)->needs_insertion
3852 && can_PRE_operation (vn_get_expr_for (val)))
3853 sprime = do_SCCVN_insertion (stmt, val);
3854 }
3855 if (sprime
3856 && sprime != lhs
3857 && (rhs == NULL_TREE
(gdb) call VN_INFO (val)
$1 = (struct vn_ssa_aux *) 0x1604aa0
(gdb) print *$1
$2 = {valnum = 0x7ffff759bb60, expr = 0x7ffff7599f00, value_id = 10,
dfsnum = 0, low = 0, visited = 0, on_sccstack = 0, has_constants = 0,
use_processed = 0, needs_insertion = 1}
(gdb) call debug_generic_expr (0x7ffff7599f00)
VIEW_CONVERT_EXPR<const unsigned char>(b_8)
b_8 is an enum of precision 32 (and thus not folded to a NOP_EXPR by fold).
But it looks like we miss a conversion and thus have an IL with invalid types
here from the start.
((const struct verteilung_c *) this)->bezug != 0 && ((const struct verteilung_c
*) this)->bezug != 69 ? ((const struct verteilung_c *) this)->bezug : b
<cond_expr 0x7ffff7ec1780
type <enumeral_type 0x7ffff758f540 kostenbezug_e unsigned SI
...
arg 0 <truth_and_expr 0x7ffff75993c0
type <boolean_type 0x7ffff7ebbb40 bool public unsigned QI
...
arg 1 <component_ref 0x7ffff7ec1730
type <integer_type 0x7ffff758fe40 unsigned char readonly public
unsigned string-flag QI size <integer_cst 0x7ffff7eb97b0 8> unit size
<integer_cst 0x7ffff7eb97e0 1>
...
arg 2 <parm_decl 0x7ffff7ec2bd0 b type <enumeral_type 0x7ffff758f540
kostenbezug_e>
...
with
<enumeral_type 0x7ffff758f540 kostenbezug_e unsigned SI
size <integer_cst 0x7ffff7eb9a50 type <integer_type 0x7ffff7ebb240
bit_size_type> constant 32>
which leads to invalid types after gimplification already. 4.3 is not
affected by the ICE.
The type-verifier is basically disabled on the trunk ... :/
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Keywords| |ice-on-valid-code, wrong-
| |code
Known to work| |4.3.2
Last reconfirmed|0000-00-00 00:00:00 |2008-08-18 12:16:21
date| |
Summary|ICE - Compiler segfaults |[4.4 Regression] Invalid
| |types with COND_EXPR
Target Milestone|--- |4.4.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37146
More information about the Gcc-bugs
mailing list