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:
|
||||
{
|
||||
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, "}");
|
||||
|
|
|
@ -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"
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue