Skip to content

Commit cba9d6b

Browse files
committed
[GR-66024] Handle field types and return types that are unresolved in VerifyUsageWithEquals
PullRequest: graal/21126
2 parents e4bd1ea + 5b29bd6 commit cba9d6b

File tree

1 file changed

+11
-18
lines changed

1 file changed

+11
-18
lines changed

compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/VerifyUsageWithEquals.java

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,19 @@ private static boolean isTrustedInterface(Class<?> cls) {
115115
private boolean isAssignableToRestrictedType(ValueNode node, MetaAccessProvider metaAccess) {
116116
if (node.stamp(NodeView.DEFAULT) instanceof ObjectStamp) {
117117
ResolvedJavaType restrictedType = metaAccess.lookupJavaType(restrictedClass);
118-
ResolvedJavaType nodeType = StampTool.typeOrNull(node);
119-
if (nodeType == null && node instanceof LoadFieldNode) {
120-
nodeType = (ResolvedJavaType) ((LoadFieldNode) node).field().getType();
118+
JavaType nodeType = StampTool.typeOrNull(node);
119+
if (nodeType == null && node instanceof LoadFieldNode load) {
120+
nodeType = load.field().getType();
121121
}
122-
if (nodeType == null && node instanceof Invoke) {
123-
ResolvedJavaMethod target = ((Invoke) node).callTarget().targetMethod();
124-
nodeType = (ResolvedJavaType) target.getSignature().getReturnType(target.getDeclaringClass());
122+
if (nodeType == null && node instanceof Invoke invoke) {
123+
ResolvedJavaMethod target = invoke.callTarget().targetMethod();
124+
nodeType = target.getSignature().getReturnType(target.getDeclaringClass());
125125
}
126-
if (nodeType == null && node instanceof UncheckedInterfaceProvider) {
127-
nodeType = StampTool.typeOrNull(((UncheckedInterfaceProvider) node).uncheckedStamp());
126+
if (nodeType == null && node instanceof UncheckedInterfaceProvider uip) {
127+
nodeType = StampTool.typeOrNull(uip.uncheckedStamp());
128128
}
129129

130-
if (nodeType != null && restrictedType.isAssignableFrom(nodeType)) {
131-
return true;
132-
}
130+
return nodeType instanceof ResolvedJavaType resolved && restrictedType.isAssignableFrom(resolved);
133131
}
134132
return false;
135133
}
@@ -162,9 +160,7 @@ private static boolean isEqualsMethod(ResolvedJavaMethod method) {
162160
if (sig.getReturnKind() == JavaKind.Boolean) {
163161
if (sig.getParameterCount(false) == 1) {
164162
ResolvedJavaType ptype = (ResolvedJavaType) sig.getParameterType(0, method.getDeclaringClass());
165-
if (ptype.isJavaLangObject()) {
166-
return true;
167-
}
163+
return ptype.isJavaLangObject();
168164

169165
}
170166
}
@@ -184,10 +180,7 @@ private boolean isIllegalUsage(ResolvedJavaMethod method, ValueNode x, ValueNode
184180
if ((isAssignableToRestrictedType(x, context.getMetaAccess()) || isAssignableToRestrictedType(y, context.getMetaAccess())) &&
185181
!isSafeConstant(x, context.getConstantReflection(), context.getSnippetReflection()) &&
186182
!isSafeConstant(y, context.getConstantReflection(), context.getSnippetReflection())) {
187-
if (isEqualsMethod(method) && (isThisParameter(x) || isThisParameter(y))) {
188-
return false;
189-
}
190-
return true;
183+
return !isEqualsMethod(method) || (!isThisParameter(x) && !isThisParameter(y));
191184
}
192185
return false;
193186
}

0 commit comments

Comments
 (0)