Suggestion: add a flag -Wnoshadow-ifelse to prevent -Wshadow from reporting shadowing in "else if" constructs like if (auto* p = dynamic_cast<A>(x)) ... else if (auto* p = dynamic_cast<B>(x)) ... else if (auto* p = dynamic_cast<C>(x)) ... A similar approach (-Wnoshadow-lambda) could help to resolve https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79328.