diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart index f0fa679e9b4..d25cbd8e051 100644 --- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart +++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart @@ -370,8 +370,15 @@ class HInstructionStringifier implements HVisitor { String target = "$receiver.$name"; int offset = HInvoke.ARGUMENTS_OFFSET; List arguments = invoke.inputs.sublist(offset); + final attributes = { + if (invoke.isInvariant) 'Invariant', + if (invoke.isBoundsSafe) 'BoundSafe', + }; + String attributesText = attributes.isEmpty ? '' : ' $attributes'; + return handleGenericInvoke(kind, target, arguments) + - "(${invoke.receiverType})"; + "(${invoke.receiverType})" + + attributesText; } @override diff --git a/pkg/compiler/test/kernel/data/list_generate_2.dart.expect b/pkg/compiler/test/kernel/data/list_generate_2.dart.expect index b58c1b66494..c87b0378e17 100644 --- a/pkg/compiler/test/kernel/data/list_generate_2.dart.expect +++ b/pkg/compiler/test/kernel/data/list_generate_2.dart.expect @@ -13,7 +13,7 @@ static method main() → void { final _in::JSArray _list = _in::JSArray::allocateGrowable(_length); for (core::int i = 0; i.{core::num::<}(_length){(core::num) → core::bool}; i = i.{core::num::+}(1){(core::int) →* core::int}) { core::int* i = i; - _list.{_in::JSArray::[]=}(i, i.{core::num::+}(1){(core::num*) →* core::int*}){(core::int, core::int*) → void}; + _list.{_in::JSArray::[]=}{Invariant,BoundsSafe}(i, i.{core::num::+}(1){(core::num*) →* core::int*}){(core::int, core::int*) → void}; } } =>_list){(core::int, core::List*) → void}; } diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect index d6a452a51df..e32d11776c2 100644 --- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect +++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.1.expect @@ -304,7 +304,7 @@ library from "org-dartlang-test:///main.dart" as main { operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List other) → dart.core::List return block { final dart.core::List #t5 = dart.core::List::of(this); - #t5.{dart.core::List::addAll}(other){(dart.core::Iterable) → void}; + #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable) → void}; } =>#t5; method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List { dart.core::int listLength = this.{dart.core::List::length}{dart.core::int}; diff --git a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect index d6a452a51df..e32d11776c2 100644 --- a/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect +++ b/pkg/front_end/testcases/incremental/no_outline_change_22.yaml.world.2.expect @@ -304,7 +304,7 @@ library from "org-dartlang-test:///main.dart" as main { operator /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ +(generic-covariant-impl dart.core::List other) → dart.core::List return block { final dart.core::List #t5 = dart.core::List::of(this); - #t5.{dart.core::List::addAll}(other){(dart.core::Iterable) → void}; + #t5.{dart.core::List::addAll}{Invariant}(other){(dart.core::Iterable) → void}; } =>#t5; method /*isNonNullableByDefault, from org-dartlang-sdk:///sdk/lib/collection/list.dart */ sublist(dart.core::int start, [dart.core::int? end = #C2]) → dart.core::List { dart.core::int listLength = this.{dart.core::List::length}{dart.core::int}; diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart index c18ffb77a1a..c65b3a24120 100644 --- a/pkg/kernel/lib/clone.dart +++ b/pkg/kernel/lib/clone.dart @@ -677,7 +677,8 @@ class CloneVisitorNotMembers implements TreeVisitor { return new InstanceInvocation.byReference( node.kind, clone(node.receiver), node.name, clone(node.arguments), functionType: visitType(node.functionType) as FunctionType, - interfaceTargetReference: node.interfaceTargetReference); + interfaceTargetReference: node.interfaceTargetReference) + ..flags = node.flags; } @override