mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-09 21:28:13 +00:00
make --gc:arc --exceptions:quirky work again [backport:1.4] (#16583)
* make --gc:arc --exceptions:quirky work again [backport:1.4]
* fixes #16404 [backport:1.4]
(cherry picked from commit 6317e4004d)
This commit is contained in:
@@ -513,6 +513,8 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
|
||||
if pass in {passCmd2, passPP}:
|
||||
defineSymbol(conf.symbols, "nimSeqsV2")
|
||||
defineSymbol(conf.symbols, "nimV2")
|
||||
if conf.exc == excNone and conf.backend != backendCpp:
|
||||
conf.exc = excGoto
|
||||
of "orc":
|
||||
conf.selectedGC = gcOrc
|
||||
defineSymbol(conf.symbols, "gcdestructors")
|
||||
@@ -522,6 +524,8 @@ proc processSwitch*(switch, arg: string, pass: TCmdLinePass, info: TLineInfo;
|
||||
if pass in {passCmd2, passPP}:
|
||||
defineSymbol(conf.symbols, "nimSeqsV2")
|
||||
defineSymbol(conf.symbols, "nimV2")
|
||||
if conf.exc == excNone and conf.backend != backendCpp:
|
||||
conf.exc = excGoto
|
||||
of "hooks":
|
||||
conf.selectedGC = gcHooks
|
||||
defineSymbol(conf.symbols, "gchooks")
|
||||
|
||||
@@ -197,8 +197,6 @@ proc mainCommand*(graph: ModuleGraph) =
|
||||
# A better solution might be to fix system.nim
|
||||
undefSymbol(conf.symbols, "useNimRtl")
|
||||
of backendInvalid: doAssert false
|
||||
if conf.selectedGC in {gcArc, gcOrc} and conf.backend != backendCpp:
|
||||
conf.exc = excGoto
|
||||
|
||||
var commandAlreadyProcessed = false
|
||||
|
||||
|
||||
@@ -44,3 +44,13 @@ proc setControlCHook(hook: proc () {.noconv.}) = discard
|
||||
|
||||
proc closureIterSetupExc(e: ref Exception) {.compilerproc, inline.} =
|
||||
sysFatal(ReraiseDefect, "exception handling is not available")
|
||||
|
||||
when gotoBasedExceptions:
|
||||
var nimInErrorMode {.threadvar.}: bool
|
||||
|
||||
proc nimErrorFlag(): ptr bool {.compilerRtl, inl.} =
|
||||
result = addr(nimInErrorMode)
|
||||
|
||||
proc nimTestErrorFlag() {.compilerRtl.} =
|
||||
if nimInErrorMode:
|
||||
sysFatal(ReraiseDefect, "exception handling is not available")
|
||||
|
||||
@@ -11,9 +11,4 @@ proc panic(s: string) {.noreturn.} =
|
||||
rawoutput(s)
|
||||
exit(1)
|
||||
|
||||
# Alternatively we also could implement these 2 here:
|
||||
#
|
||||
# proc sysFatal(exceptn: typeDesc, message: string) {.noReturn.}
|
||||
# proc sysFatal(exceptn: typeDesc, message, arg: string) {.noReturn.}
|
||||
|
||||
{.pop.}
|
||||
|
||||
14
tests/manyloc/standalone2/panicoverride.nim
Normal file
14
tests/manyloc/standalone2/panicoverride.nim
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
proc printf(frmt: cstring) {.varargs, importc, header: "<stdio.h>", cdecl.}
|
||||
proc exit(code: int) {.importc, header: "<stdlib.h>", cdecl.}
|
||||
|
||||
{.push stack_trace: off, profiler:off.}
|
||||
|
||||
proc rawoutput(s: string) =
|
||||
printf("%s\n", s)
|
||||
|
||||
proc panic(s: string) {.noreturn.} =
|
||||
rawoutput(s)
|
||||
exit(1)
|
||||
|
||||
{.pop.}
|
||||
7
tests/manyloc/standalone2/tavr.nim
Normal file
7
tests/manyloc/standalone2/tavr.nim
Normal file
@@ -0,0 +1,7 @@
|
||||
# bug #16404
|
||||
|
||||
proc printf(frmt: cstring) {.varargs, header: "<stdio.h>", cdecl.}
|
||||
|
||||
var x = 0
|
||||
inc x
|
||||
printf("hi %ld\n", x+4777)
|
||||
4
tests/manyloc/standalone2/tavr.nim.cfg
Normal file
4
tests/manyloc/standalone2/tavr.nim.cfg
Normal file
@@ -0,0 +1,4 @@
|
||||
--gc:arc
|
||||
--cpu:avr
|
||||
--os:standalone
|
||||
--compileOnly
|
||||
Reference in New Issue
Block a user