[vm/kernel/bytecode] Initialize _Closure._delayed_type_arguments to Object::empty_type_arguments()

As TypeArguments == null means 'vector of all dynamic', VM uses special
object (Object::empty_type_arguments()) to indicate absence of
_Closure._delayed_type_arguments.

This CL corrects bytecode to use Object::empty_type_arguments() (via new
constant pool entry EmptyTypeArguments) to initialize
_Closure._delayed_type_arguments when allocating a closure.

Change-Id: I9b00bc0606de85c02350c8eef08d8952c3e224ee
Reviewed-on: https://dart-review.googlesource.com/69840
Reviewed-by: RĂ©gis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
diff --git a/pkg/vm/lib/bytecode/constant_pool.dart b/pkg/vm/lib/bytecode/constant_pool.dart
index e09d313..7aa3fc3 100644
--- a/pkg/vm/lib/bytecode/constant_pool.dart
+++ b/pkg/vm/lib/bytecode/constant_pool.dart
@@ -162,6 +162,10 @@
   ConstantIndex typeArguments;
 }
 
+type ConstantEmptyTypeArguments extends ConstantPoolEntry {
+  Byte tag = 25;
+}
+
 */
 
 enum ConstantTag {
@@ -189,7 +193,8 @@
   kEndClosureFunctionScope,
   kNativeEntry,
   kSubtypeTestCache,
-  kPartialTearOffInstantiation
+  kPartialTearOffInstantiation,
+  kEmptyTypeArguments,
 }
 
 abstract class ConstantPoolEntry {
@@ -262,6 +267,8 @@
         return new ConstantSubtypeTestCache.readFromBinary(source);
       case ConstantTag.kPartialTearOffInstantiation:
         return new ConstantPartialTearOffInstantiation.readFromBinary(source);
+      case ConstantTag.kEmptyTypeArguments:
+        return new ConstantEmptyTypeArguments.readFromBinary(source);
     }
     throw 'Unexpected constant tag $tag';
   }
@@ -1094,6 +1101,27 @@
       this.typeArgumentsConstantIndex == other.typeArgumentsConstantIndex;
 }
 
+class ConstantEmptyTypeArguments extends ConstantPoolEntry {
+  const ConstantEmptyTypeArguments();
+
+  @override
+  ConstantTag get tag => ConstantTag.kEmptyTypeArguments;
+
+  @override
+  void writeValueToBinary(BinarySink sink) {}
+
+  ConstantEmptyTypeArguments.readFromBinary(BinarySource source);
+
+  @override
+  String toString() => 'EmptyTypeArguments';
+
+  @override
+  int get hashCode => 997;
+
+  @override
+  bool operator ==(other) => other is ConstantEmptyTypeArguments;
+}
+
 /// Reserved constant pool entry.
 class _ReservedConstantPoolEntry extends ConstantPoolEntry {
   const _ReservedConstantPoolEntry();
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index 0892e67..d103a85 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -965,8 +965,10 @@
     asm.emitStoreFieldTOS(
         cp.add(new ConstantInstanceField(closureFunctionTypeArguments)));
 
-    // TODO(alexmarkov): How to put Object::empty_type_arguments()
-    // to _delayed_type_arguments?
+    asm.emitPush(temp);
+    asm.emitPushConstant(cp.add(const ConstantEmptyTypeArguments()));
+    asm.emitStoreFieldTOS(
+        cp.add(new ConstantInstanceField(closureDelayedTypeArguments)));
 
     asm.emitPush(temp);
     asm.emitPushConstant(closureFunctionIndex);
diff --git a/pkg/vm/testcases/bytecode/async.dart.expect b/pkg/vm/testcases/bytecode/async.dart.expect
index 26fbf21..b08838d 100644
--- a/pkg/vm/testcases/bytecode/async.dart.expect
+++ b/pkg/vm/testcases/bytecode/async.dart.expect
@@ -16,8 +16,11 @@
   PushConstant         CP#3
   StoreFieldTOS        CP#24
   Push                 r2
+  PushConstant         CP#26
+  StoreFieldTOS        CP#27
+  Push                 r2
   PushConstant         CP#0
-  StoreFieldTOS        CP#26
+  StoreFieldTOS        CP#29
   Push                 r2
   Push                 r0
   StoreFieldTOS        CP#1
@@ -50,15 +53,18 @@
   [23] = Reserved
   [24] = InstanceField dart.core::_Closure::_function_type_arguments
   [25] = Reserved
-  [26] = InstanceField dart.core::_Closure::_function
-  [27] = Reserved
-  [28] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#8
-  [29] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#8
-  [30] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#8
-  [31] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
-  [32] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#15
-  [33] = ICData get target-name 'future', arg-desc CP#8
-  [34] = EndClosureFunctionScope
+  [26] = EmptyTypeArguments
+  [27] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [28] = Reserved
+  [29] = InstanceField dart.core::_Closure::_function
+  [30] = Reserved
+  [31] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#8
+  [32] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#8
+  [33] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#8
+  [34] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
+  [35] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#15
+  [36] = ICData get target-name 'future', arg-desc CP#8
+  [37] = EndClosureFunctionScope
 }
 Closure CP#11 {
   EntryOptional        1, 3, 0
@@ -214,38 +220,41 @@
   PushConstant         CP#3
   StoreFieldTOS        CP#24
   Push                 r3
+  PushConstant         CP#26
+  StoreFieldTOS        CP#27
+  Push                 r3
   PushConstant         CP#11
-  StoreFieldTOS        CP#26
+  StoreFieldTOS        CP#29
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#1
   StoreContextVar      5
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#28
+  PushConstant         CP#31
   IndirectStaticCall   1, CP#8
   PopLocal             r2
   Push                 r0
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#29
+  PushConstant         CP#32
   IndirectStaticCall   1, CP#8
   StoreContextVar      3
   Push                 r0
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#30
+  PushConstant         CP#33
   IndirectStaticCall   1, CP#8
   StoreContextVar      4
-  PushConstant         CP#31
+  PushConstant         CP#34
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#32
+  PushConstant         CP#35
   IndirectStaticCall   2, CP#15
   Drop1
   Push                 r0
   LoadContextVar       6
-  InstanceCall         1, CP#33
+  InstanceCall         1, CP#36
   ReturnTOS
   Push                 r0
   LoadContextParent
@@ -321,32 +330,35 @@
   PushConstant         CP#3
   StoreFieldTOS        CP#18
   Push                 r6
+  PushConstant         CP#20
+  StoreFieldTOS        CP#21
+  Push                 r6
   PushConstant         CP#5
-  StoreFieldTOS        CP#20
+  StoreFieldTOS        CP#23
   Push                 r6
   Push                 r0
   StoreFieldTOS        CP#6
   PopLocal             r5
   Push                 r5
-  PushConstant         CP#22
+  PushConstant         CP#25
   IndirectStaticCall   1, CP#1
   PopLocal             r2
   Push                 r5
