ir_type *firm_type = NULL;
switch (type->kind) {
- case TYPE_ERROR:
- /* Happens while constant folding, when there was an error */
- return create_atomic_type(ATOMIC_TYPE_VOID, NULL);
-
case TYPE_ATOMIC:
firm_type = create_atomic_type(type->atomic.akind, type);
break;
firm_type = create_enum_type(&type->enumt);
break;
+ case TYPE_ERROR:
case TYPE_TYPEOF:
case TYPE_TYPEDEF:
break;
long fold_constant_to_int(const expression_t *expression)
{
- if (expression->kind == EXPR_ERROR)
- return 0;
-
ir_tarval *tv = fold_constant_to_tarval(expression);
if (!tarval_is_long(tv)) {
panic("result of constant folding is not integer");
bool fold_constant_to_bool(const expression_t *expression)
{
- if (expression->kind == EXPR_ERROR)
- return false;
ir_tarval *tv = fold_constant_to_tarval(expression);
return !tarval_is_null(tv);
}
return new_d_SymConst(dbgi, mode_P_code, value, symconst_addr_ent);
}
-static ir_node *error_to_firm(const expression_t *expression)
-{
- ir_mode *mode = get_ir_mode_arithmetic(expression->base.type);
- return new_Bad(mode);
-}
-
/**
* creates firm nodes for an expression. The difference between this function
* and expression_to_firm is, that this version might produce mode_b nodes
return label_address_to_firm(&expression->label_address);
case EXPR_ERROR:
- return error_to_firm(expression);
+ break;
}
panic("invalid expression found");
}