summaryrefslogtreecommitdiff
path: root/support/regression/tests/bug-3711.c
blob: f0b0dc742000f110b3403a860e982356c1678833 (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
67
68
69
70
71
72
73
74
75
76
/* bug-3711.c
   A bug in mcs51 code generation for __reentrant functions with __bit parameters.
*/

#include <testfwk.h>

#if !defined(__SDCC_mcs51) && !defined(__SDCC_ds390)
#define __bit _Bool
#endif

void f0(__bit b) __reentrant;
void f1(unsigned char c, __bit b) __reentrant;
void f2(__bit b, unsigned char c) __reentrant;
void f3(unsigned long long l, __bit b) __reentrant;
void f4(__bit b, unsigned long long l) __reentrant;
void f5 (unsigned char c, const unsigned char __code* cp, unsigned int i, unsigned int j, __bit b, const void __code* vcp) __reentrant;

void g(void)
{
	f0(0);
	f1(1, 0);
	f2(0, 1);
	f3(1, 0);
#ifndef __SDCC_mcs51 // Bug #3712
	f4(0, 1);
#endif
	f5(2, 0, 3, 4, 1, 0);
}

void
testBug(void)
{
	g();
}

void f0(__bit b) __reentrant
{
	ASSERT (b == 0);
}

void f1(unsigned char c, __bit b) __reentrant
{
	ASSERT (c == 1);
	ASSERT (b == 0);
}

void f2(__bit b, unsigned char c) __reentrant
{
	ASSERT (b == 0);
	ASSERT (c == 1);
}

void f3(unsigned long long l, __bit b) __reentrant
{
	ASSERT (l == 1);
	ASSERT (b == 0);
}

#ifndef __SDCC_mcs51 // Bug #3712
void f4(__bit b, unsigned long long l) __reentrant
{
	ASSERT (b == 0);
	ASSERT (l == 1);
}
#endif

void f5 (unsigned char c, const unsigned char __code* cp, unsigned int i, unsigned int j, __bit b, const void __code* vcp) __reentrant
{
	ASSERT (c == 2);
	ASSERT (cp == 0);
	ASSERT (i == 3);
	ASSERT (j == 4);
	ASSERT (b == 1);
	ASSERT (vcp == 0);
}