/*
* @(#)ClassisSubclassOf.java 1.10 06/10/10
*
* Copyright 1990-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program 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 program 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 at /legal/license.txt).
*
* 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 or visit www.sun.com if you need additional
* information or have any questions.
*
*/
/* This test case is created to force a C stack overflow in
* CVMimplementsInterface(). It first loads all super classes in the
* class hierarchy in a way that will cause them not to link, and
* then it uses instanceof to force C recursion in CVMimplementsInterface().
*/
import java.io.PrintStream;
public class ClassisSubclassOf implements Runnable {
public static void main(String args[]) {
Thread t = new Thread(new ClassisSubclassOf());
t.start();
}
public void run() {
try {
Class [] argTypes = new Class[300];
/* Load all 295 classes and Some_Interface in a non-recursive
* way and without causing them to link.
*/
for (int i=0; i < 295; i++) {
argTypes[i] = Class.forName("dl" + String.valueOf(i), false,
getClass().getClassLoader());
System.out.println("Load class " + "dl" + String.valueOf(i));
}
Class b = Class.forName("Some_Interface", false,
getClass().getClassLoader());
System.out.println("Load interface " + "Some_Interface" );
/* Create a dl294 array. By using an array, we can avoid causing
* the class hierarchy to be linked.
*/
dl294 [][] n = new dl294[1][2];
/*
* Using instaceof here will cause deep recursion in
* CVMimplementsInterface. Note that recursion will only happen
* if the class hierachry is still unlinked, which is why
* are using array types.
*/
if (! (n instanceof Some_Interface[][]) )
System.out.print("x is not instanceof Some_Interface[][]\n" +
"Test INAFFECTIVE: no stack overflow. Try reducing the\n" +
"stack size by using -Xss32k. If you still get this\n" +
"message, then you are running on a platform that has \n" +
"less stack usage than sparc, and the interface hierarchy\n" +
"of the test is not deep enough to cause a StackOverflowError.\n");
} catch (StackOverflowError s) {
s.printStackTrace();
System.out.println("Test PASSED: StackOverflowError thrown.");
} catch (Throwable e) {
System.out.println("Test FAILED: " + e + " thrown.");
}
}
}
interface dl0 {}
interface dl1 extends dl0 {}
interface dl2 extends dl1 {}
interface dl3 extends dl2 {}
interface dl4 extends dl3 {}
interface dl5 extends dl4 {}
interface dl6 extends dl5 {}
interface dl7 extends dl6 {}
interface dl8 extends dl7 {}
interface dl9 extends dl8 {}
interface dl10 extends dl9 {}
interface dl11 extends dl10 {}
interface dl12 extends dl11 {}
interface dl13 extends dl12 {}
interface dl14 extends dl13 {}
interface dl15 extends dl14 {}
interface dl16 extends dl15 {}
interface dl17 extends dl16 {}
interface dl18 extends dl17 {}
interface dl19 extends dl18 {}
interface dl20 extends dl19 {}
interface dl21 extends dl20 {}
interface dl22 extends dl21 {}
interface dl23 extends dl22 {}
interface dl24 extends dl23 {}
interface dl25 extends dl24 {}
interface dl26 extends dl25 {}
interface dl27 extends dl26 {}
interface dl28 extends dl27 {}
interface dl29 extends dl28 {}
interface dl30 extends dl29 {}
interface dl31 extends dl30 {}
interface dl32 extends dl31 {}
interface dl33 extends dl32 {}
interface dl34 extends dl33 {}
interface dl35 extends dl34 {}
interface dl36 extends dl35 {}
interface dl37 extends dl36 {}
interface dl38 extends dl37 {}
interface dl39 extends dl38 {}
interface dl40 extends dl39 {}
interface dl41 extends dl40 {}
interface dl42 extends dl41 {}
interface dl43 extends dl42 {}
interface dl44 extends dl43 {}
interface dl45 extends dl44 {}
interface dl46 extends dl45 {}
interface dl47 extends dl46 {}
interface dl48 extends dl47 {}
interface dl49 extends dl48 {}
interface dl50 extends dl49 {}
interface dl51 extends dl50 {}
interface dl52 extends dl51 {}
interface dl53 extends dl52 {}
interface dl54 extends dl53 {}
interface dl55 extends dl54 {}
interface dl56 extends dl55 {}
interface dl57 extends dl56 {}
interface dl58 extends dl57 {}
interface dl59 extends dl58 {}
interface dl60 extends dl59 {}
interface dl61 extends dl60 {}
interface dl62 extends dl61 {}
interface dl63 extends dl62 {}
interface dl64 extends dl63 {}
interface dl65 extends dl64 {}
interface dl66 extends dl65 {}
interface dl67 extends dl66 {}
interface dl68 extends dl67 {}
interface dl69 extends dl68 {}
interface dl70 extends dl69 {}
interface dl71 extends dl70 {}
interface dl72 extends dl71 {}
interface dl73 extends dl72 {}
interface dl74 extends dl73 {}
interface dl75 extends dl74 {}
interface dl76 extends dl75 {}
interface dl77 extends dl76 {}
interface dl78 extends dl77 {}
interface dl79 extends dl78 {}
interface dl80 extends dl79 {}
interface dl81 extends dl80 {}
interface dl82 extends dl81 {}
interface dl83 extends dl82 {}
interface dl84 extends dl83 {}
interface dl85 extends dl84 {}
interface dl86 extends dl85 {}
interface dl87 extends dl86 {}
interface dl88 extends dl87 {}
interface dl89 extends dl88 {}
interface dl90 extends dl89 {}
interface dl91 extends dl90 {}
interface dl92 extends dl91 {}
interface dl93 extends dl92 {}
interface dl94 extends dl93 {}
interface dl95 extends dl94 {}
interface dl96 extends dl95 {}
interface dl97 extends dl96 {}
interface dl98 extends dl97 {}
interface dl99 extends dl98 {}
interface dl100 extends dl99 {}
interface dl101 extends dl100 {}
interface dl102 extends dl101 {}
interface dl103 extends dl102 {}
interface dl104 extends dl103 {}
interface dl105 extends dl104 {}
interface dl106 extends dl105 {}
interface dl107 extends dl106 {}
interface dl108 extends dl107 {}
interface dl109 extends dl108 {}
interface dl110 extends dl109 {}
interface dl111 extends dl110 {}
interface dl112 extends dl111 {}
interface dl113 extends dl112 {}
interface dl114 extends dl113 {}
interface dl115 extends dl114 {}
interface dl116 extends dl115 {}
interface dl117 extends dl116 {}
interface dl118 extends dl117 {}
interface dl119 extends dl118 {}
interface dl120 extends dl119 {}
interface dl121 extends dl120 {}
interface dl122 extends dl121 {}
interface dl123 extends dl122 {}
interface dl124 extends dl123 {}
interface dl125 extends dl124 {}
interface dl126 extends dl125 {}
interface dl127 extends dl126 {}
interface dl128 extends dl127 {}
interface dl129 extends dl128 {}
interface dl130 extends dl129 {}
interface dl131 extends dl130 {}
interface dl132 extends dl131 {}
interface dl133 extends dl132 {}
interface dl134 extends dl133 {}
interface dl135 extends dl134 {}
interface dl136 extends dl135 {}
interface dl137 extends dl136 {}
interface dl138 extends dl137 {}
interface dl139 extends dl138 {}
interface dl140 extends dl139 {}
interface dl141 extends dl140 {}
interface dl142 extends dl141 {}
interface dl143 extends dl142 {}
interface dl144 extends dl143 {}
interface dl145 extends dl144 {}
interface dl146 extends dl145 {}
interface dl147 extends dl146 {}
interface dl148 extends dl147 {}
interface dl149 extends dl148 {}
interface dl150 extends dl149 {}
interface dl151 extends dl150 {}
interface dl152 extends dl151 {}
interface dl153 extends dl152 {}
interface dl154 extends dl153 {}
interface dl155 extends dl154 {}
interface dl156 extends dl155 {}
interface dl157 extends dl156 {}
interface dl158 extends dl157 {}
interface dl159 extends dl158 {}
interface dl160 extends dl159 {}
interface dl161 extends dl160 {}
interface dl162 extends dl161 {}
interface dl163 extends dl162 {}
interface dl164 extends dl163 {}
interface dl165 extends dl164 {}
interface dl166 extends dl165 {}
interface dl167 extends dl166 {}
interface dl168 extends dl167 {}
interface dl169 extends dl168 {}
interface dl170 extends dl169 {}
interface dl171 extends dl170 {}
interface dl172 extends dl171 {}
interface dl173 extends dl172 {}
interface dl174 extends dl173 {}
interface dl175 extends dl174 {}
interface dl176 extends dl175 {}
interface dl177 extends dl176 {}
interface dl178 extends dl177 {}
interface dl179 extends dl178 {}
interface dl180 extends dl179 {}
interface dl181 extends dl180 {}
interface dl182 extends dl181 {}
interface dl183 extends dl182 {}
interface dl184 extends dl183 {}
interface dl185 extends dl184 {}
interface dl186 extends dl185 {}
interface dl187 extends dl186 {}
interface dl188 extends dl187 {}
interface dl189 extends dl188 {}
interface dl190 extends dl189 {}
interface dl191 extends dl190 {}
interface dl192 extends dl191 {}
interface dl193 extends dl192 {}
interface dl194 extends dl193 {}
interface dl195 extends dl194 {}
interface dl196 extends dl195 {}
interface dl197 extends dl196 {}
interface dl198 extends dl197 {}
interface dl199 extends dl198 {}
interface dl200 extends dl199 {}
interface dl201 extends dl200 {}
interface dl202 extends dl201 {}
interface dl203 extends dl202 {}
interface dl204 extends dl203 {}
interface dl205 extends dl204 {}
interface dl206 extends dl205 {}
interface dl207 extends dl206 {}
interface dl208 extends dl207 {}
interface dl209 extends dl208 {}
interface dl210 extends dl209 {}
interface dl211 extends dl210 {}
interface dl212 extends dl211 {}
interface dl213 extends dl212 {}
interface dl214 extends dl213 {}
interface dl215 extends dl214 {}
interface dl216 extends dl215 {}
interface dl217 extends dl216 {}
interface dl218 extends dl217 {}
interface dl219 extends dl218 {}
interface dl220 extends dl219 {}
interface dl221 extends dl220 {}
interface dl222 extends dl221 {}
interface dl223 extends dl222 {}
interface dl224 extends dl223 {}
interface dl225 extends dl224 {}
interface dl226 extends dl225 {}
interface dl227 extends dl226 {}
interface dl228 extends dl227 {}
interface dl229 extends dl228 {}
interface dl230 extends dl229 {}
interface dl231 extends dl230 {}
interface dl232 extends dl231 {}
interface dl233 extends dl232 {}
interface dl234 extends dl233 {}
interface dl235 extends dl234 {}
interface dl236 extends dl235 {}
interface dl237 extends dl236 {}
interface dl238 extends dl237 {}
interface dl239 extends dl238 {}
interface dl240 extends dl239 {}
interface dl241 extends dl240 {}
interface dl242 extends dl241 {}
interface dl243 extends dl242 {}
interface dl244 extends dl243 {}
interface dl245 extends dl244 {}
interface dl246 extends dl245 {}
interface dl247 extends dl246 {}
interface dl248 extends dl247 {}
interface dl249 extends dl248 {}
interface dl250 extends dl249 {}
interface dl251 extends dl250 {}
interface dl252 extends dl251 {}
interface dl253 extends dl252 {}
interface dl254 extends dl253 {}
interface dl255 extends dl254 {}
interface dl256 extends dl255 {}
interface dl257 extends dl256 {}
interface dl258 extends dl257 {}
interface dl259 extends dl258 {}
interface dl260 extends dl259 {}
interface dl261 extends dl260 {}
interface dl262 extends dl261 {}
interface dl263 extends dl262 {}
interface dl264 extends dl263 {}
interface dl265 extends dl264 {}
interface dl266 extends dl265 {}
interface dl267 extends dl266 {}
interface dl268 extends dl267 {}
interface dl269 extends dl268 {}
interface dl270 extends dl269 {}
interface dl271 extends dl270 {}
interface dl272 extends dl271 {}
interface dl273 extends dl272 {}
interface dl274 extends dl273 {}
interface dl275 extends dl274 {}
interface dl276 extends dl275 {}
interface dl277 extends dl276 {}
interface dl278 extends dl277 {}
interface dl279 extends dl278 {}
interface dl280 extends dl279 {}
interface dl281 extends dl280 {}
interface dl282 extends dl281 {}
interface dl283 extends dl282 {}
interface dl284 extends dl283 {}
interface dl285 extends dl284 {}
interface dl286 extends dl285 {}
interface dl287 extends dl286 {}
interface dl288 extends dl287 {}
interface dl289 extends dl288 {}
interface dl290 extends dl289 {}
interface dl291 extends dl290 {}
interface dl292 extends dl291 {}
interface dl293 extends dl292 {}
class dl294 implements dl293 {}
interface Some_Interface extends dl293 {}