diff options
-rw-r--r-- | compiler/semtypes.nim | 6 | ||||
-rw-r--r-- | tests/types/t5648.nim | 21 |
2 files changed, 25 insertions, 2 deletions
diff --git a/compiler/semtypes.nim b/compiler/semtypes.nim index 422d2f0fa..5bc9bbd78 100644 --- a/compiler/semtypes.nim +++ b/compiler/semtypes.nim @@ -135,7 +135,9 @@ proc semAnyRef(c: PContext; n: PNode; kind: TTypeKind; prev: PType): PType = let isCall = ord(n.kind in nkCallKinds+{nkBracketExpr}) let n = if n[0].kind == nkBracket: n[0] else: n checkMinSonsLen(n, 1) - var base = semTypeNode(c, n.lastSon, nil).skipTypes({tyTypeDesc}) + var t = semTypeNode(c, n.lastSon, nil) + if t.kind == tyTypeDesc and tfUnresolved notin t.flags: + t = t.base result = newOrPrevType(kind, prev, c) var isNilable = false # check every except the last is an object: @@ -149,7 +151,7 @@ proc semAnyRef(c: PContext; n: PNode; kind: TTypeKind; prev: PType): PType = tyError, tyObject}: message n[i].info, errGenerated, "region needs to be an object type" addSonSkipIntLit(result, region) - addSonSkipIntLit(result, base) + addSonSkipIntLit(result, t) #if not isNilable: result.flags.incl tfNotNil proc semVarType(c: PContext, n: PNode, prev: PType): PType = diff --git a/tests/types/t5648.nim b/tests/types/t5648.nim new file mode 100644 index 000000000..c230cc12c --- /dev/null +++ b/tests/types/t5648.nim @@ -0,0 +1,21 @@ +discard """ +output: "ptr Foo" +""" + +import typetraits + +type Foo = object + bar*: int + +proc main() = + var f = create(Foo) + f.bar = 3 + echo f.type.name + + discard realloc(f, 0) + + var g = Foo() + g.bar = 3 + +main() + |