On Sat, 15 Feb 2025 23:37:20 -0500 David Malcolm <dmalc...@redhat.com> wrote:
> + rich_location richloc (line_table, token_location); > + bool ret = global_dc->diagnostic_impl (&richloc, nullptr, > option_id, > + gmsgid, &ap, DK_ERROR); > + va_end (ap); > + global_dc->end_group(); > +} > > For errors, just pass 0 as the diagnostic_option_id. Same for the > various DK_SORRY and DK_FATAL. OK, but is this a style thing? That's effectively what happens, using a name. option_id is a file-scope static constant, initialized to 0. Instead of passing an integer that the compiler uses to construct a temporary diagnostic_option_id, we pass an already-constructed diagnostic_option_id by value. (Maybe zero_option_id would be a better name?) > +bool > +yywarn( const char gmsgid[], ... ) { > + verify_format(gmsgid); > + auto_diagnostic_group d; > + va_list ap; > + va_start (ap, gmsgid); > + auto ret = emit_diagnostic_valist( DK_WARNING, token_location, > + option_id, gmsgid, &ap ); > + va_end (ap); > + return ret; > +} > > For warnings, ideally this should take a diagnostic_option_id > controlling the warning as the initial parameter, rather than have a > global variable for this. Yes, absolutely. That's on the to do list. I wanted to get a set of patches submitted for consideration, and drew the line ahead of that item. > Is this something that yacc is imposing on you? Not at all. I need to go into gcc/cobol/lang.opt and enumerate the warnings. Then I need to pass the warning ID into yywarn (which will be renamed warn_msg() because the "yy" prefix is properly reserved for yacc). As we say, just a small matter of programming. :-) --jkl