aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2024-06-30 21:10:42 +0200
committerGitHub <noreply@github.com>2024-06-30 21:10:42 +0200
commitefd933e22148d36f67db757a0010f42bf5bee205 (patch)
tree5f6f245a030bcc870eb6e2c587373db7950d9e32
parent4fbd22b6680113977eae3d2267a41e559edf7bec (diff)
parente0face1ac87d34738751bbdb8c29f32bb89b544d (diff)
Merge pull request #3842 from karl-zylinski/fix-poly-bitset-size
Fix for bit_set[$T] proc params always being generated as i8
-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 7107c5712..e11014a70 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;