Skip to content

StructuralEqualityComparer: unexpected combination #7680

@cushon

Description

@cushon
import java.util.Comparator;

public class CrashRepro {
  interface Foo {
    int x();

    int y();
  }

  <T extends Foo> Comparator<T> test() {
    return Comparator.comparing(T::x).thenComparing(T::y);
  }
}
./checker-framework-4.0.0/checker/bin/javac -processor nullness CrashRepro.java |& head -n 30
error: StructuralEqualityComparer: unexpected combination:  type1: [DECLARED class org.checkerframework.framework.type.AnnotatedTypeMirror$AnnotatedDeclaredType] Foo  type2: [TYPEVAR class org.checkerframework.framework.type.AnnotatedTypeMirror$AnnotatedTypeVariable] T extends Foo
    visitHistory = org.checkerframework.framework.type.StructuralEqualityVisitHistory@ba90170
  ; The Checker Framework crashed.  Please report the crash.  Version: Checker Framework 4.0.0.
  Compilation unit: CrashRepro.java
  Last visited tree at line 11 column 5:
      return Comparator.comparing(T::x).thenComparing(T::y);
  Exception: java.lang.Throwable; java.lang.Throwable
        at org.checkerframework.javacutil.BugInCF.<init>(BugInCF.java:26)
        at org.checkerframework.framework.type.visitor.AtmComboVisitor.defaultAction(AtmComboVisitor.java:66)
        at org.checkerframework.framework.type.StructuralEqualityComparer.defaultAction(StructuralEqualityComparer.java:49)
        at org.checkerframework.framework.type.StructuralEqualityComparer.defaultAction(StructuralEqualityComparer.java:30)
        at org.checkerframework.framework.type.visitor.AbstractAtmComboVisitor.visitDeclared_Typevar(AbstractAtmComboVisitor.java:141)
        at org.checkerframework.framework.type.StructuralEqualityComparer.visitDeclared_Typevar(StructuralEqualityComparer.java:401)
        at org.checkerframework.framework.type.StructuralEqualityComparer.visitDeclared_Typevar(StructuralEqualityComparer.java:30)
        at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:337)
        at org.checkerframework.framework.type.StructuralEqualityComparer.areEqual(StructuralEqualityComparer.java:84)
        at org.checkerframework.framework.type.StructuralEqualityComparer.areEqualInHierarchy(StructuralEqualityComparer.java:94)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.areEqualInHierarchy(DefaultTypeHierarchy.java:340)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.isContainedBy(DefaultTypeHierarchy.java:429)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.isContainedMany(DefaultTypeHierarchy.java:659)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.visitTypeArgs(DefaultTypeHierarchy.java:623)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.visitDeclared_Declared(DefaultTypeHierarchy.java:556)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.visitDeclared_Declared(DefaultTypeHierarchy.java:49)
        at org.checkerframework.framework.util.AtmCombo.accept(AtmCombo.java:313)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.isSubtype(DefaultTypeHierarchy.java:260)
        at org.checkerframework.framework.type.DefaultTypeHierarchy.isSubtype(DefaultTypeHierarchy.java:138)
        at org.checkerframework.common.basetype.BaseTypeVisitor.commonAssignmentCheck(BaseTypeVisitor.java:3252)
        at org.checkerframework.common.basetype.BaseTypeVisitor.commonAssignmentCheck(BaseTypeVisitor.java:3227)
        at org.checkerframework.common.basetype.BaseTypeVisitor.visitReturn(BaseTypeVisitor.java:2369)
        at org.checkerframework.common.basetype.BaseTypeVisitor.visitReturn(BaseTypeVisitor.java:189)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions