fixes #24378; supportsCopyMem can fail from macro context with tuples (#24383)

fixes #24378

```nim
type Win = typeof(`body`)
doAssert not supportsCopyMem((int, Win))
```

`semAfterMacroCall` doesn't skip the children aliases types in the tuple
typedesc construction while the normal program seem to skip the aliases
types somewhere

`(int, Win)` is kept as `(int, alias string)` instead of expected `(int,
string)`
This commit is contained in:
ringabout
2024-10-31 05:58:39 +08:00
committed by GitHub
parent 74df699ff1
commit 5e56f0a356
2 changed files with 28 additions and 1 deletions

View File

@@ -1,3 +1,7 @@
discard """
joinable: false
"""
import typetraits
import macros
@@ -402,3 +406,26 @@ when true: # Odd bug where alias can seep inside of `distinctBase`
proc `$`*[T: AdtChild](adtChild: T): string = ""
check 10 is int
block: # bug #24378
macro forked(body: typed): untyped = # typed or untyped does not matter
result = quote do:
type Win = typeof(`body`)
doAssert not supportsCopyMem((int, Win))
doAssert not supportsCopyMem(tuple[a: int, b: Win])
type Win2[T] = typeof(`body`)
doAssert not supportsCopyMem((int, Win2[int]))
doAssert not supportsCopyMem(tuple[a: int, b: Win2[int]])
forked:
"foobar"
type Win111 = typeof("foobar")
doAssert not supportsCopyMem((int, Win111))
doAssert not supportsCopyMem(tuple[a: int, b: Win111])
type Win222[T] = typeof("foobar")
doAssert not supportsCopyMem((int, Win222[int]))
doAssert not supportsCopyMem(tuple[a: int, b: Win222[int]])