// Copyright (c) 2017, 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.

// Dart test for type checks on usage of expressions of type void.

void use(dynamic x) { }

testVoidParam(void x) {
  x;  //# param_stmt: ok
  true ? x : x;  //# param_conditional: compile-time error
  for (x; false; x) {}   //# param_for: ok
  use(x);   //# param_argument: compile-time error
  use(x as Object);  //# param_as: ok
  void y = x;   //# param_void_init: compile-time error
  dynamic z = x;  //# param_dynamic_init: compile-time error
  x is Object;   //# param_is: compile-time error
  throw x;   //# param_throw: compile-time error
  [x];   //# param_literal_list_init: compile-time error
  var m1 = {4: x};   //# param_literal_map_value_init: compile-time error
  var m2 = {x : 4};   //# param_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: x};  //# param_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m4 = {x : 4};  //# param_literal_map_key_init2: compile-time error
  x ?? 499;  //# param_null_equals2: compile-time error
  null ?? x;  //# param_null_equals2: compile-time error
  return x;   //# param_return: compile-time error
  while (x) {};  //# param_while: compile-time error
  do {} while (x);  //# param_do_while: compile-time error
  for (var v in x) {}   //# param_for_in: compile-time error
  for (x in [1, 2]) {}  //# param_for_in2: ok
  x += 1;  //# param_plus_eq: compile-time error
  x.toString();  //# param_toString: compile-time error
  x?.toString();  //# param_null_dot: compile-time error
  x..toString();  //# param_cascade: compile-time error
}

testVoidCall(void f()) {
  f();  //# call_stmt: ok
  true ? f() : f();  //# call_conditional: compile-time error
  for (f(); false; f()) {}   //# call_for: ok
  use(f());   //# call_argument: compile-time error
  use(f() as Object);  //# call_as: ok
  void y = f();   //# call_void_init: compile-time error
  dynamic z = f();  //# call_dynamic_init: compile-time error
  f() is Object;   //# call_is: compile-time error
  throw f();   //# call_throw: compile-time error
  [f()];   //# call_literal_list_init: compile-time error
  var m1 = {4: f() };   //# call_literal_map_value_init: compile-time error
  var m2 = { f(): 4};   //# call_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: f() };  //# call_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m4 = { f(): 4};  //# call_literal_map_key_init2: compile-time error
  f() ?? 499;  //# call_null_equals2: compile-time error
  null ?? f();  //# call_null_equals2: compile-time error
  return f();   //# call_return: compile-time error
  while (f()) {};  //# call_while: compile-time error
  do {} while (f());  //# call_do_while: compile-time error
  for (var v in f()) {}   //# call_for_in: compile-time error
  f().toString();  //# call_toString: compile-time error
  f()?.toString();  //# call_null_dot: compile-time error
  f()..toString();  //# call_cascade: compile-time error
}

testVoidLocal() {
  void x;
  x = 42;   //# local_assign: ok
  x;  //# local_stmt: ok
  true ? x : x;  //# local_conditional: compile-time error
  for (x; false; x) {}   //# local_for: ok
  use(x);   //# local_argument: compile-time error
  use(x as Object);  //# local_as: ok
  void y = x;   //# local_void_init: compile-time error
  dynamic z = x;  //# local_dynamic_init: compile-time error
  x is Object;   //# local_is: compile-time error
  throw x;   //# local_throw: compile-time error
  [x];   //# local_literal_list_init: compile-time error
  var m1 = {4: x};   //# local_literal_map_value_init: compile-time error
  var m2 = {x : 4};   //# local_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: x};  //# local_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m4 = {x : 4};  //# local_literal_map_key_init2: compile-time error
  x ?? 499;  //# local_null_equals2: compile-time error
  null ?? x;  //# local_null_equals2: compile-time error
  return x;   //# local_return: compile-time error
  while (x) {};  //# local_while: compile-time error
  do {} while (x);  //# local_do_while: compile-time error
  for (var v in x) {}   //# local_for_in: compile-time error
  for (x in [1, 2]) {}  //# local_for_in2: ok
  x += 1;  //# local_plus_eq: compile-time error
  x.toString();  //# local_toString: compile-time error
  x?.toString();  //# local_null_dot: compile-time error
  x..toString();  //# local_cascade: compile-time error
}

