blob: e7125660f46782a2031805f35687a7cefc811e46 [file] [log] [blame]
Saleem Abdulrasoolb8771592015-04-24 20:20:54 +00001//===------------------------- unwind_06.cpp ------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Asiri Rathnayake4174e8b2016-05-31 12:01:32 +000010// UNSUPPORTED: libcxxabi-no-exceptions
11
Saleem Abdulrasoolb8771592015-04-24 20:20:54 +000012#include <exception>
13#include <stdlib.h>
14#include <assert.h>
15#include <stdio.h>
16
17// Compile with -Os to get compiler uses float registers to hold float variables
18
19double get_(int x) { return (double)x; }
20
21double (* volatile get)(int) = get_;
22
23volatile int counter;
24
25double try1(bool v) {
26 double a = get(0);
27 double b = get(1);
28 for (counter = 100; counter; --counter)
29 a += get(1) + b;
30 if (v) throw 10;
31 return get(0)+a+b;
32}
33
34double try2(bool v) {
35 double a = get(0);
36 double b = get(1);
37 double c = get(2);
38 for (counter = 100; counter; --counter)
39 a += get(1) + b + c;
40 if (v) throw 10;
41 return get(0)+a+b+c;
42}
43
44double try3(bool v) {
45 double a = get(0);
46 double b = get(1);
47 double c = get(2);
48 double d = get(3);
49 for (counter = 100; counter; --counter)
50 a += get(1) + b + c + d;
51 if (v) throw 10;
52 return get(0)+a+b+c+d;
53}
54
55double try4(bool v) {
56 double a = get(0);
57 double b = get(0);
58 double c = get(0);
59 double d = get(0);
60 double e = get(0);
61 for (counter = 100; counter; --counter)
62 a += get(1) + b+c+d+e;
63 if (v) throw 10;
64 return get(0)+a+b+c+d+e;
65}
66
67double try5(bool v) {
68 double a = get(0);
69 double b = get(0);
70 double c = get(0);
71 double d = get(0);
72 double e = get(0);
73 double f = get(0);
74 for (counter = 100; counter; --counter)
75 a += get(1) + b+c+d+e+f;
76 if (v) throw 10;
77 return get(0)+a+b+c+d+e+f;
78}
79
80double try6(bool v) {
81 double a = get(0);
82 double b = get(0);
83 double c = get(0);
84 double d = get(0);
85 double e = get(0);
86 double f = get(0);
87 double g = get(0);
88 for (counter = 100; counter; --counter)
89 a += get(1) + b+c+d+e+f+g;
90 if (v) throw 10;
91 return get(0)+a+b+c+d+e+f+g;
92}
93
94double try7(bool v) {
95 double a = get(0);
96 double b = get(0);
97 double c = get(0);
98 double d = get(0);
99 double e = get(0);
100 double f = get(0);
101 double g = get(0);
102 double h = get(0);
103 for (counter = 100; counter; --counter)
Eric Fiselier08bf03c2016-12-24 00:37:13 +0000104 a += get(1) + b+c+d+e+f+g+h;
Saleem Abdulrasoolb8771592015-04-24 20:20:54 +0000105 if (v) throw 10;
Eric Fiselier08bf03c2016-12-24 00:37:13 +0000106 return get(0)+a+b+c+d+e+f+g+h;
Saleem Abdulrasoolb8771592015-04-24 20:20:54 +0000107}
108
109double try8(bool v) {
110 double a = get(0);
111 double b = get(0);
112 double c = get(0);
113 double d = get(0);
114 double e = get(0);
115 double f = get(0);
116 double g = get(0);
117 double h = get(0);
118 double i = get(0);
119 for (counter = 100; counter; --counter)
Eric Fiselier08bf03c2016-12-24 00:37:13 +0000120 a += get(1) + b+c+d+e+f+g+h+i;
Saleem Abdulrasoolb8771592015-04-24 20:20:54 +0000121 if (v) throw 10;
Eric Fiselier08bf03c2016-12-24 00:37:13 +0000122 return get(0)+a+b+c+d+e+f+g+h+i;
Saleem Abdulrasoolb8771592015-04-24 20:20:54 +0000123}
124
125
126
127
128
129double foo()
130{
131 double a = get(1);
132 double b = get(2);
133 double c = get(3);
134 double d = get(4);
135 double e = get(5);
136 double f = get(6);
137 double g = get(7);
138 double h = get(8);
139 try {
140 try1(true);
141 }
142 catch (int e) {
143 }
144 assert(a == get(1));
145 assert(b == get(2));
146 assert(c == get(3));
147 assert(d == get(4));
148 assert(e == get(5));
149 assert(f == get(6));
150 assert(g == get(7));
151 assert(h == get(8));
152
153 try {
154 try2(true);
155 }
156 catch (int e) {
157 }
158 assert(a == get(1));
159 assert(b == get(2));
160 assert(c == get(3));
161 assert(d == get(4));
162 assert(e == get(5));
163 assert(f == get(6));
164 assert(g == get(7));
165 assert(h == get(8));
166
167 try {
168 try3(true);
169 }
170 catch (int e) {
171 }
172 assert(a == get(1));
173 assert(b == get(2));
174 assert(c == get(3));
175 assert(d == get(4));
176 assert(e == get(5));
177 assert(f == get(6));
178 assert(g == get(7));
179 assert(h == get(8));
180
181 try {
182 try4(true);
183 }
184 catch (int e) {
185 }
186 assert(a == get(1));
187 assert(b == get(2));
188 assert(c == get(3));
189 assert(d == get(4));
190 assert(e == get(5));
191 assert(f == get(6));
192 assert(g == get(7));
193 assert(h == get(8));
194
195 try {
196 try5(true);
197 }
198 catch (int e) {
199 }
200 assert(a == get(1));
201 assert(b == get(2));
202 assert(c == get(3));
203 assert(d == get(4));
204 assert(e == get(5));
205 assert(f == get(6));
206 assert(g == get(7));
207 assert(h == get(8));
208
209 try {
210 try6(true);
211 }
212 catch (int e) {
213 }
214 assert(a == get(1));
215 assert(b == get(2));
216 assert(c == get(3));
217 assert(d == get(4));
218 assert(e == get(5));
219 assert(f == get(6));
220 assert(g == get(7));
221 assert(h == get(8));
222
223 try {
224 try7(true);
225 }
226 catch (int e) {
227 }
228 assert(a == get(1));
229 assert(b == get(2));
230 assert(c == get(3));
231 assert(d == get(4));
232 assert(e == get(5));
233 assert(f == get(6));
234 assert(g == get(7));
235 assert(h == get(8));
236
237 try {
238 try8(true);
239 }
240 catch (int e) {
241 }
242 assert(a == get(1));
243 assert(b == get(2));
244 assert(c == get(3));
245 assert(d == get(4));
246 assert(e == get(5));
247 assert(f == get(6));
248 assert(g == get(7));
249 assert(h == get(8));
250
251 return a+b+c+d+e+f+g+h;
252}
253
254
255
256int main()
257{
258 foo();
259}