[Bug c++/59632] New: ICE with erroneous loop condition after #pragma GCC ivdep
reichelt at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Dec 30 14:19:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59632
Bug ID: 59632
Summary: ICE with erroneous loop condition after #pragma GCC
ivdep
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: reichelt at gcc dot gnu.org
The following invalid code snippet triggers an ICE on trunk:
==============================================================
void foo()
{
#pragma GCC ivdep
while(foo()) {}
}
==============================================================
bug.cc: In function 'void foo()':
bug.cc:4:13: error: could not convert 'foo()' from 'void' to 'bool'
while(foo()) {}
^
bug.cc:1:6: internal compiler error: tree check: expected class 'type', have
'exceptional' (error_mark) in fold_comparison, at fold-const.c:9316
void foo()
^
0xd8f855 tree_class_check_failed(tree_node const*, tree_code_class, char
const*, int, char const*)
../../gcc/gcc/tree.c:9243
0x93ef66 tree_class_check
../../gcc/gcc/tree.h:2830
0x93ef66 fold_comparison
../../gcc/gcc/fold-const.c:9316
0x941e1b fold_binary_loc(unsigned int, tree_code, tree_node*, tree_node*,
tree_node*)
../../gcc/gcc/fold-const.c:12953
0x96309a fold_build2_stat_loc(unsigned int, tree_code, tree_node*, tree_node*,
tree_node*)
../../gcc/gcc/fold-const.c:15194
0x93f64d fold_binary_loc(unsigned int, tree_code, tree_node*, tree_node*,
tree_node*)
../../gcc/gcc/fold-const.c:10181
0xba0e8c fold_cond_expr_cond()
../../gcc/gcc/tree-cfg.c:650
0xba996e make_edges
../../gcc/gcc/tree-cfg.c:780
0xba996e build_gimple_cfg
../../gcc/gcc/tree-cfg.c:260
0xba996e execute_build_cfg
../../gcc/gcc/tree-cfg.c:336
0xba996e execute
../../gcc/gcc/tree-cfg.c:374
Please submit a full bug report, [etc.]
Tobias, this appeared right after your patch
2013-10-30 Tobias Burnus <burnus@net-b.de>
PR other/33426
* cp-tree.h (RANGE_FOR_IVDEP): Define.
(cp_convert_range_for, finish_while_stmt_cond, finish_do_stmt,
finish_for_cond): Take 'bool ivdep' parameter.
* cp-array-notation.c (create_an_loop): Update call.
* init.c (build_vec_init): Ditto.
* pt.c (tsubst_expr): Ditto.
* parser.c (cp_parser_iteration_statement, cp_parser_for,
cp_parser_range_for, cp_convert_range_for): Update calls.
(cp_parser_pragma): Accept GCC ivdep for 'while' and 'do'.
* semantics.c (finish_while_stmt_cond, finish_do_stmt,
finish_for_cond): Optionally build ivdep annotation.
Would you mind having a look?
More information about the Gcc-bugs
mailing list