Compiladores se comportam de maneira diferente com um parâmetro nulo de um método genérico

O código a seguir compila perfeitamente com o Eclipse, mas falha ao compilar com o javac:

public class HowBizarre {
      public static <P extends Number, T extends P> void doIt(P value) {
      }

      public static void main(String[] args) {
            doIt(null);
      }
}

Eu simplifiquei o código, para que T não seja usado agora. Ainda assim, não vejo uma razão para o erro. Por alguma razão, javac decide que T significa Object e depois reclama que Object não está de acordo com os limites de T (o que é verdadeiro):

HowBizarre.java:6: tipos incompatíveis; argumentos do tipo inferido java.lang.Number, java.lang.Object não estão em conformidade com os limites das variáveis do tipo P, T

encontrado :<P,T>vazio

necessário: nulo

       doIt(null);
           ^

Observe que, se eu substituir o parâmetro nulo por um valor não nulo, ele será compilado.

Qual dos compiladores se comporta corretamente e por quê? Isso é um bug de um deles?

questionAnswers(3)

yourAnswerToTheQuestion