diagnostics: fix ICE in sarif output with NULL filename [PR107366]
authorMartin Liska <mliska@suse.cz>
Mon, 24 Oct 2022 20:40:00 +0000 (16:40 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Mon, 24 Oct 2022 20:40:48 +0000 (16:40 -0400)
gcc/ChangeLog:
PR analyzer/107366
* diagnostic-format-sarif.cc
(sarif_builder::maybe_make_physical_location_object): Gracefully
reject locations with NULL filename.

gcc/testsuite/ChangeLog:
PR analyzer/107366
* gcc.dg/analyzer/sarif-pr107366.c: New test.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
gcc/diagnostic-format-sarif.cc
gcc/testsuite/gcc.dg/analyzer/sarif-pr107366.c [new file with mode: 0644]

index fc28d16..7110db4 100644 (file)
@@ -595,7 +595,7 @@ sarif_builder::make_location_object (const diagnostic_event &event)
 json::object *
 sarif_builder::maybe_make_physical_location_object (location_t loc)
 {
-  if (loc <= BUILTINS_LOCATION)
+  if (loc <= BUILTINS_LOCATION || LOCATION_FILE (loc) == NULL)
     return NULL;
 
   json::object *phys_loc_obj = new json::object ();
diff --git a/gcc/testsuite/gcc.dg/analyzer/sarif-pr107366.c b/gcc/testsuite/gcc.dg/analyzer/sarif-pr107366.c
new file mode 100644 (file)
index 0000000..997cf56
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-fdiagnostics-format=sarif-file" } */
+
+typedef enum {
+  HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO
+} hwloc_topology_diff_obj_attr_type_t;
+enum { HWLOC_TOPOLOGY_DIFF_OBJ_ATTR } hwloc_apply_diff_one_diff_0_0;
+
+void
+hwloc_apply_diff_one() {
+  switch (hwloc_apply_diff_one_diff_0_0)
+  case HWLOC_TOPOLOGY_DIFF_OBJ_ATTR: {
+    hwloc_topology_diff_obj_attr_type_t obj_attr_2_0_0;
+    switch (obj_attr_2_0_0)
+    case HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO: {
+      unsigned ii = 0;
+    }
+  }
+}
+