Peer type resolution with unsigned ints and larger signed ints

This commit is contained in:
g-w1 2020-12-22 17:05:42 -05:00 committed by GitHub
parent 03113d9246
commit ea18f894f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 4 deletions

View File

@ -12706,11 +12706,13 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT
}
if (prev_type->id == ZigTypeIdInt &&
cur_type->id == ZigTypeIdInt &&
prev_type->data.integral.is_signed == cur_type->data.integral.is_signed)
cur_type->id == ZigTypeIdInt)
{
if (cur_type->data.integral.bit_count > prev_type->data.integral.bit_count) {
prev_inst = cur_inst;
if ((prev_type->data.integral.is_signed == cur_type->data.integral.is_signed) ||
(cur_type->data.integral.is_signed && !prev_type->data.integral.is_signed)) {
if (cur_type->data.integral.bit_count > prev_type->data.integral.bit_count) {
prev_inst = cur_inst;
}
}
continue;
}

View File

@ -869,6 +869,15 @@ test "peer type resolve string lit with sentinel-terminated mutable slice" {
comptime expect(@TypeOf("hi", slice) == [:0]const u8);
}
test "peer type unsigned int to signed" {
var w: u31 = 5;
var x: u8 = 7;
var y: i32 = -5;
var a = w + y + x;
comptime expect(@TypeOf(a) == i32);
expect(a == 7);
}
test "peer type resolve array pointers, one of them const" {
var array1: [4]u8 = undefined;
const array2: [5]u8 = undefined;