Sun JDK 6 javac vs OpenJDK 6 javac

Mark Mahieu mark at
Sun Nov 29 00:52:09 PST 2009

Repost from the right email address this time (I hope!)...

I wrote:

>  should I expect to see
>  the same result from javac in Sun JDK 6 compared to OpenJDK 6

Tim Bell kindly bounced with:
> Well - probably 'yes'.  What did you do... what was the unexpected
> result?  What was the expected result?  Do you have a small test
> program to demonstrate the issue?  What was surprising or unexpected
> about it? 

I stumbled across the following, which compiles without errors using Sun JDK 6 (various builds from b10 through b16), but is rejected by OpenJDK 6's javac (at least build b10 through to now) and OpenJDK 7 (clone of jdk7/tl/langtools):

class SunJDKvsOpenJDK {

    public static void main(String[] args) {
        foo(bar("a", "b"));

    static void foo(String s) {}

    static <R, A1 extends R, A2 extends R> R bar(A1 a1, A2 a2) {
        return null;

Output from a recent OpenJDK 6 build: foo(java.lang.String) in SunJDKvsOpenJDK cannot be applied to (java.lang.Object)
                foo(bar("a", "b"));
1 error

However, the main reason I'm asking out loud on this list is because I've been naively grabbing Sun JDK 6 and OpenJDK 6 builds of a similar vintage pretty much at random, to use as a base-line for regression testing some experiments I'm making in OpenJDK 7's javac, and given the above, I'm now wondering if I should try to stick to one or the other.


More information about the compiler-dev mailing list