Files
Nim/tests/ccgbugs/taddrconvs.nim
ringabout b527db9ddd fixes #25109; fixes #25111 transform addr(conv(x)) -> conv(addr(x)) (#25112)
follows up https://github.com/nim-lang/Nim/pull/24818
relates to https://github.com/nim-lang/Nim/issues/23923

fixes #25109
fixes #25111

transform `addr ( conv ( x ) )` -> `conv ( addr ( x ) )` so that it is
the original value that is being modified


```c
T1_ = ((unsigned long long*) ((&a_1)));
r(T1_);
```
2025-08-21 13:31:55 +02:00

48 lines
704 B
Nim

discard """
targets: "c cpp"
matrix: "--mm:refc; --mm:orc"
"""
{.emit:"""
void foo(unsigned long long* x)
{
}
""".}
block:
proc foo(x: var culonglong) {.importc: "foo", nodecl.}
proc main(x: var uint64) =
foo(culonglong x)
var u = uint64(12)
main(u)
block:
proc foo(x: var culonglong) {.importc: "foo", nodecl.}
proc main() =
var m = uint64(12)
foo(culonglong(m))
main()
block: # bug #25109
type T = culonglong
proc r(c: var T) = c = 1
proc h(a: var culonglong) = r(T(a))
var a: culonglong
h(a)
doAssert a == 1
block: # bug #25111
type T = culonglong
proc r(c: var T) = c = 1
proc foo =
var a: uint64
r(T(a))
doAssert a == 1
foo()