blob: 5e5b9f6f35544b320c6e97259fb8fca84310b5ea (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <testfwk.h>
/* Bug #3260 caused typecast function pointers to pass all */
/* parameters via the stack and not pass any parameter via */
/* register, even when some should have been passed via */
/* register. */
/* Look for __SDCC_STACK_AUTO to make sure the port is */
/* parameters in registers and/or stack and not statically */
#if defined(__SDCC_STACK_AUTO) || defined(PORT_HOST)
int (*p)(int, int) __reentrant;
void (*q)(void) __reentrant;
int f(void)
{
return (*p)(23, 42);
}
int g(void)
{
return (*(((int (*)(int, int))q)))(23, 42);
}
int c(int a, int b) __reentrant
{
return a - b;
}
#endif
void
testBug(void)
{
#if defined(__SDCC_STACK_AUTO) || defined(PORT_HOST)
p = &c;
q = (void (*)(void))(&c);
ASSERT (f() == 23 - 42);
ASSERT (g() == 23 - 42);
#endif
}
|