4917091: javac rejects array over 128 in length
authorjjg
Thu, 09 Dec 2010 08:24:42 -0800
changeset 7630 850c97ee59f2
parent 7629 4662e86bff2e
child 7631 57bce845dcee
4917091: javac rejects array over 128 in length Reviewed-by: mcimadamore
langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java
langtools/test/tools/javac/4917091/Test255.java
langtools/test/tools/javac/4917091/Test256a.java
langtools/test/tools/javac/4917091/Test256a.out
langtools/test/tools/javac/4917091/Test256b.java
langtools/test/tools/javac/4917091/Test256b.out
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Thu Dec 09 15:50:57 2010 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java	Thu Dec 09 08:24:42 2010 -0800
@@ -1802,7 +1802,7 @@
          */
         Item makeNewArray(DiagnosticPosition pos, Type type, int ndims) {
             Type elemtype = types.elemtype(type);
-            if (types.dimensions(elemtype) + ndims > ClassFile.MAX_DIMENSIONS) {
+            if (types.dimensions(type) > ClassFile.MAX_DIMENSIONS) {
                 log.error(pos, "limit.dimensions");
                 nerrs++;
             }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/4917091/Test255.java	Thu Dec 09 08:24:42 2010 -0800
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4917091
+ * @summary javac rejects array over 128 in length
+ */
+
+
+public class Test255 {
+    public static void main(String... args) {
+            // allocating an array with 255 dimensions is allowed
+            Object expected = (Object)new Object
+                [1/*001*/][1/*002*/][1/*003*/][1/*004*/][1/*005*/]
+                [1/*006*/][1/*007*/][1/*008*/][1/*009*/][1/*010*/]
+                [1/*011*/][1/*012*/][1/*013*/][1/*014*/][1/*015*/]
+                [1/*016*/][1/*017*/][1/*018*/][1/*019*/][1/*020*/]
+                [1/*021*/][1/*022*/][1/*023*/][1/*024*/][1/*025*/]
+                [1/*026*/][1/*027*/][1/*028*/][1/*029*/][1/*030*/]
+                [1/*031*/][1/*032*/][1/*033*/][1/*034*/][1/*035*/]
+                [1/*036*/][1/*037*/][1/*038*/][1/*039*/][1/*040*/]
+                [1/*041*/][1/*042*/][1/*043*/][1/*044*/][1/*045*/]
+                [1/*046*/][1/*047*/][1/*048*/][1/*049*/][1/*050*/]
+                [1/*051*/][1/*052*/][1/*053*/][1/*054*/][1/*055*/]
+                [1/*056*/][1/*057*/][1/*058*/][1/*059*/][1/*060*/]
+                [1/*061*/][1/*062*/][1/*063*/][1/*064*/][1/*065*/]
+                [1/*066*/][1/*067*/][1/*068*/][1/*069*/][1/*070*/]
+                [1/*071*/][1/*072*/][1/*073*/][1/*074*/][1/*075*/]
+                [1/*076*/][1/*077*/][1/*078*/][1/*079*/][1/*080*/]
+                [1/*081*/][1/*082*/][1/*083*/][1/*084*/][1/*085*/]
+                [1/*086*/][1/*087*/][1/*088*/][1/*089*/][1/*090*/]
+                [1/*091*/][1/*092*/][1/*093*/][1/*094*/][1/*095*/]
+                [1/*096*/][1/*097*/][1/*098*/][1/*099*/][1/*100*/]
+
+                [1/*101*/][1/*102*/][1/*103*/][1/*104*/][1/*105*/]
+                [1/*106*/][1/*107*/][1/*108*/][1/*109*/][1/*110*/]
+                [1/*111*/][1/*112*/][1/*113*/][1/*114*/][1/*115*/]
+                [1/*116*/][1/*117*/][1/*118*/][1/*119*/][1/*120*/]
+                [1/*121*/][1/*122*/][1/*123*/][1/*124*/][1/*125*/]
+                [1/*126*/][1/*127*/][1/*128*/][1/*129*/][1/*130*/]
+                [1/*131*/][1/*132*/][1/*133*/][1/*134*/][1/*135*/]
+                [1/*136*/][1/*137*/][1/*138*/][1/*139*/][1/*140*/]
+                [1/*141*/][1/*142*/][1/*143*/][1/*144*/][1/*145*/]
+                [1/*146*/][1/*147*/][1/*148*/][1/*149*/][1/*150*/]
+                [1/*151*/][1/*152*/][1/*153*/][1/*154*/][1/*155*/]
+                [1/*156*/][1/*157*/][1/*158*/][1/*159*/][1/*160*/]
+                [1/*161*/][1/*162*/][1/*163*/][1/*164*/][1/*165*/]
+                [1/*166*/][1/*167*/][1/*168*/][1/*169*/][1/*170*/]
+                [1/*171*/][1/*172*/][1/*173*/][1/*174*/][1/*175*/]
+                [1/*176*/][1/*177*/][1/*178*/][1/*179*/][1/*180*/]
+                [1/*181*/][1/*182*/][1/*183*/][1/*184*/][1/*185*/]
+                [1/*186*/][1/*187*/][1/*188*/][1/*189*/][1/*190*/]
+                [1/*191*/][1/*192*/][1/*193*/][1/*194*/][1/*195*/]
+                [1/*196*/][1/*197*/][1/*198*/][1/*199*/][1/*200*/]
+
+                [1/*201*/][1/*202*/][1/*203*/][1/*204*/][1/*205*/]
+                [1/*206*/][1/*207*/][1/*208*/][1/*209*/][1/*210*/]
+                [1/*211*/][1/*212*/][1/*213*/][1/*214*/][1/*215*/]
+                [1/*216*/][1/*217*/][1/*218*/][1/*219*/][1/*220*/]
+                [1/*221*/][1/*222*/][1/*223*/][1/*224*/][1/*225*/]
+                [1/*226*/][1/*227*/][1/*228*/][1/*229*/][1/*230*/]
+                [1/*231*/][1/*232*/][1/*233*/][1/*234*/][1/*235*/]
+                [1/*236*/][1/*237*/][1/*238*/][1/*239*/][1/*240*/]
+                [1/*241*/][1/*242*/][1/*243*/][1/*244*/][1/*245*/]
+                [1/*246*/][1/*247*/][1/*248*/][1/*249*/][1/*250*/]
+                [1/*251*/][1/*252*/][1/*253*/][1/*254*/][1/*255*/];
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/4917091/Test256a.java	Thu Dec 09 08:24:42 2010 -0800
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4917091
+ * @summary javac rejects array over 128 in length
+ * @compile/fail/ref=Test256a.out -XDrawDiagnostics Test256a.java
+ */
+
+public class Test256a {
+            // allocating an array with more than 255 dimensions is not allowed
+            static Object expected = (Object)new Object
+                [1/*001*/][1/*002*/][1/*003*/][1/*004*/][1/*005*/]
+                [1/*006*/][1/*007*/][1/*008*/][1/*009*/][1/*010*/]
+                [1/*011*/][1/*012*/][1/*013*/][1/*014*/][1/*015*/]
+                [1/*016*/][1/*017*/][1/*018*/][1/*019*/][1/*020*/]
+                [1/*021*/][1/*022*/][1/*023*/][1/*024*/][1/*025*/]
+                [1/*026*/][1/*027*/][1/*028*/][1/*029*/][1/*030*/]
+                [1/*031*/][1/*032*/][1/*033*/][1/*034*/][1/*035*/]
+                [1/*036*/][1/*037*/][1/*038*/][1/*039*/][1/*040*/]
+                [1/*041*/][1/*042*/][1/*043*/][1/*044*/][1/*045*/]
+                [1/*046*/][1/*047*/][1/*048*/][1/*049*/][1/*050*/]
+                [1/*051*/][1/*052*/][1/*053*/][1/*054*/][1/*055*/]
+                [1/*056*/][1/*057*/][1/*058*/][1/*059*/][1/*060*/]
+                [1/*061*/][1/*062*/][1/*063*/][1/*064*/][1/*065*/]
+                [1/*066*/][1/*067*/][1/*068*/][1/*069*/][1/*070*/]
+                [1/*071*/][1/*072*/][1/*073*/][1/*074*/][1/*075*/]
+                [1/*076*/][1/*077*/][1/*078*/][1/*079*/][1/*080*/]
+                [1/*081*/][1/*082*/][1/*083*/][1/*084*/][1/*085*/]
+                [1/*086*/][1/*087*/][1/*088*/][1/*089*/][1/*090*/]
+                [1/*091*/][1/*092*/][1/*093*/][1/*094*/][1/*095*/]
+                [1/*096*/][1/*097*/][1/*098*/][1/*099*/][1/*100*/]
+
+                [1/*101*/][1/*102*/][1/*103*/][1/*104*/][1/*105*/]
+                [1/*106*/][1/*107*/][1/*108*/][1/*109*/][1/*110*/]
+                [1/*111*/][1/*112*/][1/*113*/][1/*114*/][1/*115*/]
+                [1/*116*/][1/*117*/][1/*118*/][1/*119*/][1/*120*/]
+                [1/*121*/][1/*122*/][1/*123*/][1/*124*/][1/*125*/]
+                [1/*126*/][1/*127*/][1/*128*/][1/*129*/][1/*130*/]
+                [1/*131*/][1/*132*/][1/*133*/][1/*134*/][1/*135*/]
+                [1/*136*/][1/*137*/][1/*138*/][1/*139*/][1/*140*/]
+                [1/*141*/][1/*142*/][1/*143*/][1/*144*/][1/*145*/]
+                [1/*146*/][1/*147*/][1/*148*/][1/*149*/][1/*150*/]
+                [1/*151*/][1/*152*/][1/*153*/][1/*154*/][1/*155*/]
+                [1/*156*/][1/*157*/][1/*158*/][1/*159*/][1/*160*/]
+                [1/*161*/][1/*162*/][1/*163*/][1/*164*/][1/*165*/]
+                [1/*166*/][1/*167*/][1/*168*/][1/*169*/][1/*170*/]
+                [1/*171*/][1/*172*/][1/*173*/][1/*174*/][1/*175*/]
+                [1/*176*/][1/*177*/][1/*178*/][1/*179*/][1/*180*/]
+                [1/*181*/][1/*182*/][1/*183*/][1/*184*/][1/*185*/]
+                [1/*186*/][1/*187*/][1/*188*/][1/*189*/][1/*190*/]
+                [1/*191*/][1/*192*/][1/*193*/][1/*194*/][1/*195*/]
+                [1/*196*/][1/*197*/][1/*198*/][1/*199*/][1/*200*/]
+
+                [1/*201*/][1/*202*/][1/*203*/][1/*204*/][1/*205*/]
+                [1/*206*/][1/*207*/][1/*208*/][1/*209*/][1/*210*/]
+                [1/*211*/][1/*212*/][1/*213*/][1/*214*/][1/*215*/]
+                [1/*216*/][1/*217*/][1/*218*/][1/*219*/][1/*220*/]
+                [1/*221*/][1/*222*/][1/*223*/][1/*224*/][1/*225*/]
+                [1/*226*/][1/*227*/][1/*228*/][1/*229*/][1/*230*/]
+                [1/*231*/][1/*232*/][1/*233*/][1/*234*/][1/*235*/]
+                [1/*236*/][1/*237*/][1/*238*/][1/*239*/][1/*240*/]
+                [1/*241*/][1/*242*/][1/*243*/][1/*244*/][1/*245*/]
+                [1/*246*/][1/*247*/][1/*248*/][1/*249*/][1/*250*/]
+                [1/*251*/][1/*252*/][1/*253*/][1/*254*/][1/*255*/]
+                [1/*256*/];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/4917091/Test256a.out	Thu Dec 09 08:24:42 2010 -0800
@@ -0,0 +1,2 @@
+Test256a.java:33:46: compiler.err.limit.dimensions
+1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/4917091/Test256b.java	Thu Dec 09 08:24:42 2010 -0800
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 4917091
+ * @summary javac rejects array over 128 in length
+ * @compile/fail/ref=Test256b.out -XDrawDiagnostics Test256b.java
+ */
+
+public class Test256b {
+            // allocating an array with 255 dimensions whose component
+            // type provides additional dimensions is not allowed,
+            // since the type descriptor for any array is limited to
+            // 255 dimensions: JVMS3, section 4.3.2.
+            static Object expected = (Object)new Object
+                [1/*001*/][1/*002*/][1/*003*/][1/*004*/][1/*005*/]
+                [1/*006*/][1/*007*/][1/*008*/][1/*009*/][1/*010*/]
+                [1/*011*/][1/*012*/][1/*013*/][1/*014*/][1/*015*/]
+                [1/*016*/][1/*017*/][1/*018*/][1/*019*/][1/*020*/]
+                [1/*021*/][1/*022*/][1/*023*/][1/*024*/][1/*025*/]
+                [1/*026*/][1/*027*/][1/*028*/][1/*029*/][1/*030*/]
+                [1/*031*/][1/*032*/][1/*033*/][1/*034*/][1/*035*/]
+                [1/*036*/][1/*037*/][1/*038*/][1/*039*/][1/*040*/]
+                [1/*041*/][1/*042*/][1/*043*/][1/*044*/][1/*045*/]
+                [1/*046*/][1/*047*/][1/*048*/][1/*049*/][1/*050*/]
+                [1/*051*/][1/*052*/][1/*053*/][1/*054*/][1/*055*/]
+                [1/*056*/][1/*057*/][1/*058*/][1/*059*/][1/*060*/]
+                [1/*061*/][1/*062*/][1/*063*/][1/*064*/][1/*065*/]
+                [1/*066*/][1/*067*/][1/*068*/][1/*069*/][1/*070*/]
+                [1/*071*/][1/*072*/][1/*073*/][1/*074*/][1/*075*/]
+                [1/*076*/][1/*077*/][1/*078*/][1/*079*/][1/*080*/]
+                [1/*081*/][1/*082*/][1/*083*/][1/*084*/][1/*085*/]
+                [1/*086*/][1/*087*/][1/*088*/][1/*089*/][1/*090*/]
+                [1/*091*/][1/*092*/][1/*093*/][1/*094*/][1/*095*/]
+                [1/*096*/][1/*097*/][1/*098*/][1/*099*/][1/*100*/]
+
+                [1/*101*/][1/*102*/][1/*103*/][1/*104*/][1/*105*/]
+                [1/*106*/][1/*107*/][1/*108*/][1/*109*/][1/*110*/]
+                [1/*111*/][1/*112*/][1/*113*/][1/*114*/][1/*115*/]
+                [1/*116*/][1/*117*/][1/*118*/][1/*119*/][1/*120*/]
+                [1/*121*/][1/*122*/][1/*123*/][1/*124*/][1/*125*/]
+                [1/*126*/][1/*127*/][1/*128*/][1/*129*/][1/*130*/]
+                [1/*131*/][1/*132*/][1/*133*/][1/*134*/][1/*135*/]
+                [1/*136*/][1/*137*/][1/*138*/][1/*139*/][1/*140*/]
+                [1/*141*/][1/*142*/][1/*143*/][1/*144*/][1/*145*/]
+                [1/*146*/][1/*147*/][1/*148*/][1/*149*/][1/*150*/]
+                [1/*151*/][1/*152*/][1/*153*/][1/*154*/][1/*155*/]
+                [1/*156*/][1/*157*/][1/*158*/][1/*159*/][1/*160*/]
+                [1/*161*/][1/*162*/][1/*163*/][1/*164*/][1/*165*/]
+                [1/*166*/][1/*167*/][1/*168*/][1/*169*/][1/*170*/]
+                [1/*171*/][1/*172*/][1/*173*/][1/*174*/][1/*175*/]
+                [1/*176*/][1/*177*/][1/*178*/][1/*179*/][1/*180*/]
+                [1/*181*/][1/*182*/][1/*183*/][1/*184*/][1/*185*/]
+                [1/*186*/][1/*187*/][1/*188*/][1/*189*/][1/*190*/]
+                [1/*191*/][1/*192*/][1/*193*/][1/*194*/][1/*195*/]
+                [1/*196*/][1/*197*/][1/*198*/][1/*199*/][1/*200*/]
+
+                [1/*201*/][1/*202*/][1/*203*/][1/*204*/][1/*205*/]
+                [1/*206*/][1/*207*/][1/*208*/][1/*209*/][1/*210*/]
+                [1/*211*/][1/*212*/][1/*213*/][1/*214*/][1/*215*/]
+                [1/*216*/][1/*217*/][1/*218*/][1/*219*/][1/*220*/]
+                [1/*221*/][1/*222*/][1/*223*/][1/*224*/][1/*225*/]
+                [1/*226*/][1/*227*/][1/*228*/][1/*229*/][1/*230*/]
+                [1/*231*/][1/*232*/][1/*233*/][1/*234*/][1/*235*/]
+                [1/*236*/][1/*237*/][1/*238*/][1/*239*/][1/*240*/]
+                [1/*241*/][1/*242*/][1/*243*/][1/*244*/][1/*245*/]
+                [1/*246*/][1/*247*/][1/*248*/][1/*249*/][1/*250*/]
+                [1/*251*/][1/*252*/][1/*253*/][1/*254*/][1/*255*/]
+                [];
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/4917091/Test256b.out	Thu Dec 09 08:24:42 2010 -0800
@@ -0,0 +1,2 @@
+Test256b.java:36:46: compiler.err.limit.dimensions
+1 error