fixes another effect inference bug [backport:1.6] (#19100)

* fixes another effect inference bug [backport:1.6]
This commit is contained in:
Andreas Rumpf 2021-11-07 16:38:02 +01:00 • committed by GitHub
commit fce89cb60a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 85 additions and 11 deletions

View file

@ -354,7 +354,7 @@ var onUnhandledException*: (proc (errorMsg: string) {.
## The default is to write a stacktrace to `stderr` and then call `quit(1)`.
## Unstable API.
proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy, gcsafe.} =
when hasSomeStackTrace:
var buf = newStringOfCap(2000)
if e.trace.len == 0:
@ -362,7 +362,8 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
else:
var trace = $e.trace
add(buf, trace)
`=destroy`(trace)
{.gcsafe.}:
`=destroy`(trace)
add(buf, "Error: unhandled exception: ")
add(buf, e.msg)
add(buf, " [")
@ -373,7 +374,8 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
onUnhandledException(buf)
else:
showErrorMessage2(buf)
`=destroy`(buf)
{.gcsafe.}:
`=destroy`(buf)
else:
# ugly, but avoids heap allocations :-)
template xadd(buf, s, slen) =
@ -387,7 +389,8 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
if e.trace.len != 0:
var trace = $e.trace
add(buf, trace)
`=destroy`(trace)
{.gcsafe.}:
`=destroy`(trace)
add(buf, "Error: unhandled exception: ")
add(buf, e.msg)
add(buf, " [")
@ -398,7 +401,7 @@ proc reportUnhandledErrorAux(e: ref Exception) {.nodestroy.} =
else:
showErrorMessage(buf.addr, L)
proc reportUnhandledError(e: ref Exception) {.nodestroy.} =
proc reportUnhandledError(e: ref Exception) {.nodestroy, gcsafe.} =
if unhandledExceptionHook != nil:
unhandledExceptionHook(e)
when hostOS != "any":

View file

@ -73,7 +73,7 @@ proc prepareSeqAdd(len: int; p: pointer; addlen, elemSize, elemAlign: int): poin
q.cap = newCap
result = q
proc shrink*[T](x: var seq[T]; newLen: Natural) =
proc shrink*[T](x: var seq[T]; newLen: Natural) {.tags: [].} =
when nimvm:
setLen(x, newLen)
else: