That example is just borken and doesn't demonstrate the problem at all. Implicit in virtual methods is that the compiler cannot reliable determine from which call sites the method might be called. Which is an issue for a generic method since the compiler must create multiple versions of it.
One version is needed to handle any reference type, specifically covered by the remark "It's generally safe to use a generic virtual method with reference types, like Object or String, given the compiler always compile a version that can handle then". Or in other words, it probably just blindly generates that one.
The troublemakers are the versions where T is a value type. One distinct concrete method must be compiled for each distinct value type. Since the compiler can't guess at the call site, it also can't see which value types it must create a method for. Blindly generating them is not feasible due to struct types and methods with multiple type parameters.