source: tests/ctrl-flow/fallthrough.cfa @ a57ad8a

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
18void 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
117int 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.