Insert implicit downcasts for the conditions of do statements.

Change-Id: I8bfffa0796775434cea767ec9ad13cf5697812d2
Reviewed-on: https://dart-review.googlesource.com/23140
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Paul Berry 2017-11-22 21:47:14 +00:00 committed by commit-bot@chromium.org
parent afbcb4a1fc
commit 501872471c
12 changed files with 76 additions and 3 deletions

View file

@ -614,8 +614,11 @@ class ShadowDoStatement extends DoStatement implements ShadowStatement {
void _inferStatement(ShadowTypeInferrer inferrer) {
inferrer.listener.doStatementEnter(this);
inferrer.inferStatement(body);
inferrer.inferExpression(
condition, inferrer.coreTypes.boolClass.rawType, false);
var boolType = inferrer.coreTypes.boolClass.rawType;
var actualType =
inferrer.inferExpression(condition, boolType, !inferrer.isTopLevel);
inferrer.checkAssignability(
boolType, actualType, condition, condition.fileOffset);
inferrer.listener.doStatementExit(this);
}
}

View file

@ -465,6 +465,7 @@ runtime_checks/covariant_generic_parameter_tear_off: Crash
runtime_checks/covariant_keyword: Crash
runtime_checks/covariant_setter: Crash
runtime_checks/forwarding_stub_with_default_values: Crash
runtime_checks/implicit_downcast_do: Crash
runtime_checks/implicit_downcast_if: Crash
runtime_checks/implicit_downcast_not: Crash
runtime_checks_new/call_through_this: Crash

View file

@ -94,6 +94,7 @@ regress/issue_29982: Fail # Issue 29982.
regress/issue_30836: RuntimeError # Issue 30836.
regress/issue_31155: Crash # Issue 31155.
runtime_checks/implicit_downcast_do: RuntimeError # Test exercises strong mode semantics
runtime_checks/implicit_downcast_if: RuntimeError # Test exercises strong mode semantics
runtime_checks/implicit_downcast_not: RuntimeError # Test exercises strong mode semantics
runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError # Test exercises strong mode semantics

View file

@ -0,0 +1,14 @@
// 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.
/*@testedFeatures=checks*/
library test;
main() {
Object o = 1;
try {
do {} while (o);
throw 'no exception';
} on TypeError {}
}

View file

@ -0,0 +1,15 @@
library test;
import self as self;
import "dart:core" as core;
static method main() → dynamic {
core::Object o = 1;
try {
do {
}
while (o)
throw "no exception";
}
on core::TypeError catch(no-exception-var) {
}
}

View file

@ -0,0 +1,5 @@
library test;
import self as self;
static method main() → dynamic
;

View file

@ -0,0 +1,15 @@
library test;
import self as self;
import "dart:core" as core;
static method main() → dynamic {
core::Object o = 1;
try {
do {
}
while (o as{TypeError} core::bool)
throw "no exception";
}
on core::TypeError catch(no-exception-var) {
}
}

View file

@ -0,0 +1,14 @@
// 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.
import "package:expect/expect.dart";
void main() {
Object b = false;
do {} while (b); // No error
b = new Object();
Expect.throwsTypeError(() {
do {} while (b);
});
}

View file

@ -1078,6 +1078,7 @@ implicit_downcast_during_combiner_test: RuntimeError
implicit_downcast_during_compound_assignment_test: RuntimeError
implicit_downcast_during_conditional_expression_test: RuntimeError
implicit_downcast_during_constructor_invocation_test: RuntimeError
implicit_downcast_during_do_test: RuntimeError
implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_if_statement_test: RuntimeError
@ -2991,6 +2992,7 @@ implicit_downcast_during_assignment_test: RuntimeError
implicit_downcast_during_combiner_test: RuntimeError
implicit_downcast_during_compound_assignment_test: RuntimeError
implicit_downcast_during_conditional_expression_test: RuntimeError
implicit_downcast_during_do_test: RuntimeError
implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_if_statement_test: RuntimeError

View file

@ -1343,7 +1343,6 @@ vm/regress_27201_test: CompileTimeError # Fasta/KernelVM bug: Deferred loading k
vm/regress_29145_test: Skip # Issue 29145
vm/type_cast_vm_test: RuntimeError
vm/type_vm_test/10: MissingCompileTimeError
vm/type_vm_test/11: MissingCompileTimeError
vm/type_vm_test/12: MissingCompileTimeError
vm/type_vm_test/27: MissingCompileTimeError
vm/type_vm_test/none: RuntimeError
@ -2269,6 +2268,7 @@ implicit_downcast_during_assignment_test: Pass # Correctly passes.
implicit_downcast_during_combiner_test: Pass # Correctly passes.
implicit_downcast_during_compound_assignment_test: Pass # Correctly passes.
implicit_downcast_during_conditional_expression_test: Pass # Correctly passes.
implicit_downcast_during_do_test: Pass # Correctly passes.
implicit_downcast_during_if_null_assignment_test: Pass # Correctly passes.
implicit_downcast_during_if_statement_test: Pass # Correctly passes.
implicit_downcast_during_list_literal_test: Pass # Correctly passes.
@ -3285,6 +3285,7 @@ implicit_downcast_during_assignment_test: RuntimeError
implicit_downcast_during_combiner_test: RuntimeError
implicit_downcast_during_compound_assignment_test: RuntimeError
implicit_downcast_during_conditional_expression_test: RuntimeError
implicit_downcast_during_do_test: RuntimeError
implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_if_statement_test: RuntimeError
implicit_downcast_during_list_literal_test: RuntimeError

View file

@ -1035,6 +1035,7 @@ implicit_downcast_during_combiner_test: RuntimeError
implicit_downcast_during_compound_assignment_test: RuntimeError
implicit_downcast_during_conditional_expression_test: RuntimeError
implicit_downcast_during_constructor_invocation_test: RuntimeError
implicit_downcast_during_do_test: RuntimeError
implicit_downcast_during_factory_constructor_invocation_test: RuntimeError
implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_if_statement_test: RuntimeError

View file

@ -1013,6 +1013,7 @@ implicit_downcast_during_assignment_test: RuntimeError
implicit_downcast_during_combiner_test: RuntimeError
implicit_downcast_during_compound_assignment_test: RuntimeError
implicit_downcast_during_conditional_expression_test: RuntimeError
implicit_downcast_during_do_test: RuntimeError
implicit_downcast_during_if_null_assignment_test: RuntimeError
implicit_downcast_during_if_statement_test: RuntimeError
implicit_downcast_during_list_literal_test: RuntimeError