Skip to content

Commit

Permalink
fix comptime @TagName crashing sometimes
Browse files Browse the repository at this point in the history
closes #1118
  • Loading branch information
andrewrk committed Jun 27, 2018
1 parent 6f88ecc commit 19961c5
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 4 deletions.
1 change: 1 addition & 0 deletions src/analyze.cpp
Expand Up @@ -3728,6 +3728,7 @@ TypeUnionField *find_union_field_by_tag(TypeTableEntry *type_entry, const BigInt
}

TypeEnumField *find_enum_field_by_tag(TypeTableEntry *enum_type, const BigInt *tag) {
assert(enum_type->data.enumeration.zero_bits_known);
for (uint32_t i = 0; i < enum_type->data.enumeration.src_field_count; i += 1) {
TypeEnumField *field = &enum_type->data.enumeration.fields[i];
if (bigint_cmp(&field->value, tag) == CmpEQ) {
Expand Down
3 changes: 3 additions & 0 deletions src/ir.cpp
Expand Up @@ -16053,6 +16053,9 @@ static TypeTableEntry *ir_analyze_instruction_enum_tag_name(IrAnalyze *ira, IrIn
assert(target->value.type->id == TypeTableEntryIdEnum);

if (instr_is_comptime(target)) {
type_ensure_zero_bits_known(ira->codegen, target->value.type);
if (type_is_invalid(target->value.type))
return ira->codegen->builtin_types.entry_invalid;
TypeEnumField *field = find_enum_field_by_tag(target->value.type, &target->value.data.x_bigint);
ConstExprValue *array_val = create_const_str_lit(ira->codegen, field->name);
ConstExprValue *out_val = ir_build_const_from(ira, &instruction->base);
Expand Down
5 changes: 5 additions & 0 deletions test/cases/eval.zig
Expand Up @@ -637,3 +637,8 @@ test "call method with comptime pass-by-non-copying-value self parameter" {
var b = s.b();
assert(b == 2);
}

test "@tagName of @typeId" {
const str = @tagName(@typeId(u8));
assert(std.mem.eql(u8, str, "Int"));
}
9 changes: 5 additions & 4 deletions test/cases/widening.zig
Expand Up @@ -19,8 +19,9 @@ test "implicit unsigned integer to signed integer" {
}

test "float widening" {
var a: f32 = 12.34;
var b: f64 = a;
var c: f128 = b;
assert(c == a);
var a: f16 = 12.34;
var b: f32 = a;
var c: f64 = b;
var d: f128 = c;
assert(d == a);
}

0 comments on commit 19961c5

Please sign in to comment.