diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-05-06 19:49:28 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-05-06 19:49:28 -0700 |
| commit | 271a37b418828c8ee79402f97016be42c5fa2884 (patch) | |
| tree | 4834923022eddbc1e314a0d4d2844d15c0829574 /src/analyze.cpp | |
| parent | 6131b3716322d60cf26f7aad1a654dc6c4414051 (diff) | |
| download | zig-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.cpp | 15 |
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) { |
