* fix #19149 Invalid codegen when returning var tuple from a template * fix type
This commit is contained in:
parent
fdc8dd4128
commit
bae0fb720a
2 changed files with 22 additions and 2 deletions
|
|
@ -1905,7 +1905,7 @@ proc implicitConv(kind: TNodeKind, f: PType, arg: PNode, m: TCandidate,
|
||||||
else:
|
else:
|
||||||
result.typ = errorType(c)
|
result.typ = errorType(c)
|
||||||
else:
|
else:
|
||||||
result.typ = f.skipTypes({tySink})
|
result.typ = f.skipTypes({tySink, tyVar})
|
||||||
if result.typ == nil: internalError(c.graph.config, arg.info, "implicitConv")
|
if result.typ == nil: internalError(c.graph.config, arg.info, "implicitConv")
|
||||||
result.add c.graph.emptyNode
|
result.add c.graph.emptyNode
|
||||||
result.add arg
|
result.add arg
|
||||||
|
|
@ -2164,7 +2164,8 @@ proc paramTypesMatchAux(m: var TCandidate, f, a: PType,
|
||||||
of isEqual:
|
of isEqual:
|
||||||
inc(m.exactMatches)
|
inc(m.exactMatches)
|
||||||
result = arg
|
result = arg
|
||||||
if skipTypes(f, abstractVar-{tyTypeDesc}).kind == tyTuple or
|
let ff = skipTypes(f, abstractVar-{tyTypeDesc})
|
||||||
|
if ff.kind == tyTuple or
|
||||||
(arg.typ != nil and skipTypes(arg.typ, abstractVar-{tyTypeDesc}).kind == tyTuple):
|
(arg.typ != nil and skipTypes(arg.typ, abstractVar-{tyTypeDesc}).kind == tyTuple):
|
||||||
result = implicitConv(nkHiddenSubConv, f, arg, m, c)
|
result = implicitConv(nkHiddenSubConv, f, arg, m, c)
|
||||||
of isNone:
|
of isNone:
|
||||||
|
|
|
||||||
19
tests/template/t19149.nim
Normal file
19
tests/template/t19149.nim
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
type Foo = tuple[active: bool, index: int]
|
||||||
|
|
||||||
|
|
||||||
|
var f: Foo
|
||||||
|
|
||||||
|
# template result type during match stage
|
||||||
|
# f:var Foo
|
||||||
|
# a:Foo
|
||||||
|
# tyVar
|
||||||
|
# tyTuple
|
||||||
|
# after change to proc
|
||||||
|
# f:Foo
|
||||||
|
# a:Foo
|
||||||
|
# tyTuple
|
||||||
|
# tyTuple
|
||||||
|
|
||||||
|
template cursor(): var Foo = f
|
||||||
|
discard cursor()
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue