Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(676)

Side by Side Diff: tests/language/try_catch4_test.dart

Issue 11366085: Fix control flow graph in the presence of aborting instructions in a try/catch/finally. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 // Check that our SSA graph does have the try body a predecessor of a
5 // try/finally.
6
7 var a;
8
9 foo1() {
10 var b = false;
11 var entered = false;
12 while (true) {
13 if (entered) return b;
14 b = 8 == a; // This expression should not be GVN'ed.
15 try {
16 a = 8;
17 return;
18 } finally {
19 b = 8 == a;
20 entered = true;
21 continue;
22 }
23 }
24 }
25
26 doThrow() { throw 2; }
27
28 foo2() {
29 var b = false;
30 var entered = false;
31 while (true) {
32 if (entered) return b;
33 b = 8 == a; // This expression should not be GVN'ed.
34 try {
35 a = 8;
36 doThrow();
37 return;
38 } catch(e) {
39 b = 8 == a;
40 entered = true;
41 continue;
42 }
43 }
44 }
45
46 foo3() {
47 var b = false;
48 var entered = false;
49 while (true) {
50 if (entered) return b;
51 b = 8 == a; // This expression should not be GVN'ed.
52 try {
53 doThrow();
54 } catch(e) {
55 a = 8;
56 entered = true;
57 return;
58 } finally {
59 b = 8 == a;
60 entered = true;
61 continue;
62 }
63 }
64 }
65
66 foo4() {
67 var b = false;
68 var entered = false;
69 while (true) {
70 if (entered) return b;
71 b = 8 == a; // This expression should not be GVN'ed.
72 try {
73 a = 8;
74 break;
75 } finally {
76 b = 8 == a;
77 entered = true;
78 continue;
79 }
80 }
81 }
82
83 foo5() {
84 var b = false;
85 var entered = false;
86 while (true) {
87 if (entered) return b;
88 b = 8 == a; // This expression should not be GVN'ed.
89 try {
90 a = 8;
91 doThrow();
92 break;
93 } catch(e) {
94 b = 8 == a;
95 entered = true;
96 continue;
97 }
98 }
99 }
100
101 foo6() {
102 var b = false;
103 var entered = false;
104 while (true) {
105 if (entered) return b;
106 b = 8 == a; // This expression should not be GVN'ed.
107 try {
108 doThrow();
109 } catch(e) {
110 a = 8;
111 entered = true;
112 break;
113 } finally {
114 b = 8 == a;
115 entered = true;
116 continue;
117 }
118 }
119 }
120
121 foo7() {
122 var b = false;
123 var entered = false;
124 while (true) {
125 if (entered) return b;
126 b = 8 == a; // This expression should not be GVN'ed.
127 try {
128 a = 8;
129 continue;
130 } finally {
131 b = 8 == a;
132 entered = true;
133 continue;
134 }
135 }
136 }
137
138 foo8() {
139 var b = false;
140 var entered = false;
141 while (true) {
142 if (entered) return b;
143 b = 8 == a; // This expression should not be GVN'ed.
144 try {
145 a = 8;
146 doThrow();
147 continue;
148 } catch(e) {
149 b = 8 == a;
150 entered = true;
151 continue;
152 }
153 }
154 }
155
156 foo9() {
157 var b = false;
158 var entered = false;
159 while (true) {
160 if (entered) return b;
161 b = 8 == a; // This expression should not be GVN'ed.
162 try {
163 doThrow();
164 } catch(e) {
165 a = 8;
166 entered = true;
167 continue;
168 } finally {
169 b = 8 == a;
170 entered = true;
171 continue;
172 }
173 }
174 }
175
176 main() {
177 a = 0;
178 Expect.isTrue(foo1());
179 a = 0;
180 Expect.isTrue(foo2());
181 a = 0;
182 Expect.isTrue(foo3());
183 a = 0;
184 Expect.isTrue(foo4());
185 a = 0;
186 Expect.isTrue(foo5());
187 a = 0;
188 Expect.isTrue(foo6());
189 a = 0;
190 Expect.isTrue(foo7());
191 a = 0;
192 Expect.isTrue(foo8());
193 a = 0;
194 Expect.isTrue(foo9());
195 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698