diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-12-02 17:12:37 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-12-02 17:12:37 -0500 |
| commit | 98237f7c0ba62099e85a8caf8fc09039845b224e (patch) | |
| tree | 4f0ecbc220a178747c330d457cc1388100bbed43 /src/analyze.cpp | |
| parent | 54a0db0daf8fd5ef307f275275e10f32ebd7d27a (diff) | |
| download | zig-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.cpp | 4 |
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, |