-  PushConstant         CP#23
+  PushConstant         CP#26
   IndirectStaticCall   1, CP#1
   PopLocal             r3
   Push                 r5
-  PushConstant         CP#24
+  PushConstant         CP#27
   IndirectStaticCall   1, CP#1
   PopLocal             r4
-  PushConstant         CP#25
+  PushConstant         CP#28
   Push                 r5
-  PushConstant         CP#26
+  PushConstant         CP#29
   IndirectStaticCall   2, CP#9
   Drop1
   Push                 r0
   LoadContextVar       3
-  InstanceCall         1, CP#27
+  InstanceCall         1, CP#30
   ReturnTOS
   Push                 r0
   LoadContextParent
@@ -375,14 +387,17 @@
   [17] = Reserved
   [18] = InstanceField dart.core::_Closure::_function_type_arguments
   [19] = Reserved
-  [20] = InstanceField dart.core::_Closure::_function
-  [21] = Reserved
-  [22] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
-  [23] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
-  [24] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
-  [25] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
-  [26] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
-  [27] = ICData get target-name 'future', arg-desc CP#1
+  [20] = EmptyTypeArguments
+  [21] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [22] = Reserved
+  [23] = InstanceField dart.core::_Closure::_function
+  [24] = Reserved
+  [25] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
+  [26] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
+  [27] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
+  [28] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
+  [29] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
+  [30] = ICData get target-name 'future', arg-desc CP#1
 }
 Closure CP#5 {
   EntryOptional        1, 3, 0
@@ -525,38 +540,41 @@
   PushConstant         CP#3
   StoreFieldTOS        CP#23
   Push                 r3
+  PushConstant         CP#25
+  StoreFieldTOS        CP#26
+  Push                 r3
   PushConstant         CP#5
-  StoreFieldTOS        CP#25
+  StoreFieldTOS        CP#28
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#6
   StoreContextVar      5
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#27
+  PushConstant         CP#30
   IndirectStaticCall   1, CP#1
   PopLocal             r2
   Push                 r0
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#28
+  PushConstant         CP#31
   IndirectStaticCall   1, CP#1
   StoreContextVar      3
   Push                 r0
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#29
+  PushConstant         CP#32
   IndirectStaticCall   1, CP#1
   StoreContextVar      4
-  PushConstant         CP#30
+  PushConstant         CP#33
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#31
+  PushConstant         CP#34
   IndirectStaticCall   2, CP#13
   Drop1
   Push                 r0
   LoadContextVar       8
-  InstanceCall         1, CP#32
+  InstanceCall         1, CP#35
   ReturnTOS
   Push                 r0
   LoadContextParent
@@ -590,14 +608,17 @@
   [22] = Reserved
   [23] = InstanceField dart.core::_Closure::_function_type_arguments
   [24] = Reserved
-  [25] = InstanceField dart.core::_Closure::_function
-  [26] = Reserved
-  [27] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
-  [28] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
-  [29] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
-  [30] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
-  [31] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#13
-  [32] = ICData get target-name 'future', arg-desc CP#1
+  [25] = EmptyTypeArguments
+  [26] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [27] = Reserved
+  [28] = InstanceField dart.core::_Closure::_function
+  [29] = Reserved
+  [30] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
+  [31] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
+  [32] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
+  [33] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
+  [34] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#13
+  [35] = ICData get target-name 'future', arg-desc CP#1
 }
 Closure CP#5 {
   EntryOptional        1, 3, 0
@@ -817,38 +838,41 @@
   PushConstant         CP#3
   StoreFieldTOS        CP#35
   Push                 r3
+  PushConstant         CP#37
+  StoreFieldTOS        CP#38
+  Push                 r3
   PushConstant         CP#5
-  StoreFieldTOS        CP#37
+  StoreFieldTOS        CP#40
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#6
   StoreContextVar      7
   Push                 r0
   LoadContextVar       7
-  PushConstant         CP#39
+  PushConstant         CP#42
   IndirectStaticCall   1, CP#1
   PopLocal             r2
   Push                 r0
   Push                 r0
   LoadContextVar       7
-  PushConstant         CP#40
+  PushConstant         CP#43
   IndirectStaticCall   1, CP#1
   StoreContextVar      5
   Push                 r0
   Push                 r0
   LoadContextVar       7
-  PushConstant         CP#41
+  PushConstant         CP#44
   IndirectStaticCall   1, CP#1
   StoreContextVar      6
-  PushConstant         CP#42
+  PushConstant         CP#45
   Push                 r0
   LoadContextVar       7
-  PushConstant         CP#43
+  PushConstant         CP#46
   IndirectStaticCall   2, CP#9
   Drop1
   Push                 r0
   LoadContextVar       9
-  InstanceCall         1, CP#44
+  InstanceCall         1, CP#47
   ReturnTOS
   Push                 r0
   LoadContextParent
@@ -894,14 +918,17 @@
   [34] = Reserved
   [35] = InstanceField dart.core::_Closure::_function_type_arguments
   [36] = Reserved
-  [37] = InstanceField dart.core::_Closure::_function
-  [38] = Reserved
-  [39] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
-  [40] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
-  [41] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
-  [42] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
-  [43] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
-  [44] = ICData get target-name 'future', arg-desc CP#1
+  [37] = EmptyTypeArguments
+  [38] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [39] = Reserved
+  [40] = InstanceField dart.core::_Closure::_function
+  [41] = Reserved
+  [42] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
+  [43] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
+  [44] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
+  [45] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
+  [46] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#9
+  [47] = ICData get target-name 'future', arg-desc CP#1
 }
 Closure CP#5 {
   EntryOptional        1, 3, 0
@@ -1293,38 +1320,41 @@
   PushConstant         CP#3
   StoreFieldTOS        CP#41
   Push                 r3
+  PushConstant         CP#43
+  StoreFieldTOS        CP#44
+  Push                 r3
   PushConstant         CP#5
-  StoreFieldTOS        CP#43
+  StoreFieldTOS        CP#46
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#6
   StoreContextVar      8
   Push                 r0
   LoadContextVar       8
-  PushConstant         CP#45
+  PushConstant         CP#48
   IndirectStaticCall   1, CP#1
   PopLocal             r2
   Push                 r0
   Push                 r0
   LoadContextVar       8
-  PushConstant         CP#46
+  PushConstant         CP#49
   IndirectStaticCall   1, CP#1
   StoreContextVar      6
   Push                 r0
   Push                 r0
   LoadContextVar       8
-  PushConstant         CP#47
+  PushConstant         CP#50
   IndirectStaticCall   1, CP#1
   StoreContextVar      7
-  PushConstant         CP#48
+  PushConstant         CP#51
   Push                 r0
   LoadContextVar       8
-  PushConstant         CP#49
+  PushConstant         CP#52
   IndirectStaticCall   2, CP#11
   Drop1
   Push                 r0
   LoadContextVar       12
