Skip to content

Analyzer: Static warnings are reported as errors #36127

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
eernstg opened this issue Mar 6, 2019 · 2 comments
Closed

Analyzer: Static warnings are reported as errors #36127

eernstg opened this issue Mar 6, 2019 · 2 comments
Labels
area-language Dart language related items (some items might be better tracked at github.com/dart-lang/language).

Comments

@eernstg
Copy link
Member

eernstg commented Mar 6, 2019

Static warnings exist in Dart again, cf. issue #34349, and they should be reported as such and recognized in tests via the outcome expectation static type warning. However, using a fresh SDK checkout (commit fa0d991), the following program gives rise to test failures as shown below:

class A {
  int //# 0: static type warning
  operator []=(x, y) {}
  void f([int i = 0]) {}
}

int //# 1: static type warning
set setter(value) {}

int get foo => 42;
set foo(
  String //# 2: static type warning
  s) {}

class B extends A {
  void f([int i = 1]) {} //# 3: static type warning
}

enum E { one, two, three }

void useE() {
  var v = E.one;
  switch (v) {
    case E.one: break;
    case E.two: break;
    /* //# 4: static type warning
    case E.three: break;
    */ //# 4: continued
  }
}

int bar() { return; } //# 5: static type warning

Future<int> barAsync() async { return; } //# 6: static type warning

main() {
  A()[0] = 0;
  setter = null;
  foo;
  foo = null;
  B().f();
  useE();
  bar(); //# 5: continued
  barAsync(); //# 6: continued
}

Here is the output:

tools/testing/dart/main.dart:1: Warning: Interpreting this as package URI, 'package:test_dart/main.dart'.
Test configuration:
    custom configuration(architecture: x64, compiler: dart2analyzer, mode: release, runtime: none, system: linux, vm-options: [], timeout: 960, host-checked, preview-dart-2)
Suites tested: language_2

FAILED: dart2analyzer-none release_x64 language_2/scratch_test/2
Expected: Pass
Actual: CompileTimeError

--- Command "dart2analyzer" (took 10.000758s):
DART_CONFIGURATION=ReleaseX64 sdk/bin/dartanalyzer_developer --ignore-unrecognized-flags --packages=/usr/local/google/home/eernst/devel/dart/work/sdk/.packages --format=machine --no-hints /usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_2.dart

exit code:
1

stderr:
ERROR|STATIC_WARNING|MISMATCHED_GETTER_AND_SETTER_TYPES|/usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_2.dart|12|1|18|The return type of getter 'foo' is 'int' which isn't assignable to the type 'String' of its setter 'foo'.

--- Re-run this test:
python tools/test.py -m release -c dart2analyzer -r none --host-checked -t 960 language_2/scratch_test/2

[00:11 |  12% | +    0 | -    1]
FAILED: dart2analyzer-none release_x64 language_2/scratch_test/5
Expected: Pass
Actual: CompileTimeError

--- Command "dart2analyzer" (took 10.000751s):
DART_CONFIGURATION=ReleaseX64 sdk/bin/dartanalyzer_developer --ignore-unrecognized-flags --packages=/usr/local/google/home/eernst/devel/dart/work/sdk/.packages --format=machine --no-hints /usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_5.dart

exit code:
1

stderr:
ERROR|STATIC_WARNING|RETURN_WITHOUT_VALUE|/usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_5.dart|34|13|7|Missing return value after 'return'.

--- Re-run this test:
python tools/test.py -m release -c dart2analyzer -r none --host-checked -t 960 language_2/scratch_test/5

[00:11 |  50% | +    2 | -    2]
FAILED: dart2analyzer-none release_x64 language_2/scratch_test/0
Expected: Pass
Actual: CompileTimeError

--- Command "dart2analyzer" (took 11.000286s):
DART_CONFIGURATION=ReleaseX64 sdk/bin/dartanalyzer_developer --ignore-unrecognized-flags --packages=/usr/local/google/home/eernst/devel/dart/work/sdk/.packages --format=machine --no-hints /usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_0.dart

exit code:
1

stderr:
ERROR|STATIC_WARNING|NON_VOID_RETURN_FOR_OPERATOR|/usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_0.dart|4|3|3|The return type of the operator []= must be 'void'.

