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

Reply via email to