Skip to content

Commit 19961c5

Browse files
committedJun 27, 2018
fix comptime @TagName crashing sometimes
closes #1118
·
0.15.20.3.0
1 parent 6f88ecc commit 19961c5

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed
 

‎src/analyze.cpp‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3728,6 +3728,7 @@ TypeUnionField *find_union_field_by_tag(TypeTableEntry *type_entry, const BigInt
37283728
}
37293729

37303730
TypeEnumField *find_enum_field_by_tag(TypeTableEntry *enum_type, const BigInt *tag) {
3731+
assert(enum_type->data.enumeration.zero_bits_known);
37313732
for (uint32_t i = 0; i < enum_type->data.enumeration.src_field_count; i += 1) {
37323733
TypeEnumField *field = &enum_type->data.enumeration.fields[i];
37333734
if (bigint_cmp(&field->value, tag) == CmpEQ) {

‎src/ir.cpp‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16053,6 +16053,9 @@ static TypeTableEntry *ir_analyze_instruction_enum_tag_name(IrAnalyze *ira, IrIn
1605316053
assert(target->value.type->id == TypeTableEntryIdEnum);
1605416054

1605516055
if (instr_is_comptime(target)) {
16056+
type_ensure_zero_bits_known(ira->codegen, target->value.type);
16057+
if (type_is_invalid(target->value.type))
16058+
return ira->codegen->builtin_types.entry_invalid;
1605616059
TypeEnumField *field = find_enum_field_by_tag(target->value.type, &target->value.data.x_bigint);
1605716060
ConstExprValue *array_val = create_const_str_lit(ira->codegen, field->name);
1605816061
ConstExprValue *out_val = ir_build_const_from(ira, &instruction->base);

‎test/cases/eval.zig‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -637,3 +637,8 @@ test "call method with comptime pass-by-non-copying-value self parameter" {
637637
var b = s.b();
638638
assert(b == 2);
639639
}
640+
641+
test "@tagName of @typeId" {
642+
const str = @tagName(@typeId(u8));
643+
assert(std.mem.eql(u8, str, "Int"));
644+
}

‎test/cases/widening.zig‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ test "implicit unsigned integer to signed integer" {
1919
}
2020

2121
test "float widening" {
22-
var a: f32 = 12.34;
23-
var b: f64 = a;
24-
var c: f128 = b;
25-
assert(c == a);
22+
var a: f16 = 12.34;
23+
var b: f32 = a;
24+
var c: f64 = b;
25+
var d: f128 = c;
26+
assert(d == a);
2627
}

0 commit comments

Comments
 (0)
Please sign in to comment.