testVoidFinalLocal() {
  final void x = null;
  x = 42;   //# final_local_assign: compile-time error
  x;  //# final_local_stmt: ok
  true ? x : x;  //# final_local_conditional: compile-time error
  for (x; false; x) {}   //# final_local_for: ok
  use(x);   //# final_local_argument: compile-time error
  use(x as Object);  //# final_local_as: ok
  void y = x;   //# final_local_void_init: compile-time error
  dynamic z = x;  //# final_local_dynamic_init: compile-time error
  x is Object;   //# final_local_is: compile-time error
  throw x;   //# final_local_throw: compile-time error
  [x];   //# final_local_literal_list_init: compile-time error
  var m1 = {4: x};   //# final_local_literal_map_value_init: compile-time error
  var m2 = {x : 4};   //# final_local_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: x};  //# final_local_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m4 = {x : 4};  //# final_local_literal_map_key_init2: compile-time error
  x ?? 499;  //# final_local_null_equals2: compile-time error
  null ?? x;  //# final_local_null_equals2: compile-time error
  return x;   //# final_local_return: compile-time error
  while (x) {};  //# final_local_while: compile-time error
  do {} while (x);  //# final_local_do_while: compile-time error
  for (var v in x) {}   //# final_local_for_in: compile-time error
  for (x in [1, 2]) {}  //# final_local_for_in2: compile-time error
  x += 1;  //# final_local_plus_eq: compile-time error
  x.toString();  //# final_local_toString: compile-time error
  x?.toString();  //# final_local_null_dot: compile-time error
  x..toString();  //# final_local_cascade: compile-time error
}

void global;
testVoidGlobal() {
  global;  //# global_stmt: ok
  true ? global : global;  //# global_conditional: compile-time error
  for (global; false; global) {}   //# global_for: ok
  use(global);   //# global_argument: compile-time error
  use(global as Object);  //# global_as: ok
  void y = global;   //# global_void_init: compile-time error
  dynamic z = global;  //# global_dynamic_init: compile-time error
  global is Object;   //# global_is: compile-time error
  throw global;   //# global_throw: compile-time error
  [global];   //# global_literal_list_init: compile-time error
  var m1 = {4: global };   //# global_literal_map_value_init: compile-time error
  var m2 = { global: 4};   //# global_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: global };  //# global_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m4 = { global: 4};  //# global_literal_map_key_init2: compile-time error
  null ?? global;  //# global_null_equals2: compile-time error
  global ?? 499;  //# global_null_equals2: compile-time error
  return global;   //# global_return: compile-time error
  while (global) {};  //# global_while: compile-time error
  do {} while (global);  //# global_do_while: compile-time error
  for (var v in global) {}   //# global_for_in: compile-time error
  for (global in [1, 2]) {}  //# global_for_in2: ok
  global += 1;  //# global_plus_eq: compile-time error
  global.toString();  //# global_toString: compile-time error
  global?.toString();  //# global_null_dot: compile-time error
  global..toString();  //# global_cascade: compile-time error
}

