Generic tuple recursion fix (#11115)
* fixes #1145 * unify error messages
This commit is contained in:
parent
da3b649539
commit
a432aedb54
4 changed files with 13 additions and 4 deletions
|
|
@ -1348,8 +1348,8 @@ proc semGeneric(c: PContext, n: PNode, s: PSym, prev: PType): PType =
|
||||||
# special check for generic object with
|
# special check for generic object with
|
||||||
# generic/partial specialized parent
|
# generic/partial specialized parent
|
||||||
let tx = result.skipTypes(abstractPtrs, 50)
|
let tx = result.skipTypes(abstractPtrs, 50)
|
||||||
if tx.isNil:
|
if tx.isNil or isTupleRecursive(tx):
|
||||||
localError(c.config, n.info, "invalid recursion in type '$1'" % typeToString(result[0]))
|
localError(c.config, n.info, "illegal recursion in type '$1'" % typeToString(result[0]))
|
||||||
return errorType(c)
|
return errorType(c)
|
||||||
if tx != result and tx.kind == tyObject and tx.sons[0] != nil:
|
if tx != result and tx.kind == tyObject and tx.sons[0] != nil:
|
||||||
semObjectTypeForInheritedGenericInst(c, n, tx)
|
semObjectTypeForInheritedGenericInst(c, n, tx)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
discard """
|
discard """
|
||||||
errormsg: "illegal recursion in type 'RefTreeInt'"
|
errormsg: "illegal recursion in type 'RefTree'"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
|
||||||
9
tests/types/tillegaltuplerecursiongeneric2.nim
Normal file
9
tests/types/tillegaltuplerecursiongeneric2.nim
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
discard """
|
||||||
|
errormsg: "illegal recursion in type 'TPearl'"
|
||||||
|
"""
|
||||||
|
|
||||||
|
type
|
||||||
|
TPearl[T] = tuple
|
||||||
|
next: TPearl[T]
|
||||||
|
|
||||||
|
var x: TPearl[int]
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
discard """
|
discard """
|
||||||
errormsg: "invalid recursion in type 'Executor'"
|
errormsg: "illegal recursion in type 'Executor'"
|
||||||
line: 8
|
line: 8
|
||||||
"""
|
"""
|
||||||
# bug reported by PR #5637
|
# bug reported by PR #5637
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue