diff options
| author | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2024-06-30 21:10:42 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-30 21:10:42 +0200 |
| commit | efd933e22148d36f67db757a0010f42bf5bee205 (patch) | |
| tree | 5f6f245a030bcc870eb6e2c587373db7950d9e32 /src/check_expr.cpp | |
| parent | 4fbd22b6680113977eae3d2267a41e559edf7bec (diff) | |
| parent | e0face1ac87d34738751bbdb8c29f32bb89b544d (diff) | |
Merge pull request #3842 from karl-zylinski/fix-poly-bitset-size
Fix for bit_set[$T] proc params always being generated as i8
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 10 |
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; |