testVoidConditional() {
  void x;
  (true ? x : x);   //# conditional_parens: compile-time error
  true ? x : x;  //# conditional_stmt: compile-time error
  true ? true ? x : x : true ? x : x;  //# conditional_conditional: compile-time error
  for (true ? x : x; false; true ? x : x) {}   //# conditional_for: compile-time error
  use(true ? x : x);   //# conditional_argument: compile-time error
  void y = true ? x : x;   //# conditional_void_init: compile-time error
  dynamic z = true ? x : x;  //# conditional_dynamic_init: compile-time error
  throw true ? x : x;   //# conditional_throw: compile-time error
  [true ? x : x];   //# conditional_literal_list_init: compile-time error
  var m1 = {4: true ? x : x};   //# conditional_literal_map_value_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: true ? x : x};  //# conditional_literal_map_value_init2: compile-time error
  null ?? true ? x : x;  //# conditional_null_equals2: compile-time error
  return true ? x : x;   //# conditional_return: compile-time error
  while (true ? x : x) {};  //# conditional_while: compile-time error
  do {} while (true ? x : x);  //# conditional_do_while: compile-time error
  for (var v in true ? x : x) {}   //# conditional_for_in: compile-time error

  (true ? 499 : x);   //# conditional2_parens: compile-time error
  true ? 499 : x;  //# conditional2_stmt: compile-time error
  true ? true ? 499 : x : true ? 499 : x;  //# conditional2_conditional: compile-time error
  for (true ? 499 : x; false; true ? 499 : x) {}   //# conditional2_for: compile-time error
  use(true ? 499 : x);   //# conditional2_argument: compile-time error
  void y2 = true ? 499 : x;   //# conditional2_void_init: compile-time error
  dynamic z2 = true ? 499 : x;  //# conditional2_dynamic_init: compile-time error
  throw true ? 499 : x;   //# conditional2_throw: compile-time error
  [true ? 499 : x];   //# conditional2_literal_list_init: compile-time error
  var m12 = {4: true ? 499 : x};   //# conditional2_literal_map_value_init: compile-time error
  Map<dynamic, dynamic> m32 = {4: true ? 499 : x};  //# conditional2_literal_map_value_init2: compile-time error
  null ?? true ? 499 : x;  //# conditional2_null_equals2: compile-time error
  return true ? 499 : x;   //# conditional2_return: compile-time error
  while (true ? 499 : x) {};  //# conditional2while: compile-time error
  do {} while (true ? 499 : x);  //# conditional2do_while: compile-time error
  for (var v in true ? 499 : x) {}   //# conditional2for_in: compile-time error

  (true ? x : 499);   //# conditional3_parens: compile-time error
  true ? x : 499;  //# conditional3_stmt: compile-time error
  true ? true ? x : 499 : true ? x : 499;  //# conditional3_conditional: compile-time error
  for (true ? x : 499; false; true ? x : 499) {}   //# conditional3_for: compile-time error
  use(true ? x : 499);   //# conditional3_argument: compile-time error
  void y3 = true ? x : 499;   //# conditional3_void_init: compile-time error
  dynamic z3 = true ? x : 499;  //# conditional3_dynamic_init: compile-time error
  throw true ? x : 499;   //# conditional3_throw: compile-time error
  [true ? x : 499];   //# conditional3_literal_list_init: compile-time error
  var m13 = {4: true ? x : 499 };   //# conditional3_literal_map_value_init: compile-time error
  Map<dynamic, dynamic> m33 = {4: true ? x : 499 };  //# conditional3_literal_map_value_init2: compile-time error
  null ?? true ? x : 499;  //# conditional3_null_equals2: compile-time error
  return true ? x : 499;   //# conditional3_return: compile-time error
  while (true ? x : 499) {};  //# conditional_while: compile-time error
  do {} while (true ? x : 499);  //# conditional_do_while: compile-time error
  for (var v in true ? x : 499) {}   //# conditional_for_in: compile-time error
}

class A<T> {
  T x;

  void foo() {}
}

class B implements A<void> {
  void x;

  int foo() => 499;

  void forInTest() {
    for (x in <void>[]) {}  //# instance2_for_in2: compile-time error
    for (x in [1, 2]) {}  //# instance2_for_in3: ok
  }
}

class C implements A<void> {
  void get x => null;
  set x(void y) {}

  void foo() {}