--- Re-run this test:
python tools/test.py -m release -c dart2analyzer -r none --host-checked -t 960 language_2/scratch_test/0

[00:11 |  62% | +    2 | -    3]
FAILED: dart2analyzer-none release_x64 language_2/scratch_test/6
Expected: Pass
Actual: CompileTimeError

--- Command "dart2analyzer" (took 11.000320s):
DART_CONFIGURATION=ReleaseX64 sdk/bin/dartanalyzer_developer --ignore-unrecognized-flags --packages=/usr/local/google/home/eernst/devel/dart/work/sdk/.packages --format=machine --no-hints /usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_6.dart

exit code:
1

stderr:
ERROR|STATIC_WARNING|RETURN_WITHOUT_VALUE|/usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_6.dart|36|32|7|Missing return value after 'return'.

--- Re-run this test:
python tools/test.py -m release -c dart2analyzer -r none --host-checked -t 960 language_2/scratch_test/6

[00:11 |  75% | +    2 | -    4]
FAILED: dart2analyzer-none release_x64 language_2/scratch_test/1
Expected: Pass
Actual: CompileTimeError

--- Command "dart2analyzer" (took 11.000416s):
DART_CONFIGURATION=ReleaseX64 sdk/bin/dartanalyzer_developer --ignore-unrecognized-flags --packages=/usr/local/google/home/eernst/devel/dart/work/sdk/.packages --format=machine --no-hints /usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_1.dart

exit code:
1

stderr:
ERROR|STATIC_WARNING|NON_VOID_RETURN_FOR_SETTER|/usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_1.dart|9|1|3|The return type of the setter must be 'void' or absent.

--- Re-run this test:
python tools/test.py -m release -c dart2analyzer -r none --host-checked -t 960 language_2/scratch_test/1

[00:11 |  87% | +    2 | -    5]
FAILED: dart2analyzer-none release_x64 language_2/scratch_test/4
Expected: Pass
Actual: CompileTimeError

--- Command "dart2analyzer" (took 11.000395s):
DART_CONFIGURATION=ReleaseX64 sdk/bin/dartanalyzer_developer --ignore-unrecognized-flags --packages=/usr/local/google/home/eernst/devel/dart/work/sdk/.packages --format=machine --no-hints /usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_4.dart

exit code:
1

stderr:
ERROR|STATIC_WARNING|MISSING_ENUM_CONSTANT_IN_SWITCH|/usr/local/google/home/eernst/devel/dart/work/sdk/out/ReleaseX64/generated_tests/language_2/scratch_test_4.dart|25|3|10|Missing case clause for 'three'.

--- Re-run this test:
python tools/test.py -m release -c dart2analyzer -r none --host-checked -t 960 language_2/scratch_test/4

[00:11 | 100% | +    2 | -    6]

The subtest 3 (about default values) succeeds, reporting 'WARNING|STATIC_WARNING'.

All other subtests fail because the outcome is 'ERROR|STATIC_WARNING', which is not recognized by 'test.dart' as a static type warning. It is not obvious to me whether it's analyzer or 'test.dart' that needs to be adjusted in order to make these subtests succeed.

Note that it's being debated whether the invalid return; statements should be an error or a warning (dart-lang/language#255), which is significant for subtest 5 and 6.

@eernstg eernstg added legacy-area-analyzer Use area-devexp instead. type-bug Incorrect behavior (everything from a crash to more subtle misbehavior) labels Mar 6, 2019
@leafpetersen leafpetersen added area-language Dart language related items (some items might be better tracked at github.com/dart-lang/language). and removed legacy-area-analyzer Use area-devexp instead. labels Mar 6, 2019
@eernstg
Copy link
Member Author

eernstg commented Mar 6, 2019

Current status: This topic needs to be clarified, so we'll make it 'area-language' until a decision has been made on the use of warnings in Dart in general.

@eernstg
Copy link
Member Author

eernstg commented Jun 8, 2020

Closing, the language change decision is handled via dart-lang/language#1012.

@eernstg eernstg closed this as completed Jun 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-language Dart language related items (some items might be better tracked at github.com/dart-lang/language).
Projects
None yet
Development

No branches or pull requests

2 participants