diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-06-15 15:56:58 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-15 09:56:58 +0200 |
commit | edb64bcff445d9bfbcf715b697256b230f54c14e (patch) | |
tree | f93d09383d381d9bcd5fb84c33e560a9e7bb8655 /compiler | |
parent | d90581c677586023756ab26ffb69a64cf67db6f3 (diff) | |
download | Nim-edb64bcff445d9bfbcf715b697256b230f54c14e.tar.gz |
fixes explicit deref block (#22093)
fixes explicit deref
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/ccgexprs.nim | 2 | ||||
-rw-r--r-- | compiler/transf.nim | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/compiler/ccgexprs.nim b/compiler/ccgexprs.nim index ff851f924..0567fbdf9 100644 --- a/compiler/ccgexprs.nim +++ b/compiler/ccgexprs.nim @@ -754,8 +754,6 @@ proc isCppRef(p: BProc; typ: PType): bool {.inline.} = tfVarIsPtr notin skipTypes(typ, abstractInstOwned).flags proc genDeref(p: BProc, e: PNode, d: var TLoc) = - assert e[0].kind notin {nkBlockExpr, nkBlockStmt}, "it should have been transformed in transf" - let mt = mapType(p.config, e[0].typ, mapTypeChooser(e[0]) == skParam) if mt in {ctArray, ctPtrToArray} and lfEnforceDeref notin d.flags: # XXX the amount of hacks for C's arrays is incredible, maybe we should diff --git a/compiler/transf.nim b/compiler/transf.nim index 0176a1087..24363cad0 100644 --- a/compiler/transf.nim +++ b/compiler/transf.nim @@ -1019,7 +1019,9 @@ proc transform(c: PTransf, n: PNode): PNode = result = transformAddrDeref(c, n, {nkHiddenDeref}) of nkAddr: result = transformAddrDeref(c, n, {nkDerefExpr, nkHiddenDeref}) - of nkDerefExpr, nkHiddenDeref: + of nkDerefExpr: + result = transformAddrDeref(c, n, {nkAddr, nkHiddenAddr}) + of nkHiddenDeref: if n[0].kind in {nkBlockExpr, nkBlockStmt}: # bug #20107 bug #21540. Watch out to not deref the pointer too late. let e = transformDerefBlock(c, n) |