-  InstanceCall         1, CP#50
+  InstanceCall         1, CP#53
   ReturnTOS
   Push                 r0
   LoadContextParent
@@ -1376,14 +1406,17 @@
   [40] = Reserved
   [41] = InstanceField dart.core::_Closure::_function_type_arguments
   [42] = Reserved
-  [43] = InstanceField dart.core::_Closure::_function
-  [44] = Reserved
-  [45] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
-  [46] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
-  [47] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
-  [48] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
-  [49] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#11
-  [50] = ICData get target-name 'future', arg-desc CP#1
+  [43] = EmptyTypeArguments
+  [44] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [45] = Reserved
+  [46] = InstanceField dart.core::_Closure::_function
+  [47] = Reserved
+  [48] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
+  [49] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
+  [50] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
+  [51] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
+  [52] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#11
+  [53] = ICData get target-name 'future', arg-desc CP#1
 }
 Closure CP#5 {
   EntryOptional        1, 3, 0
@@ -1946,8 +1979,11 @@
   PushConstant         CP#7
   StoreFieldTOS        CP#29
   Push                 r3
+  PushConstant         CP#31
+  StoreFieldTOS        CP#32
+  Push                 r3
   PushConstant         CP#1
-  StoreFieldTOS        CP#31
+  StoreFieldTOS        CP#34
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#2
@@ -1992,15 +2028,18 @@
   [28] = Reserved
   [29] = InstanceField dart.core::_Closure::_function_type_arguments
   [30] = Reserved
-  [31] = InstanceField dart.core::_Closure::_function
-  [32] = Reserved
-  [33] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#5
-  [34] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#5
-  [35] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#5
-  [36] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
-  [37] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#15
-  [38] = ICData get target-name 'future', arg-desc CP#5
-  [39] = EndClosureFunctionScope
+  [31] = EmptyTypeArguments
+  [32] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [33] = Reserved
+  [34] = InstanceField dart.core::_Closure::_function
+  [35] = Reserved
+  [36] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#5
+  [37] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#5
+  [38] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#5
+  [39] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
+  [40] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#15
+  [41] = ICData get target-name 'future', arg-desc CP#5
+  [42] = EndClosureFunctionScope
 }
 Closure CP#9 {
   EntryOptional        1, 3, 0
@@ -2229,38 +2268,41 @@
   PushConstant         CP#7
   StoreFieldTOS        CP#29
   Push                 r3
+  PushConstant         CP#31
+  StoreFieldTOS        CP#32
+  Push                 r3
   PushConstant         CP#9
-  StoreFieldTOS        CP#31
+  StoreFieldTOS        CP#34
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#2
   StoreContextVar      6
   Push                 r0
   LoadContextVar       6
-  PushConstant         CP#33
+  PushConstant         CP#36
   IndirectStaticCall   1, CP#5
   PopLocal             r2
   Push                 r0
   Push                 r0
   LoadContextVar       6
-  PushConstant         CP#34
+  PushConstant         CP#37
   IndirectStaticCall   1, CP#5
   StoreContextVar      4
   Push                 r0
   Push                 r0
   LoadContextVar       6
-  PushConstant         CP#35
+  PushConstant         CP#38
   IndirectStaticCall   1, CP#5
   StoreContextVar      5
-  PushConstant         CP#36
+  PushConstant         CP#39
   Push                 r0
   LoadContextVar       6
-  PushConstant         CP#37
+  PushConstant         CP#40
   IndirectStaticCall   2, CP#15
   Drop1
   Push                 r0
   LoadContextVar       8
-  InstanceCall         1, CP#38
+  InstanceCall         1, CP#41
   ReturnTOS
   Push                 r0
   LoadContextParent
@@ -2361,38 +2403,41 @@
   PushConstant         CP#3
   StoreFieldTOS        CP#25
   Push                 r3
+  PushConstant         CP#27
+  StoreFieldTOS        CP#28
+  Push                 r3
   PushConstant         CP#5
-  StoreFieldTOS        CP#27
+  StoreFieldTOS        CP#30
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#6
   StoreContextVar      5
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#29
+  PushConstant         CP#32
   IndirectStaticCall   1, CP#1
   PopLocal             r2
   Push                 r0
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#30
+  PushConstant         CP#33
   IndirectStaticCall   1, CP#1
   StoreContextVar      3
   Push                 r0
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#31
+  PushConstant         CP#34
   IndirectStaticCall   1, CP#1
   StoreContextVar      4
-  PushConstant         CP#32
+  PushConstant         CP#35
   Push                 r0
   LoadContextVar       5
-  PushConstant         CP#33
+  PushConstant         CP#36
   IndirectStaticCall   2, CP#12
   Drop1
   Push                 r0
   LoadContextVar       7
-  InstanceCall         1, CP#34
+  InstanceCall         1, CP#37
   ReturnTOS
   Push                 r0
   LoadContextParent
@@ -2428,14 +2473,17 @@
   [24] = Reserved
   [25] = InstanceField dart.core::_Closure::_function_type_arguments
   [26] = Reserved
-  [27] = InstanceField dart.core::_Closure::_function
-  [28] = Reserved
-  [29] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
-  [30] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
-  [31] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
-  [32] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
-  [33] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#12
-  [34] = ICData get target-name 'future', arg-desc CP#1
+  [27] = EmptyTypeArguments
+  [28] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [29] = Reserved
+  [30] = InstanceField dart.core::_Closure::_function
+  [31] = Reserved
+  [32] = StaticICData target 'dart.async::_asyncStackTraceHelper', arg-desc CP#1
+  [33] = StaticICData target 'dart.async::_asyncThenWrapperHelper', arg-desc CP#1
+  [34] = StaticICData target 'dart.async::_asyncErrorWrapperHelper', arg-desc CP#1
+  [35] = TypeArgumentsForInstanceAllocation dart.async::Future [dynamic]
+  [36] = StaticICData target 'dart.async::Future::microtask', arg-desc CP#12
+  [37] = ICData get target-name 'future', arg-desc CP#1
 }
 Closure CP#5 {
   EntryOptional        1, 3, 0
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index c3eba73..9fe4926 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -212,19 +212,22 @@
   Push                 r0
   StoreFieldTOS        CP#3
   Push                 r4
+  PushConstant         CP#41
+  StoreFieldTOS        CP#42
+  Push                 r4
   PushConstant         CP#0
-  StoreFieldTOS        CP#41
+  StoreFieldTOS        CP#44
   Push                 r4
   Push                 r1
   StoreFieldTOS        CP#1
   PopLocal             r3
-  PushConstant         CP#51
+  PushConstant         CP#54
   Push                 r3
-  InstanceCall         2, CP#52
+  InstanceCall         2, CP#55
   Drop1
-  PushConstant         CP#53
+  PushConstant         CP#56
   Push                 r3
