Commit 400006bbe7
Changed files (2)
src
src/analyze.cpp
@@ -6276,8 +6276,8 @@ void render_const_value(CodeGen *g, Buf *buf, ConstExprValue *const_val) {
}
case ZigTypeIdUnion:
{
- uint64_t tag = bigint_as_unsigned(&const_val->data.x_union.tag);
- TypeUnionField *field = &type_entry->data.unionation.fields[tag];
+ const BigInt *tag = &const_val->data.x_union.tag;
+ TypeUnionField *field = find_union_field_by_tag(type_entry, tag);
buf_appendf(buf, "%s { .%s = ", buf_ptr(&type_entry->name), buf_ptr(field->name));
render_const_value(g, buf, const_val->data.x_union.payload);
buf_append_str(buf, "}");
test/compile_errors.zig
@@ -5599,4 +5599,21 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
,
".tmp_source.zig:2:26: error: vector element type must be integer, float, or pointer; '@Vector(4, u8)' is invalid",
);
+
+ cases.add(
+ "compileLog of tagged enum doesn't crash the compiler",
+ \\const Bar = union(enum(u32)) {
+ \\ X: i32 = 1
+ \\};
+ \\
+ \\fn testCompileLog(x: Bar) void {
+ \\ @compileLog(x);
+ \\}
+ \\
+ \\pub fn main () void {
+ \\ comptime testCompileLog(Bar{.X = 123});
+ \\}
+ ,
+ ".tmp_source.zig:6:5: error: found compile log statement"
+ );
}