Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8320220

Compilation of cyclic hierarchy causes infinite recursion

XMLWordPrintable

    • b12
    • generic
    • generic

      A DESCRIPTION OF THE PROBLEM :
      Compiling invalid sealed class Java source code using JavaC 22 causes infinite recursion in jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3707)

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Compilation should fail with error messages
      ACTUAL -
      SealedClassCompatibility4Mutated.java:7: error: interface expected here
          static interface SealedC1C33 extends Sealed {}
                                               ^
      SealedClassCompatibility4Mutated.java:8: error: interface expected here
          static interface SealedD1C33 extends Sealed {}
                                               ^
      SealedClassCompatibility4Mutated.java:4: error: cyclic inheritance involving SealedClassCompatibility4Mutated.Sealed
          sealed class Sealed implements SealedC1C33, SealedD1C33 {}
                 ^
      SealedClassCompatibility4Mutated.java:3: error: sealed class must have subclasses
          sealed class A implements Sealed, Comparable<A> {}
                 ^
      4 errors


      The system is out of resources.
      Consult the following stack trace for details.
      java.lang.StackOverflowError
      at jdk.compiler/com.sun.tools.javac.code.Types$15.visitClassType(Types.java:2517)
      at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.accept(Type.java:1050)
      at jdk.compiler/com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:4974)
      at jdk.compiler/com.sun.tools.javac.code.Types.supertype(Types.java:2514)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3707)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)
      at jdk.compiler/com.sun.tools.javac.code.Types.closure(Types.java:3720)

      ---------- BEGIN SOURCE ----------
      import java.lang.Object;
      public class SealedClassCompatibility4Mutated {
          sealed class A implements Sealed, Comparable<A> {}
          sealed class Sealed implements SealedC1C33, SealedD1C33 {}

          static final class C implements SealedC1C33, SealedD1C33 {}
          static interface SealedC1C33 extends Sealed {}
          static interface SealedD1C33 extends Sealed {}

          static void main() {
              System.out.println(new A() instanceof Sealed);
          }
      }
      ---------- END SOURCE ----------

            acobbs Archie Cobbs
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: