Skip to content

Commit 9f5a0c6

Browse files
committed
Fix invalid type comparison in AbstractObjectIsSubclassNode. (GR-27646)
1 parent 5d18662 commit 9f5a0c6

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/classes/AbstractObjectIsSubclassNode.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@
4343
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.GetObjectArrayNode;
4444
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
4545
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
46+
import com.oracle.graal.python.builtins.objects.type.TypeNodes.IsSameTypeNode;
4647
import com.oracle.graal.python.nodes.PNodeWithContext;
4748
import com.oracle.graal.python.runtime.PythonOptions;
4849
import com.oracle.truffle.api.CompilerDirectives;
4950
import com.oracle.truffle.api.dsl.Cached;
51+
import com.oracle.truffle.api.dsl.Cached.Shared;
5052
import com.oracle.truffle.api.dsl.GenerateUncached;
5153
import com.oracle.truffle.api.dsl.ImportStatic;
5254
import com.oracle.truffle.api.dsl.Specialization;
@@ -73,8 +75,10 @@ public final boolean execute(Object derived, Object cls) {
7375
return execute(null, derived, cls);
7476
}
7577

76-
@Specialization(guards = "derived == cls")
77-
boolean isSameClass(@SuppressWarnings("unused") Object derived, @SuppressWarnings("unused") Object cls) {
78+
@Specialization(guards = "isSameTypeNode.execute(derived, cls)", limit = "1")
79+
@SuppressWarnings("unused")
80+
static boolean doSameClass(Object derived, Object cls,
81+
@Shared("isSameType") @Cached IsSameTypeNode isSameTypeNode) {
7882
return true;
7983
}
8084

@@ -85,7 +89,7 @@ protected static int[] observedSize() {
8589
}
8690

8791
@Specialization(guards = {"derived != cls", "derived == cachedDerived", "cls == cachedCls"}, limit = "getCallSiteInlineCacheMaxDepth()")
88-
boolean isSubclass(VirtualFrame frame, @SuppressWarnings("unused") Object derived, @SuppressWarnings("unused") Object cls,
92+
static boolean doSubclass(VirtualFrame frame, @SuppressWarnings("unused") Object derived, @SuppressWarnings("unused") Object cls,
8993
@Cached(value = "observedSize()", dimensions = 1) int[] observedSizeArray,
9094
@Cached("derived") Object cachedDerived,
9195
@Cached("cls") Object cachedCls,
@@ -133,13 +137,14 @@ private static final boolean loopBases(VirtualFrame frame, Object cachedCls, Obj
133137
return false;
134138
}
135139

136-
@Specialization(replaces = {"isSubclass", "isSameClass"})
137-
boolean isSubclassGeneric(VirtualFrame frame, Object derived, Object cls,
140+
@Specialization(replaces = {"doSubclass", "doSameClass"})
141+
static boolean doGeneric(VirtualFrame frame, Object derived, Object cls,
138142
@Cached SequenceStorageNodes.LenNode lenNode,
139143
@Cached AbstractObjectGetBasesNode getBasesNode,
140144
@Cached AbstractObjectIsSubclassNode isSubclassNode,
145+
@Shared("isSameType") @Cached IsSameTypeNode isSameTypeNode,
141146
@Cached GetObjectArrayNode getObjectArrayNode) {
142-
if (derived == cls) {
147+
if (isSameTypeNode.execute(derived, cls)) {
143148
return true;
144149
}
145150

0 commit comments

Comments
 (0)