diff options
| author | Jimmi Holst Christensen <jimmiholstchristensen@gmail.com> | 2018-05-04 04:27:04 +0200 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2018-05-03 22:27:04 -0400 |
| commit | aa2586de182e5587c924740e80468c4c4d509500 (patch) | |
| tree | 9c029e910872c7bbbad002f9c1d03a9859c00bc3 /src/analyze.cpp | |
| parent | 7337029ce1a73f258ea42a965b380bb3b6fc85dd (diff) | |
| download | zig-aa2586de182e5587c924740e80468c4c4d509500.tar.gz zig-aa2586de182e5587c924740e80468c4c4d509500.zip | |
Fixed extern enums having the wrong size (#970)
Fixed extern enums having the wrong size
See #977
Diffstat (limited to 'src/analyze.cpp')
| -rw-r--r-- | src/analyze.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index 1ecfe32f4c..0f2fdf15de 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -2325,8 +2325,14 @@ static void resolve_enum_zero_bits(CodeGen *g, TypeTableEntry *enum_type) { HashMap<BigInt, AstNode *, bigint_hash, bigint_eql> occupied_tag_values = {}; occupied_tag_values.init(field_count); - TypeTableEntry *tag_int_type = get_smallest_unsigned_int_type(g, field_count - 1); + TypeTableEntry *tag_int_type; + if (enum_type->data.enumeration.layout == ContainerLayoutExtern) { + tag_int_type = get_c_int_type(g, CIntTypeInt); + } else { + tag_int_type = get_smallest_unsigned_int_type(g, field_count - 1); + } + // TODO: Are extern enums allowed to have an init_arg_expr? if (decl_node->data.container_decl.init_arg_expr != nullptr) { TypeTableEntry *wanted_tag_int_type = analyze_type_expr(g, scope, decl_node->data.container_decl.init_arg_expr); if (type_is_invalid(wanted_tag_int_type)) { |
