[qfcc] Improve handling of different types in ?:

This commit is contained in:
Bill Currie 2023-10-02 09:04:31 +09:00
parent 2134c85a47
commit b89e243c47

View file

@ -2484,7 +2484,20 @@ conditional_expr (const expr_t *cond, const expr_t *e1, const expr_t *e2)
backpatch (c->boolean.true_list, tlabel); backpatch (c->boolean.true_list, tlabel);
backpatch (c->boolean.false_list, flabel); backpatch (c->boolean.false_list, flabel);
block->block.result = (type1 == type2) ? new_temp_def_expr (type1) : 0; if (!type_same (type1, type2)) {
if (!type_assignable (type1, type2)
&& !type_assignable (type2, type1)) {
type1 = 0;
}
if (!type_assignable (type1, type2)) {
type1 = type2;
}
if (type_promotes (type2, type1)) {
type1 = type2;
}
}
block->block.result = type1 ? new_temp_def_expr (type1) : 0;
append_expr (block, c); append_expr (block, c);
append_expr ((expr_t *) c->boolean.e, flabel);//FIXME cast append_expr ((expr_t *) c->boolean.e, flabel);//FIXME cast
if (block->block.result) if (block->block.result)