aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-12-02 17:12:37 -0500
committerAndrew Kelley <superjoe30@gmail.com>2017-12-02 17:12:37 -0500
commit98237f7c0ba62099e85a8caf8fc09039845b224e (patch)
tree4f0ecbc220a178747c330d457cc1388100bbed43 /src/analyze.cpp
parent54a0db0daf8fd5ef307f275275e10f32ebd7d27a (diff)
downloadzig-98237f7c0ba62099e85a8caf8fc09039845b224e.tar.gz
zig-98237f7c0ba62099e85a8caf8fc09039845b224e.zip
casting between integer and enum only works via tag type
See #305
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 235aeea682..7d51e83677 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -1399,6 +1399,10 @@ static void resolve_enum_type(CodeGen *g, TypeTableEntry *enum_type) {
enum_type->data.enumeration.is_invalid = true;
add_node_error(g, decl_node->data.container_decl.init_arg_expr,
buf_sprintf("expected integer, found '%s'", buf_ptr(&wanted_tag_int_type->name)));
+ } else if (wanted_tag_int_type->data.integral.is_signed) {
+ enum_type->data.enumeration.is_invalid = true;
+ add_node_error(g, decl_node->data.container_decl.init_arg_expr,
+ buf_sprintf("expected unsigned integer, found '%s'", buf_ptr(&wanted_tag_int_type->name)));
} else if (wanted_tag_int_type->data.integral.bit_count < tag_int_type->data.integral.bit_count) {
enum_type->data.enumeration.is_invalid = true;
add_node_error(g, decl_node->data.container_decl.init_arg_expr,