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

Last change on this file since 0766399 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
RevLine 
[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]18void 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
117int 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.