source: src/tests/labelledExit.c@ a8615fd1

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr no_list persistent-indexer pthread-emulation qualifiedEnum
Last change on this file since a8615fd1 was 2f22cc4, checked in by Peter A. Buhr <pabuhr@…>, 9 years ago

more refactoring of parser code

  • Property mode set to 100644
File size: 2.7 KB
Line 
1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
7// labelledExit.c --
8//
9// Author : Peter A. Buhr
10// Created On : Wed Aug 10 07:29:39 2016
11// Last Modified By : Peter A. Buhr
12// Last Modified On : Wed Aug 10 07:30:15 2016
13// Update Count : 1
14//
15
16int foo() {
17 int i;
18 int x, y;
19
20 x = 0; y = 0;
21
22 // block, labelled exits
23
24 Block: {
25 if ( x == y ) {
26 for ( ; i < y; ) {
27 y += 1;
28 if ( y < 10 ) break Block;
29 }
30 }
31 }
32
33 // loops, labelled exits
34
35 w1: while ( y == 10 );
36
37 w2: while ( x < 10 ) {
38 while (y < 5 ) {
39 if ( y == 3 ) break w2;
40 }
41 x += 1;
42 }
43
44 A: for ( i = 0; i < 10; i += 1 ) {
45 B: for ( i = 0; i < 10; i += 1 ) {
46 C: for ( i = 0; i < 10; i += 1 ) {
47 goto A;
48 goto B;
49 goto C;
50 continue A;
51 continue B;
52 continue C;
53 continue;
54 break A;
55 break B;
56 break C;
57 break;
58 }
59 }
60 }
61
62 D: for ( ;; ) {
63 break D;
64 continue D;
65 }
66
67 Z : i += 1;
68 goto Z;
69 X: Y: for ( ;; ) {
70 i += 1;
71 if ( i > 5 ) continue X;
72 if ( i < 5 ) break X;
73 if ( i < 5 ) break Y;
74 break;
75 }
76 XX: for ( ;; ) {
77 YY: for ( ;; ) {
78 ZZ: for ( ;; ) {
79 i += 1;
80 if ( i > 5 ) continue XX;
81 if ( i < 5 ) continue YY;
82 if ( i < 5 ) continue ZZ;
83 if ( i > 5 ) break XX;
84 if ( i < 5 ) break YY;
85 if ( i < 5 ) break ZZ;
86 break;
87 }
88 }
89 }
90
91 for ( ;; ) ;
92 for ( int i = 0 ;; ) ;
93 for ( ; i < 0; ) ;
94 for ( ; ; i += 1 ) ;
95 L0: L1: L2: L3: L4: L5: L6: L7: L8: L9:
96 L10: L11: L12: L13: L14: L15: L16: L17: L18: L19:
97 L20: L21: L22: L23: L24: L25: L26: L27: L28: L29:
98 L31: L32: L33: L34:
99 for ( ;; ) {
100 break L0;
101 }
102
103 // switch/choose, labelled exits
104
105 Switch: switch ( i ) {
106 default:
107 i += 1;
108 case 0:
109 i += 1;
110 break Switch;
111 case 1:
112 switch ( i ) {
113 case 0:
114 break Switch;
115 default:
116 ; break;
117 }
118 }
119
120 Choose: choose ( i ) {
121 default:
122 i += 1;
123 case 0:
124 i += 1;
125 break Choose;
126 case 1:
127 choose ( i ) {
128 case 0:
129 break;
130 default:
131 break Choose;
132 }
133 fallthru;
134 case 2:
135 i += 1;
136 }
137
138 // computed goto
139 // {
140 // void *array[] = { &&foo, &&bar, &&hack };
141 // foo: bar: hack:
142 // &&foo;
143 // &&bar;
144 // goto *array[i];
145 // }
146
147 Q: if ( i > 5 ) {
148 i += 1;
149 break Q;
150 }
151 else
152 i += 1;
153}
154
155int main( int argc, char const *argv[] ) {
156 /* code */
157}
158
159// Local Variables: //
160// tab-width: 4 //
161// compile-command: "cfa labelledExit.c" //
162// End: //
Note: See TracBrowser for help on using the repository browser.