Skip to content

Commit 6afca46

Browse files
Backport "Count size of parameters for platform limit check" to LTS (#20599)
Backports #18464 to the LTS branch. PR submitted by the release tooling. [skip ci]
2 parents 0c254a5 + 567e709 commit 6afca46

File tree

3 files changed

+217
-2
lines changed

3 files changed

+217
-2
lines changed

compiler/src/dotty/tools/backend/jvm/BCodeSkelBuilder.scala

+7-2
Original file line numberDiff line numberDiff line change
@@ -763,9 +763,14 @@ trait BCodeSkelBuilder extends BCodeHelpers {
763763
for (p <- params) { locals.makeLocal(p.symbol) }
764764
// debug assert((params.map(p => locals(p.symbol).tk)) == asmMethodType(methSymbol).getArgumentTypes.toList, "debug")
765765

766-
if (params.size > MaximumJvmParameters) {
766+
val paramsSize = params.map { param =>
767+
val tpeTym = param.symbol.info.typeSymbol
768+
if tpeTym == defn.LongClass || tpeTym == defn.DoubleClass then 2 else 1
769+
}.sum
770+
if (paramsSize > MaximumJvmParameters) {
767771
// SI-7324
768-
report.error(em"Platform restriction: a parameter list's length cannot exceed $MaximumJvmParameters.", ctx.source.atSpan(methSymbol.span))
772+
val info = if paramsSize == params.length then "" else " (Long and Double count as 2)" // https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.3
773+
report.error(em"Platform restriction: a parameter list's length cannot exceed $MaximumJvmParameters$info.", ctx.source.atSpan(methSymbol.span))
769774
return
770775
}
771776

tests/neg/i18458.check

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-- Error: tests/neg/i18458.scala:1:4 -----------------------------------------------------------------------------------
2+
1 |def foo( // error
3+
| ^
4+
| Platform restriction: a parameter list's length cannot exceed 254 (Long and Double count as 2).

tests/neg/i18458.scala

+206
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
def foo( // error
2+
foo1: Long,
3+
foo2: Long,
4+
foo3: Long,
5+
foo4: Long,
6+
foo5: Long,
7+
foo6: Long,
8+
foo7: Long,
9+
foo8: Long,
10+
foo9: Long,
11+
foo10: Long,
12+
foo11: Long,
13+
foo12: Long,
14+
foo13: Long,
15+
foo14: Long,
16+
foo15: Long,
17+
foo16: Long,
18+
foo17: Long,
19+
foo18: Long,
20+
foo19: Long,
21+
foo20: Long,
22+
foo21: Long,
23+
foo22: Long,
24+
foo23: Long,
25+
foo24: Long,
26+
foo25: Long,
27+
foo26: Long,
28+
foo27: Long,
29+
foo28: Long,
30+
foo29: Long,
31+
foo30: Long,
32+
foo31: Long,
33+
foo32: Long,
34+
foo33: Long,
35+
foo34: Long,
36+
foo35: Long,
37+
foo36: Long,
38+
foo37: Long,
39+
foo38: Long,
40+
foo39: Long,
41+
foo40: Long,
42+
foo41: Long,
43+
foo42: Long,
44+
foo43: Long,
45+
foo44: Long,
46+
foo45: Long,
47+
foo46: Long,
48+
foo47: Long,
49+
foo48: Long,
50+
foo49: Long,
51+
foo50: Long,
52+
foo51: Long,
53+
foo52: Long,
54+
foo53: Long,
55+
foo54: Long,
56+
foo55: Long,
57+
foo56: Long,
58+
foo57: Long,
59+
foo58: Long,
60+
foo59: Long,
61+
foo60: Long,
62+
foo61: Long,
63+
foo62: Long,
64+
foo63: Long,
65+
foo64: Long,
66+
foo65: Long,
67+
foo66: Long,
68+
foo67: Long,
69+
foo68: Long,
70+
foo69: Long,
71+
foo70: Long,
72+
foo71: Long,
73+
foo72: Long,
74+
foo73: Long,
75+
foo74: Long,
76+
foo75: Long,
77+
foo76: Long,
78+
foo77: Long,
79+
foo78: Long,
80+
foo79: Long,
81+
foo80: Long,
82+
foo81: Long,
83+
foo82: Long,
84+
foo83: Long,
85+
foo84: Long,
86+
foo85: Long,
87+
foo86: Long,
88+
foo87: Long,
89+
foo88: Long,
90+
foo89: Long,
91+
foo90: Long,
92+
foo91: Long,
93+
foo92: Long,
94+
foo93: Long,
95+
foo94: Long,
96+
foo95: Long,
97+
foo96: Long,
98+
foo97: Long,
99+
foo98: Long,
100+
foo99: Long,
101+
foo100: Long,
102+
foo101: Long,
103+
foo102: Long,
104+
foo103: Long,
105+
foo104: Long,
106+
foo105: Long,
107+
foo106: Long,
108+
foo107: Long,
109+
foo108: Long,
110+
foo109: Long,
111+
foo110: Long,
112+
foo111: Long,
113+
foo112: Long,
114+
foo113: Long,
115+
foo114: Long,
116+
foo115: Long,
117+
foo116: Long,
118+
foo117: Long,
119+
foo118: Long,
120+
foo119: Long,
121+
foo120: Long,
122+
foo121: Long,
123+
foo122: Long,
124+
foo123: Long,
125+
foo124: Long,
126+
foo125: Long,
127+
foo126: Long,
128+
foo127: Long,
129+
foo128: Long,
130+
foo129: Long,
131+
foo130: Long,
132+
foo131: Long,
133+
foo132: Long,
134+
foo133: Long,
135+
foo134: Long,
136+
foo135: Long,
137+
foo136: Long,
138+
foo137: Long,
139+
foo138: Long,
140+
foo139: Long,
141+
foo140: Long,
142+
foo141: Long,
143+
foo142: Long,
144+
foo143: Long,
145+
foo144: Long,
146+
foo145: Long,
147+
foo146: Long,
148+
foo147: Long,
149+
foo148: Long,
150+
foo149: Long,
151+
foo150: Long,
152+
foo151: Long,
153+
foo152: Long,
154+
foo153: Long,
155+
foo154: Long,
156+
foo155: Long,
157+
foo156: Long,
158+
foo157: Long,
159+
foo158: Long,
160+
foo159: Long,
161+
foo160: Long,
162+
foo161: Long,
163+
foo162: Long,
164+
foo163: Long,
165+
foo164: Long,
166+
foo165: Long,
167+
foo166: Long,
168+
foo167: Long,
169+
foo168: Long,
170+
foo169: Long,
171+
foo170: Long,
172+
foo171: Long,
173+
foo172: Long,
174+
foo173: Long,
175+
foo174: Long,
176+
foo175: Long,
177+
foo176: Long,
178+
foo177: Long,
179+
foo178: Long,
180+
foo179: Long,
181+
foo180: Long,
182+
foo181: Long,
183+
foo182: Long,
184+
foo183: Long,
185+
foo184: Long,
186+
foo185: Long,
187+
foo186: Long,
188+
foo187: Long,
189+
foo188: Long,
190+
foo189: Long,
191+
foo190: Long,
192+
foo191: Long,
193+
foo192: Long,
194+
foo193: Long,
195+
foo194: Long,
196+
foo195: Long,
197+
foo196: Long,
198+
foo197: Long,
199+
foo198: Long,
200+
foo199: Long,
201+
foo200: Long
202+
) = foo1 + foo2
203+
204+
@main
205+
def run =
206+
println(foo(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200))

0 commit comments

Comments
 (0)