// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion Execution of a case clause case ek: sk of a switch statement
/// switch (e) {
///   label11 … label1j1 case e1: s1
/// …
///   labeln1 ..labelnjn case en: sn
///   label(n+1)1 ..label(n+1)jn default: sn+1
/// }
/// proceeds as follows:
/// The expression ek == id  is evaluated to an object o which is then subjected
/// to boolean conversion yielding a value v. If v is not true, the following
/// case, case ek+1: sk+1 is executed if it exists. If case ek+1: sk+1 does not
/// exist, then the default clause is executed by executing sn+1. If v is true,
/// let h be the smallest integer such that h >= k and sh is non-empty. If no
/// such h exists, let h = n + 1. The sequence of statements sh is then executed.
/// If execution reaches the point after sh then a runtime error occurs, unless
/// h = n + 1.
/// @description Checks that falling through produces a compile error, if
/// the current clause is not empty case clause and not the default clause.
/// @author sgrekhov@unipro.ru
/// @issue 7537


test(value) {
  var result;

  switch (value) {
    case 1:  result = 1;
             break;
    case 2:  result = 2;
//  ^
// [analyzer] unspecified
// [cfe] unspecified
    case 3:  result = 3;
//  ^
// [analyzer] unspecified
// [cfe] unspecified
    default: result = 4;
  }
  return result;
}

main() {
  test(1);
}
