When building hierarchical logical locations, we were stopping traveral
upwards before any TRANSLATION_UNIT_DECL for decls, but not for types,
leading to an assertion failure when producing SARIF output for
diagnostics within C++ member fns.
Fixed thusly.
gcc/testsuite/ChangeLog:
PR analyzer/122626
* g++.dg/analyzer/malloc.C: Add sarif output to verify the fix for
PR analyzer/122626.
gcc/ChangeLog:
PR analyzer/122626
* tree-logical-location.cc
(tree_logical_location_manager::get_parent): Return null when
TYPE_CONTEXT is a TRANSLATION_UNIT_DECL so that we don't fail
the assertion in assert_valid_tree.
Signed-off-by: David Malcolm <dmalcolm@redhat.com>
// { dg-do compile }
/* { dg-skip-if "requires hosted libstdc++ for stdlib free" { ! hostedlib } } */
+/* Verify we don't ICE on SARIF output (PR analyzer/122626). */
+/* { dg-additional-options "-fdiagnostics-add-output=sarif" } */
+
#include <stdlib.h>
void test_1 (void *ptr)
free (ptr); // { dg-message "first 'free' here" }
s2 a (ptr); // { dg-message "passing freed pointer 'ptr' in call to 's2::s2' from 'test_2'" }
}
+
+/* { dg-final { verify-sarif-file } } */
{
if (!TYPE_CONTEXT (node))
return key ();
+ if (TREE_CODE (TYPE_CONTEXT (node)) == TRANSLATION_UNIT_DECL)
+ return key ();
return key_from_tree (TYPE_CONTEXT (node));
}
return key ();