source:
tests/fallthrough.cfa
@
e228f46
Last change on this file since e228f46 was f498c51, checked in by , 6 years ago | |
---|---|
|
|
File size: 2.4 KB |
Rev | Line | |
---|---|---|
[e2c70ab] | 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 | // | |
[dc8511c] | 7 | // fallthrough.cfa -- |
[e2c70ab] | 8 | // |
9 | // Author : Rob Schluntz | |
10 | // Created On : Wed Mar 14 10:06:25 2018 | |
[13f5a70] | 11 | // Last Modified By : Peter A. Buhr |
[f498c51] | 12 | // Last Modified On : Mon Dec 24 11:24:35 2018 |
13 | // Update Count : 22 | |
[e2c70ab] | 14 | // |
15 | ||
[303d866] | 16 | #include <fstream.hfa> |
17 | ||
[e2c70ab] | 18 | void test(int choice) { |
19 | choose ( choice ) { | |
[5ea5b28] | 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"; | |
[13f5a70] | 35 | // break |
[5ea5b28] | 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"; | |
[13f5a70] | 48 | // break |
[5ea5b28] | 49 | default: |
50 | sout | "default"; | |
51 | fallthru; | |
52 | } // choose | |
[e2c70ab] | 53 | |
[200fcb3] | 54 | sout | nl; |
[13f5a70] | 55 | |
56 | switch ( choice ) { | |
57 | case 1: | |
[200fcb3] | 58 | sout | "case 1"; |
[13f5a70] | 59 | switch ( choice ) { |
60 | case 1: | |
[200fcb3] | 61 | sout | "case 1"; |
[13f5a70] | 62 | for ( int i = 0; i < 4; i += 1 ) { |
[f498c51] | 63 | sout | i; |
[13f5a70] | 64 | if ( i == 2 ) fallthru common; |
65 | } // for | |
66 | } // switch | |
67 | break; | |
68 | case 5: | |
[200fcb3] | 69 | sout | "case 5"; |
[13f5a70] | 70 | if ( choice == 5 ) { |
71 | if ( choice != 5 ) { | |
[200fcb3] | 72 | sout | "error"; |
[13f5a70] | 73 | } else { |
[200fcb3] | 74 | sout | "check"; |
[13f5a70] | 75 | fallthru common; |
76 | } // if | |
77 | } // if | |
78 | common: | |
[f498c51] | 79 | sout | "common"; |
[13f5a70] | 80 | fallthru; |
81 | break; | |
82 | default: | |
[f498c51] | 83 | sout | "default"; |
[13f5a70] | 84 | fallthru; |
85 | } // switch | |
86 | ||
[e2c70ab] | 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 ) { | |
[5ea5b28] | 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; | |
[e2c70ab] | 103 | } |
[5ea5b28] | 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 | |
[e2c70ab] | 114 | #endif |
115 | } | |
116 | ||
117 | int main() { | |
[303d866] | 118 | test( 1 ); |
[200fcb3] | 119 | sout | nl; |
[303d866] | 120 | test( 5 ); |
[e2c70ab] | 121 | } |
122 | ||
123 | // Local Variables: // | |
124 | // tab-width: 4 // | |
[dc8511c] | 125 | // compile-command: "cfa fallthrough.cfa" // |
[e2c70ab] | 126 | // End: // |
Note: See TracBrowser
for help on using the repository browser.