  void forInTest() {
    for (x in <void>[]) {}  //# instance3_for_in2: compile-time error
    for (x in [1, 2]) {}  //# instance3_for_in3: ok
  }
}

testInstanceField() {
  A<void> a = new A<void>();
  a.x = 499;  //# field_assign: ok
  a.x;  //# instance_stmt: ok
  true ? a.x : a.x;  //# instance_conditional: compile-time error
  for (a.x; false; a.x) {}   //# instance_for: ok
  use(a.x);   //# instance_argument: compile-time error
  use(a.x as Object);  //# instance_as: ok
  void y = a.x;   //# instance_void_init: compile-time error
  dynamic z = a.x;  //# instance_dynamic_init: compile-time error
  a.x is Object;   //# instance_is: compile-time error
  throw a.x;   //# instance_throw: compile-time error
  [a.x];   //# instance_literal_list_init: compile-time error
  var m1 = {4: a.x};   //# instance_literal_map_value_init: compile-time error
  var m2 = { a.x : 4};   //# instance_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: a.x};  //# instance_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m4 = { a.x : 4};  //# instance_literal_map_key_init2: compile-time error
  null ?? a.x;  //# instance_null_equals2: compile-time error
  a.x ?? 499;  //# instance_null_equals2: compile-time error
  return a.x;   //# instance_return: compile-time error
  while (a.x) {};  //# instance_while: compile-time error
  do {} while (a.x);  //# instance_do_while: compile-time error
  for (var v in a.x) {}   //# instance_for_in: compile-time error
  a.x += 1;  //# instance_plus_eq: compile-time error
  a.x.toString();  //# instance_toString: compile-time error
  a.x?.toString();  //# instance_null_dot: compile-time error
  a.x..toString();  //# instance_cascade: compile-time error

  B b = new B();
  b.x = 42;   //# field_assign2: ok
  b.x;  //# instance2_stmt: ok
  true ? b.x : b.x;  //# instance2_conditional: compile-time error
  for (b.x; false; b.x) {}   //# instance2_for: ok
  use(b.x);   //# instance2_argument: compile-time error
  use(b.x as Object);  //# instance2_as: ok
  void y2 = b.x;   //# instance2_void_init: compile-time error
  dynamic z2 = b.x;  //# instance2_dynamic_init: compile-time error
  b.x is Object;   //# instance2_is: compile-time error
  throw b.x;   //# instance2_throw: compile-time error
  [b.x];   //# instance2_literal_list_init: compile-time error
  var m12 = {4: b.x};   //# instance2_literal_map_value_init: compile-time error
  var m22 = { b.x : 4};   //# instance2_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m32 = {4: b.x};  //# instance2_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m42 = { b.x : 4};  //# instance2_literal_map_key_init2: compile-time error
  null ?? b.x;  //# instance2_null_equals2: compile-time error
  b.x ?? 499;  //# instance2_null_equals2: compile-time error
  return b.x;   //# instance2_return: compile-time error
  while (b.x) {};  //# instance2_while: compile-time error
  do {} while (b.x);  //# instance2_do_while: compile-time error
  for (var v in b.x) {}   //# instance2_for_in: compile-time error
  b.forInTest();
  b.x += 1;  //# instance2_plus_eq: compile-time error
  b.x.toString();  //# instance2_toString: compile-time error
  b.x?.toString();  //# instance2_null_dot: compile-time error
  b.x..toString();  //# instance2_cascade: compile-time error

  C c = new C();
  c.x = 32;   //# setter_assign: ok
  c.x;  //# instance3_stmt: ok
  true ? c.x : c.x;  //# instance3_conditional: compile-time error
  for (c.x; false; c.x) {}   //# instance3_for: ok
  use(c.x);   //# instance3_argument: compile-time error
  use(c.x as Object);  //# instance3_as: ok
  void y3 = c.x;   //# instance3_void_init: compile-time error
  dynamic z3 = c.x;  //# instance3_dynamic_init: compile-time error
  c.x is Object;   //# instance3_is: compile-time error
  throw c.x;   //# instance3_throw: compile-time error
  [c.x];   //# instance3_literal_list_init: compile-time error
  var m13 = {4: c.x};   //# instance3_literal_map_value_init: compile-time error
  var m23 = { c.x : 4};   //# instance3_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m33 = {4: c.x};  //# instance3_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m43 = { c.x : 4};  //# instance3_literal_map_key_init2: compile-time error
  null ?? c.x;  //# instance3_null_equals2: compile-time error
  c.x ?? 499;  //# instance3_null_equals2: compile-time error
  return c.x;   //# instance3_return: compile-time error
  while (c.x) {};  //# instance3_while: compile-time error
  do {} while (c.x);  //# instance3_do_while: compile-time error
  for (var v in c.x) {}   //# instance3_for_in: compile-time error
  c.forInTest();
  c.x += 1;  //# instance3_plus_eq: compile-time error
  c.x.toString();  //# instance3_toString: compile-time error
  c.x?.toString();  //# instance3_null_dot: compile-time error
  c.x..toString();  //# instance3_cascade: compile-time error
}

