Bug fixes
-
Update release workflow
We previously dropped publishing of binary artifacts, but hadn't updated
the release workflow for that yet. This patch does that, and also
performs a bunch of bumps and pins of actions that workflow uses.(cherry picked from commit 30cf38e)
-
GH-2414: Allow disabling of building of benchmarks
We have a reoccurring and hard to diagnose issue with the
google/benchmark dependency failing to detect the regex backend, #2414.
Since the benchmarks and their dependencies are not needed during
regular use, add a configure option--disable-benchmarksand a CMake
variableSPICY_ENABLE_BENCHMARKSto allow turning benchmarks off.(cherry picked from commit 5b54b99)
-
GH-2404: Include coercions in detection of expressions with side effects
We previously would always consider expressions with coercions as having
side effects which in at least #2404 lead to us generating code which
caused a most vexing parse. Since coercions do not have side effects
themself, extend our detection to include them by querying the behavior
of the coerced expression. This should fix the majority of new failures
introduced by recent rewrites which removed the LHS of assignments; we
will do more structural fixes in follow-up patches.Closes #2404.
(cherry picked from commit d9ecb20)
-
Avoid underflow in
atoi_nWe had previously fixed some overflows in this function, but missed a
case when extractingINT64_MIN. We were already parsing the absolute
value with enough range, but could underflow when negating it for the
final result since the negation was done in the target type which did
not have enough range.With this patch we instead perform the negation in the unsigned type
which has enough range, and only cast to the target type after.(cherry picked from commit 9645a0b)
-
Handle overflows in
atoi_n(cherry picked from commit d2f46cc)
-
Handle overflows when checking whether an integer can coerce to
real.We were already handling the loss of precision, but not overflow.
(cherry picked from commit df9a655)
-
Fix Fiber constructor clobbering shared stack.
Previously, when constructing a Fiber with type SharedStack, we'd
initialize the underlying fiber with the global shared stack. This
isn't safe: The fiber_init() call writes to the shared stack, but
there's no guarantee that the shared stack isn't being used by
another fiber when this happens.Circumvent this by moving the underlying fiber initialization into
__fiber_switch_trampoline(), where it is guaranteed that the previously
executing fiber has saved() the shared stack so that it is now free
to be used by a different fiber. Use the nullptr fiber_stack() return
as the indicator, that the initialization still needs to happen.(cherry picked from commit 9b0cfac)
-
Fix potential nullptr dereference in remove-unused-fields pass.
This was introduced in 79d44f7 so needs to be backported to
release/1.16.(cherry picked from commit 72b27c9)