mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
fixes #24705 ```nim proc xxx(v: static int) = echo v xxx(10) xxx(20) ``` They are mangled as `_ZN14titaniummangle7xxx_s10E` and `_ZN14titaniummangle7xxx_s20E` with `--debugger:native`. Static parameters are prefixed with `_s` to distinguish simple cases like `xxx(10, 15)` and `xxx(101, 5)` if `xxx` supports two `static[int]` parameters
200 lines
5.0 KiB
Nim
200 lines
5.0 KiB
Nim
discard """
|
|
targets: "c"
|
|
matrix: "--debugger:native"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE6stringN14titaniummangle3FooE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3int7varargsI6stringE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle3BooE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE8typeDescIN14titaniummangle17EnumAnotherSampleEE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrI14uncheckedArrayI3intEE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3setIN14titaniummangle10EnumSampleEE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE4procI6string6stringE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3intN10Comparable10ComparableE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3int3int'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle10EnumSampleE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle17EnumAnotherSampleE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3int3int'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle10EnumSampleE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncEN14titaniummangle17EnumAnotherSampleE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE5tupleI3int3intE7cstring'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE5tupleI5float5floatE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrI3intE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrIN14titaniummangle3FooEE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3ptrI3ptrI3intEE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3refIN14titaniummangle3FooEE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3varIN14titaniummangle3FooEE5int325int323refIN14titaniummangle3FooEE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE3varI3intE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE9openArrayI6stringE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE5arrayI7range013intE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE9ContainerI3intE'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE10Container2I5int325int32E'"
|
|
ccodecheck: "'_ZN14titaniummangle8testFuncE9ContainerI10Container2I5int325int32EE'"
|
|
ccodecheck: "'_ZN14titaniummangle7xxx_s10E'"
|
|
ccodecheck: "'_ZN14titaniummangle7xxx_s20E'"
|
|
"""
|
|
|
|
#When debugging this notice that if one check fails, it can be due to any of the above.
|
|
|
|
type
|
|
Comparable = concept x, y
|
|
(x < y) is bool
|
|
|
|
Foo = object
|
|
a: int32
|
|
b: int32
|
|
|
|
FooTuple = tuple
|
|
a: int
|
|
b: int
|
|
|
|
Container[T] = object
|
|
data: T
|
|
|
|
Container2[T, T2] = object
|
|
data: T
|
|
data2: T2
|
|
|
|
Boo = distinct Foo
|
|
|
|
Coo = Foo
|
|
|
|
Doo = Boo | Foo
|
|
|
|
TestProc = proc(a:string): string
|
|
|
|
type EnumSample = enum
|
|
a, b, c
|
|
|
|
type EnumAnotherSample = enum
|
|
a, b, c
|
|
|
|
proc testFunc(a: set[EnumSample]) =
|
|
echo $a
|
|
|
|
proc testFunc(a: typedesc) =
|
|
echo $a
|
|
|
|
proc testFunc(a: ptr Foo) =
|
|
echo repr a
|
|
|
|
proc testFunc(s: string, a: Coo) =
|
|
echo repr a
|
|
|
|
proc testFunc(s: int, a: Comparable) =
|
|
echo repr a
|
|
|
|
proc testFunc(a: TestProc) =
|
|
let b = ""
|
|
echo repr a("")
|
|
|
|
proc testFunc(a: ref Foo) =
|
|
echo repr a
|
|
|
|
proc testFunc(b: Boo) =
|
|
echo repr b
|
|
|
|
proc testFunc(a: ptr UncheckedArray[int]) =
|
|
echo repr a
|
|
|
|
proc testFunc(a: ptr int) =
|
|
echo repr a
|
|
|
|
proc testFunc(a: ptr ptr int) =
|
|
echo repr a
|
|
|
|
proc testFunc(e: FooTuple, str: cstring) =
|
|
echo e
|
|
|
|
proc testFunc(e: (float, float)) =
|
|
echo e
|
|
|
|
proc testFunc(e: EnumSample) =
|
|
echo e
|
|
|
|
proc testFunc(e: var int) =
|
|
echo e
|
|
|
|
proc testFunc(e: var Foo, a, b: int32, refFoo: ref Foo) =
|
|
echo e
|
|
|
|
proc testFunc(xs: Container[int]) =
|
|
let a = 2
|
|
echo xs
|
|
|
|
proc testFunc(xs: Container2[int32, int32]) =
|
|
let a = 2
|
|
echo xs
|
|
|
|
proc testFunc(xs: Container[Container2[int32, int32]]) =
|
|
let a = 2
|
|
echo xs
|
|
|
|
proc testFunc(xs: seq[int]) =
|
|
let a = 2
|
|
echo xs
|
|
|
|
proc testFunc(xs: openArray[string]) =
|
|
let a = 2
|
|
echo xs
|
|
|
|
proc testFunc(xs: array[2, int]) =
|
|
let a = 2
|
|
echo xs
|
|
|
|
proc testFunc(e: EnumAnotherSample) =
|
|
echo e
|
|
|
|
proc testFunc(a, b: int) =
|
|
echo "hola"
|
|
discard
|
|
|
|
proc testFunc(a: int, xs: varargs[string]) =
|
|
let a = 10
|
|
for x in xs:
|
|
echo x
|
|
|
|
proc xxx(v: static int) =
|
|
echo v
|
|
|
|
proc testFunc() =
|
|
var a = 2
|
|
var aPtr = a.addr
|
|
var foo = Foo()
|
|
let refFoo : ref Foo = new(Foo)
|
|
let b = Foo().Boo()
|
|
let d: Doo = Foo()
|
|
testFunc("", Coo())
|
|
testFunc(1, )
|
|
testFunc(b)
|
|
testFunc(EnumAnotherSample)
|
|
var t = [1, 2]
|
|
let uArr = cast[ptr UncheckedArray[int]](t.addr)
|
|
testFunc(uArr)
|
|
testFunc({})
|
|
testFunc(proc(s:string): string = "test")
|
|
testFunc(20, a.int32)
|
|
testFunc(20, 2)
|
|
testFunc(EnumSample.c)
|
|
testFunc(EnumAnotherSample.c)
|
|
testFunc((2, 1), "adios")
|
|
testFunc((22.1, 1.2))
|
|
testFunc(a.addr)
|
|
testFunc(foo.addr)
|
|
testFunc(aPtr.addr)
|
|
testFunc(refFoo)
|
|
testFunc(foo, 2, 1, refFoo)
|
|
testFunc(a)
|
|
testFunc(@[2, 1, 2])
|
|
testFunc(@["hola"])
|
|
testFunc(2, "hola", "adios")
|
|
let arr: array[2, int] = [2, 1]
|
|
testFunc(arr)
|
|
testFunc(Container[int](data: 10))
|
|
let c2 = Container2[int32, int32](data: 10, data2: 20)
|
|
testFunc(c2)
|
|
testFunc(Container[Container2[int32, int32]](data: c2))
|
|
xxx(10)
|
|
xxx(20)
|
|
|
|
|
|
testFunc() |