blob: 20622d431f853f5c8d256a536c45b698557d52e1 (
plain) (
blame)
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
42
43
44
45
46
47
48
|
/*
bug 2084206
*/
#include <stdarg.h>
#include <testfwk.h>
typedef struct {
void (*f) (void);
char c;
char* p;
} data_t;
typedef void* voidp_t;
typedef void (*funp_t)(void);
volatile data_t mydata;
long varargs(char i, ...)
{
va_list arg;
long ret = -1;
va_start (arg, i);
switch (i)
{
case 1: ret = (long)va_arg(arg, voidp_t); break;
case 2: ret = (long)va_arg(arg, funp_t); break;
}
va_end (arg);
return ret;
}
void testBug(void)
{
#ifndef __SDCC_pdk14 // Lack of memory - see RFE # 613.
#ifndef __SDCC_pdk15 // TODO: Decide on support for casts between object and function pointers for pdk!
#ifndef __SDCC_pic16
void* ptr = testBug;
mydata.f = testBug;
ASSERT (varargs(1, mydata.f) == (long)ptr);
ASSERT (varargs(1, mydata.f) == (long)(void*)testBug);
ASSERT (varargs(2, (funp_t)mydata.f) == (long)mydata.f);
ASSERT (varargs(2, (void (*)(void))mydata.f) == (long)mydata.f);
#endif
#endif
#endif
}
|