Skip to content

Commit

Permalink
fixes a critical --gc:boehm regression
Browse files Browse the repository at this point in the history
  • Loading branch information
Araq committed Sep 6, 2019
1 parent 0e01a5f commit e0f3e84
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 5 deletions.
4 changes: 3 additions & 1 deletion compiler/ccgexprs.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1193,6 +1193,8 @@ proc genDefault(p: BProc; n: PNode; d: var TLoc) =
if d.k == locNone: getTemp(p, n.typ, d, needsInit=true)
else: resetLoc(p, d)

proc trivialDestructor(s: PSym): bool {.inline.} = s.ast[bodyPos].len == 0

proc rawGenNew(p: BProc, a: TLoc, sizeExpr: Rope) =
var sizeExpr = sizeExpr
let typ = a.t
Expand All @@ -1210,7 +1212,7 @@ proc rawGenNew(p: BProc, a: TLoc, sizeExpr: Rope) =
genAssignment(p, a, b, {})
else:
let ti = genTypeInfo(p.module, typ, a.lode.info)
if bt.destructor != nil:
if bt.destructor != nil and not trivialDestructor(bt.destructor):
# the prototype of a destructor is ``=destroy(x: var T)`` and that of a
# finalizer is: ``proc (x: ref T) {.nimcall.}``. We need to check the calling
# convention at least:
Expand Down
8 changes: 4 additions & 4 deletions lib/system/mmdisp.nim
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ when defined(boehmgc):
if result == nil: raiseOutOfMem()
proc alloc0(size: Natural): pointer =
result = alloc(size)
proc realloc(p: pointer, newsize: Natural): pointer =
result = boehmRealloc(p, newsize)
proc realloc(p: pointer, newSize: Natural): pointer =
result = boehmRealloc(p, newSize)
if result == nil: raiseOutOfMem()
proc dealloc(p: pointer) = boehmDealloc(p)

Expand All @@ -122,8 +122,8 @@ when defined(boehmgc):
if result == nil: raiseOutOfMem()
proc allocShared0(size: Natural): pointer =
result = allocShared(size)
proc reallocShared(p: pointer, newsize: Natural): pointer =
result = boehmRealloc(p, newsize)
proc reallocShared(p: pointer, newSize: Natural): pointer =
result = boehmRealloc(p, newSize)
if result == nil: raiseOutOfMem()
proc deallocShared(p: pointer) = boehmDealloc(p)

Expand Down

0 comments on commit e0f3e84

Please sign in to comment.