https://gcc.gnu.org/bugzilla/show_bug.cgi?id=27336
--- Comment #8 from Guillaume Melquiond <guillaume.melquiond at inria dot fr> --- It is partly fixed. In callee position, GCC now knows that "this" is non-null. But in caller position, GCC still cannot make use of that information to remove non-null checks from dynamic casts. The following testcase is still relevant. struct A { void g(); }; bool f(A *a) { a->g(); return a; }