In fold_binary() we are asserting:

  gcc_assert (IS_EXPR_CODE_CLASS (kind)
              && TREE_CODE_LENGTH (code) == 2
              && op0 != NULL_TREE
              && op1 != NULL_TREE);

I am having problems with this because it's causing failures for perfectly 
valid IL.  With the new OpenMP IL, we have statements that have optional 
operands.  In particular, things like

DEFTREECODE (OMP_SINGLE, "omp_single", tcc_statement, 2)

The second argument of OMP_SINGLE is an optional list of clauses.  When we 
call fold() with a clause-less OMP_SINGLE, the logic takes the expression 
to fold_binary() where we end up ICEing because 'op1' is NULL.

I understand that it's easier for fold_binary() to never have to worry 
about NULL operands, but in this case the IL is properly formed with a 
NULL operand.  Should we set that operand to NOP_EXPR to pacify fold()?  
Or is it better to have fold() ignore NULL operands?


Thanks.

Reply via email to