6e59499c710c6556c5670b924d5d6a2dfffd3bc0
[fw/sdcc] / support / regression / tests / bug-716242.c
1 /* bug-716242.c
2
3    syntax tests about function pointers at compile time
4  */
5 #include <testfwk.h>
6
7 #if defined(PORT_HOST) || defined(SDCC_z80) || defined(SDCC_gbz80) || defined(SDCC_hc08)
8 #  define code
9 #endif
10
11 void *p;
12 int ret;
13
14 int mul2 (int i)
15 {
16   return 2 * i;
17 }
18
19 void g (int (*h) (int))
20 {
21   ret = h (2);
22 }
23
24 void f1()
25 {
26 #if defined(SDCC_ds390)
27   p = (void code *) mul2;
28 #else
29   p = (void *) mul2;
30 #endif
31   g ((int (*) (int)) p);
32 }
33
34 /****************************/
35
36 void g (int (*h) (int));
37
38 void f2()
39 {
40   int (*fp) (int) = p;
41
42   g (fp);
43 }
44
45 /****************************/
46
47 void g (int (*h) (int));
48
49 void f3()
50 {
51   int (*fp) (int) = (int (*) (int)) p;
52
53   g (fp);
54 }
55
56 /****************************/
57
58 void f4()
59 {
60   ((void (code *) (void)) p) ();
61 }
62
63 /****************************/
64
65 void f5()
66 {
67   int (*fp) (int) = mul2;
68
69   fp(1);
70 }
71
72 /****************************/
73
74 void f6()
75 {
76   ((void (code *) (void)) 0) ();
77 }
78
79 /****************************/
80
81 static void
82 testFuncPtr(void)
83 {
84   f1();
85   ASSERT(ret == 4);
86 }