-  InstanceCall         2, CP#54
+  InstanceCall         2, CP#57
   Drop1
   PushConstant         CP#18
   ReturnTOS
@@ -271,20 +274,23 @@
   [38] = Class dart.core::_Closure
   [39] = InstanceField dart.core::_Closure::_instantiator_type_arguments
   [40] = Reserved
-  [41] = InstanceField dart.core::_Closure::_function
-  [42] = Reserved
-  [43] = ICData target-name 'call', arg-desc CP#32
-  [44] = EndClosureFunctionScope
-  [45] = TypeArgs [#lib::C7, #lib::C8]
-  [46] = ArgDesc num-args 1, num-type-args 2, names []
-  [47] = ICData target-name 'call', arg-desc CP#46
-  [48] = TypeArgs [dart.core::List<#lib::C7>, dart.core::List<#lib::C8>]
-  [49] = ICData target-name 'call', arg-desc CP#46
-  [50] = EndClosureFunctionScope
-  [51] = TypeArgs [#lib::C5, #lib::C6]
-  [52] = ICData target-name 'call', arg-desc CP#46
-  [53] = TypeArgs [dart.core::List<#lib::C5>, dart.core::List<#lib::C6>]
-  [54] = ICData target-name 'call', arg-desc CP#46
+  [41] = EmptyTypeArguments
+  [42] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [43] = Reserved
+  [44] = InstanceField dart.core::_Closure::_function
+  [45] = Reserved
+  [46] = ICData target-name 'call', arg-desc CP#32
+  [47] = EndClosureFunctionScope
+  [48] = TypeArgs [#lib::C7, #lib::C8]
+  [49] = ArgDesc num-args 1, num-type-args 2, names []
+  [50] = ICData target-name 'call', arg-desc CP#49
+  [51] = TypeArgs [dart.core::List<#lib::C7>, dart.core::List<#lib::C8>]
+  [52] = ICData target-name 'call', arg-desc CP#49
+  [53] = EndClosureFunctionScope
+  [54] = TypeArgs [#lib::C5, #lib::C6]
+  [55] = ICData target-name 'call', arg-desc CP#49
+  [56] = TypeArgs [dart.core::List<#lib::C5>, dart.core::List<#lib::C6>]
+  [57] = ICData target-name 'call', arg-desc CP#49
 }
 Closure CP#12 {
   Entry                4
@@ -397,14 +403,17 @@
   Push                 r0
   StoreFieldTOS        CP#3
   Push                 r4
+  PushConstant         CP#41
+  StoreFieldTOS        CP#42
+  Push                 r4
   PushConstant         CP#12
-  StoreFieldTOS        CP#41
+  StoreFieldTOS        CP#44
   Push                 r4
   Push                 r1
   StoreFieldTOS        CP#1
   PopLocal             r3
   Push                 r3
-  InstanceCall         1, CP#43
+  InstanceCall         1, CP#46
   Drop1
   PushConstant         CP#18
   ReturnTOS
@@ -437,19 +446,22 @@
   Push                 r0
   StoreFieldTOS        CP#3
   Push                 r4
+  PushConstant         CP#41
+  StoreFieldTOS        CP#42
+  Push                 r4
   PushConstant         CP#9
-  StoreFieldTOS        CP#41
+  StoreFieldTOS        CP#44
   Push                 r4
   Push                 r1
   StoreFieldTOS        CP#1
   PopLocal             r3
-  PushConstant         CP#45
-  Push                 r3
-  InstanceCall         2, CP#47
-  Drop1
   PushConstant         CP#48
   Push                 r3
-  InstanceCall         2, CP#49
+  InstanceCall         2, CP#50
+  Drop1
+  PushConstant         CP#51
+  Push                 r3
+  InstanceCall         2, CP#52
   Drop1
   PushConstant         CP#18
   ReturnTOS
@@ -530,27 +542,30 @@
   PushConstant         CP#6
   StoreFieldTOS        CP#25
   Push                 r4
+  PushConstant         CP#27
+  StoreFieldTOS        CP#28
+  Push                 r4
   PushConstant         CP#3
-  StoreFieldTOS        CP#27
+  StoreFieldTOS        CP#30
   Push                 r4
   Push                 r0
   StoreFieldTOS        CP#4
   PopLocal             r3
   Push                 r3
-  PushConstant         CP#32
-  InstanceCall         2, CP#33
+  PushConstant         CP#35
+  InstanceCall         2, CP#36
   Drop1
   Push                 r3
-  PushConstant         CP#34
-  InstanceCall         2, CP#35
+  PushConstant         CP#37
+  InstanceCall         2, CP#38
   Drop1
   Push                 r2
-  PushConstant         CP#36
+  PushConstant         CP#39
   IndirectStaticCall   1, CP#18
   Drop1
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#37
+  PushConstant         CP#40
   IndirectStaticCall   1, CP#18
   Drop1
   Push                 r0
@@ -558,7 +573,7 @@
   PopLocal             r0
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#38
+  PushConstant         CP#41
   IndirectStaticCall   1, CP#18
   Drop1
   Push                 r0
@@ -571,7 +586,7 @@
   StoreContextParent
   PopLocal             r0
   Push                 r0
-  PushConstant         CP#39
+  PushConstant         CP#42
   StoreContextVar      0
   Allocate             CP#22
   StoreLocal           r3
@@ -582,14 +597,17 @@
   PushConstant         CP#6
   StoreFieldTOS        CP#25
   Push                 r3
-  PushConstant         CP#40
-  StoreFieldTOS        CP#27
+  PushConstant         CP#27
+  StoreFieldTOS        CP#28
+  Push                 r3
+  PushConstant         CP#43
+  StoreFieldTOS        CP#30
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#4
   PopLocal             r2
   Push                 r2
-  InstanceCall         1, CP#43
+  InstanceCall         1, CP#46
   Drop1
   Push                 r0
   LoadContextParent
@@ -625,23 +643,26 @@
   [24] = Reserved
   [25] = InstanceField dart.core::_Closure::_function_type_arguments
   [26] = Reserved
-  [27] = InstanceField dart.core::_Closure::_function
-  [28] = Reserved
-  [29] = ICData target-name 'call', arg-desc CP#18
-  [30] = StaticICData target 'dart.core::print', arg-desc CP#18
-  [31] = EndClosureFunctionScope
-  [32] = Int 10
-  [33] = ICData target-name 'call', arg-desc CP#10
-  [34] = Int 11
-  [35] = ICData target-name 'call', arg-desc CP#10
-  [36] = StaticICData target 'dart.core::print', arg-desc CP#18
-  [37] = StaticICData target 'dart.core::print', arg-desc CP#18
-  [38] = StaticICData target 'dart.core::print', arg-desc CP#18
-  [39] = Int 42
-  [40] = ClosureFunction <anonymous closure> () → dart.core::Null;
-  [41] = ICData set target-name 'foo', arg-desc CP#10
-  [42] = EndClosureFunctionScope
-  [43] = ICData target-name 'call', arg-desc CP#18
+  [27] = EmptyTypeArguments
+  [28] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [29] = Reserved
+  [30] = InstanceField dart.core::_Closure::_function
+  [31] = Reserved
+  [32] = ICData target-name 'call', arg-desc CP#18
+  [33] = StaticICData target 'dart.core::print', arg-desc CP#18
+  [34] = EndClosureFunctionScope
+  [35] = Int 10
+  [36] = ICData target-name 'call', arg-desc CP#10
+  [37] = Int 11
+  [38] = ICData target-name 'call', arg-desc CP#10
+  [39] = StaticICData target 'dart.core::print', arg-desc CP#18
+  [40] = StaticICData target 'dart.core::print', arg-desc CP#18
+  [41] = StaticICData target 'dart.core::print', arg-desc CP#18
+  [42] = Int 42
+  [43] = ClosureFunction <anonymous closure> () → dart.core::Null;
+  [44] = ICData set target-name 'foo', arg-desc CP#10
+  [45] = EndClosureFunctionScope
+  [46] = ICData target-name 'call', arg-desc CP#18
 }
 Closure CP#16 {
   Entry                3
@@ -742,18 +763,21 @@
   PushConstant         CP#6
   StoreFieldTOS        CP#25
   Push                 r2
+  PushConstant         CP#27
+  StoreFieldTOS        CP#28
+  Push                 r2
   PushConstant         CP#16
-  StoreFieldTOS        CP#27
+  StoreFieldTOS        CP#30
   Push                 r2
   Push                 r0
   StoreFieldTOS        CP#4
   PopLocal             r3
   Push                 r3
-  InstanceCall         1, CP#29
+  InstanceCall         1, CP#32
   Drop1
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#30
+  PushConstant         CP#33
   IndirectStaticCall   1, CP#18
   Drop1
   Push                 r0
@@ -765,7 +789,7 @@
 
 }
 
-Closure CP#40 {
+Closure CP#43 {
   Entry                3
   CheckStack
   Push                 FP[-5]
@@ -776,7 +800,7 @@
   LoadContextVar       0
   Push                 r0
   LoadContextVar       0
-  InstanceCall         2, CP#41
+  InstanceCall         2, CP#44
   Drop1
   PushConstant         CP#6
   ReturnTOS
@@ -896,12 +920,15 @@
   PushConstant         CP#12
   StoreFieldTOS        CP#17
   Push                 r3
+  PushConstant         CP#19
+  StoreFieldTOS        CP#20
+  Push                 r3
   PushConstant         CP#8
-  StoreFieldTOS        CP#19
+  StoreFieldTOS        CP#22
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#9
-  InstanceCall         2, CP#21
+  InstanceCall         2, CP#24
   Drop1
   Push                 r4
   Allocate             CP#14
@@ -913,12 +940,15 @@
   PushConstant         CP#12
   StoreFieldTOS        CP#17
   Push                 r3
-  PushConstant         CP#22
-  StoreFieldTOS        CP#19
+  PushConstant         CP#19
+  StoreFieldTOS        CP#20
+  Push                 r3
+  PushConstant         CP#25
+  StoreFieldTOS        CP#22
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#9
-  InstanceCall         2, CP#28
+  InstanceCall         2, CP#31
   Drop1
   Push                 r0
   CloneContext
@@ -926,8 +956,8 @@
   Push                 r0
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#29
-  InstanceCall         2, CP#30
+  PushConstant         CP#32
+  InstanceCall         2, CP#33
   StoreLocal           r3
   StoreContextVar      0
   Push                 r3
@@ -963,18 +993,21 @@
   [16] = Reserved
   [17] = InstanceField dart.core::_Closure::_function_type_arguments
   [18] = Reserved
-  [19] = InstanceField dart.core::_Closure::_function
-  [20] = Reserved
-  [21] = ICData target-name 'add', arg-desc CP#2
-  [22] = ClosureFunction <anonymous closure> (dart.core::int ii) → dart.core::Null;
-  [23] = Type dart.core::int
-  [24] = String 'ii'
-  [25] = SubtypeTestCache
-  [26] = ICData target-name '+', arg-desc CP#2
-  [27] = EndClosureFunctionScope
-  [28] = ICData target-name 'add', arg-desc CP#2
-  [29] = Int 1
-  [30] = ICData target-name '+', arg-desc CP#2
+  [19] = EmptyTypeArguments
+  [20] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [21] = Reserved
+  [22] = InstanceField dart.core::_Closure::_function
+  [23] = Reserved
+  [24] = ICData target-name 'add', arg-desc CP#2
+  [25] = ClosureFunction <anonymous closure> (dart.core::int ii) → dart.core::Null;
+  [26] = Type dart.core::int
+  [27] = String 'ii'
+  [28] = SubtypeTestCache
+  [29] = ICData target-name '+', arg-desc CP#2
+  [30] = EndClosureFunctionScope
+  [31] = ICData target-name 'add', arg-desc CP#2
+  [32] = Int 1
+  [33] = ICData target-name '+', arg-desc CP#2
 }
 Closure CP#8 {
   Entry                2
@@ -994,7 +1027,7 @@
 
 }
 
-Closure CP#22 {
+Closure CP#25 {
   Entry                3
   CheckStack
   Push                 FP[-6]
@@ -1003,16 +1036,16 @@
   Push                 FP[-5]
   PushConstant         CP#12
   PushConstant         CP#12
-  PushConstant         CP#23
-  PushConstant         CP#24
-  AssertAssignable     1, CP#25
+  PushConstant         CP#26
+  PushConstant         CP#27
+  AssertAssignable     1, CP#28
   Drop1
   Push                 r0
   Push                 FP[-5]
   Push                 r0
   LoadContextParent
   LoadContextVar       0
-  InstanceCall         2, CP#26
+  InstanceCall         2, CP#29
   StoreContextVar      0
   PushConstant         CP#12
   ReturnTOS
@@ -1069,18 +1102,21 @@
   PushConstant         CP#0
   StoreFieldTOS        CP#19
   Push                 r4
+  PushConstant         CP#21
+  StoreFieldTOS        CP#22
+  Push                 r4
   PushConstant         CP#9
-  StoreFieldTOS        CP#21
+  StoreFieldTOS        CP#24
   Push                 r4
   Push                 r0
   StoreFieldTOS        CP#10
   PopLocal             r3
   Push                 r3
-  InstanceCall         1, CP#23
+  InstanceCall         1, CP#26
   Drop1
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#24
+  PushConstant         CP#27
   IndirectStaticCall   1, CP#4
   Drop1
   Push                 r0
@@ -1113,10 +1149,13 @@
   [18] = Reserved
   [19] = InstanceField dart.core::_Closure::_function_type_arguments
   [20] = Reserved
-  [21] = InstanceField dart.core::_Closure::_function
-  [22] = Reserved
-  [23] = ICData target-name 'call', arg-desc CP#4
-  [24] = StaticICData target 'dart.core::print', arg-desc CP#4
+  [21] = EmptyTypeArguments
+  [22] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [23] = Reserved
+  [24] = InstanceField dart.core::_Closure::_function
+  [25] = Reserved
+  [26] = ICData target-name 'call', arg-desc CP#4
+  [27] = StaticICData target 'dart.core::print', arg-desc CP#4
 }
 Closure CP#9 {
   Entry                3
@@ -1191,8 +1230,11 @@
   PushConstant         CP#1
   StoreFieldTOS        CP#12
   Push                 r2
+  PushConstant         CP#14
+  StoreFieldTOS        CP#15
+  Push                 r2
   PushConstant         CP#5
-  StoreFieldTOS        CP#14
+  StoreFieldTOS        CP#17
   Push                 r2
   Push                 r0
   StoreFieldTOS        CP#6
@@ -1215,8 +1257,11 @@
   [11] = Reserved
   [12] = InstanceField dart.core::_Closure::_function_type_arguments
   [13] = Reserved
-  [14] = InstanceField dart.core::_Closure::_function
-  [15] = Reserved
+  [14] = EmptyTypeArguments
+  [15] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [16] = Reserved
+  [17] = InstanceField dart.core::_Closure::_function
+  [18] = Reserved
 }
 Closure CP#5 {
   Entry                2
@@ -1257,15 +1302,18 @@
   PushConstant         CP#4
   StoreFieldTOS        CP#14
   Push                 r3
+  PushConstant         CP#16
+  StoreFieldTOS        CP#17
+  Push                 r3
   PushConstant         CP#1
-  StoreFieldTOS        CP#16
+  StoreFieldTOS        CP#19
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#2
   PopLocal             r2
   Push                 r2
-  PushConstant         CP#18
-  InstanceCall         2, CP#19
+  PushConstant         CP#21
+  InstanceCall         2, CP#22
   Drop1
   Push                 r0
   LoadContextVar       0
@@ -1293,10 +1341,13 @@
   [13] = Reserved
   [14] = InstanceField dart.core::_Closure::_function_type_arguments
   [15] = Reserved
-  [16] = InstanceField dart.core::_Closure::_function
-  [17] = Reserved
-  [18] = Int 3
-  [19] = ICData target-name 'call', arg-desc CP#8
+  [16] = EmptyTypeArguments
+  [17] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [18] = Reserved
+  [19] = InstanceField dart.core::_Closure::_function
+  [20] = Reserved
+  [21] = Int 3
+  [22] = ICData target-name 'call', arg-desc CP#8
 }
 Closure CP#1 {
   Entry                3
