mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 18:02:05 +00:00
* fix #19149 Invalid codegen when returning var tuple from a template
* fix type
(cherry picked from commit bae0fb720a)
This commit is contained in:
@@ -1894,7 +1894,7 @@ proc implicitConv(kind: TNodeKind, f: PType, arg: PNode, m: TCandidate,
|
||||
else:
|
||||
result.typ = errorType(c)
|
||||
else:
|
||||
result.typ = f.skipTypes({tySink})
|
||||
result.typ = f.skipTypes({tySink, tyVar})
|
||||
if result.typ == nil: internalError(c.graph.config, arg.info, "implicitConv")
|
||||
result.add c.graph.emptyNode
|
||||
result.add arg
|
||||
@@ -2153,7 +2153,8 @@ proc paramTypesMatchAux(m: var TCandidate, f, a: PType,
|
||||
of isEqual:
|
||||
inc(m.exactMatches)
|
||||
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):
|
||||
result = implicitConv(nkHiddenSubConv, f, arg, m, c)
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user