aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-05-06 19:49:28 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-05-06 19:49:28 -0700
commit271a37b418828c8ee79402f97016be42c5fa2884 (patch)
tree4834923022eddbc1e314a0d4d2844d15c0829574 /src/analyze.cpp
parent6131b3716322d60cf26f7aad1a654dc6c4414051 (diff)
downloadzig-271a37b418828c8ee79402f97016be42c5fa2884.tar.gz
zig-271a37b418828c8ee79402f97016be42c5fa2884.zip
implicit wrap widening cast on integer peer types
closes #46
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp15
1 files changed, 14 insertions, 1 deletions
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)
{