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]);
}
}
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);