GCC Middle and Back End API Reference
|
Public Member Functions | |
sarif_result (unsigned idx_within_parent) | |
unsigned | get_index_within_parent () const |
void | on_nested_diagnostic (const diagnostic_info &diagnostic, enum kind orig_diag_kind, sarif_builder &builder) |
void | on_diagram (const diagram &d, sarif_builder &builder) |
unsigned | allocate_location_id () |
virtual void | add_related_location (std::unique_ptr< sarif_location > location_obj, sarif_builder &builder) |
void | add_relationship_to_worklist (sarif_location &location_obj, enum worklist_item::kind kind, location_t where) |
void | process_worklist (sarif_builder &builder) |
void | process_worklist_item (sarif_builder &builder, const worklist_item &item) |
sarif_property_bag & | get_or_create_properties () |
enum kind | get_kind () const final override |
void | print (pretty_printer *pp, bool formatted) const final override |
std::unique_ptr< value > | clone () const final override |
object * | dyn_cast_object () final override |
bool | is_empty () const |
void | set (const char *key, value *v) |
template<typename JsonType> | |
void | set (const char *key, std::unique_ptr< JsonType > v) |
value * | get (const char *key) const |
void | set_string (const char *key, const char *utf8_value) |
void | set_integer (const char *key, long v) |
void | set_float (const char *key, double v) |
void | set_bool (const char *key, bool v) |
size_t | get_num_keys () const |
const char * | get_key (size_t i) const |
std::unique_ptr< object > | clone_as_object () const |
void | dump (FILE *, bool formatted) const |
void DEBUG_FUNCTION | dump () const |
virtual string * | dyn_cast_string () |
const pointer::token & | get_pointer_token () const |
Static Public Member Functions | |
static int | compare (const json::object &obj_a, const json::object &obj_b) |
static int | compare (const json::value &val_a, const json::value &val_b) |
Data Fields | |
pointer::token | m_pointer_token |
Private Types | |
typedef hash_map< char *, value *, simple_hashmap_traits< nofree_string_hash, value * > > | map_t |
Private Attributes | |
const unsigned | m_idx_within_parent |
json::array * | m_related_locations_arr |
unsigned | m_next_location_id |
std::list< worklist_item > | m_worklist |
std::map< location_t, sarif_location * > | m_included_from_locations |
std::map< location_t, sarif_location * > | m_unlabelled_secondary_locations |
map_t | m_map |
auto_vec< const char * > | m_keys |
Subclass of sarif_object for SARIF "result" objects (SARIF v2.1.0 section 3.27). Each SARIF result object has its own "namespace" of numeric IDs for managing location objects (SARIF v2.1.0 section 3.28.2).
|
privateinherited |
|
inline |
References m_idx_within_parent.
|
virtualinherited |
class sarif_location_manager : public sarif_object.
Base implementation of sarif_location_manager::add_related_location vfunc. Add LOCATION_OBJ to this object's "relatedLocations" array, creating it if it doesn't yet exist.
Reimplemented in diagnostics::sarif_ice_notification.
References m_related_locations_arr, and json::object::set().
Referenced by diagnostics::sarif_ice_notification::add_related_location(), diagnostics::sarif_result::on_diagram(), diagnostics::sarif_result::on_nested_diagnostic(), and process_worklist_item().
|
inherited |
References m_worklist.
Referenced by diagnostics::sarif_builder::add_any_include_chain(), and diagnostics::sarif_builder::make_location_object().
|
inlineinherited |
References m_next_location_id.
Referenced by diagnostics::sarif_location::lazily_add_id().
|
finaloverridevirtualinherited |
Implements json::value.
References clone_as_object().
|
inherited |
References json::value::clone(), FOR_EACH_VEC_ELT, hash_map< KeyId, Value, Traits >::get(), i, m_keys, and m_map.
Referenced by clone().
|
staticinherited |
Subroutine of json::compare for comparing a pairs of objects.
References json::value::compare(), gcc_assert, get(), m_keys, and m_map.
Referenced by json::value::compare().
|
staticinherited |
A deterministic total ordering for comparing json values, so that we can e.g. put them in std::map. This is intended to follow the condition for equality described in the JSON Schema standard (§4.3, “Instance equality”), as referenced by SARIF v2.1.0 (§3.7.3 "Array properties with unique values"), but has the following limitations: - numbers are supposed to be checked for "the same mathematical value", but in this implementation int vs float numbers won't compare as equal, and float number comparison is bitwise - strings are supposed to be "the same codepoint-for-codepoint", but this implementation doesn't take into account canonicalization issues.
References json::object::compare(), compare(), gcc_unreachable, json::float_number::get(), json::integer_number::get(), get_kind(), json::string::get_string(), json::JSON_ARRAY, json::JSON_FALSE, json::JSON_FLOAT, json::JSON_INTEGER, json::JSON_NULL, json::JSON_OBJECT, json::JSON_STRING, json::JSON_TRUE, and json::array::size().
Referenced by json::object::compare(), compare(), and diagnostics::sarif_array_of_unique< JsonElementType >::comparator_t::operator()().
|
inherited |
A convenience function for debugging. Dump to stderr with formatting, and a trailing newline.
References dump().
|
inherited |
class json::value.
Dump this json::value tree to OUTF. The key/value pairs of json::objects are printed in the order in which the keys were originally inserted.
References output_buffer::m_stream, pp_buffer(), pp_flush(), and print().
Referenced by dump(), generate_results(), and diagnostics::sarif_serialization_format_json::write_to_file().
|
inlinefinaloverridevirtualinherited |
Reimplemented from json::value.
References dyn_cast_object(), and final().
Referenced by dyn_cast_object().
|
inlinevirtualinherited |
Reimplemented in json::string.
|
inherited |
Get the json::value * for KEY. The object retains ownership of the value.
References gcc_assert, get(), m_map, and NULL.
Referenced by compare(), diagnostics::copy_any_property_bag(), get(), diagnostics::sarif_location::get_id(), diagnostics::sarif_code_flow::get_or_append_thread_flow(), diagnostics::sarif_object::get_or_create_properties(), diagnostics::sarif_location_relationship::get_target_id(), diagnostics::sarif_location_relationship::lazily_add_kind(), diagnostics::sarif_location::lazily_add_relationship_object(), diagnostics::sarif_location::lazily_add_relationships_array(), diagnostics::sarif_builder::make_location_object(), diagnostics::sarif_builder::make_location_object(), diagnostics::sarif_builder::make_location_object(), and diagnostics::sarif_location_manager::process_worklist_item().
|
inline |
References m_idx_within_parent.
Referenced by diagnostics::make_sarif_url_for_event().
|
inlineinherited |
Referenced by diagnostics::copy_any_property_bag().
|
inlinefinaloverridevirtualinherited |
Implements json::value.
References final(), and json::JSON_OBJECT.
|
inlineinherited |
References m_keys.
Referenced by diagnostics::copy_any_property_bag().
|
inherited |
class sarif_object : public json::object.
References json::object::get(), json::value::get_kind(), json::JSON_OBJECT, and json::object::set().
Referenced by diagnostics::copy_any_property_bag(), diagnostics::sarif_builder::populate_thread_flow_location_object(), and diagnostics::sarif_ice_notification::sarif_ice_notification().
|
inlineinherited |
References m_pointer_token.
void diagnostics::sarif_result::on_diagram | ( | const diagram & | d, |
sarif_builder & | builder ) |
Handle diagrams that occur within a diagnostic group. The closest thing in SARIF seems to be to add a location to the "releatedLocations" property (SARIF v2.1.0 section 3.27.22), and to put the diagram into the "message" property of that location (SARIF v2.1.0 section 3.28.5).
References diagnostics::sarif_location_manager::add_related_location(), and diagnostics::sarif_builder::make_message_object_for_diagram().
void diagnostics::sarif_result::on_nested_diagnostic | ( | const diagnostic_info & | diagnostic, |
enum kind | orig_diag_kind, | ||
sarif_builder & | builder ) |
class sarif_result : public sarif_location_manager.
Handle secondary diagnostics that occur within a diagnostic group. The closest SARIF seems to have to nested diagnostics is the "relatedLocations" property of result objects (SARIF v2.1.0 section 3.27.22), so we lazily set this property and populate the array if and when secondary diagnostics occur (such as notes to a warning).
References diagnostics::sarif_location_manager::add_related_location(), diagnostics::sarif_builder::get_context(), diagnostics::context::get_diagnostic_nesting_level(), diagnostics::sarif_builder::get_printer(), diagnostics::sarif_builder::make_location_object(), diagnostics::sarif_builder::make_message_object(), pp_clear_output_area(), pp_formatted_text(), diagnostics::result_file, and json::object::set_integer().
|
finaloverridevirtualinherited |
Implementation of json::value::print for json::object.
Implements json::value.
References FOR_EACH_VEC_ELT, hash_map< KeyId, Value, Traits >::get(), i, m_keys, m_map, pp_character(), pp_indent(), pp_indentation(), pp_newline(), pp_space, pp_string(), json::value::print(), and print_escaped_json_string().
Referenced by generate_results().
|
inherited |
Process all items in this result's worklist. Doing so may temporarily add new items to the end of the worklist. Handling any item should be "lazy", and thus we should eventually drain the queue and terminate.
References m_worklist, and process_worklist_item().
|
inherited |
Process one item in this result's worklist, potentially adding new items to the end of the worklist.
References add_related_location(), gcc_assert, gcc_unreachable, json::object::get(), diagnostics::sarif_location_manager::worklist_item::included_from, diagnostics::includes, diagnostics::is_included_by, diagnostics::sarif_location::lazily_add_relationship(), m_included_from_locations, diagnostics::sarif_location_manager::worklist_item::m_kind, diagnostics::sarif_location_manager::worklist_item::m_location_obj, m_unlabelled_secondary_locations, diagnostics::sarif_location_manager::worklist_item::m_where, diagnostics::sarif_builder::make_location_object(), diagnostics::relevant, diagnostics::scanned_file, and diagnostics::sarif_location_manager::worklist_item::unlabelled_secondary_location.
Referenced by process_worklist().
|
inlineinherited |
References set().
|
inherited |
Set the json::value * for KEY, taking ownership of V (and taking a copy of KEY if necessary).
References gcc_assert, m_keys, m_map, and json::value::m_pointer_token.
Referenced by optrecord_json_writer::add_pass_list(), optrecord_json_writer::add_record(), diagnostics::sarif_location_manager::add_related_location(), diagnostics::copy_any_property_bag(), generate_results(), diagnostics::sarif_builder::get_or_create_artifact(), diagnostics::sarif_object::get_or_create_properties(), optrecord_json_writer::inlining_chain_to_json(), json_set_prime_path_coverage(), diagnostics::sarif_location_relationship::lazily_add_kind(), diagnostics::sarif_location::lazily_add_relationships_array(), diagnostics::sarif_builder::make_fix_object(), diagnostics::sarif_builder::make_replacement_object(), diagnostics::sarif_builder::make_result_object(), diagnostics::sarif_builder::make_run_object(), diagnostics::sarif_builder::make_tool_object(), diagnostics::sarif_builder::make_top_level_object(), diagnostics::sarif_builder::maybe_make_cwe_taxonomy_object(), diagnostics::sarif_builder::maybe_make_physical_location_object(), optrecord_json_writer::optinfo_to_json(), optrecord_json_writer::optrecord_json_writer(), output_intermediate_json_line(), output_json_intermediate_file(), optrecord_json_writer::pass_to_json(), diagnostics::sarif_artifact::populate_contents(), diagnostics::sarif_artifact::populate_roles(), diagnostics::sarif_builder::populate_thread_flow_location_object(), diagnostics::sarif_invocation::prepare_to_flush(), diagnostics::sarif_code_flow::sarif_code_flow(), diagnostics::sarif_ice_notification::sarif_ice_notification(), diagnostics::sarif_invocation::sarif_invocation(), diagnostics::sarif_thread_flow::sarif_thread_flow(), set(), diagnostics::sarif_builder::set_any_logical_locs_arr(), set_bool(), set_float(), diagnostics::sarif_property_bag::set_graph(), set_integer(), diagnostics::sarif_property_bag::set_logical_location(), and set_string().
|
inherited |
Set value of KEY within this object to the JSON literal true or false, based on V.
References set().
Referenced by diagnostics::sarif_builder::make_location_object(), output_intermediate_json_line(), and diagnostics::sarif_invocation::prepare_to_flush().
|
inherited |
Set value of KEY within this object to a JSON floating point value based on V.
References set().
|
inherited |
Set value of KEY within this object to a JSON integer value based on V.
References set().
Referenced by optrecord_json_writer::impl_location_to_json(), json_set_prime_path_coverage(), diagnostics::sarif_location::lazily_add_id(), optrecord_json_writer::location_to_json(), diagnostics::sarif_result::on_nested_diagnostic(), output_intermediate_json_line(), optrecord_json_writer::pass_to_json(), diagnostics::sarif_builder::populate_thread_flow_location_object(), optrecord_json_writer::profile_count_to_json(), and diagnostics::sarif_location_relationship::sarif_location_relationship().
|
inherited |
Set value of KEY within this object to a JSON string value based on UTF8_VALUE.
References set().
Referenced by generate_results(), diagnostics::sarif_builder::get_or_create_artifact(), optrecord_json_writer::impl_location_to_json(), optrecord_json_writer::inlining_chain_to_json(), json_set_prime_path_coverage(), optrecord_json_writer::location_to_json(), optrecord_json_writer::optinfo_to_json(), optrecord_json_writer::optrecord_json_writer(), output_intermediate_json_line(), output_json_intermediate_file(), optrecord_json_writer::pass_to_json(), optrecord_json_writer::profile_count_to_json(), diagnostics::sarif_ice_notification::sarif_ice_notification(), diagnostics::sarif_thread_flow::sarif_thread_flow(), and diagnostics::set_string_property_escaping_braces().
|
private |
Referenced by get_index_within_parent(), and sarif_result().
|
privateinherited |
Referenced by process_worklist_item().
|
privateinherited |
Referenced by clone_as_object(), compare(), get_key(), get_num_keys(), print(), and set().
|
privateinherited |
Referenced by clone_as_object(), compare(), get(), is_empty(), print(), set(), and ~object().
|
privateinherited |
Referenced by allocate_location_id(), and sarif_location_manager().
|
inherited |
Referenced by json::array::append(), get_pointer_token(), and json::object::set().
|
privateinherited |
Referenced by add_related_location(), and sarif_location_manager().
|
privateinherited |
Referenced by process_worklist_item().
|
privateinherited |
Referenced by add_relationship_to_worklist(), and process_worklist().