From 271a37b418828c8ee79402f97016be42c5fa2884 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 6 May 2016 19:49:28 -0700 Subject: implicit wrap widening cast on integer peer types closes #46 --- src/analyze.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/analyze.cpp') diff --git a/src/analyze.cpp b/src/analyze.cpp index 7b4aefc0fc..4d1dc181a0 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -1892,12 +1892,25 @@ static TypeTableEntry *determine_peer_type_compatibility(CodeGen *g, AstNode *pa continue; } else if (prev_type->id == TypeTableEntryIdInt && cur_type->id == TypeTableEntryIdInt && - prev_type->data.integral.is_signed == cur_type->data.integral.is_signed) + prev_type->data.integral.is_signed == cur_type->data.integral.is_signed && + (cur_type->data.integral.bit_count >= prev_type->data.integral.bit_count && + (cur_type->data.integral.is_wrapping || !prev_type->data.integral.is_wrapping))) { if (cur_type->data.integral.bit_count > prev_type->data.integral.bit_count) { prev_type = cur_type; prev_node = cur_node; + } else if (cur_type->data.integral.is_wrapping && !prev_type->data.integral.is_wrapping) { + prev_type = cur_type; + prev_node = cur_node; } + continue; + } else if (prev_type->id == TypeTableEntryIdInt && + cur_type->id == TypeTableEntryIdInt && + prev_type->data.integral.is_signed == cur_type->data.integral.is_signed && + (prev_type->data.integral.bit_count >= cur_type->data.integral.bit_count && + (prev_type->data.integral.is_wrapping || !cur_type->data.integral.is_wrapping))) + { + continue; } else if (prev_type->id == TypeTableEntryIdFloat && cur_type->id == TypeTableEntryIdFloat) { -- cgit v1.2.3