compare_expression
comparison = compare_expression(offset, SPECIAL_GTE, array_size_value);
success = compare_expression(expr->left, SPECIAL_EQUAL, expr->right);
if (!assume(compare_expression(expr, separate_zero ? '>' : SPECIAL_GTE, zero_expr())))
undo = assume(compare_expression(expr, SPECIAL_EQUAL, zero_expr()));
undo = assume(compare_expression(expr, '<', zero_expr()));
struct expression *compare_expression(struct expression *left, int op, struct expression *right);
comparison = compare_expression(left, op, value);