X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ast2firm.c;h=87e808a56467825ed16ceff99254640fd2c39380;hb=e51106027da8f505e9e4b71a3bb2ccaa57c598f9;hp=c3b606cc43fc30dedc76bbb0204361eb3c329951;hpb=b532880c7cfe1c5e69040f4e365c30e13d7c4c7d;p=cparser diff --git a/ast2firm.c b/ast2firm.c index c3b606c..87e808a 100644 --- a/ast2firm.c +++ b/ast2firm.c @@ -1216,11 +1216,13 @@ static ir_node *character_constant_to_firm(const const_expression_t *cnst) dbg_info *dbgi = get_dbg_info(&cnst->base.source_position); ir_mode *mode = get_ir_mode_arithmetic(cnst->base.type); - long long int v = 0; - for (size_t i = 0; i < cnst->v.character.size; ++i) { - if (char_is_signed) { - v = (v << 8) | ((signed char)cnst->v.character.begin[i]); - } else { + long long int v; + size_t const size = cnst->v.character.size; + if (size == 1 && char_is_signed) { + v = (signed char)cnst->v.character.begin[0]; + } else { + v = 0; + for (size_t i = 0; i < size; ++i) { v = (v << 8) | ((unsigned char)cnst->v.character.begin[i]); } } @@ -3413,7 +3415,7 @@ static ir_node *create_condition_evaluation(const expression_t *expression, ir_node *false_proj = new_d_Proj(dbgi, cond, mode_X, pn_Cond_false); /* set branch prediction info based on __builtin_expect */ - if (is_builtin_expect(expression)) { + if (is_builtin_expect(expression) && is_Cond(cond)) { call_argument_t *argument = expression->call.arguments->next; if (is_constant_expression(argument->expression)) { long cnst = fold_constant(argument->expression);