Skip to content

Commit

Permalink
8334466: Ambiguous method call with generics may cause FunctionDescri…
Browse files Browse the repository at this point in the history
…ptorLookupError

Reviewed-by: jlahoda
  • Loading branch information
Vicente Romero committed Aug 12, 2024
1 parent 89a15f1 commit 61d1dc5
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1219,9 +1219,17 @@ private boolean unrelatedInterfaces(Type t, Type s) {

/** Parameters {@code t} and {@code s} are unrelated functional interface types. */
private boolean functionalInterfaceMostSpecific(Type t, Type s, JCTree tree) {
Type tDesc = types.findDescriptorType(types.capture(t));
Type tDescNoCapture = types.findDescriptorType(t);
Type sDesc = types.findDescriptorType(s);
Type tDesc;
Type tDescNoCapture;
Type sDesc;
try {
tDesc = types.findDescriptorType(types.capture(t));
tDescNoCapture = types.findDescriptorType(t);
sDesc = types.findDescriptorType(s);
} catch (Types.FunctionDescriptorLookupError ex) {
// don't report, a more meaningful error should be reported upstream
return false;
}
final List<Type> tTypeParams = tDesc.getTypeArguments();
final List<Type> tTypeParamsNoCapture = tDescNoCapture.getTypeArguments();
final List<Type> sTypeParams = sDesc.getTypeArguments();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* @test /nodynamiccopyright/
* @bug 8334466
* @summary Ambiguous method call with generics may cause FunctionDescriptorLookupError
* @compile/fail/ref=CrashWithFunctionDescriptorLookupErrorTest.out -XDrawDiagnostics CrashWithFunctionDescriptorLookupErrorTest.java
*/

import java.util.List;

class CrashWithFunctionDescriptorLookupErrorTest {
void m() {
List<X> list = List.of(new X());
test(list.get(0));
}

void test(A<?> a) { }
void test(B<?> b) { }

interface A<T extends A<T>> { T a(); }
interface B<T extends B<T>> { T b(); }
class X implements A<X>, B<X> {
public X a() { return null; }
public X b() { return null; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CrashWithFunctionDescriptorLookupErrorTest.java:13:9: compiler.err.ref.ambiguous: test, kindname.method, test(CrashWithFunctionDescriptorLookupErrorTest.A<?>), CrashWithFunctionDescriptorLookupErrorTest, kindname.method, test(CrashWithFunctionDescriptorLookupErrorTest.B<?>), CrashWithFunctionDescriptorLookupErrorTest
1 error

1 comment on commit 61d1dc5

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.