X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ast2firm.c;h=00f74979a55a6f22957aee025dd1ef3eafda3cb1;hb=8f0911cff256ba93829eb2ba502221800bfe4978;hp=47430b5aa5947f21beecb39bd3bf2e3d84965541;hpb=2beaa4f65961fe297663e1cec9e5632b7f3e1cba;p=cparser diff --git a/ast2firm.c b/ast2firm.c index 47430b5..00f7497 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -1192,13 +1192,12 @@ static void create_integer_tarval(literal_expression_t *literal) } } - unsigned char base = 10; - if (literal->base.kind == EXPR_LITERAL_INTEGER_OCTAL) { - base = 8; - } else if (literal->base.kind == EXPR_LITERAL_INTEGER_HEXADECIMAL) { - base = 16; - } else { - assert(literal->base.kind == EXPR_LITERAL_INTEGER); + unsigned base; + switch (literal->base.kind) { + case EXPR_LITERAL_INTEGER_OCTAL: base = 8; break; + case EXPR_LITERAL_INTEGER: base = 10; break; + case EXPR_LITERAL_INTEGER_HEXADECIMAL: base = 16; break; + default: panic("invalid literal kind"); } tarval_int_overflow_mode_t old_mode = tarval_get_integer_overflow_mode(); @@ -1229,7 +1228,7 @@ static void create_integer_tarval(literal_expression_t *literal) assert(us == 1 || base != 10); tarval_set_integer_overflow_mode(TV_OVERFLOW_WRAP); bool res = try_create_integer(literal, type_unsigned_long_long, base); - if (res == false) + if (!res) panic("internal error when parsing number literal"); finished: @@ -1295,7 +1294,7 @@ static ir_node *literal_to_firm(const literal_expression_t *literal) tv = new_tarval_from_str(string, size, mode); goto make_const; case EXPR_LITERAL_FLOATINGPOINT_HEXADECIMAL: { - char *buffer = alloca(size + 2); + char buffer[size + 2]; memcpy(buffer, "0x", 2); memcpy(buffer+2, string, size); tv = new_tarval_from_str(buffer, size+2, mode); @@ -2060,7 +2059,8 @@ static ir_node *call_expression_to_firm(const call_expression_t *const call) * nodes into a new and unreachable block. */ keep_alive(node); keep_alive(get_cur_block()); - new_Block(0, NULL); + ir_node *block = new_Block(0, NULL); + set_cur_block(block); } return result; @@ -2617,7 +2617,8 @@ static ir_node *produce_condition_result(const expression_t *expression, mature_immBlock(zero_block); ir_node *in_cf[2] = { jmp_one, jmp_zero }; - new_Block(2, in_cf); + ir_node *block = new_Block(2, in_cf); + set_cur_block(block); ir_node *in[2] = { one, zero }; ir_node *val = new_d_Phi(dbgi, 2, in, mode); @@ -3168,7 +3169,8 @@ static ir_node *conditional_to_firm(const conditional_expression_t *expression) /* create the common block */ ir_node *in_cf[2] = { true_jmp, false_jmp }; - new_Block(2, in_cf); + ir_node *block = new_Block(2, in_cf); + set_cur_block(block); /* TODO improve static semantics, so either both or no values are NULL */ if (true_val == NULL || false_val == NULL) @@ -5473,7 +5475,7 @@ static void asm_statement_to_firm(const asm_statement_t *statement) /* create output projs & connect them */ if (needs_memory) { - ir_node *projm = new_Proj(node, mode_M, out_size+1); + ir_node *projm = new_Proj(node, mode_M, out_size); set_store(projm); } @@ -5641,13 +5643,12 @@ static void initialize_function_parameters(entity_t *entity) assert(entity->kind == ENTITY_FUNCTION); ir_graph *irg = current_ir_graph; ir_node *args = get_irg_args(irg); - ir_node *start_block = get_irg_start_block(irg); ir_type *function_irtype = get_ir_type(entity->declaration.type); int first_param_nr = 0; if (entity->function.need_closure) { /* add an extra parameter for the static link */ - entity->function.static_link = new_r_Proj(start_block, args, mode_P_data, 0); + entity->function.static_link = new_r_Proj(args, mode_P_data, 0); ++first_param_nr; } @@ -5681,7 +5682,7 @@ static void initialize_function_parameters(entity_t *entity) ir_mode *param_mode = get_type_mode(param_irtype); long pn = n + first_param_nr; - ir_node *value = new_r_Proj(start_block, args, param_mode, pn); + ir_node *value = new_r_Proj(args, param_mode, pn); ir_mode *mode = get_ir_mode_storage(type); value = create_conv(NULL, value, mode);