title: Why does compiling this code cause a compiler stack overflow?
body: <pre><code>interface Pong&lt;T&gt; {}
  class Ping&lt;T&gt; implements Pong&lt;Pong&lt;? super Ping&lt;Ping&lt;T&gt;&gt;&gt;&gt; {
      static void Ping() {
          Pong&lt;? super Ping&lt;Long&gt;&gt; Ping = new Ping&lt;Long&gt;();
      }
  }
  </code></pre>
  
  <p>Trying to compile this gives the error:</p>
  
  <pre><code>The system is out of resources.
  Consult the following stack trace for details.
  java.lang.StackOverflowError
      at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579)
      at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554)
      at com.sun.tools.javac.code.Types$UnaryVisitor.visit(Types.java:3260)
      at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2592)
      at com.sun.tools.javac.code.Types$23.visitClassType(Types.java:2579)
      at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:554)
      ...
  </code></pre>
  
  <p><a href="https://gist.github.com/1387113" rel="noreferrer">Code courtesy of etorreborre on github.</a></p>