From ad623d138d16e99bc293ed347415bfc935ec472b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oscar=20Nihlg=C3=A5rd?= Date: Thu, 1 Aug 2019 17:44:12 +0200 Subject: [PATCH] Fix VM conversion to var type [bugfix] (#11866) (cherry picked from commit 829f7196708e1326513f8cceed0b63e67bbdb318) --- compiler/vm.nim | 4 ++-- tests/vm/tconstobj.nim | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/vm.nim b/compiler/vm.nim index 34caec83fe..27b067da22 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -401,7 +401,7 @@ proc opConv(c: PCtx; dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType): else: internalError(c.config, "cannot convert to string " & desttyp.typeToString) else: - case skipTypes(desttyp, abstractRange).kind + case skipTypes(desttyp, abstractVarRange).kind of tyInt..tyInt64: if dest.kind != rkInt: myreset(dest); dest.kind = rkInt @@ -439,7 +439,7 @@ proc opConv(c: PCtx; dest: var TFullReg, src: TFullReg, desttyp, srctyp: PType): else: dest.floatVal = src.floatVal of tyObject: - if srctyp.skipTypes(abstractRange).kind != tyObject: + if srctyp.skipTypes(abstractVarRange).kind != tyObject: internalError(c.config, "invalid object-to-object conversion") # A object-to-object conversion is essentially a no-op moveConst(dest, src) diff --git a/tests/vm/tconstobj.nim b/tests/vm/tconstobj.nim index 3cf256eedf..ac7148b59c 100644 --- a/tests/vm/tconstobj.nim +++ b/tests/vm/tconstobj.nim @@ -65,3 +65,8 @@ static: initBase(SomeBaseObj(ifb2)) echo repr(ifb2) doAssert(ifb2.txt == "Initialized string from base") + +static: # issue #11861 + var ifb2: InheritedFromBase + initBase(ifb2) + doAssert(ifb2.txt == "Initialized string from base")