On Sat, 2025-02-15 at 16:01 -0500, James K. Lowden wrote:
> From 5d53920602e234e4d99ae2d502e662ee3699978e 4 Oct 2024 12:01:22 -
> 0400
> From: "James K. Lowden" <jklow...@symas.com>
> Date: Sat 15 Feb 2025 12:50:53 PM EST
> Subject: [PATCH] 9 new 'cobol' FE files
> 
> gcc/cobol/ChangeLog
>       * cdf.y: New file.
>       * cobol1.cc: New file.
>       * convert.cc: New file.
>       * except.cc: New file.
>       * gcobolspec.cc: New file.
>       * structs.cc: New file.
>       * symbols.cc: New file.
>       * symfind.cc: New file.
>       * util.cc: New file.

+/* Get a value for the SARIF v2.1.0 "artifact.sourceLanguage" property,
+   based on the list in SARIF v2.1.0 Appendix J.  */
+
+const char *
+cobol_get_sarif_source_language(const char *)
+    {
+    return "cobol";
+    }

Out of curiosity, did you try the SARIF output?  This is a good test
for whether you’re properly using the GCC diagnostics subsystem.

+void
+yyerror( const char gmsgid[], ... ) {
+  temp_loc_t looker;
+  verify_format(gmsgid);
+  parse_error_inc();
+  global_dc->begin_group();
+  va_list ap;
+  va_start (ap, gmsgid);
+  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.

+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.  Is this something that yacc is imposing on
you?

Hope this is constructive
Dave

Reply via email to