https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96003
--- Comment #7 from Sergei Trofimovich <slyfox at inbox dot ru> --- Similar example from xmms2 project, dynamic_cast<> version: #include <typeinfo> // main loop interface struct I { virtual void run(); }; struct M : public I { virtual void run(); void setup_M(); }; struct Client { // In real code Client() always initializes mainloop_ with non-NULL 'M*' pointer; I* mainloop_; Client(); void run_client(); void connect() { if (mainloop_ && typeid(mainloop_) == typeid(M)) { dynamic_cast<M*>(mainloop_)->setup_M( ); } } }; $ LANG=C x86_64-pc-linux-gnu-g++-11.0.0 -c bug.cpp -o a.o -Werror=nonnull bug.cpp: In member function 'void Client::connect()': bug.cpp:22:49: error: 'this' pointer null [-Werror=nonnull] 22 | dynamic_cast<M*>(mainloop_)->setup_M( ); | ^ bug.cpp:10:10: note: in a call to non-static member function 'void M::setup_M()' 10 | void setup_M(); | ^~~~~~~ cc1plus: some warnings being treated as errors Original code is from https://github.com/xmms2/xmms2-devel/blob/dedc33d7408e140bce714c2c3eb5bcc793f1af6c/src/clients/lib/xmmsclient%2B%2B/client.cpp#L85