Codegen fix for function pointers marked inline (#8866)

Fixes #5345
Fixes #5701
This commit is contained in:
LemonBoy
2018-09-04 15:28:14 +02:00
committed by Andreas Rumpf
parent cec89d8354
commit 4aba2981dd
3 changed files with 29 additions and 0 deletions

View File

@@ -107,6 +107,8 @@ __clang__
# define N_INLINE(rettype, name) rettype __inline name
#endif
#define N_INLINE_PTR(rettype, name) rettype (*name)
#if defined(__POCC__)
# define NIM_CONST /* PCC is really picky with const modifiers */
# undef _MSC_VER /* Yeah, right PCC defines _MSC_VER even if it is

10
tests/ccgbugs/t5345.nim Normal file
View File

@@ -0,0 +1,10 @@
discard """
output: true
"""
proc cmpx(d: int): bool {.inline.} = d > 0
proc abc[C](cx: C, d: int) =
echo cx(d)
abc(cmpx, 10)

17
tests/ccgbugs/t5701.nim Normal file
View File

@@ -0,0 +1,17 @@
discard """
output: '''(Field0: 1, Field1: 1)
(Field0: 2, Field1: 2)
(Field0: 3, Field1: 3)
'''
"""
iterator zip[T1, T2](a: openarray[T1], b: openarray[T2]): iterator() {.inline.} =
let len = min(a.len, b.len)
for i in 0..<len:
echo (a[i], b[i])
proc foo(args: varargs[int]) =
for i in zip(args,args):
discard
foo(1,2,3)