Last change
on this file since a57ad8a was
b6923b17,
checked in by Andrew Beach <ajbeach@…>, 4 months ago
|
Fixed goto labelled loop. I had to reorder some passes. Updated control declaration hoisting (including comments and correcting update count). Added test, moved more tests into ctrl-flow.
|
-
Property mode set to
100644
|
File size:
2.4 KB
|
Line | |
---|
1 | // |
---|
2 | // Cforall Version 1.0.0 Copyright (C) 2018 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 | // fallthrough.cfa -- |
---|
8 | // |
---|
9 | // Author : Rob Schluntz |
---|
10 | // Created On : Wed Mar 14 10:06:25 2018 |
---|
11 | // Last Modified By : Peter A. Buhr |
---|
12 | // Last Modified On : Mon Dec 24 11:24:35 2018 |
---|
13 | // Update Count : 22 |
---|
14 | // |
---|
15 | |
---|
16 | #include <fstream.hfa> |
---|
17 | |
---|
18 | void test(int choice) { |
---|
19 | choose ( choice ) { |
---|
20 | case 1: |
---|
21 | sout | "case 1"; |
---|
22 | fallthru; |
---|
23 | case 2: |
---|
24 | sout | "case 2"; |
---|
25 | fallthru; |
---|
26 | sout | "did not fallthru"; |
---|
27 | if ( 7 ) fallthru common2; |
---|
28 | fallthru common1; |
---|
29 | case 3: |
---|
30 | sout | "case 3"; |
---|
31 | fallthru default; |
---|
32 | fallthru common1; |
---|
33 | common1: |
---|
34 | sout | "common1"; |
---|
35 | // break |
---|
36 | case 4: |
---|
37 | sout | "case 4"; |
---|
38 | fallthru common2; |
---|
39 | case 5: |
---|
40 | sout | "case 5"; |
---|
41 | fallthru common2; |
---|
42 | fallthru default; |
---|
43 | case 6: |
---|
44 | sout | "case 6"; |
---|
45 | fallthru common2; |
---|
46 | common2: |
---|
47 | sout | "common2"; |
---|
48 | // break |
---|
49 | default: |
---|
50 | sout | "default"; |
---|
51 | fallthru; |
---|
52 | } // choose |
---|
53 | |
---|
54 | sout | nl; |
---|
55 | |
---|
56 | switch ( choice ) { |
---|
57 | case 1: |
---|
58 | sout | "case 1"; |
---|
59 | switch ( choice ) { |
---|
60 | case 1: |
---|
61 | sout | "case 1"; |
---|
62 | for ( int i = 0; i < 4; i += 1 ) { |
---|
63 | sout | i; |
---|
64 | if ( i == 2 ) fallthru common; |
---|
65 | } // for |
---|
66 | } // switch |
---|
67 | break; |
---|
68 | case 5: |
---|
69 | sout | "case 5"; |
---|
70 | if ( choice == 5 ) { |
---|
71 | if ( choice != 5 ) { |
---|
72 | sout | "error"; |
---|
73 | } else { |
---|
74 | sout | "check"; |
---|
75 | fallthru common; |
---|
76 | } // if |
---|
77 | } // if |
---|
78 | common: |
---|
79 | sout | "common"; |
---|
80 | fallthru; |
---|
81 | break; |
---|
82 | default: |
---|
83 | sout | "default"; |
---|
84 | fallthru; |
---|
85 | } // switch |
---|
86 | |
---|
87 | #if ERR1 |
---|
88 | // ERROR: fallthrough must be enclosed in switch or choose |
---|
89 | fallthru; |
---|
90 | // ERROR: fallthrough must be enclosed in switch or choose |
---|
91 | fallthru common4; |
---|
92 | // ERROR: fallthrough must be enclosed in switch or choose |
---|
93 | fallthru default; |
---|
94 | choose ( 3 ) { |
---|
95 | case 2: |
---|
96 | for () { |
---|
97 | choose ( 2 ) { |
---|
98 | case 1: |
---|
99 | // ERROR: default is later, but in a different switch |
---|
100 | fallthru default; |
---|
101 | // ERROR: common3 is later, but not at the same level as a case clause |
---|
102 | fallthru common3; |
---|
103 | } |
---|
104 | common3: ; |
---|
105 | } // for |
---|
106 | default: |
---|
107 | case 1: |
---|
108 | common4: |
---|
109 | // ERROR: attempt to jump up with fallthrough |
---|
110 | if ( 7 ) fallthru common4; |
---|
111 | // ERROR: attempt to jump up with fallthrough |
---|
112 | fallthru default; |
---|
113 | } // choose |
---|
114 | #endif |
---|
115 | } |
---|
116 | |
---|
117 | int main() { |
---|
118 | test( 1 ); |
---|
119 | sout | nl; |
---|
120 | test( 5 ); |
---|
121 | } |
---|
122 | |
---|
123 | // Local Variables: // |
---|
124 | // tab-width: 4 // |
---|
125 | // compile-command: "cfa fallthrough.cfa" // |
---|
126 | // End: // |
---|
Note: See
TracBrowser
for help on using the repository browser.