------- Comment #2 from rguenth at gcc dot gnu dot org 2005-10-19 09:45 ------- Ho humm, we had this before. invert_truthvalue is supposed to be called with sth that passes the truth_value_p check...
But the real problem is the COND_EXPR has wrong types: <cond_expr 0x4019b140 type <boolean_type 0x4019f4ac bool public unsigned QI size <integer_cst 0x4018d1f8 constant invariant 8> unit size <integer_cst 0x4018d210 constant invariant 1> align 8 symtab 0 alias set -1 precision 1 min <integer_cst 0x4018d5e8 0> max <integer_cst 0x4018d618 1>> side-effects arg 0 <eq_expr 0x40195144 type <boolean_type 0x4019f4ac bool> arg 0 <var_decl 0x4019a210 value type <integer_type 0x4019f284 int> used tree_1 tree_2 tree_3 decl_5 SI file t.C line 3 size <integer_cst 0x4018d3f0 constant invariant 32> unit size <integer_cst 0x4018d180 constant invariant 4> align 32 context <function_decl 0x40231e00 foo> initial <integer_cst 0x4018da08 1>> arg 1 <integer_cst 0x4018d9f0 constant invariant 0>> arg 1 <throw_expr 0x4020f3a0 type <void_type 0x4019f8a0 void VOID align 8 symtab 0 alias set -1 pointer_to_this <pointer_type 0x4019f8fc>> side-effects arg 0 <call_expr 0x4019b0f0 type <void_type 0x4019f8a0 void> side-effects arg 0 <addr_expr 0x4020f380 type <pointer_type 0x402328fc> constant invariant arg 0 <function_decl 0x40231e80 __cxa_rethrow>>>> arg 2 <integer_cst 0x4018d618 type <boolean_type 0x4019f4ac bool> constant invariant 1>> it pretends to have boolean_type, but the first operand is of void_type! I don't think we want to "fix" invert_truthvalue here, but rather the C++ frontend generating this crap tree node. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24439