testParenthesized() {
  void x;
  (x);  //# paren_stmt: ok
  true ? (x) : (x);  //# paren_conditional: compile-time error
  for ((x); false; (x)) {}   //# paren_for: ok
  use((x));   //# paren_argument: compile-time error
  use((x) as Object);  //# paren_as: ok
  void y = (x);   //# paren_void_init: compile-time error
  dynamic z = (x);  //# paren_dynamic_init: compile-time error
  (x) is Object;   //# paren_is: compile-time error
  throw (x);   //# paren_throw: compile-time error
  [(x)];   //# paren_literal_list_init: compile-time error
  var m1 = {4: (x) };   //# paren_literal_map_value_init: compile-time error
  var m2 = { (x): 4};   //# paren_literal_map_key_init: compile-time error
  Map<dynamic, dynamic> m3 = {4: (x) };  //# paren_literal_map_value_init2: compile-time error
  Map<dynamic, dynamic> m4 = { (x): 4};  //# paren_literal_map_key_init2: compile-time error
  (x) ?? 499;  //# paren_null_equals2: compile-time error
  null ?? (x);  //# paren_null_equals2: compile-time error
  return (x);   //# paren_return: compile-time error
  while ((x)) {};  //# paren_while: compile-time error
  do {} while ((x));  //# paren_do_while: compile-time error
  for (var v in (x)) {}   //# paren_for_in: compile-time error
  (x).toString();  //# paren_toString: compile-time error
  (x)?.toString();  //# paren_null_dot: compile-time error
  (x)..toString();  //# paren_cascade: compile-time error
}

void testReturnToVoid(void x, void f()) {
  void y;
  final void z = null;
  A<void> a = new A<void>();
  B b = new B();
  C c = new C();
  return x;   //# param_return_to_void: ok
  return f();   //# call_return_to_void: ok
  return y;   //# local_return_to_void: ok
  return z;   //# final_local_return_to_void: ok
  return global;   //# global_return_to_void: ok
  return true ? x : x;   //# conditional_return_to_void: compile-time error
  return true ? 499 : x;   //# conditional2_return_to_void: compile-time error
  return true ? x : 499;   //# conditional3_return_to_void: compile-time error
  return a.x;   //# instance_return_to_void: ok
  return b.x;   //# instance2_return_to_void: ok
  return c.x;   //# instance3_return_to_void: ok
  return (x);   //# paren_return_to_void: ok
}

main() {
  try {
    testVoidParam(499);
    testVoidCall(() {});
    testVoidLocal();
    testVoidFinalLocal();
    testVoidConditional();
    testInstanceField();
    testParenthesized();
    testReturnToVoid(499, () {});
  } catch (e) {
    // Silently eat all dynamic errors.
    // This test is only testing static analysis.
  }
}
