blob: f4907b6325ee6f75854cff11d28b4f9ad88ab658 (
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
/*
bug-2349.c
*/
#include <testfwk.h>
#pragma disable_warning 85
long subchar(void *pa, void *pb)
{
return *((char *) pa) - *((char *) pb);
}
long subint(void *pa, void *pb)
{
return *((int *) pa) - *((int *) pb);
}
long sublong(void *pa, void *pb)
{
return *((long *) pa) - *((long *) pb);
}
long addlong(void *pa, void *pb)
{
return *((long *) pa) + *((long *) pb);
}
#define NULL ((void *) 0)
#if defined (__SDCC_MODEL_MEDIUM)
typedef long (*subfunc_t)(void *pa, void * __pdata pb);
#elif defined (__SDCC_MODEL_LARGE)
typedef long (*subfunc_t)(void *pa, void * __xdata pb);
#elif defined (__SDCC_MODEL_HUGE)
typedef long (*subfunc_t)(void *pa, void * __xdata pb);
#else
typedef long (*subfunc_t)(void *pa, void *pb);
#endif
subfunc_t dosub(subfunc_t f)
{
#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15)
if (f == subchar)
return subint;
else if (f == subint)
return sublong;
else if (f == sublong)
return subchar;
else if (f == NULL)
return addlong;
else
return NULL;
#endif
}
void testBug(void)
{
#if !defined(__SDCC_pdk14) && !defined(__SDCC_pdk15)
ASSERT (dosub(subchar) == subint);
ASSERT (dosub(subint) == sublong);
ASSERT (dosub(sublong) == subchar);
ASSERT (dosub(addlong) == NULL);
ASSERT (dosub(NULL) == addlong);
#endif
}
|