mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-13 09:22:22 -07:00
[check-type] fix faulty #no_nil variants error
- when checking the variants of a union type we will skip adding the variants if we have an unspecialized polymorphic, hence our union_type variants will be empty and have a count of 0 - so when checking if we violate the #no_nil error, if we are in the unspecialized polymorphic case and there exists at least one variant in the original variants then we should not raise this error - test checks that we do not raise the error anymore, and that we still detect the #no_nil error in the described circumstances
This commit is contained in:
@@ -729,6 +729,12 @@ gb_internal void check_union_type(CheckerContext *ctx, Type *union_type, Ast *no
|
||||
union_type->Union.kind = ut->kind;
|
||||
switch (ut->kind) {
|
||||
case UnionType_no_nil:
|
||||
if (union_type->Union.is_polymorphic && poly_operands == nullptr) {
|
||||
GB_ASSERT(variants.count == 0);
|
||||
if (ut->variants.count != 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (variants.count < 2) {
|
||||
error(ut->align, "A union with #no_nil must have at least 2 variants");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user