# 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.

# Sections in this file should contain "$compiler == dartdevc" or dartdevk.
[ $compiler == dartdevc ]
class/large_class_declaration_test: Slow, Pass
const/double_in_int_op_test/dd6: Skip # Triple shift
const/double_in_int_op_test/di6: Skip # Triple shift
const/double_in_int_op_test/id6: Skip # Triple shift
const/double_in_int_op_test/ii6: Skip # Triple shift
extension_methods/*: SkipByDesign # Analyzer DDC is expected to be turned down before releasing extension methods.
nnbd/*: Skip
variance/*: SkipByDesign # Analyzer DDC is expected to be turned down before releasing variance.

[ $compiler == dartdevk && !$checked ]
assert/initializer_const_error2_test/*: SkipByDesign # DDC does not support non-checked mode.

[ ($compiler == dartdevc || $compiler == dartdevk) && ($runtime == ff || $runtime == firefox) ]
async/return_throw_test: Skip # Flaky but not enough to be detected. Re-enable pending a decision on the correct behavior. https://github.com/dart-lang/sdk/issues/44395

[ $compiler == dartdevc || $compiler == dartdevk ]
async_star/throw_in_catch_test: Skip # Times out. Issue 29920
external_abstract_fields/external_fields_test: SkipByDesign # Non-JS-interop external members are not supported
number/int64_literal_runtime*_test: Skip # This is testing Dart 2.0 int64 semantics.
superinterface_variance/*: Skip # Issue dart-lang/language#113
vm/*: SkipByDesign # VM only tests.; VM only tests.
