mirror of
https://github.com/nim-lang/Nim.git
synced 2026-07-22 08:51:21 +00:00
fixes #23419 `void` is only supported as fields of objects/tuples. It shouldn't allow void in the array. I didn't merge it with taField because that flag is also used for tyLent, which is allowed in the fields of other types.
This commit is contained in:
@@ -27,6 +27,7 @@ type
|
||||
taProcContextIsNotMacro
|
||||
taIsCastable
|
||||
taIsDefaultField
|
||||
taVoid # only allow direct void fields of objects/tuples
|
||||
|
||||
TTypeAllowedFlags* = set[TTypeAllowedFlag]
|
||||
|
||||
@@ -60,6 +61,8 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind,
|
||||
if typ == nil: return nil
|
||||
if containsOrIncl(marker, typ.id): return nil
|
||||
var t = skipTypes(typ, abstractInst-{tyTypeDesc, tySink})
|
||||
|
||||
let flags = if t.kind == tyVoid: flags else: flags-{taVoid}
|
||||
case t.kind
|
||||
of tyVar, tyLent:
|
||||
if kind in {skProc, skFunc, skConst} and (views notin c.features):
|
||||
@@ -115,7 +118,7 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind,
|
||||
of tyStatic:
|
||||
if kind notin {skParam}: result = t
|
||||
of tyVoid:
|
||||
if taField notin flags: result = t
|
||||
if taVoid notin flags: result = t
|
||||
of tyTypeClasses:
|
||||
if tfGenericTypeParam in t.flags or taConcept in flags: #or taField notin flags:
|
||||
discard
|
||||
@@ -184,12 +187,12 @@ proc typeAllowedAux(marker: var IntSet, typ: PType, kind: TSymKind,
|
||||
t.baseClass != nil and taIsDefaultField notin flags:
|
||||
result = t
|
||||
else:
|
||||
let flags = flags+{taField}
|
||||
let flags = flags+{taField, taVoid}
|
||||
result = typeAllowedAux(marker, t.baseClass, kind, c, flags)
|
||||
if result.isNil and t.n != nil:
|
||||
result = typeAllowedNode(marker, t.n, kind, c, flags)
|
||||
of tyTuple:
|
||||
let flags = flags+{taField}
|
||||
let flags = flags+{taField, taVoid}
|
||||
for a in t.kids:
|
||||
result = typeAllowedAux(marker, a, kind, c, flags)
|
||||
if result != nil: break
|
||||
|
||||
5
tests/errmsgs/t23419.nim
Normal file
5
tests/errmsgs/t23419.nim
Normal file
@@ -0,0 +1,5 @@
|
||||
discard """
|
||||
errormsg: "invalid type: 'void' in this context: '(array[0..-1, void],)' for var"
|
||||
"""
|
||||
|
||||
var a: (array[0, void], )
|
||||
Reference in New Issue
Block a user