mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-04 12:07:51 +00:00
* fixes https://github.com/status-im/nimbus-eth2/issues/1549 [backport:1.4]
* test fixup
(cherry picked from commit cf516713d0)
This commit is contained in:
@@ -249,13 +249,15 @@ proc openArrayLoc(p: BProc, formalType: PType, n: PNode): Rope =
|
||||
else: internalError(p.config, "openArrayLoc: " & typeToString(a.t))
|
||||
|
||||
proc withTmpIfNeeded(p: BProc, a: TLoc, needsTmp: bool): TLoc =
|
||||
if needsTmp and a.lode.typ != nil:
|
||||
var tmp: TLoc
|
||||
getTemp(p, a.lode.typ, tmp, needsInit=false)
|
||||
genAssignment(p, tmp, a, {})
|
||||
tmp
|
||||
# Bug https://github.com/status-im/nimbus-eth2/issues/1549
|
||||
# Aliasing is preferred over stack overflows.
|
||||
# Also don't regress for non ARC-builds, too risky.
|
||||
if needsTmp and a.lode.typ != nil and p.config.selectedGC in {gcArc, gcOrc} and
|
||||
getSize(p.config, a.lode.typ) < 1024:
|
||||
getTemp(p, a.lode.typ, result, needsInit=false)
|
||||
genAssignment(p, result, a, {})
|
||||
else:
|
||||
a
|
||||
result = a
|
||||
|
||||
proc genArgStringToCString(p: BProc, n: PNode, needsTmp: bool): Rope {.inline.} =
|
||||
var a: TLoc
|
||||
|
||||
@@ -471,6 +471,14 @@ proc getTemp(p: BProc, t: PType, result: var TLoc; needsInit=false) =
|
||||
result.storage = OnStack
|
||||
result.flags = {}
|
||||
constructLoc(p, result, not needsInit)
|
||||
when false:
|
||||
# XXX Introduce a compiler switch in order to detect these easily.
|
||||
if getSize(p.config, t) > 1024 * 1024:
|
||||
if p.prc != nil:
|
||||
echo "ENORMOUS TEMPORARY! ", p.config $ p.prc.info
|
||||
else:
|
||||
echo "ENORMOUS TEMPORARY! ", p.config $ p.lastLineInfo
|
||||
writeStackTrace()
|
||||
|
||||
proc getTempCpp(p: BProc, t: PType, result: var TLoc; value: Rope) =
|
||||
inc(p.labels)
|
||||
|
||||
@@ -16,6 +16,7 @@ discard """
|
||||
2,2
|
||||
1,2
|
||||
'''
|
||||
cmd: "nim c --gc:orc $file"
|
||||
"""
|
||||
|
||||
template test =
|
||||
|
||||
Reference in New Issue
Block a user