https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104148
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> --- I suspect the unwanted suppression is because check_function_argument_recurse() calls warning_suppressed_p (param) instead of warning_suppressed_p (param, <option>) (for each of the warnings it checks). So any other warning suppressed for a call (or its arguments) like -Wparentheses will also suppress -Wformat and friends. Or it could also be because of one the outstanding suppress_warning() calls with no warning option id: grep suppress_warning gcc/cp/*.cc | grep -v OPT) gcc/cp/call.cc: suppress_warning (c /* Suppress all warnings. */); gcc/cp/call.cc: suppress_warning (decl); gcc/cp/constraint.cc: suppress_warning (t); gcc/cp/coroutines.cc: suppress_warning (r); /* We don't want a warning about this. */ gcc/cp/coroutines.cc: suppress_warning (r); /* We don't want a warning about this. */ gcc/cp/coroutines.cc: suppress_warning (rethrow); gcc/cp/coroutines.cc: suppress_warning (rethrow); gcc/cp/cp-gimplify.cc: suppress_warning (*stmt_p); gcc/cp/cp-gimplify.cc: suppress_warning (TREE_OPERAND (*stmt_p, 1)); gcc/cp/except.cc: suppress_warning (rethrow); gcc/cp/init.cc: suppress_warning (cleanup); gcc/cp/init.cc: suppress_warning (init_expr); gcc/cp/init.cc: suppress_warning (stmt_expr /* What warning? */); gcc/cp/pt.cc: suppress_warning (tldcl); gcc/cp/semantics.cc: suppress_warning (DECL_EXPR_DECL (data.stmts[0]) /* What warning? */); gcc/cp/semantics.cc: suppress_warning (DECL_EXPR_DECL (data.stmts[0]) /* Wat warning? */); gcc/cp/typeck.cc: suppress_warning (arg /* What warning? */); gcc/cp/typeck.cc: suppress_warning (rval /* What warning? */);