On Fri, 25 Feb 2022, Jakub Jelinek wrote: > On Fri, Feb 25, 2022 at 10:13:33AM +0100, Richard Biener via Gcc-patches > wrote: > > I meant > > > > /* Set the no_warning flag of STMT to NO_WARNING. */ > > > > static inline void > > gimple_set_no_warning (gimple *stmt, bool no_warning) > > { > > stmt->no_warning = (unsigned) no_warning; > > } > > > > on the artificial stmt. > > That seems to be the same case as TREE_NO_WARNING, all those calls > have been replaced: > $ grep -w gimple_set_no_warning *.{h,cc} */*.{h,cc} > gimple.h:gimple_set_no_warning (gimple *stmt, bool no_warning) > > But perhaps it is a good idea to start using that when the location_t > isn't a good idea to use for suppression.
I think it's used as fallback for UNKNOWN_LOCATION, but if we "invent" a creative location for the artificial stmt it will of course affect other stmts/expressions using that location. > I think it will work. Yes, I think so. OTOH the uninit pass does /* Avoid warning if we've already done so or if the warning has been suppressed. */ if (((warning_suppressed_p (context, OPT_Wuninitialized) || (gimple_assign_single_p (context) && get_no_uninit_warning (gimple_assign_rhs1 (context))))) || (var && get_no_uninit_warning (var)) || (var_name_str && warning_suppressed_p (var_def_stmt, OPT_Wuninitialized))) return; that's a mightly complicated way to test and I'm not sure we get to the bit on the stmt reliably. So maybe TREE_NO_WARNING on the reference (or making sure it has UNKNOWN_LOCATION and using suppress_warning on it) is a better idea after all... Richard.