@@ -1498,8 +1549,11 @@
   PushConstant         CP#9
   StoreFieldTOS        CP#3
   Push                 r3
+  PushConstant         CP#17
+  StoreFieldTOS        CP#18
+  Push                 r3
   PushConstant         CP#0
-  StoreFieldTOS        CP#17
+  StoreFieldTOS        CP#20
   Push                 r3
   Push                 r0
   StoreFieldTOS        CP#1
@@ -1508,8 +1562,8 @@
   PopLocal             r3
   Allocate             CP#14
   StoreLocal           r5
-  PushConstant         CP#19
-  StoreFieldTOS        CP#20
+  PushConstant         CP#22
+  StoreFieldTOS        CP#18
   Push                 r5
   Push                 r3
   LoadFieldTOS         CP#15
@@ -1520,8 +1574,8 @@
   StoreFieldTOS        CP#3
   Push                 r5
   Push                 r3
-  LoadFieldTOS         CP#17
-  StoreFieldTOS        CP#17
+  LoadFieldTOS         CP#20
+  StoreFieldTOS        CP#20
   Push                 r5
   Push                 r3
   LoadFieldTOS         CP#1
@@ -1551,11 +1605,12 @@
   [14] = Class dart.core::_Closure
   [15] = InstanceField dart.core::_Closure::_instantiator_type_arguments
   [16] = Reserved
