File: structreturn.c.in

package info (click to toggle)
sdcc 4.5.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 112,980 kB
  • sloc: ansic: 622,683; cpp: 259,454; makefile: 81,253; sh: 40,203; asm: 19,222; perl: 12,139; yacc: 7,761; awk: 3,378; lisp: 1,677; python: 1,097; lex: 1,028; sed: 76
file content (75 lines) | stat: -rw-r--r-- 1,244 bytes parent folder | download | duplicates (2)
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
/*  Test return of struct / union

    type: char, int, long, long long

 */

#include <testfwk.h>

#ifndef __SDCC_pdk14 // Lack of memory
#if !defined(__SDCC_ds390) && !defined(__SDCC_ds390) && !defined(__SDCC_hc08) && !defined(__SDCC_s08) && !defined(__SDCC_mos6502) && !defined(__SDCC_mos65c02) // struct return not yet supported
struct s
{
	{type} a;
	{type} b;
};

union u
{
	unsigned char a;
	{type} b;
};

struct s f(void)
{
	struct s r;
	r.a = 1;
	r.b = 2;
	return(r);
}

union u g(void)
{
	union u r;
	r.a = 1;
	return(r);
}

int g1(void)
{
	struct s r;
	r = f(); // Assignment of returned struct
	return r.a + r.b;
}

int g2(void)
{
	return f().a + f().b; // Access to member of returned struct
}

int h1(void)
{
	union u r;
	r = g(); // Assignment of returned struct
	return r.a + 1;
}

int h2(void)
{
	return g().a + 1; // Access to member of returned struct
}
#endif
#endif

void testRet (void)
{
#if !defined(__SDCC_ds390) && !defined(__SDCC_ds390) && !defined(__SDCC_hc08) && !defined(__SDCC_s08) && !defined(__SDCC_mos6502) && !defined(__SDCC_mos65c02) // struct return not yet supported
#ifndef __SDCC_pdk14 // Lack of memory
	ASSERT (g1() == 3);
	ASSERT (g2() == 3);
	ASSERT (h1() == 2);
	ASSERT (h2() == 2);
#endif
#endif
}