mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:09:49 +00:00
[vm, compiler] Fix address encoding limit when loading type arguments.
TEST=ci Bug: https://github.com/dart-lang/sdk/issues/50671 Change-Id: I3a5ab9492d74fa770efd8e4c7cf90002a3793b9a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275081 Commit-Queue: Ryan Macnak <rmacnak@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
parent
331185dbef
commit
de310a0c7b
|
@ -3248,11 +3248,9 @@ void FlowGraphCompiler::GenerateCallerChecksForAssertAssignable(
|
||||||
__ BranchIf(EQUAL, done);
|
__ BranchIf(EQUAL, done);
|
||||||
// Put the instantiated type parameter into the scratch register, so its
|
// Put the instantiated type parameter into the scratch register, so its
|
||||||
// TTS can be called by the caller.
|
// TTS can be called by the caller.
|
||||||
__ LoadCompressedField(
|
__ LoadCompressedFieldFromOffset(
|
||||||
TypeTestABI::kScratchReg,
|
TypeTestABI::kScratchReg, kTypeArgumentsReg,
|
||||||
compiler::FieldAddress(kTypeArgumentsReg,
|
compiler::target::TypeArguments::type_at_offset(type_param.index()));
|
||||||
compiler::target::TypeArguments::type_at_offset(
|
|
||||||
type_param.index())));
|
|
||||||
return output_dst_type();
|
return output_dst_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
560
tests/language/scaling/medium_offset_type_parameter_test.dart
Normal file
560
tests/language/scaling/medium_offset_type_parameter_test.dart
Normal file
|
@ -0,0 +1,560 @@
|
||||||
|
// Copyright (c) 2022, 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.
|
||||||
|
|
||||||
|
// VMOptions=--optimization-counter-threshold=100 --no-use-osr --no-background-compilation
|
||||||
|
|
||||||
|
class C<
|
||||||
|
T0,
|
||||||
|
T1,
|
||||||
|
T2,
|
||||||
|
T3,
|
||||||
|
T4,
|
||||||
|
T5,
|
||||||
|
T6,
|
||||||
|
T7,
|
||||||
|
T8,
|
||||||
|
T9,
|
||||||
|
T10,
|
||||||
|
T11,
|
||||||
|
T12,
|
||||||
|
T13,
|
||||||
|
T14,
|
||||||
|
T15,
|
||||||
|
T16,
|
||||||
|
T17,
|
||||||
|
T18,
|
||||||
|
T19,
|
||||||
|
T20,
|
||||||
|
T21,
|
||||||
|
T22,
|
||||||
|
T23,
|
||||||
|
T24,
|
||||||
|
T25,
|
||||||
|
T26,
|
||||||
|
T27,
|
||||||
|
T28,
|
||||||
|
T29,
|
||||||
|
T30,
|
||||||
|
T31,
|
||||||
|
T32,
|
||||||
|
T33,
|
||||||
|
T34,
|
||||||
|
T35,
|
||||||
|
T36,
|
||||||
|
T37,
|
||||||
|
T38,
|
||||||
|
T39,
|
||||||
|
T40,
|
||||||
|
T41,
|
||||||
|
T42,
|
||||||
|
T43,
|
||||||
|
T44,
|
||||||
|
T45,
|
||||||
|
T46,
|
||||||
|
T47,
|
||||||
|
T48,
|
||||||
|
T49,
|
||||||
|
T50,
|
||||||
|
T51,
|
||||||
|
T52,
|
||||||
|
T53,
|
||||||
|
T54,
|
||||||
|
T55,
|
||||||
|
T56,
|
||||||
|
T57,
|
||||||
|
T58,
|
||||||
|
T59,
|
||||||
|
T60,
|
||||||
|
T61,
|
||||||
|
T62,
|
||||||
|
T63,
|
||||||
|
T64,
|
||||||
|
T65,
|
||||||
|
T66,
|
||||||
|
T67,
|
||||||
|
T68,
|
||||||
|
T69,
|
||||||
|
T70,
|
||||||
|
T71,
|
||||||
|
T72,
|
||||||
|
T73,
|
||||||
|
T74,
|
||||||
|
T75,
|
||||||
|
T76,
|
||||||
|
T77,
|
||||||
|
T78,
|
||||||
|
T79,
|
||||||
|
T80,
|
||||||
|
T81,
|
||||||
|
T82,
|
||||||
|
T83,
|
||||||
|
T84,
|
||||||
|
T85,
|
||||||
|
T86,
|
||||||
|
T87,
|
||||||
|
T88,
|
||||||
|
T89,
|
||||||
|
T90,
|
||||||
|
T91,
|
||||||
|
T92,
|
||||||
|
T93,
|
||||||
|
T94,
|
||||||
|
T95,
|
||||||
|
T96,
|
||||||
|
T97,
|
||||||
|
T98,
|
||||||
|
T99,
|
||||||
|
T100,
|
||||||
|
T101,
|
||||||
|
T102,
|
||||||
|
T103,
|
||||||
|
T104,
|
||||||
|
T105,
|
||||||
|
T106,
|
||||||
|
T107,
|
||||||
|
T108,
|
||||||
|
T109,
|
||||||
|
T110,
|
||||||
|
T111,
|
||||||
|
T112,
|
||||||
|
T113,
|
||||||
|
T114,
|
||||||
|
T115,
|
||||||
|
T116,
|
||||||
|
T117,
|
||||||
|
T118,
|
||||||
|
T119,
|
||||||
|
T120,
|
||||||
|
T121,
|
||||||
|
T122,
|
||||||
|
T123,
|
||||||
|
T124,
|
||||||
|
T125,
|
||||||
|
T126,
|
||||||
|
T127,
|
||||||
|
T128,
|
||||||
|
T129,
|
||||||
|
T130,
|
||||||
|
T131,
|
||||||
|
T132,
|
||||||
|
T133,
|
||||||
|
T134,
|
||||||
|
T135,
|
||||||
|
T136,
|
||||||
|
T137,
|
||||||
|
T138,
|
||||||
|
T139,
|
||||||
|
T140,
|
||||||
|
T141,
|
||||||
|
T142,
|
||||||
|
T143,
|
||||||
|
T144,
|
||||||
|
T145,
|
||||||
|
T146,
|
||||||
|
T147,
|
||||||
|
T148,
|
||||||
|
T149,
|
||||||
|
T150,
|
||||||
|
T151,
|
||||||
|
T152,
|
||||||
|
T153,
|
||||||
|
T154,
|
||||||
|
T155,
|
||||||
|
T156,
|
||||||
|
T157,
|
||||||
|
T158,
|
||||||
|
T159,
|
||||||
|
T160,
|
||||||
|
T161,
|
||||||
|
T162,
|
||||||
|
T163,
|
||||||
|
T164,
|
||||||
|
T165,
|
||||||
|
T166,
|
||||||
|
T167,
|
||||||
|
T168,
|
||||||
|
T169,
|
||||||
|
T170,
|
||||||
|
T171,
|
||||||
|
T172,
|
||||||
|
T173,
|
||||||
|
T174,
|
||||||
|
T175,
|
||||||
|
T176,
|
||||||
|
T177,
|
||||||
|
T178,
|
||||||
|
T179,
|
||||||
|
T180,
|
||||||
|
T181,
|
||||||
|
T182,
|
||||||
|
T183,
|
||||||
|
T184,
|
||||||
|
T185,
|
||||||
|
T186,
|
||||||
|
T187,
|
||||||
|
T188,
|
||||||
|
T189,
|
||||||
|
T190,
|
||||||
|
T191,
|
||||||
|
T192,
|
||||||
|
T193,
|
||||||
|
T194,
|
||||||
|
T195,
|
||||||
|
T196,
|
||||||
|
T197,
|
||||||
|
T198,
|
||||||
|
T199,
|
||||||
|
T200,
|
||||||
|
T201,
|
||||||
|
T202,
|
||||||
|
T203,
|
||||||
|
T204,
|
||||||
|
T205,
|
||||||
|
T206,
|
||||||
|
T207,
|
||||||
|
T208,
|
||||||
|
T209,
|
||||||
|
T210,
|
||||||
|
T211,
|
||||||
|
T212,
|
||||||
|
T213,
|
||||||
|
T214,
|
||||||
|
T215,
|
||||||
|
T216,
|
||||||
|
T217,
|
||||||
|
T218,
|
||||||
|
T219,
|
||||||
|
T220,
|
||||||
|
T221,
|
||||||
|
T222,
|
||||||
|
T223,
|
||||||
|
T224,
|
||||||
|
T225,
|
||||||
|
T226,
|
||||||
|
T227,
|
||||||
|
T228,
|
||||||
|
T229,
|
||||||
|
T230,
|
||||||
|
T231,
|
||||||
|
T232,
|
||||||
|
T233,
|
||||||
|
T234,
|
||||||
|
T235,
|
||||||
|
T236,
|
||||||
|
T237,
|
||||||
|
T238,
|
||||||
|
T239,
|
||||||
|
T240,
|
||||||
|
T241,
|
||||||
|
T242,
|
||||||
|
T243,
|
||||||
|
T244,
|
||||||
|
T245,
|
||||||
|
T246,
|
||||||
|
T247,
|
||||||
|
T248,
|
||||||
|
T249,
|
||||||
|
T250,
|
||||||
|
T251,
|
||||||
|
T252,
|
||||||
|
T253,
|
||||||
|
T254,
|
||||||
|
T255> {
|
||||||
|
@pragma("vm:never-inline")
|
||||||
|
static create<T>() {
|
||||||
|
return new C<
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
double,
|
||||||
|
T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@pragma("vm:never-inline")
|
||||||
|
@pragma("vm:entry-point") // Stop TFA
|
||||||
|
@pragma("dart2js:noInline")
|
||||||
|
dynamic checkIs(dynamic x) => x is T255;
|
||||||
|
|
||||||
|
@pragma("vm:never-inline")
|
||||||
|
@pragma("vm:entry-point") // Stop TFA
|
||||||
|
@pragma("dart2js:noInline")
|
||||||
|
dynamic checkAs(dynamic x) => x as T255;
|
||||||
|
|
||||||
|
@pragma("vm:never-inline")
|
||||||
|
@pragma("vm:entry-point") // Stop TFA
|
||||||
|
@pragma("dart2js:noInline")
|
||||||
|
dynamic checkInstantiate() => new G<G<T255>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
class G<T> {}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
for (var i = 0; i < 101; i++) {
|
||||||
|
var c1 = C.create<int>();
|
||||||
|
if (c1.checkIs(42) != true) throw "Wrong is";
|
||||||
|
if (c1.checkAs(42) != 42) throw "Wrong as";
|
||||||
|
if (c1.checkInstantiate() is! G<G<int>>) throw "Wrong instantiate";
|
||||||
|
|
||||||
|
var c2 = C.create<double>();
|
||||||
|
if (c2.checkIs(42.0) != true) throw "Wrong is";
|
||||||
|
if (c2.checkAs(42.0) != 42.0) throw "Wrong as";
|
||||||
|
if (c2.checkInstantiate() is! G<G<double>>) throw "Wrong instantiate";
|
||||||
|
|
||||||
|
var c3 = C.create<String>();
|
||||||
|
if (c3.checkIs("42") != true) throw "Wrong is";
|
||||||
|
if (c3.checkAs("42") != "42") throw "Wrong as";
|
||||||
|
if (c3.checkInstantiate() is! G<G<String>>) throw "Wrong instantiate";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue