static unsigned get_cparser_entity_alignment(const entity_t *entity)
{
switch(entity->kind) {
- DECLARATION_KIND_CASES
+ case DECLARATION_KIND_CASES:
return entity->declaration.alignment;
case ENTITY_STRUCT:
case ENTITY_UNION:
#endif
switch (expression->kind) {
- EXPR_LITERAL_CASES
+ case EXPR_LITERAL_CASES:
return literal_to_firm(&expression->literal);
case EXPR_STRING_LITERAL:
return string_to_firm(&expression->base.source_position, "str.%u",
return reference_expression_enum_value_to_firm(&expression->reference);
case EXPR_CALL:
return call_expression_to_firm(&expression->call);
- EXPR_UNARY_CASES
+ case EXPR_UNARY_CASES:
return unary_expression_to_firm(&expression->unary);
- EXPR_BINARY_CASES
+ case EXPR_BINARY_CASES:
return binary_expression_to_firm(&expression->binary);
case EXPR_ARRAY_ACCESS:
return array_access_to_firm(&expression->array_access);
statement_to_firm(statement->statement);
}
+static void computed_goto_to_firm(computed_goto_statement_t const *const statement)
+{
+ if (!currently_reachable())
+ return;
+
+ ir_node *const irn = expression_to_firm(statement->expression);
+ dbg_info *const dbgi = get_dbg_info(&statement->base.source_position);
+ ir_node *const ijmp = new_d_IJmp(dbgi, irn);
+
+ set_irn_link(ijmp, ijmp_list);
+ ijmp_list = ijmp;
+
+ set_unreachable_now();
+}
+
static void goto_to_firm(const goto_statement_t *statement)
{
if (!currently_reachable())
return;
- if (statement->expression) {
- ir_node *irn = expression_to_firm(statement->expression);
- dbg_info *dbgi = get_dbg_info(&statement->base.source_position);
- ir_node *ijmp = new_d_IJmp(dbgi, irn);
+ ir_node *block = get_label_block(statement->label);
+ ir_node *jmp = new_Jmp();
+ add_immBlock_pred(block, jmp);
- set_irn_link(ijmp, ijmp_list);
- ijmp_list = ijmp;
- } else {
- ir_node *block = get_label_block(statement->label);
- ir_node *jmp = new_Jmp();
- add_immBlock_pred(block, jmp);
- }
set_unreachable_now();
}
case STATEMENT_LABEL:
label_to_firm(&statement->label);
return;
+ case STATEMENT_COMPUTED_GOTO:
+ computed_goto_to_firm(&statement->computed_goto);
+ return;
case STATEMENT_GOTO:
goto_to_firm(&statement->gotos);
return;