throw new IllegalStateException("stack underflow at " + handle);
throw new AnalysisException("stack underflow", methodGen, handle, e);
	public void visitINVOKESTATIC(INVOKESTATIC obj) {		if (REDUNDANT_LOAD_ELIMINATION) {			ConstantPoolGen cpg = getCPG();			String methodName = obj.getName(cpg);			String methodSig = obj.getSignature(cpg);				if (methodName.equals("class$") && methodSig.equals("(Ljava/lang/String;)Ljava/lang/Class;")) {				// Access of a Class object				ValueNumberFrame frame = getFrame();				try {					ValueNumber arg = frame.getTopValue();					String className = stringConstantMap.get(arg);					if (className != null) {						frame.popValue();						if (RLE_DEBUG) System.out.print("[found access of class object " + className + "]");						frame.pushValue(getClassObjectValue(className));						return;					}				} catch (DataflowAnalysisException e) {					throw new IllegalStateException("stack underflow at " + handle);				}			} else if (methodName.startsWith("access$")) {				String className = obj.getClassName(cpg);				try {					InnerClassAccess access = InnerClassAccessMap.instance().getInnerClassAccess(className, methodName);					if (access != null && access.getMethodSignature().equals(methodSig)) {						// Inner class field access method found.						if (access.isLoad()) {							if (access.isStatic())								loadStaticField((StaticField) access.getField(), obj); // Static load							else								loadInstanceField((InstanceField) access.getField(), obj); // Instance load						} else {							if (access.isStatic())								storeStaticField((StaticField) access.getField(), obj, true); // Static store							else								storeInstanceField((InstanceField) access.getField(), obj, true); // Instance store						}						return;					}				} catch (ClassNotFoundException e) {					lookupFailureCallback.reportMissingClass(e);				}			}		}		handleNormalInstruction(obj);	}