-  [17] = InstanceField dart.core::_Closure::_function
-  [18] = Reserved
-  [19] = TypeArgs [dart.core::int]
-  [20] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [17] = EmptyTypeArguments
+  [18] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [19] = Reserved
+  [20] = InstanceField dart.core::_Closure::_function
   [21] = Reserved
+  [22] = TypeArgs [dart.core::int]
 }
 Closure CP#0 {
   Entry                3
diff --git a/pkg/vm/testcases/bytecode/try_blocks.dart.expect b/pkg/vm/testcases/bytecode/try_blocks.dart.expect
index 8690f11..58275a3 100644
--- a/pkg/vm/testcases/bytecode/try_blocks.dart.expect
+++ b/pkg/vm/testcases/bytecode/try_blocks.dart.expect
@@ -280,18 +280,21 @@
   PushConstant         CP#11
   StoreFieldTOS        CP#16
   Push                 r5
+  PushConstant         CP#18
+  StoreFieldTOS        CP#19
+  Push                 r5
   PushConstant         CP#2
-  StoreFieldTOS        CP#18
+  StoreFieldTOS        CP#21
   Push                 r5
   Push                 r0
   StoreFieldTOS        CP#3
   PopLocal             r4
   Push                 r4
-  InstanceCall         1, CP#20
+  InstanceCall         1, CP#23
   Drop1
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#21
+  PushConstant         CP#24
   IndirectStaticCall   1, CP#6
   Drop1
   Push                 r0
@@ -316,12 +319,12 @@
   Push                 r3
   StoreContextVar      0
   PushConstant         CP#11
-  PushConstant         CP#22
+  PushConstant         CP#25
   CreateArrayTOS
   StoreLocal           r5
   Push                 r5
-  PushConstant         CP#23
-  PushConstant         CP#24
+  PushConstant         CP#26
+  PushConstant         CP#27
   StoreIndexedTOS
   Push                 r5
   PushConstant         CP#0
@@ -329,16 +332,16 @@
   StoreIndexedTOS
   Push                 r5
   PushConstant         CP#1
-  PushConstant         CP#25
+  PushConstant         CP#28
   StoreIndexedTOS
   Push                 r5
   PushConstant         CP#10
   Push                 r0
   LoadContextVar       0
   StoreIndexedTOS
-  PushConstant         CP#26
+  PushConstant         CP#29
   IndirectStaticCall   1, CP#6
-  PushConstant         CP#27
+  PushConstant         CP#30
   IndirectStaticCall   1, CP#6
   Drop1
   Allocate             CP#13
@@ -350,8 +353,11 @@
   PushConstant         CP#11
   StoreFieldTOS        CP#16
   Push                 r5
