OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.c-torture/] [execute/] [20010122-1.c] - Blame information for rev 801

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 688 jeremybenn
 
2
extern void exit (int);
3
extern void abort (void);
4
extern void *alloca (__SIZE_TYPE__);
5
char *dummy (void);
6
 
7
#define NOINLINE __attribute__((noinline))
8
 
9
void *save_ret1[6];
10
void *test4a (char *);
11
void *test5a (char *);
12
void *test6a (char *);
13
 
14
void NOINLINE *test1 (void)
15
{
16
  void * temp;
17
  temp = __builtin_return_address (0);
18
  return temp;
19
}
20
 
21
void NOINLINE *test2 (void)
22
{
23
  void * temp;
24
  dummy ();
25
  temp = __builtin_return_address (0);
26
  return temp;
27
}
28
 
29
void NOINLINE *test3 (void)
30
{
31
  void * temp;
32
  temp = __builtin_return_address (0);
33
  dummy ();
34
  return temp;
35
}
36
 
37
void NOINLINE *test4 (void)
38
{
39
  char * save = (char*) alloca (4);
40
 
41
  return test4a (save);
42
}
43
 
44
void *NOINLINE test4a (char * p)
45
{
46
  void * temp;
47
  temp = __builtin_return_address (1);
48
  return temp;
49
}
50
 
51
void NOINLINE *test5 (void)
52
{
53
  char * save = (char*) alloca (4);
54
 
55
  return test5a (save);
56
}
57
 
58
void NOINLINE *test5a (char * p)
59
{
60
  void * temp;
61
  dummy ();
62
  temp = __builtin_return_address (1);
63
  return temp;
64
}
65
 
66
void NOINLINE *test6 (void)
67
{
68
  char * save = (char*) alloca (4);
69
 
70
  return test6a (save);
71
}
72
 
73
void NOINLINE *test6a (char * p)
74
{
75
  void * temp;
76
  temp = __builtin_return_address (1);
77
  dummy ();
78
  return temp;
79
}
80
 
81
void *(*func1[6])(void) = { test1, test2, test3, test4, test5, test6 };
82
 
83
char * NOINLINE call_func1 (int i)
84
{
85
  save_ret1[i] = func1[i] ();
86
}
87
 
88
static void *ret_addr;
89
void *save_ret2[6];
90
void test10a (char *);
91
void test11a (char *);
92
void test12a (char *);
93
 
94
void NOINLINE test7 (void)
95
{
96
  ret_addr = __builtin_return_address (0);
97
  return;
98
}
99
 
100
void NOINLINE test8 (void)
101
{
102
  dummy ();
103
  ret_addr = __builtin_return_address (0);
104
  return;
105
}
106
 
107
void NOINLINE test9 (void)
108
{
109
  ret_addr = __builtin_return_address (0);
110
  dummy ();
111
  return;
112
}
113
 
114
void NOINLINE test10 (void)
115
{
116
  char * save = (char*) alloca (4);
117
 
118
  test10a (save);
119
}
120
 
121
void NOINLINE test10a (char * p)
122
{
123
  ret_addr = __builtin_return_address (1);
124
  return;
125
}
126
 
127
void NOINLINE test11 (void)
128
{
129
  char * save = (char*) alloca (4);
130
 
131
  test11a (save);
132
}
133
 
134
void NOINLINE test11a (char * p)
135
{
136
  dummy ();
137
  ret_addr = __builtin_return_address (1);
138
  return;
139
}
140
 
141
void NOINLINE test12 (void)
142
{
143
  char * save = (char*) alloca (4);
144
 
145
  test12a (save);
146
}
147
 
148
void NOINLINE test12a (char * p)
149
{
150
  ret_addr = __builtin_return_address (1);
151
  dummy ();
152
  return;
153
}
154
 
155
char * dummy (void)
156
{
157
  char * save = (char*) alloca (4);
158
 
159
  return save;
160
}
161
 
162
void (*func2[6])(void) = { test7, test8, test9, test10, test11, test12 };
163
 
164
void NOINLINE call_func2 (int i)
165
{
166
  func2[i] ();
167
  save_ret2[i] = ret_addr;
168
}
169
 
170
int main (void)
171
{
172
  int i;
173
 
174
  for (i = 0; i < 6; i++) {
175
    call_func1(i);
176
  }
177
 
178
  if (save_ret1[0] != save_ret1[1]
179
      || save_ret1[1] != save_ret1[2])
180
    abort ();
181
  if (save_ret1[3] != save_ret1[4]
182
      || save_ret1[4] != save_ret1[5])
183
    abort ();
184
  if (save_ret1[3] && save_ret1[0] != save_ret1[3])
185
    abort ();
186
 
187
 
188
  for (i = 0; i < 6; i++) {
189
    call_func2(i);
190
  }
191
 
192
  if (save_ret2[0] != save_ret2[1]
193
      || save_ret2[1] != save_ret2[2])
194
    abort ();
195
  if (save_ret2[3] != save_ret2[4]
196
      || save_ret2[4] != save_ret2[5])
197
    abort ();
198
  if (save_ret2[3] && save_ret2[0] != save_ret2[3])
199
    abort ();
200
 
201
  exit (0);
202
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.