@@ -87,6 +87,10 @@ private InterpreterResolvedJavaType resolveClassConstant(int classIndex, Interpr
87
87
Symbol <Name > className = this .className (classIndex );
88
88
type = SymbolsSupport .getTypes ().fromClassNameEntry (className );
89
89
} else if (entry instanceof UnresolvedJavaType unresolvedJavaType ) {
90
+ Throwable cause = unresolvedJavaType .getCause ();
91
+ if (cause != null ) {
92
+ throw uncheckedThrow (cause );
93
+ }
90
94
// CP comes from build-time JVMCI type, derive type from UnresolvedJavaType.
91
95
type = SymbolsSupport .getTypes ().getOrCreateValidType (unresolvedJavaType .getName ());
92
96
} else {
@@ -103,7 +107,7 @@ private InterpreterResolvedJavaType resolveClassConstant(int classIndex, Interpr
103
107
// Just throw the exception and don't prevent these classes from being loaded for
104
108
// virtual machine errors like StackOverflow and OutOfMemoryError, etc.
105
109
// Needs clarification to section 5.4.3 of the JVM spec (see 6308271)
106
- this .cachedEntries [classIndex ] = e ;
110
+ this .cachedEntries [classIndex ] = UnresolvedJavaType . create ( type . toString (), e ) ;
107
111
throw e ;
108
112
}
109
113
}
@@ -126,6 +130,10 @@ private InterpreterResolvedJavaField resolveFieldRefConstant(int fieldIndex, Int
126
130
int memberClassIndex = this .memberClassIndex (fieldIndex );
127
131
holder = (InterpreterResolvedJavaType ) resolvedAt (memberClassIndex , accessingClass );
128
132
} else if (entry instanceof UnresolvedJavaField unresolvedJavaField ) {
133
+ Throwable cause = unresolvedJavaField .getCause ();
134
+ if (cause != null ) {
135
+ throw uncheckedThrow (cause );
136
+ }
129
137
// CP comes from build-time JVMCI type, derive it from UnresolvedJavaField.
130
138
fieldName = SymbolsSupport .getNames ().getOrCreate (unresolvedJavaField .getName ());
131
139
fieldType = SymbolsSupport .getTypes ().getOrCreateValidType (unresolvedJavaField .getType ().getName ());
@@ -159,6 +167,10 @@ private InterpreterResolvedJavaMethod resolveClassMethodRefConstant(int methodIn
159
167
int memberClassIndex = this .memberClassIndex (methodIndex );
160
168
holder = (InterpreterResolvedJavaType ) resolvedAt (memberClassIndex , accessingClass );
161
169
} else if (entry instanceof UnresolvedJavaMethod unresolvedJavaMethod ) {
170
+ Throwable cause = unresolvedJavaMethod .getCause ();
171
+ if (cause != null ) {
172
+ throw uncheckedThrow (cause );
173
+ }
162
174
// CP comes from build-time JVMCI type, derive it from UnresolvedJavaMethod.
163
175
methodName = SymbolsSupport .getNames ().getOrCreate (unresolvedJavaMethod .getName ());
164
176
methodSignature = SymbolsSupport .getSignatures ().getOrCreateValidSignature (unresolvedJavaMethod .getSignature ().toMethodDescriptor ());
@@ -193,6 +205,10 @@ private InterpreterResolvedJavaMethod resolveInterfaceMethodRefConstant(int inte
193
205
int memberClassIndex = this .memberClassIndex (interfaceMethodIndex );
194
206
holder = (InterpreterResolvedJavaType ) resolvedAt (memberClassIndex , accessingClass );
195
207
} else if (entry instanceof UnresolvedJavaMethod unresolvedJavaMethod ) {
208
+ Throwable cause = unresolvedJavaMethod .getCause ();
209
+ if (cause != null ) {
210
+ throw uncheckedThrow (cause );
211
+ }
196
212
// CP comes from build-time JVMCI type, derive it from UnresolvedJavaMethod.
197
213
methodName = SymbolsSupport .getNames ().getOrCreate (unresolvedJavaMethod .getName ());
198
214
methodSignature = SymbolsSupport .getSignatures ().getOrCreateValidSignature (unresolvedJavaMethod .getSignature ().toMethodDescriptor ());
0 commit comments