From 165619552a7ad0fa4f594963ee0441dd711edfd4 Mon Sep 17 00:00:00 2001 From: Araq Date: Sat, 28 Mar 2015 00:41:44 +0100 Subject: [PATCH] fixes #2355 --- compiler/semexprs.nim | 3 ++- tests/notnil/tnotnil_in_objconstr.nim | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/notnil/tnotnil_in_objconstr.nim diff --git a/compiler/semexprs.nim b/compiler/semexprs.nim index bc7303266b..28373e3c6b 100644 --- a/compiler/semexprs.nim +++ b/compiler/semexprs.nim @@ -1904,7 +1904,8 @@ proc checkInitialized(n: PNode, ids: IntSet, info: TLineInfo) = of nkOfBranch, nkElse: checkInitialized(lastSon(n.sons[i]), ids, info) else: internalError(info, "checkInitialized") of nkSym: - if tfNeedsInit in n.sym.typ.flags and n.sym.name.id notin ids: + if {tfNotNil, tfNeedsInit} * n.sym.typ.flags != {} and + n.sym.name.id notin ids: message(info, errGenerated, "field not initialized: " & n.sym.name.s) else: internalError(info, "checkInitialized") diff --git a/tests/notnil/tnotnil_in_objconstr.nim b/tests/notnil/tnotnil_in_objconstr.nim new file mode 100644 index 0000000000..2110bda8f0 --- /dev/null +++ b/tests/notnil/tnotnil_in_objconstr.nim @@ -0,0 +1,14 @@ +discard """ + errormsg: "field not initialized: bar" + line: "13" +""" + +# bug #2355 +type + Foo = object + foo: string not nil + bar: string not nil + +# Create instance without initializaing the `bar` field +var f = Foo(foo: "foo") +echo f.bar.isNil # true