-  PushConstant         CP#28
-  StoreFieldTOS        CP#18
+  PushConstant         CP#18
+  StoreFieldTOS        CP#19
+  Push                 r5
+  PushConstant         CP#31
+  StoreFieldTOS        CP#21
   Push                 r5
   Push                 r0
   StoreFieldTOS        CP#3
@@ -370,7 +376,7 @@
   ReturnTOS
 }
 ExceptionsTable {
-  try-index 0, outer -1, start 13, end 49, handler 49, needs-stack-trace, types [CP#8]
+  try-index 0, outer -1, start 13, end 52, handler 52, needs-stack-trace, types [CP#8]
 }
 ConstantPool {
   [0] = Int 1
@@ -391,28 +397,31 @@
   [15] = Reserved
   [16] = InstanceField dart.core::_Closure::_function_type_arguments
   [17] = Reserved
-  [18] = InstanceField dart.core::_Closure::_function
-  [19] = Reserved
-  [20] = ICData target-name 'call', arg-desc CP#6
-  [21] = StaticICData target 'dart.core::print', arg-desc CP#6
-  [22] = Int 4
-  [23] = Int 0
-  [24] = String 'caught '
-  [25] = String ' '
-  [26] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
-  [27] = StaticICData target 'dart.core::print', arg-desc CP#6
-  [28] = ClosureFunction bar () → void;
-  [29] = String 'danger bar'
+  [18] = EmptyTypeArguments
+  [19] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [20] = Reserved
+  [21] = InstanceField dart.core::_Closure::_function
+  [22] = Reserved
+  [23] = ICData target-name 'call', arg-desc CP#6
+  [24] = StaticICData target 'dart.core::print', arg-desc CP#6
+  [25] = Int 4
+  [26] = Int 0
+  [27] = String 'caught '
+  [28] = String ' '
+  [29] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
   [30] = StaticICData target 'dart.core::print', arg-desc CP#6
-  [31] = Type dart.core::Error
-  [32] = ArgDesc num-args 4, num-type-args 0, names []
-  [33] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#32
-  [34] = Bool true
-  [35] = String 'error '
-  [36] = String ', captured stack trace: '
-  [37] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
-  [38] = StaticICData target 'dart.core::print', arg-desc CP#6
-  [39] = EndClosureFunctionScope
+  [31] = ClosureFunction bar () → void;
+  [32] = String 'danger bar'
+  [33] = StaticICData target 'dart.core::print', arg-desc CP#6
+  [34] = Type dart.core::Error
+  [35] = ArgDesc num-args 4, num-type-args 0, names []
+  [36] = ICData target-name 'dart.core::_instanceOf', arg-desc CP#35
+  [37] = Bool true
+  [38] = String 'error '
+  [39] = String ', captured stack trace: '
+  [40] = StaticICData target 'dart.core::_StringBase::_interpolate', arg-desc CP#6
+  [41] = StaticICData target 'dart.core::print', arg-desc CP#6
+  [42] = EndClosureFunctionScope
 }
 Closure CP#2 {
   Entry                6
@@ -452,7 +461,7 @@
 
 }
 
-Closure CP#28 {
+Closure CP#31 {
   Entry                6
   CheckStack
   Push                 FP[-5]
@@ -461,8 +470,8 @@
   Push                 r0
   PopLocal             r2
 Try #0 start:
-  PushConstant         CP#29
-  PushConstant         CP#30
+  PushConstant         CP#32
+  PushConstant         CP#33
   IndirectStaticCall   1, CP#6
   Drop1
   Jump                 L1
@@ -475,20 +484,20 @@
   Push                 r2
   PushConstant         CP#11
   PushConstant         CP#11
-  PushConstant         CP#31
-  InstanceCall         4, CP#33
   PushConstant         CP#34
+  InstanceCall         4, CP#36
+  PushConstant         CP#37
   IfNeStrictTOS
   Jump                 L2
   Push                 r2
   PopLocal             r4
   PushConstant         CP#11
-  PushConstant         CP#22
+  PushConstant         CP#25
   CreateArrayTOS
   StoreLocal           r5
   Push                 r5
-  PushConstant         CP#23
-  PushConstant         CP#35
+  PushConstant         CP#26
+  PushConstant         CP#38
   StoreIndexedTOS
   Push                 r5
   PushConstant         CP#0
@@ -496,16 +505,16 @@
   StoreIndexedTOS
   Push                 r5
   PushConstant         CP#1
-  PushConstant         CP#36
+  PushConstant         CP#39
   StoreIndexedTOS
   Push                 r5
   PushConstant         CP#10
   Push                 r0
   LoadContextVar       0
   StoreIndexedTOS
-  PushConstant         CP#37
+  PushConstant         CP#40
   IndirectStaticCall   1, CP#6
-  PushConstant         CP#38
+  PushConstant         CP#41
   IndirectStaticCall   1, CP#6
   Drop1
   Jump                 L1
@@ -807,14 +816,17 @@
   PushConstant         CP#17
   StoreFieldTOS        CP#22
   Push                 r8
+  PushConstant         CP#24
+  StoreFieldTOS        CP#25
+  Push                 r8
   PushConstant         CP#12
-  StoreFieldTOS        CP#24
+  StoreFieldTOS        CP#27
   Push                 r8
   Push                 r0
   StoreFieldTOS        CP#13
   PopLocal             r7
   Push                 r7
-  InstanceCall         1, CP#26
+  InstanceCall         1, CP#29
   Drop1
   Jump                 L4
   Jump                 L5
@@ -824,8 +836,8 @@
   PopLocal             r0
   MoveSpecial          r5, exception
   MoveSpecial          r6, stackTrace
-  PushConstant         CP#28
-  PushConstant         CP#29
+  PushConstant         CP#31
+  PushConstant         CP#32
   IndirectStaticCall   1, CP#7
   Drop1
   Push                 r5
@@ -834,20 +846,20 @@
 L4:
   Push                 r5
   PopLocal             r0
-  PushConstant         CP#28
-  PushConstant         CP#30
+  PushConstant         CP#31
+  PushConstant         CP#33
   IndirectStaticCall   1, CP#7
   Drop1
   Jump                 L6
 L5:
   Push                 r5
   PopLocal             r0
-  PushConstant         CP#28
   PushConstant         CP#31
+  PushConstant         CP#34
   IndirectStaticCall   1, CP#7
   Drop1
-  PushConstant         CP#32
-  PushConstant         CP#33
+  PushConstant         CP#35
+  PushConstant         CP#36
   IndirectStaticCall   1, CP#7
   Drop1
   Push                 r0
@@ -860,8 +872,8 @@
   PopLocal             r0
   MoveSpecial          r3, exception
   MoveSpecial          r4, stackTrace
-  PushConstant         CP#34
-  PushConstant         CP#35
+  PushConstant         CP#37
+  PushConstant         CP#38
   IndirectStaticCall   1, CP#7
   Drop1
   Push                 r3
@@ -870,22 +882,22 @@
 L6:
   Push                 r3
   PopLocal             r0
-  PushConstant         CP#34
-  PushConstant         CP#36
+  PushConstant         CP#37
+  PushConstant         CP#39
   IndirectStaticCall   1, CP#7
   Drop1
   Jump                 L2
 L7:
   Push                 r3
   PopLocal             r0
-  PushConstant         CP#34
   PushConstant         CP#37
+  PushConstant         CP#40
   IndirectStaticCall   1, CP#7
   Drop1
   Jump                 L3
 L2:
-  PushConstant         CP#38
-  PushConstant         CP#39
+  PushConstant         CP#41
+  PushConstant         CP#42
   IndirectStaticCall   1, CP#7
   Drop1
   Jump                 L3
@@ -894,8 +906,8 @@
   ReturnTOS
 }
 ExceptionsTable {
-  try-index 0, outer -1, start 25, end 96, handler 96, needs-stack-trace, types [CP#27]
-  try-index 1, outer 0, start 40, end 64, handler 64, needs-stack-trace, types [CP#27]
+  try-index 0, outer -1, start 25, end 99, handler 99, needs-stack-trace, types [CP#30]
+  try-index 1, outer 0, start 40, end 67, handler 67, needs-stack-trace, types [CP#30]
 }
 ConstantPool {
   [0] = ArgDesc num-args 2, num-type-args 0, names []
@@ -922,22 +934,25 @@
   [21] = Reserved
   [22] = InstanceField dart.core::_Closure::_function_type_arguments
   [23] = Reserved
-  [24] = InstanceField dart.core::_Closure::_function
-  [25] = Reserved
-  [26] = ICData target-name 'call', arg-desc CP#7
-  [27] = Type dynamic
-  [28] = String 'finally 1'
-  [29] = StaticICData target 'dart.core::print', arg-desc CP#7
-  [30] = StaticICData target 'dart.core::print', arg-desc CP#7
-  [31] = StaticICData target 'dart.core::print', arg-desc CP#7
-  [32] = String 'after try 1'
+  [24] = EmptyTypeArguments
+  [25] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [26] = Reserved
+  [27] = InstanceField dart.core::_Closure::_function
+  [28] = Reserved
+  [29] = ICData target-name 'call', arg-desc CP#7
+  [30] = Type dynamic
+  [31] = String 'finally 1'
+  [32] = StaticICData target 'dart.core::print', arg-desc CP#7
   [33] = StaticICData target 'dart.core::print', arg-desc CP#7
-  [34] = String 'finally 2'
-  [35] = StaticICData target 'dart.core::print', arg-desc CP#7
+  [34] = StaticICData target 'dart.core::print', arg-desc CP#7
+  [35] = String 'after try 1'
   [36] = StaticICData target 'dart.core::print', arg-desc CP#7
-  [37] = StaticICData target 'dart.core::print', arg-desc CP#7
-  [38] = String 'case 2'
+  [37] = String 'finally 2'
+  [38] = StaticICData target 'dart.core::print', arg-desc CP#7
   [39] = StaticICData target 'dart.core::print', arg-desc CP#7
+  [40] = StaticICData target 'dart.core::print', arg-desc CP#7
+  [41] = String 'case 2'
+  [42] = StaticICData target 'dart.core::print', arg-desc CP#7
 }
 Closure CP#12 {
   Entry                2
@@ -1023,8 +1038,11 @@
   PushConstant         CP#1
   StoreFieldTOS        CP#29
   Push                 r5
+  PushConstant         CP#31
+  StoreFieldTOS        CP#32
+  Push                 r5
   PushConstant         CP#2
-  StoreFieldTOS        CP#31
+  StoreFieldTOS        CP#34
   Push                 r5
   Push                 r0
   StoreFieldTOS        CP#3
@@ -1038,11 +1056,11 @@
   MoveSpecial          r4, stackTrace
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#33
+  PushConstant         CP#36
   IndirectStaticCall   1, CP#5
   Drop1
   Push                 r2
-  InstanceCall         1, CP#34
+  InstanceCall         1, CP#37
   Drop1
   Push                 r3
   Push                 r4
@@ -1052,11 +1070,11 @@
   PopLocal             r0
   Push                 r0
   LoadContextVar       0
-  PushConstant         CP#35
+  PushConstant         CP#38
   IndirectStaticCall   1, CP#5
   Drop1
   Push                 r2
-  InstanceCall         1, CP#36
+  InstanceCall         1, CP#39
   Drop1
   Push                 r0
   LoadContextParent
@@ -1065,7 +1083,7 @@
   ReturnTOS
 }
 ExceptionsTable {
-  try-index 0, outer -1, start 15, end 31, handler 31, needs-stack-trace, types [CP#10]
+  try-index 0, outer -1, start 15, end 34, handler 34, needs-stack-trace, types [CP#10]
 }
 ConstantPool {
   [0] = Int 11
@@ -1099,12 +1117,15 @@
   [28] = Reserved
   [29] = InstanceField dart.core::_Closure::_function_type_arguments
   [30] = Reserved
-  [31] = InstanceField dart.core::_Closure::_function
-  [32] = Reserved
-  [33] = StaticICData target 'dart.core::print', arg-desc CP#5
-  [34] = ICData target-name 'call', arg-desc CP#5
-  [35] = StaticICData target 'dart.core::print', arg-desc CP#5
-  [36] = ICData target-name 'call', arg-desc CP#5
+  [31] = EmptyTypeArguments
+  [32] = InstanceField dart.core::_Closure::_delayed_type_arguments
+  [33] = Reserved
+  [34] = InstanceField dart.core::_Closure::_function
+  [35] = Reserved
+  [36] = StaticICData target 'dart.core::print', arg-desc CP#5
+  [37] = ICData target-name 'call', arg-desc CP#5
+  [38] = StaticICData target 'dart.core::print', arg-desc CP#5
+  [39] = ICData target-name 'call', arg-desc CP#5
 }
 Closure CP#2 {
   Entry                6
diff --git a/runtime/vm/compiler/frontend/bytecode_reader.cc b/runtime/vm/compiler/frontend/bytecode_reader.cc
index 5c978e9..3c46f83 100644
--- a/runtime/vm/compiler/frontend/bytecode_reader.cc
+++ b/runtime/vm/compiler/frontend/bytecode_reader.cc
@@ -124,6 +124,7 @@
     kNativeEntry,
     kSubtypeTestCache,
     kPartialTearOffInstantiation,
+    kEmptyTypeArguments,
   };
 
   enum InvocationKind {
@@ -497,6 +498,9 @@
             Context::Handle(helper_->zone_, old_closure.context()), Heap::kOld);
         obj = H.Canonicalize(Instance::Cast(obj));
       } break;
+      case ConstantPoolTag::kEmptyTypeArguments:
+        obj = Object::empty_type_arguments().raw();
+        break;
       default:
         UNREACHABLE();
     }