blob: 8797855255f96d558941c667a5f07377e0cc9c72 [file] [log] [blame]
/*
* Copyright (c) 2019, 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 If a list or set literal has a downwards inference type of
* [Iterable<T>] for some [T], then the downwards inference context type of a
* spread element in that list is [Iterable<T>].
* @description Checks statically that a spread element inference context type
* is [T] in the set literal
* @author iarkh@unipro.ru
*/
// SharedOptions=--enable-experiment=constant-update-2018
class A {}
class B extends A {}
class C extends B {}
List<T> getAList<T>(var a) { return <T>[a]; }
main() {
var a_list = getAList<A>(new A());
var b_list = getAList<B>(new B());
var c_list = getAList<C>(new C());
var int_list = getAList<int>(12);
var str_list = ["string"];
A a = new A();
B b = new B();
C c = new C();
Set set1 = <int>{...str_list}; //# 01: compile-time error
Set set2 = <int>{1, 2, ...a_list, 14}; //# 02: compile-time error
Set set3 = <int>{1, 14, 0, ...c_list}; //# 03: compile-time error
Set set4 = <A>{...int_list}; //# 04: compile-time error
Set set5 = <A>{...?str_list}; //# 05: compile-time error
}