Skip tyAlias inside semTypeTraits in case a concept accidently emits one (#23640)

This commit is contained in:
Jason Beetham
2024-05-23 12:15:20 -06:00
committed by GitHub
parent 6cd03bae29
commit d837d32fd5
2 changed files with 12 additions and 1 deletions

View File

@@ -237,7 +237,7 @@ proc evalTypeTrait(c: PContext; traitCall: PNode, operand: PType, context: PSym)
proc semTypeTraits(c: PContext, n: PNode): PNode =
checkMinSonsLen(n, 2, c.config)
let t = n[1].typ
internalAssert c.config, t != nil and t.kind == tyTypeDesc
internalAssert c.config, t != nil and t.skipTypes({tyAlias}).kind == tyTypeDesc
if t.len > 0:
# This is either a type known to sem or a typedesc
# param to a regular proc (again, known at instantiation)

View File

@@ -365,3 +365,14 @@ block: # enum.len
doAssert MyEnum.enumLen == 4
doAssert OtherEnum.enumLen == 3
doAssert MyFlag.enumLen == 4
when true: # Odd bug where alias can seep inside of `distinctBase`
import std/unittest
type
AdtChild* = concept t
distinctBase(t)
proc `$`*[T: AdtChild](adtChild: T): string = ""
check 10 is int