From 4d4ab1e69a40fb11d19e93b42a02016f9d009aef Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Tue, 10 Nov 2020 17:55:16 +0100 Subject: stage1: Fix comparison of unions containing zero-sized types The code tried to be too smart and skipped the equality (returning true) if the payload type was zero-sized. This optimization is completely wrong when the union payload is a metatype! Fixes #7047 --- src/stage1/analyze.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src') diff --git a/src/stage1/analyze.cpp b/src/stage1/analyze.cpp index 45cd240949..2fe4410027 100644 --- a/src/stage1/analyze.cpp +++ b/src/stage1/analyze.cpp @@ -7079,8 +7079,6 @@ bool const_values_equal(CodeGen *g, ZigValue *a, ZigValue *b) { if (bigint_cmp(&union1->tag, &union2->tag) == CmpEQ) { TypeUnionField *field = find_union_field_by_tag(a->type, &union1->tag); assert(field != nullptr); - if (!type_has_bits(g, field->type_entry)) - return true; assert(find_union_field_by_tag(a->type, &union2->tag) != nullptr); return const_values_equal(g, union1->payload, union2->payload); } -- cgit v1.2.3