Cloning of InstanceInvocation kernel ast nodes was dropping the
isInvariant and isBoundSafe flags, causing the nested List.generate
expansion to not be as well optimized. `-O3` and `-O4` were 'hiding'
the problem by removing the checks anyway.
Change-Id: Id20f2eb4ef5396691a2dd5cbdd847e2d361a21d0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/209442
Commit-Queue: Stephen Adams <sra@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
FunctionNode.computeFunctionType didn't handle constructors for generic
classes and would fail to substitute type parameters from the enclosing
class.
Change-Id: Ia16ea55ce774597590e6e7da7af066b5c66dfe67
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/207123
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
When we detect that a temporary variable is being reused
with a different type, we change the type of the temp
to dynamic.
This allows us to retain types for any non-reused temps.
For any dynamic temps we still have type information available
for use sites, which we can pass on via unsafeCast.
One drawback of this approach is that we don't know ahead
of time which temps are reused, and get turned into dynamic,
so we have to unsafeCast all uses.
This change is similar to what was done in:
https://dart-review.googlesource.com/c/sdk/+/138500
TEST=Adds tests/language/vm/regress_flutter_85311_test.dart,
updates relevant expect files.
Bug: https://github.com/flutter/flutter/issues/85311
Change-Id: I821c5266327892d5c3fd5bae1bebba7f3fe3931b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/205647
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This is a first pass at running inlined tests
(seemingly called doctests in for instance python) on internal CFE code.
This is not useful for testing the entire compiler for instance, but
could be useful for utility methods that take simple inputs and provide
simple outputs.
I've added tests to a few tings to try it out.
The syntax for it here is probably overly verbose but we could iterate
on that if need be.
The way it's done is that the test-code is extracted from the comments
and (virtually) "injected" in a weirdly named top level method of the
same file, which is then called from a "fake" main; the whole thing is
compiled to dill and run in an isolate.
(This is an application where making advanced invalidation support
adding top level methods would be great).
Change-Id: I7927822bca0ba68780458c40fe585882330e3b60
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/203242
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This CL changes the leak finding from using heap dumps to using the
undocumented (/ private?) method '_getInstancesAsArray' to get all
instances of specific clases (i.e. the one(s) we're finding leaks for).
This - I'm hoping - is more stable than the heap dump version (which,
though, seems to have become more stable over the last weeks).
It is also potentially faster: The speed depends on how many different
classes we want to look at to find leaks.
In the flutter compilation leak tests we only look for one and it
finishes in ~78% of the time it did before. That's (rounding at bit)
going from ~6 hours to ~4.5 hours.
In vm_service_for_leak_detection.dart - that looks at four different
classes - it's something like 26% slower though.
Change-Id: Ic8abb1b293137b166ab0935eae423b60e2d4562b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/202762
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
As kernel `TreeNode`s have `parent`-pointers we can leak through our
dummy nodes. This CL makes a list of all TreeNode dummys so it's
possible to iterate over them and null out the parent pointer,
making it possible to plug the leak "on demand".
This doesn't feel like a real solution and for now is only used in a
test so those leaks doesn't obscure other leaks should any such surface.
Change-Id: I6c0c60ba58df8d9d5eb6cc1c3a144ea31aa3810c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/202682
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This change replaces generation of old invocation AST nodes
(such as PropertyGet, PropertySet and MethodInvocation) in async
transformers with new nodes (InstanceGet, InstanceSet,
InstanceInvocation, LocalFunctionInvocation).
The old nodes will be deleted eventually.
TEST=existing tests
Issue: https://github.com/dart-lang/sdk/issues/45340
Change-Id: I8c2ead9509cfd2def2f75f9d82dc13b2a9490fdf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/202801
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Clement Skau <cskau@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Previously, certain fields of Typedef kernel AST nodes
were omitted from visitChildren(), transformChildren() and
transformOrRemoveChildren() and were not properly visited.
Also, the following related problems are fixed in this CL:
* parents of VariableDeclaration nodes in Typedef were not properly set;
* verifier didn't account for VariableDeclaration nodes in Typedefs.
TEST=existing tests
Change-Id: I4f9cb694ad9cacc9c20fe66e8a49f73f547ca245
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96964
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
New invocation nodes have explicit functionType/resultType fields
which should be also visited by various visitors and transformers.
Without visiting those fields not all types are processed by
certain transformation (e.g. tree shaker) which causes crashes
during AOT compilation if new invocation nodes are enabled.
TEST=runtime/tests/vm/dart/regress_45966_test.dart (with new
invocation nodes).
Fixes https://github.com/dart-lang/sdk/issues/45966
Change-Id: I61d79650984a353d842b58da082a021ab37ab777
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/199365
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>