# Copyright (c) 2013, 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.

[ $compiler == dart2analyzer ]
# not clear: g([var foo = foo + 10]) is parameter 'foo' in the scope of its own initialzer?
Language/06_Functions/2_Formal_Parameters_A02_t02: fail

# not clear: null..[1](1)[2](2).foo(3, bar: 4)=5 - it seems that verything before =5 it not assignable
Language/07_Classes/6_Constructors/1_Generative_Constructors_A04_t15: fail

# invalid argument for constant constructor
Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t02: fail

# TBF: _f is private, so does not collide
Language/07_Classes/1_Instance_Methods_A05_t08: fail

# TBD: should we check that argument for dynamic parameter of constant constructor is not compatible with operation that is performed with it?
Language/12_Expressions/01_Constants_A16_t03: fail

# TBD: should we report _error_ when constant creation uses arguments with types incompatible with parameters?
Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail
Language/12_Expressions/12_Instance_Creation/2_Const_A09_t03: fail

# TBF: infinite look: class A {const A();final m = const A();}
Language/12_Expressions/01_Constants_A17_t03: fail

# analyzer issue https://code.google.com/p/dart/issues/detail?id=11534
Language/15_Types/4_Interface_Types_A11_t01: Skip
Language/15_Types/4_Interface_Types_A11_t02: Skip

# TBF: Hence, a static warning will not be issued if f has no declared return type, since the return type would be dynamic and dynamic may be assigned to void.
Language/13_Statements/11_Return_A07_t01: fail

# TBF: typedef int func2(int); - "int is not a type"
Language/15_Types/6_Type_dynamic_A03_t01: fail
Language/15_Types/6_Type_dynamic_A04_t01: fail


LibTest/core/Uri/decodeQueryComponent_A02_t01: fail # co19 Issue 591

# co19 issue #380, Strings class has been removed
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A04_t01: fail, OK

# co19 issue #400, collection library reorg
LibTest/core/String/concat_A01_t01: fail, OK
LibTest/core/String/concat_A02_t01: fail, OK
LibTest/core/Set/isSubsetOf_A01_t01: fail, OK
LibTest/core/Set/isSubsetOf_A01_t02: fail, OK

# co19 issue #425, Only static fields can be declared as 'const'
Language/05_Variables/05_Variables_A12_t01: fail, OK
Language/05_Variables/05_Variables_A12_t06: fail, OK
Language/05_Variables/05_Variables_A13_t01: fail, OK
Language/07_Classes/07_Classes_A02_t11: fail, OK

# co19 issue #442, undefined name "Expect"
Language/15_Types/4_Interface_Types_A08_t03: fail, OK

# co19 issue #455, undeclared identifier is static warning
Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t10: fail, OK
Language/13_Statements/04_Local_Function_Declaration_A02_t02: fail, OK
Language/14_Libraries_and_Scripts/1_Imports_A02_t12: fail, OK
Language/14_Libraries_and_Scripts/1_Imports_A02_t15: fail, OK

# co19 issue #513, rules for finals were loosened, contradiction in spec was fixed
Language/07_Classes/6_Constructors/1_Generative_Constructors_A21_t01: fail, OK

# co19 issue #515, it is a compile-time error if there is more than one entity with the same name declared in the same scope
Language/07_Classes/3_Setters_A08_t03: fail, OK

# co19 issue #593: Conditional expressions are now allowed as constant expressions
Language/12_Expressions/01_Constants_A15_t16: fail, OK

# co19 issue #438, Static variables are initialized lazily, need not be constants
Language/12_Expressions/01_Constants_A16_t01: fail, OK
Language/12_Expressions/01_Constants_A16_t02: fail, OK

# co19 issue #420, "throw" requires expression, "rethrow" should be used instead
Language/12_Expressions/08_Throw_A05_t01: fail, OK
Language/12_Expressions/08_Throw_A05_t02: fail, OK
Language/12_Expressions/08_Throw_A05_t03: fail, OK

# co19 issue #454 (wrongly closed)
Language/12_Expressions/12_Instance_Creation/1_New_A01_t04: fail, OK

# co19 issue #528, Const: wrong number of type arguments
Language/12_Expressions/12_Instance_Creation_A01_t02: fail, OK
Language/12_Expressions/12_Instance_Creation_A01_t05: fail, OK
Language/12_Expressions/12_Instance_Creation_A01_t06: fail, OK

# co19 issue #433 (wrongly closed), missing @static-warning annotation
Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t01: fail, OK
Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t07: fail, OK

# co19 issue #541: tests contain unqualified reference to static members defined in superclass
Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t07: fail, OK
Language/12_Expressions/30_Identifier_Reference_A14_t03: fail, OK

# co19 issue #543: invocation of a non-function
Language/12_Expressions/14_Function_Invocation/4_Function_Expression_Invocation_A03_t02: fail, OK

# co19 issue #562: malformed superclass
Language/14_Libraries_and_Scripts/1_Imports_A03_t27: fail, OK

# co19 issue #563: implicitly named libraries are allowed
Language/14_Libraries_and_Scripts/2_Exports_A05_t01: fail, OK

# co19 issue #564: URI can be any number adjacent string literals
Language/14_Libraries_and_Scripts/5_URIs_A01_t24: fail, OK
Language/14_Libraries_and_Scripts/5_URIs_A01_t25: fail, OK

# co19 issue #596: initializing final variable at declaration and in constructor
Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t02: fail, OK
Language/07_Classes/6_Constructors/1_Generative_Constructors_A20_t02: fail, OK

# co19 issue #597: concrete class with abstract method
Language/07_Classes/4_Abstract_Instance_Members_A07_t08: fail, OK

