Sort.
[cparser] / ast2firm.c
index c3b606c..87e808a 100644 (file)
@@ -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);