aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 891378b99..b9697a6e8 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -1435,6 +1435,16 @@ gb_internal bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, T
if (!is_polymorphic_type_assignable(c, poly->BitSet.elem, source->BitSet.elem, true, modify_type)) {
return false;
}
+
+ // For generic types like bit_set[$T] the upper and lower of the poly type will be zeroes since
+ // it could not figure that stuff out when the poly type was created.
+ if (poly->BitSet.upper == 0 && modify_type) {
+ poly->BitSet.upper = source->BitSet.upper;
+ }
+ if (poly->BitSet.lower == 0 && modify_type) {
+ poly->BitSet.lower = source->BitSet.lower;
+ }
+
if (poly->BitSet.underlying == nullptr) {
if (modify_type) {
poly->BitSet.underlying = source->BitSet.underlying;