Prevent crash in tagged enums rendering (#1986)
* Prevent crash in tagged enums rendering * Add a test casemaster
parent
db74832e40
commit
400006bbe7
|
@ -6276,8 +6276,8 @@ void render_const_value(CodeGen *g, Buf *buf, ConstExprValue *const_val) {
|
||||||
}
|
}
|
||||||
case ZigTypeIdUnion:
|
case ZigTypeIdUnion:
|
||||||
{
|
{
|
||||||
uint64_t tag = bigint_as_unsigned(&const_val->data.x_union.tag);
|
const BigInt *tag = &const_val->data.x_union.tag;
|
||||||
TypeUnionField *field = &type_entry->data.unionation.fields[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));
|
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);
|
render_const_value(g, buf, const_val->data.x_union.payload);
|
||||||
buf_append_str(buf, "}");
|
buf_append_str(buf, "}");
|
||||||
|
|
|
@ -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",
|
".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"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue