Skip to content

Commit

Permalink
fixes #11114
Browse files Browse the repository at this point in the history
  • Loading branch information
Araq committed May 2, 2019
1 parent 43749c4 commit 1ff2b02
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion compiler/semexprs.nim
Expand Up @@ -1527,11 +1527,15 @@ proc asgnToResultVar(c: PContext, n, le, ri: PNode) {.inline.} =
#echo x.info, " setting it for this type ", typeToString(x.typ), " ", n.info

proc asgnToResult(c: PContext, n, le, ri: PNode) =
proc scopedLifetime(c: PContext; ri: PNode): bool {.inline.} =
result = (ri.kind in nkCallKinds+{nkObjConstr}) or
(ri.kind == nkSym and ri.sym.owner == c.p.owner)

# Special typing rule: do not allow to pass 'owned T' to 'T' in 'result = x':
const absInst = abstractInst - {tyOwned}
if ri.typ != nil and ri.typ.skipTypes(absInst).kind == tyOwned and
le.typ != nil and le.typ.skipTypes(absInst).kind != tyOwned and
ri.kind in nkCallKinds+{nkObjConstr}:
scopedLifetime(c, ri):
localError(c.config, n.info, "cannot return an owned pointer as an unowned pointer; " &
"use 'owned(" & typeToString(le.typ) & ")' as the return type")

Expand Down

0 comments on commit 1ff2b02

Please sign in to comment.