incorrect test for abstract methods: abstract class A { abstract void foo(); } #ifdef X class B extends A { void foo(){} } #endif is considered as error, but is actually correct.