------- Comment #7 from jakub at gcc dot gnu dot org 2008-08-11 18:38 ------- I think the options are: 1) handle TRUTH_{AND,OR}IF_EXPR in expand_expr again (revert part of Paolo's 2004-08-09 expr.c "dead" code removals) - while these aren't present in GIMPLE nor can be created by TER, they can be created by folding during expansion. Maybe even COMPOUND_EXPR could be handled there and all the ugly hacks builtins.c does to work around this could be removed. 2) have a special flag for fold-const.c, set during expansion, that would preclude certain kinds of folding (e.g. creation of the trees that aren't handled by the expander) 3) have expand's special versions of the various fold* routines, look for the unhandled trees in what it creates and either fail to fold them, or transform to something else.
IMHO 1) would be probably easiest to implement, 3) too ugly to live, 2) possible. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37014