On Fri, 2021-06-04 at 15:41 -0600, Martin Sebor wrote: > The attached patch introduces the suppress_warning(), > warning_suppressed(), and copy_no_warning() APIs without making > use of them in the rest of GCC. They are in three files: > > diagnostic-spec.{h,c}: Location-centric overloads. > warning-control.cc: Tree- and gimple*-centric overloads. > > The location-centric overloads are suitable to use from the diagnostic > subsystem. The rest can be used from the front ends and the middle > end.
[...snip...] > +/* Return true if warning OPT is suppressed for decl/expression EXPR. > + By default tests the disposition for any warning. */ > + > +bool > +warning_suppressed_p (const_tree expr, opt_code opt /* = all_warnings */) > +{ > + const nowarn_spec_t *spec = get_nowarn_spec (expr); > + > + if (!spec) > + return get_no_warning_bit (expr); > + > + const nowarn_spec_t optspec (opt); > + bool dis = *spec & optspec; > + gcc_assert (get_no_warning_bit (expr) || !dis); > + return dis; Looking through the patch, I don't like the use of "dis" for the "is suppressed" bool, since... [...snip...] > + > +/* Enable, or by default disable, a warning for the statement STMT. > + The wildcard OPT of -1 controls all warnings. */ ...I find the above comment to be confusingly worded due to the double- negative. If I'm reading your intent correctly, how about this wording: /* Change the supression of warnings for statement STMT. OPT controls which warnings are affected. The wildcard OPT of -1 controls all warnings. If SUPP is true (the default), enable the suppression of the warnings. If SUPP is false, disable the suppression of the warnings. */ ...and rename "dis" to "supp". Or have I misread the intent of the patch? > + > +void > +suppress_warning (gimple *stmt, opt_code opt /* = all_warnings */, > + bool dis /* = true */) > +{ > + if (opt == no_warning) > + return; > + > + const key_type_t key = convert_to_key (stmt); > + > + dis = suppress_warning_at (key, opt, dis) || dis; > + set_no_warning_bit (stmt, dis); > +} [...snip...] Dave