mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 14:49:43 +00:00
[vm/aot/tfa] Avoid using null as an initial value of non-nullable and late variables without initializer
TEST=pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-nnbd-linux-release-x64-try Change-Id: Ie6b3bdf7069e7d6389e3a729f23b9e1912a4eed2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/285061 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
parent
a92274cae8
commit
55ddbe534a
|
@ -2253,8 +2253,11 @@ class SummaryCollector extends RecursiveResultVisitor<TypeExpr?> {
|
|||
TypeExpr? visitVariableDeclaration(VariableDeclaration node) {
|
||||
node.annotations.forEach(_visit);
|
||||
final initializer = node.initializer;
|
||||
final TypeExpr initialValue =
|
||||
initializer == null ? _nullType : _visit(initializer);
|
||||
final TypeExpr initialValue = initializer == null
|
||||
? ((node.type.nullability == Nullability.nonNullable || node.isLate)
|
||||
? const EmptyType()
|
||||
: _nullType)
|
||||
: _visit(initializer);
|
||||
_declareVariable(node, initialValue);
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -40,4 +40,22 @@ int loop2(int x) {
|
|||
return x;
|
||||
}
|
||||
|
||||
int nonNullableWithoutInitializer(bool cond) {
|
||||
int x;
|
||||
if (cond) {
|
||||
x = 5;
|
||||
} else if (true) {
|
||||
x = 7;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
int? lateWithoutInitializer(bool cond) {
|
||||
late int? x;
|
||||
if (cond) {
|
||||
x = 5;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
main() {}
|
||||
|
|
|
@ -40,6 +40,13 @@ t3* = _Call [dart.core::num.<] (i_0, _T (dart.core::_Smi, 5))
|
|||
t4* = _Call [dart.core::num.+] (_T (dart.core::int)+?, _T (dart.core::_Smi, 10))
|
||||
x_0 = _Join [dart.core::int] (%x, t4)
|
||||
RESULT: x_0
|
||||
------------ nonNullableWithoutInitializer ------------
|
||||
%cond = _Parameter #0 [_T (dart.core::bool)+?]
|
||||
x_0 = _Join [dart.core::int] (_T (dart.core::_Smi, 5), _T (dart.core::_Smi, 7))
|
||||
RESULT: x_0
|
||||
------------ lateWithoutInitializer ------------
|
||||
%cond = _Parameter #0 [_T (dart.core::bool)+?]
|
||||
RESULT: _T (dart.core::_Smi, 5)
|
||||
------------ main ------------
|
||||
|
||||
RESULT: _T {}?
|
||||
|
|
Loading…
Reference in a new issue