)]}'
{
  "commit": "7647c00b77ee1aefcd3dbd7aed9c1a7553d83f94",
  "tree": "cc6b6be28cf0573ff60f10b979246dfc5968deb9",
  "parents": [
    "dbea11b42ac5ec1b4b1446cad43fe2fadb7dc4be"
  ],
  "author": {
    "name": "David Malcolm",
    "email": "dmalcolm@redhat.com",
    "time": "Fri Nov 13 16:26:07 2026 -0500"
  },
  "committer": {
    "name": "David Malcolm",
    "email": "dmalcolm@redhat.com",
    "time": "Fri Nov 13 16:26:07 2026 -0500"
  },
  "message": "analyzer: rewrite of symbolic value handling\n\nThe \"ana::store\" implementation tracks the simulated state of memory in\nthe user\u0027s program by splitting it up into binding clusters, where pointer\narithmetic is well-defined within each cluster, but undefined between\nthem.  For example, each local variable gets its own binding cluster.\n\nIn GCC 11 - 16, the store attempted to model the contents of each cluster\nusing class binding_map, which attempted to store a mapping from\n\"binding keys\" to symbolic values.  These binding keys could refer to\nconcrete ranges of bytes, or symbolic ranges.  This worked for simple\nexamples, but while investigating improvements to C++ support in\n-fanalyzer, I ran into many problems with:\n\n - sloppy use of type nodes (optional types, mismatches, etc)\n - sloppy use of numeric types\n - mixing typed expressions with \"values\" of chunks of memory\n - poor support of low-level memory manipulation\n - unclear semantics for all of the above, making fixing bugs impossible\n\nThis patch reimplements the way -fanalyzer tracks simulated memory to\nfix these issues.\n\nThe new implementation adds a new level to the analyzer which tracks the\ncontents of simulated memory on a per-bit basis.  All reads and writes of\nsymbolic regions (e.g. accessing a field of a struct) are converted to\naccesses of a symbolic::memory_range: a reference to a base region\n(cluster), together with a symbolic bit start offset and a symbolic bit\nsize.  Rather than storing svalues, we now store symbolic::bit_vectors\nto those ranges.  Any knowledge of types happens at a higher level.\n\nThe patch adds various new families of symbolic::node subclasses:\n- a symbolic::scalar\u003cT\u003e hierarchy, allowing for unit-safe symbolic\n  scalars, such as \"8 bits\" or \"(64 bytes) + (32 bytes * n)\".  This\n  is used to build these classes:\n  - symbolic::memory_offset: a reference to a specific bit within a\n    cluster\n  - symbolic::memory_pointer: a reference to a specific byte within a\n    cluster\n  - symbolic::memory_range: a reference to a range of bits within a\n    cluster\n- a symbolic::bit_vector hierarchy for representing a vector of symbolic\n  bit values, such as:\n  - \"the bit-level representation of (int)42 on the target”\n  - \"1024 bytes of zeros\"\n  - \"bits [16...19) of the initial value of buf\"\n  Instances of bit_vector can be symbolically sized e.g. \"the first n\n  bytes of str plus m copies of \u0027_\u0027 plus a zero byte concatenated on the\n  end\".\n- a symbolic::bit_contents hierarchy for representing the contents of\n  a cluster as a total function from bit offset to symbolic bit (including\n  negative offsets; bounds checking happens at a higher level) e.g.\n  \"uninitialized everywhere apart from bytes [0, 4) which are zeroed\".\n\nAll of these symbolic::node subclasses are immutable/pure-functional\nand instances are consolidated by manager classes (similar to\nhash-consing), and can be dumped to show their hierarchical makeup as\nASCII art.  For example, after \"i +\u003d 1\", __analyzer_dump might show this:\n\nprogram_state\n╰─ Region Model\n   ├─ Current Frame: frame: ‘test_increment_i’@1\n   ╰─ Store\n      ├─ m_called_unknown_fn: false\n      ╰─ frame: ‘test_increment_i’@1\n         ╰─ i_2:\n            ╰─ (547): concrete bit overlay\n               ├─ concrete ranges\n               │  ╰─ [bytes 0..4): (546): bit_vector_from_svalue[size: 4 bytes]\n               │     ╰─ m_sval: (545): ‘int’: binop_svalue(plus_expr: ‘+’)\n               │        ├─ value_range: {[irange] int [-2147483647, +INF]}\n               │        ├─ (540): ‘int’: initial_svalue\n               │        │  ├─ value_range: {[irange] int VARYING}\n               │        │  ╰─ m_reg: (536): ‘int’: decl_region(‘i_1(D)’)\n               │        │     ╰─ parent: (527): frame_region(‘test_increment_i’, index: 0, depth: 1)\n               │        │        ╰─ parent: (1): stack region\n               │        │           ╰─ parent: (0): root region\n               │        ╰─ (544): ‘int’: constant_svalue (‘1’)\n               ╰─ baseline: (7): uninitialized contents\n\nto show that the cluster for \"i\" is uninitialized everywhere apart from\nat bytes [0..4), where it has the target\u0027s encoding of (i + 1).\n\nIn a terminal that supports it, color is used in the above to distinguish\nbetween the various kinds of node (svalue, region, scalar, bit_vector,\nbit_contents).\n\nThere is also now an __analyzer_hexdump function, though this mostly\nexists to ensure that we have well-defined meanings for all of the various\nclasses, rather for use in analysis.  For example:\n\n../../src/hexdump.c: In function ‘test_bitwise_and’:\n../../src/hexdump.c:38:27: warning: hexdump\n   38 |   int j \u003d i \u0026 0xff00ff00; __analyzer_hexdump (\u0026j, sizeof (int));\n      |                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n             +-----------------------------------+-----------+-----+\n             |              Binary               |    Hex    |ASCII|\n+------------+-----------------------------------+-----------+-----+\n|[bytes 0..4)|00000000 ???????? 00000000 ????????|00 ?? 00 ??|.?.? |\n+------------+-----------------------------------+-----------+-----+\n(685): bit_vector_from_svalue[size: 4 bytes]\n╰─ m_sval: (684): ‘int’: binop_svalue(bit_and_expr: ‘\u0026’)\n   ├─ value_range: {[irange] int [-INF, -16711936][0, 0][256, 2130771712] MASK 0xff00ff00 VALUE 0x0}\n   ├─ (680): ‘int’: initial_svalue\n   │  ├─ value_range: {[irange] int VARYING}\n   │  ╰─ m_reg: (679): ‘int’: decl_region(‘i_2(D)’)\n   │     ╰─ parent: (525): frame_region(‘test_bitwise_and’, index: 0, depth: 1)\n   │        ╰─ parent: (1): stack region\n   │           ╰─ parent: (0): root region\n   ╰─ (683): ‘int’: constant_svalue (‘-16711936’)\n\nAs well as being queryable for what bit_vector is present at a particular\nrange of bits/bytes (possibly symbolic), these classes support a\nstring_scan operation: scanning for the first NUL/terminator byte, for\nsupporting analysis of C-style string handling (such as detecting\nunterminated buffers).\n\nThe patch introduces these classes, deletes various existing classes\nthat had poorly-defined semantics (region_svalue, sub_svalue,\nrepeated_svalue, bits_within_svalue, compound_svalue, and\nconjured_svalue) in favor of svalue_from_bit_vector, and using either\nsymbolic::bit_vector or symbolic::bit_contents as appropriate.  It also\nsimplifies dumping within the analyzer, making more consistent use of\ntext_art::tree_widget throughout.\n\nAs well as putting the analyzer on a much firmer basis, the patch fixes\nnumerous cases that didn\u0027t work before, adds test coverage for these, and\nit fixes various existing xfails in the test suite.  However the\n(re)implementation of call summaries is somewhat stubbed, so the patch\nadds some xfails for these (call summaries are off by default, though, so\nthis shouldn\u0027t affect too many users).\n\nI haven\u0027t done proper performance testing yet, but, encouragingly, the\nwallclock time for analysis seen in the integration test suite sped up by\nabout 12% - but this was measuring debug vs debug builds, not release vs\nrelease.\n\ngcc/ChangeLog:\n\t* Makefile.in (ANALYZER_OBJS): Add analyzer/initializers.o,\n\tanalyzer/string-scan.o, analyzer/symbolic-bit-contents.o,\n\tanalyzer/symbolic-bit-vectors.o,\n\tanalyzer/symbolic-memory-ranges.o, analyzer/symbolic-pointers.o,\n\tanalyzer/symbolic-ranges.o, and analyzer/symbolic-scalars.o.\n\tRemove analyzer/ranges.o.\n\t* custom-sarif-properties/state-graphs.cc (node::num_bits):\n\tConvert from json::string_property to json::json_property.\n\t* custom-sarif-properties/state-graphs.h (node::num_bits):\n\tLikewise.\n\t* diagnostics/color.cc (gcc_color_defaults): Add entries for\n\tdebugging the analyzer.\n\t* doc/analyzer.texi: Update for new store implementation.\n\t(__analyzer_hexdump): New.\n\t* selftest-run-tests.cc: Add #define INCLUDE_VECTOR.\n\ngcc/analyzer/ChangeLog:\n\t* access-diagram.cc: Add include of \"diagnostics/markup.h\".\n\tDelete access_range, porting throughout to symbolic_bit_range,\n\tusing folded_symbolic_bit_range to get back some of the old\n\tfolding behavior that the diagram code relied on.  Port\n\tregion_offset to const symbolic_bit_offset \u0026.\n\t(pp_bit_size_t): Delete.\n\t(get_access_size_str): Port to new types.\n\t(bit_size_expr::maybe_get_formatted_str): Likewise.\n\t(bit_size_expr::maybe_print_for_user): Delete.\n\t(bit_size_expr::maybe_get_as_bytes): Delete.\n\t(fold_svalue_for_access_diagram): New.\n\t(case_fold_scalar_for_access_diagram): New.\n\t(fold_scalar_for_access_diagram): New.\n\t(fold_range_for_access_diagram): New.\n\t(folded_symbolic_bit_range): New.\n\t(access_range_contains_p): New.\n\t(boundaries::comparator): New.\n\t(boundaries::using offset_set): New using decl.\n\t(boundaries::boundaries): Add node_mgr param.\n\t(boundaries::add): Port to new types.\n\t(boundaries::add_all_bytes_in_range): Likewise.\n\t(boundaries::log): Likewise.\n\t(boundaries::get_kind): Likewise.\n\t(boundaries::begin): Likewise.\n\t(boundaries::end): Likewise.\n\t(boundaries::size): Likewise.\n\t(boundaries::get_hard_boundaries_in_range): Likewise.\n\t(boundaries::m_node_mgr): New field.\n\t(boundaries::m_all_offsets): Convert from std::set\u003cregion_offset\u003e\n\tto offset_set.\n\t(boundaries::m_hard_offsets): Likewise.\n\t(bit_to_table_map::bit_to_table_map): Add node_mgr param and\n\tinitialize m_node_mgr.\n\t(bit_to_table_map::populate): Drop \"mgr\" param.  Convert from\n\tregion_offset to symbolic_bit_offset.\n\t(bit_to_table_map::get_table_rect): Convert to new types.\n\t(bit_to_table_map::maybe_get_access_range_for_table_x): Likewise,\n\trenaming to...\n\t(bit_to_table_map::maybe_get_symbolic_bit_range_for_table_x):\n\t...this.\n\t(bit_to_table_map::log): Convert to new types.\n\t(bit_to_table_map::get_table_x_for_offset): Likewise.\n\t(bit_to_table_map::get_table_x_for_prev_offset): Likewise.\n\t(bit_to_table_map::m_node_mgr): New field.\n\t(bit_to_table_map::m_table_x_for_offset): Convert key from\n\tregion_offset to const symbolic_bit_offset *.\n\t(bit_to_table_map::m_range_for_table_x): Convert value from\n\taccess_range to symbolic_bit_range.\n\t(bit_to_table_map::m_table_x_for_prev_offset): New field.\n\t(class svalue_spatial_item): Convert from access_range to\n\tsymbolic_bit_range throughout.\n\t(class valid_region_spatial_item): Port to new types.\n\t(class string_literal_spatial_item): Likewise.\n\t(make_written_svalue_spatial_item): Likewise.\n\t(make_existing_svalue_spatial_item): Likewise.\n\t(class access_diagram_impl): Pass around node_manager.  Port to\n\tnew types.\n\t(selftest::assert_eq_typeless_integer): Delete.\n\t(ASSERT_EQ_TYPELESS_INTEGER): Delete.\n\t(selftest::test_bit_size_expr_to_bytes): Delete.\n\t(selftest::analyzer_access_diagram_cc_tests): Remove call to test.\n\t* access-diagram.h (class bit_size_expr): Port from svalue to\n\tsymbolic_bit_size.\n\t(struct access_operation): Port to new types.\n\t* ana-state-to-diagnostic-state.cc: Port to new state\n\timplementation.\n\t* ana-state-to-diagnostic-state.h: Update from bit_range to\n\tconcrete_bit_range.\n\t(analyzer_state_graph::m_node_mgr): New field.\n\t* analyzer-logging.cc: Define INCLUDE_VECTOR.  Add include of\n\t\"text-art/theme.h\".\n\t(logger::logger): Initializem_text_art_theme.\n\t* analyzer-logging.h (logger::get_text_art_theme): New.\n\t(logger::m_text_art_theme): New.\n\t* analyzer-selftests.cc: Add include of \"stor-layout.h\".\n\t(make_string_constant): New.\n\t(make_test_compound_type): Move here from region-model.cc.\n\t(coord_test::coord_test): Likewise.\n\t(run_analyzer_selftests): Drop call to analyzer_ranges_cc_tests.\n\tAdd calls to analyzer_region_model_manager_cc_tests,\n\tanalyzer_string_scan_cc_tests,\n\tanalyzer_symbolic_bit_contents_cc_tests,\n\tanalyzer_symbolic_bit_vectors_cc_tests,\n\tanalyzer_symbolic_memory_ranges_cc_tests,\n\tanalyzer_symbolic_nodes_cc_tests,\n\tanalyzer_symbolic_pointers_cc_tests,\n\tanalyzer_symbolic_ranges_cc_tests, and\n\tanalyzer_symbolic_scalars_cc_tests.\n\t* analyzer-selftests.h (make_string_constant): New decl.\n\t(make_test_compound_type): New decl.\n\t(struct coord_test): New decl, moved from region-model.cc.\n\t(analyzer_ranges_cc_tests): Delete decl.\n\t(analyzer_region_model_manager_cc_tests): New decl.\n\t(analyzer_string_scan_cc_tests): New decl.\n\t(analyzer_symbolic_bit_contents_cc_tests): New decl.\n\t(analyzer_symbolic_bit_vectors_cc_tests): New decl.\n\t(analyzer_symbolic_memory_ranges_cc_tests): New decl.\n\t(analyzer_symbolic_nodes_cc_tests): New decl.\n\t(analyzer_symbolic_pointers_cc_tests): New decl.\n\t(analyzer_symbolic_ranges_cc_tests): New decl.\n\t(analyzer_symbolic_scalars_cc_tests): New decl.\n\t* bounds-checking.cc (class out_of_bounds): Port from region to\n\tsymbolic::memory_range throughout.\n\t(class concrete_out_of_bounds): Likewise, porting to new types.\n\t(class concrete_past_the_end): Likewise.\n\t(class concrete_buffer_overflow): Likewise.\n\t(class concrete_buffer_over_read): Likewise.\n\t(class concrete_buffer_underwrite): Likewise.\n\t(class concrete_buffer_under_read): Likewise.\n\t(class symbolic_past_the_end): Likewise.\n\t(class symbolic_buffer_over_read): Likewise.\n\t(strip_types): Delete.\n\t(region_model::check_symbolic_bounds): Port to new types.\n\t(maybe_get_integer_cst_tree): Delete.\n\t(region_model::check_memory_range_bounds): New, based on\n\tregion_model::check_region_bounds, porting to new types.\n\t(region_model::check_region_bounds): Reimplement in terms of\n\tcheck_memory_range_bounds.\n\t* call-details.cc: Drop include of deleted \"analyzer/ranges.h\".\n\t(call_details::get_arg_as_sym_ptr): New.\n\t(call_details::get_arg_as_num_bytes): New.\n\t(call_details::get_arg_string_literal): Port from region_svalue\n\tto symbolic::pointer.\n\t(call_details::dump_to_pp): Drop.\n\t(call_details::dump): Reimplement in terms of dump widget.\n\t(call_details::make_dump_widget): Update type of param from \"dwi\"\n\tto \"nds\".\n\t(call_details::check_for_null_terminated_string_arg): Port\n\tfrom svalue to symbolic::bit_vector.\n\t(call_details::complain_about_overlap): Port to new\n\tsymbolic_byte_range implementation.\n\t* call-details.h: Include \"symbolic-pointers.h\".\n\t(call_details::get_arg_as_sym_ptr): New decl.\n\t(call_details::get_arg_as_num_bytes): New decl.\n\t(call_details::dump_to_pp): Drop.\n\t(call_details::make_dump_widget): Update type of param from \"dwi\"\n\tto \"nds\".\n\t(call_details::check_for_null_terminated_string_arg): Port\n\tfrom svalue to symbolic::bit_vector.\n\t* call-string.cc: Include \"analyzer/symbolic-nodes.h\".\n\t(call_string::element_t::make_dump_widget): New.\n\t* call-string.h: Include \"text-art/widget.h\" and\n\t\"text-art/tree-widget.h\".\n\t(call_string::element_t::make_dump_widget): New decl.\n\t(call_string::make_dump_widget): New decl.\n\t* call-summary.cc (call_summary::get_user_facing_desc): Replace\n\tSK_REGION case with SK_POINTER.\n\t(call_summary::dump_to_pp): Delete.\n\t(call_summary::dump_to_logger): New.\n\t(call_summary::make_dump_widget): New.\n\t(call_summary::dump): Reimplement in terms of dump widget.\n\t(call_summary_replay::convert_svalue_from_summary_1):  Port to\n\tnew types.\n\t(call_summary_replay::convert_bit_contents_from_summary): New.\n\t(call_summary_replay::convert_key_from_summary): Delete.\n\t(call_summary_replay::convert_bit_vector_from_summary): New.\n\t(call_summary_replay::impl_bits_from_bytes): New.\n\t(call_summary_replay::convert_scalar_from_summary): New.\n\t(call_summary_replay::dump_to_pp): Delete.\n\t(call_summary_replay::make_dump_widget): New.\n\t(call_summary_replay::dump): Reimplement in terms of dump widget.\n\t(call_summary_replay::dump_to_logger): New.\n\t* call-summary.h (call_summary::dump_to_pp): Delete.\n\t(call_summary::make_dump_widget): New.\n\t(call_summary::dump): Reimplement in terms of dump widget.\n\t(call_summary::dump_to_logger): New.\n\t(call_summary::get_store_manager): Drop.\n\t(call_summary_replay::get_ext_state): New accessor.\n\t(call_summary_replay::convert_key_from_summary): Delete.\n\t(call_summary_replay::convert_bit_contents_from_summary): New.\n\t(call_summary_replay::convert_bit_vector_from_summary): New.\n\t(call_summary_replay::convert_scalar_from_summary): New.\n\t(call_summary_replay::dump_to_pp): Delete.\n\t(call_summary_replay::make_dump_widget): New.\n\t(call_summary_replay::dump): Reimplement in terms of dump widget.\n\t(call_summary_replay::dump_to_logger): New.\n\t(call_summary_replay::get_store_manager): Drop.\n\t(call_summary_replay::impl_bits_from_bytes): New.\n\t* checker-event.cc\n\t(checker_event::maybe_make_diagnostic_state_graph): Update to\n\tnew way of dumping program_state instances.\n\t* common.h (diagnostics::markup::node): New forward decl.\n\t(diagnostics::markup::lowering_options): New forward decl.\n\t(class integer_with_unit\u003cU\u003e): New forward decl.\n\t(struct units::bit): New forward decl.\n\t(struct units::byte): New forward decl.\n\t(class symbolic::range\u003cCVT\u003e): New forward decl.\n\t(class symbolic::node_dump_state): New forward decl.\n\t(class symbolic::node_set\u003cNC\u003e): New forward decl.\n\t(class symbolic::node_visitor): New forward decl.\n\t(class symbolic::liveness_context): New forward decl.\n\t(struct symbolic::markup_context): New forward decl.\n\t(class symbolic::bit_contents): New forward decl.\n\t(class symbolic::unfoldable_bit_contents): New forward decl.\n\t(class symbolic::baseline_bit_contents): New forward decl.\n\t(class symbolic::conjured_bit_contents): New forward decl.\n\t(class symbolic::offset_bit_contents): New forward decl.\n\t(class symbolic::uniform_bit_contents): New forward decl.\n\t(class symbolic::bit_overlay): New forward decl.\n\t(class symbolic::concrete_bit_overlay): New forward decl.\n\t(class symbolic::symbolic_bit_overlay): New forward decl.\n\t(class symbolic::scalar\u003cCVT\u003e): New forward decl.\n\t(class symbolic::value_node): New forward decl.\n\t(class symbolic::bit_vector): New forward decl.\n\t(class symbolic::concat_bit_vector): New forward decl.\n\t(class symbolic::conjured_bit_vector): New forward decl.\n\t(class symbolic::constant_bit_vector): New forward decl.\n\t(class symbolic::cropped_bit_vector): New forward decl.\n\t(class symbolic::repeated_bit_vector): New forward decl.\n\t(class symbolic::bit_vector_from_svalue): New forward decl.\n\t(class symbolic::bit_vector_from_ubc): New forward decl.\n\t(class symbolic::uniform_bit_vector): New forward decl.\n\t(class symbolic::empty_bit_vector): New forward decl.\n\t(class symbolic::poisoned_bit_vector): New forward decl.\n\t(class symbolic::tristate_bit_vector): New forward decl.\n\t(class symbolic::bit_contents_manager): New forward decl.\n\t(class symbolic::bit_vector_manager): New forward decl.\n\t(class symbolic::scalar_managers): New forward decl.\n\t(class symbolic::scalar_manager\u003cCVT\u003e): New forward decl.\n\t(symbolic_bit_range): New \"using\" decl.\n\t(symbolic_byte_range): New \"using\" decl.\n\t(class region_svalue): Replace forward decl with...\n\t(class pointer_svalue): ...this.\n\t(class sub_svalue): Drop forward decl of eliminated class.\n\t(class repeated_svalue): Likewise.\n\t(class bits_within_svalue): Likewise.\n\t(class compound_svalue): Likewise.\n\t(class conjured_svalue): Likewise.\n\t(class svalue_from_bit_vector): New forward decl.\n\t(svalue_set): Drop typedef.\n\t(class store_manager): Drop forward decl of eliminated class.\n\t(class setjmp_record): New forward decl.\n\t(get_field_at_bit_offset): Drop decl.\n\t(class region_offset): Delete.\n\t(eval_region_offset_comparison): Drop decl.\n\t(cmp_csts_and_types): New decl.\n\t(strip_types): Delete decl of region_offset overload.\n\t(enum class poison_kind): Move here from svalue.h.  Add \"other\".\n\t(poison_kind_to_str): Move here from svalue.h.\n\t(enum class baseline_state): New.\n\t(baseline_state_to_str): New decl.\n\t(enum class iter_result): New.\n\t(append_pathvar_with_type): New decl.\n\t* constraint-manager.cc: Add include of\n\t\"analyzer/liveness-context.h\".\n\t(class sval_finder): Update for changes to svalue subclasses.\n\t(class dead_svalue_purger): Update to use\n\tsymbolic::liveness_context.\n\t(constraint_manager::on_liveness_change): Likewise.\n\t(class svalue_purger): Rename to...\n\t(class node_purger): ...this and generalize from svalue to\n\tsymbolic::node.\n\t(constraint_manager::purge_state_involving): Generalize from\n\tsvalue to symbolic::node.\n\t(selftest::test_purging): Update for\n\tregion_model::purge_state_involving taking a reference rather than\n\ta pointer.\n\t* constraint-manager.h (constraint_manager::on_liveness_change):\n\tUpdate decl to use symbolic::liveness_context.\n\t(constraint_manager::purge_state_involving): Generalize from\n\tsvalue to symbolic::node.\n\t* diagnostic-manager.cc (saved_diagnostic::dump_as_dot_node):\n\tUpdate for dump changes.\n\t(dump_to_logger): Update for changes to make_dump_widget.\n\t(make_raw_dst_region_model): Set cfun and input_location.\n\t(diagnostic_manager::prune_for_sm_diagnostic): Canonicalize the\n\tinput svalue and update throughout to make it clear whether we\u0027re\n\tdealing with uncanonicalized or canonicalized svalue.\n\t* engine.cc (impl_region_model_context::on_svalue_leak):\n\tCanonicalize sval.\n\t(impl_region_model_context::on_liveness_change): Update for\n\tsignature change.\n\t(impl_region_model_context::on_unknown_change): Likewise.\n\t(impl_region_model_context::purge_state_involving): Likewise.\n\t(impl_region_model_context::on_state_leak): Use value_set rather\n\tthan svalue_set.\n\t(exploded_node::dump_dot): Use monospace font.  Use\n\tdump_node_tree_to_pp for dumping state.\n\t(exploded_node::dump): Reimplement in terms of dump widget.\n\t(exploded_node::dump_to_pp): Reimplement in terms of dump widget.\n\t(exploded_node::dump_to_logger): New.\n\t(exploded_node::make_dump_widget): New.\n\t(exploded_graph::get_or_create_node): Use dump_to_logger.\n\t(exploded_graph::process_node): Likewise.\n\t(exploded_graph::process_node): Likewise.\n\t(feasibility_problem::make_dump_widget): New.\n\t(feasibility_problem::dump): New.\n\t(feasibility_problem::dump_to_pp): Reimplement in terms of\n\tdump widget.\n\t(feasibility_problem::dump_to_logger): New.\n\t(feasibility_state::maybe_update_for_edge): Use dump_to_logger.\n\t(feasibility_state::make_dump_widget): New.\n\t(feasibility_state::dump_to_pp): Reimplment in terms of dump\n\twidget.\n\t(enode_label::get_text): Drop state from label.\n\t(exploded_graph::dump_exploded_nodes): Use\n\tsymbolic::dump_node_tree_to_file\u003cprogram_state\u003e.  Update for\n\tsimplified signature of program_state::dump.\n\t* exploded-graph.h (impl_region_model_context::on_liveness_change):\n\tUpdate signature.\n\t(impl_region_model_context::on_unknown_change): Likewise.\n\t(impl_region_model_context::purge_state_involving): Likewise.\n\t(exploded_node::make_dump_widget): New decl.\n\t(exploded_node::dump): Drop ext_state param.  Drop FILE *\n\toverload.\n\t(exploded_node::dump_to_pp): Drop ext_state param.\n\t(exploded_node::dump_to_logger): New.\n\t(feasibility_problem::make_dump_widget): New.\n\t(feasibility_problem::dump): New.\n\t(feasibility_problem::dump_to_logger): New.\n\t(feasibility_state::dump_to_pp): Drop \"simple\" and \"multiline\"\n\tparams.\n\t(feasibility_state::make_dump_widget): New.\n\t* exploded-path.cc (exploded_path::feasible_p): Use\n\tdump_to_logger.\n\t(exploded_path::dump_to_pp): Update for change to\n\tprogram_state::dump_to_pp.\n\t* feasible-graph.cc (feasible_node::dump_dot): Update for change\n\tto region_model::dump_to_pp.\n\t(feasible_graph::dump_feasible_path): Likewise for change to\n\tfeasible_state::dump_to_pp.\n\t* infinite-recursion.cc (class infinite_recursion_diagnostic):\n\tRename \"uses_conjured_svalue_p\" to \"uses_conjured_value_p\"\n\tthroughout.  Reimplement to work on conjured bit_vectors.\n\t(contains_unknown_p): Generalize from svalue to symbolic::node.\n\t(sufficiently_different_region_binding_p): Port to new\n\timplementation, working on bit_contents.\n\t* initializers.cc: New file.\n\t* kf-analyzer.cc: Drop param to region_model::dump.\n\t(class kf_analyzer_hexdump): New.\n\t(register_known_analyzer_functions): Register it as\n\t\"__analyzer_hexdump\".\n\t* kf-lang-cp.cc (kf_dynamic_cast::impl_call_post): Port to new\n\timplementation.\n\t(kf_operator_delete::impl_call_post): Likewise.\n\t* kf.cc: (kf_atomic_exchange::impl_call_pre): Likewise.\n\t(kf_atomic_load::impl_call_pre): Likewise.\n\t(kf_atomic_store::impl_call_pre): Likewise.\n\t(kf_free::impl_call_post): Likewise.\n\t(kf_memcpy_memmove::impl_call_pre): Likewise.\n\t(kf_memset::impl_call_pre): Likewise.\n\t(kf_mktemp_family::check_placeholder): Likewise.\n\t(kf_putenv::impl_call_pre): Likewise.\n\t(kf_realloc::impl_call_post): Likewise.\n\t(kf_strdup::impl_call_pre): Likewise.\n\t(kf_strcpy::impl_call_pre): Likewise.\n\t(kf_strcat::impl_call_pre): Likewise.\n\t(kf_strncpy::impl_call_post): Likewise.\n\t* liveness-context.h: New file.\n\t* ops.cc (operation_context::dump): Update for dump changes.\n\t(call_and_return_op::replay_call_summary): Likewise.\n\t(dump_op::execute): Likewise.\n\t(phis_for_edge_op::update_state): Update for change to\n\tpurge_state_involving signature.\n\t* poisoned-value-diagnostic.cc (poison_finder::visit_svalue): New.\n\t(poison_finder::visit_bit_vector): New.\n\t(poisoned_value_diagnostic::check_valid_fpath_p): Use\n\tpoison_finder rather than dyn_cast_poisoned_svalue.\n\t* program-point.cc (program_point::dump): Reimplement in terms\n\tof...\n\t(program_point::make_dump_widget): New.\n\t* program-point.h (program_point::make_dump_widget): New decl.\n\t* program-state.cc: Include \"analyzer/liveness-context.h\".\n\t(extrinsic_state::make_dump_widget): New.\n\t(extrinsic_state::dump_to_pp): Delete.\n\t(extrinsic_state::dump_to_file): Delete.\n\t(extrinsic_state::dump): Delete.\n\t(sm_state_map::make_dump_widget): Update for signature change.\n\tRework how states are dumped.  Add dumping of m_map_ubc_to_state.\n\t(sm_state_map::is_empty_p): Add check on m_map_ubc_to_state.\n\t(sm_state_map::operator\u003d\u003d): Add comparison of m_map_ubc_to_state.\n\t(sm_state_map::get_any_inherited_state_of_bit_vector): New.\n\t(sm_state_map::get_state): Drop handling of sub_svalue.\n\tAdd handling of svalue_from_bit_vector.\n\t(sm_state_map::impl_set_state): Reimplement handling of inherited\n\tstate in terms of m_map_ubc_to_state.\n\t(sm_state_map::clear_all_per_svalue_state): Clear\n\tm_map_ubc_to_state.\n\t(sm_state_map::on_liveness_change): Port to\n\tsymbolic::liveness_context.\n\t(sm_state_map::on_unknown_change): Generalize from svalue to\n\tsymbolic::value_node, adding support for bit_vector.\n\t(sm_state_map::purge_state_involving): Likewise.\n\t(sm_state_map::canonicalize_svalue): Handle nullptr.  Strip types\n\tfrom symbolic pointers and from svalue_from_bit_vector.\n\t(sm_state_map::validate): New.\n\t(sm_state_map::replay_call_summary): Canonicalize svalues.\n\t(program_state::print): Delete.\n\t(program_state::dump_to_pp): Delete.\n\t(program_state::dump_to_file): Delete.\n\t(program_state::dump): Reimplement in terms of dump widget.\n\t(program_state::dump_to_logger): New.\n\t(program_state::make_dump_widget): Update for signature change.\n\tSupport passing in a label.\n\t(program_state::can_purge_base_region_p): Reimplement.\n\t(program_state::validate): Validate the sm_state_maps in\n\tm_checker_states.\n\t(log_set_of_svalues): Port from svalue_set to value_set.  Use\n\tdump_to_logger.\n\t(liveness_context::liveness_context): New.\n\t(liveness_context::node_live_p): New.\n\t(liveness_context::bits_live_p): New.\n\t(liveness_context::known_live_ptr_to_base_region_p): New.\n\t(liveness_context::set_known_liveness_for_node): New.\n\t(liveness_context::dump_to_pp): New.\n\t(liveness_context::make_dump_widget): New.\n\t(program_state::detect_leaks): Reimplement, generalizing from\n\tsvalue to symbolic::value_node.\n\t* program-state.h (extrinsic_state::dump_to_pp): Delete.\n\t(extrinsic_state::dump_to_file): Delete.\n\t(extrinsic_state::dump_to_logger): New.\n\t(extrinsic_state::make_dump_widget): New.\n\t(sm_state_map::make_dump_widget): Update signature.\n\t(sm_state_map::dump): New.\n\t(sm_state_map::on_liveness_change): Update signature.\n\t(sm_state_map::on_unknown_change): Likewise.\n\t(sm_state_map::purge_state_involving): Likewise.\n\t(sm_state_map::validate): New.\n\t(sm_state_map::get_any_inherited_state_of_bit_vector): New.\n\t(sm_state_map::m_map_ubc_to_state): New field.\n\t(program_state::dump_to_pp): Delete.\n\t(program_state::dump_to_file): Delete.\n\t(program_state::dump_to_logger): New.\n\t(program_state::dump): Simplify signature.\n\t(program_state::make_dump_widget): Update signature.\n\t* ranges.cc: Deleted file; partially used when reimplementing\n\tsymbolic-ranges.cc.\n\t* ranges.h: Deleted file; partially used when reimplementing\n\tsymbolic-ranges.h.\n\t* record-layout.cc (record_layout::record_layout): Port from\n\tbit_range to concrete_bit_range, and from bit_offset_t to\n\tconcrete_bit_offset.\n\t(record_layout::get_item_at): Likewise.\n\t(record_layout::maybe_pad_to): Likewise.\n\t* record-layout.h (get_bit_position): New decl.\n\t(get_field_at_bit_offset): New decl.\n\t(class record_layout): Port from bit_range to concrete_bit_range,\n\tand from bit_offset_t to concrete_bit_offset.\n\t* region-model-asm.cc (region_model::on_asm_stmt): Update for\n\tchange to reachable_regs.  Drop store manager.  Pass baseline\n\tstate to get_or_create_cluster.\n\t* region-model-manager.cc: Include \"analyzer/symbolic-scalars.h\",\n\t\"analyzer/record-layout.h\", and \"analyzer/analyzer-selftests.h\".\n\t(region_model_manager::region_model_manager): Drop m_store_mgr.\n\t(region_model_manager::~region_model_manager): Drop cleanup of\n\tdropped fields m_sub_values_map, m_repeated_values_map,\n\tm_bits_within_values_map, m_compound_values_map, and\n\tm_conjured_values_map.  Add cleanup of m_bit_vector_to_svalue_map.\n\t(region_model_manager::get_or_create_initial_value): Handle\n\tsubregions as a cropping of the baseline contents of the base\n\tregion.\n\t(region_model_manager::get_ptr_svalue): Port from region_svalue to\n\tpointer_svalue.\n\t(region_model_manager::maybe_fold_unaryop): Avoid creating\n\tsymbolic regions for pointer casts by simplifying (T*)(\u0026REGION) to\n\t((T*)\u0026REGION).  Fold svalue_from_bit_vector.\n\t(region_model_manager::maybe_undo_optimize_bit_field_compare):\n\tDelete.\n\t(region_model_manager::maybe_fold_binop): Handle\n\tPOINTER_PLUS_EXPR and LSHIFT_EXPR.  Fold pointer arithmetic within\n\ta base region.  Drop handling of compound_svalue.\n\t(region_model_manager::maybe_fold_sub_svalue): Delete.\n\t(region_model_manager::get_or_create_sub_svalue): Delete.\n\t(region_model_manager::maybe_fold_repeated_svalue): Delete.\n\t(region_model_manager::get_or_create_repeated_svalue): Delete.\n\t(region_model_manager::maybe_fold_svalue_from_bit_vector): New.\n\t(canonicalize_ptr_type_for_bit_vector): New.\n\t(get_bit_range_for_field): Delete.\n\t(get_byte_range_for_field): Delete.\n\t(get_field_at_byte_range): Delete.\n\t(region_model_manager::maybe_fold_bits_within_svalue): Delete.\n\t(region_model_manager::get_or_create_bits_within): Delete.\n\t(region_model_manager::get_or_create_compound_svalue): Delete.\n\t(region_model_manager::get_svalue_from_bit_vector): New.\n\t(region_model_manager::get_svalue_from_scalar): New.\n\t(conjured_purge::purge): Reimplement in symbolic-bit-vectors.cc.\n\t(region_model_manager::get_or_create_conjured_svalue): Reimplement\n\tin terms of svalue_from_bit_vector(conjured_bit_vector).\n\t(region_model_manager::maybe_fold_sized_region_to_initial_field):\n\tNew.\n\t(region_model_manager::get_sized_region): Call it.\n\t(region_model_manager::get_cast_region):  Fold casts of symbolic\n\tregions.\n\t(region_model_manager::maybe_fold_symbolic_region): New.\n\t(region_model_manager::get_symbolic_region): Add call to\n\tmaybe_fold_symbolic_region.\n\t(region_model_manager::get_bit_range): Use concrete_bit_range\n\trather than bit_range.\n\t(region_model_manager::log_stats): Update logging of\n\tm_pointer_values_map.  Drop logging of deleted fields\n\tm_sub_values_map, m_repeated_values_map, m_bits_within_values_map,\n\tm_compound_values_map, m_conjured_values_map, and m_store_mgr. Add\n\tlogging of m_bit_vector_to_svalue_map.\n\t(store_manager::log_stats): Delete.\n\t(selftest::test_svalue_from_bit_vector): New.\n\t(selftests::analyzer_region_model_manager_cc_tests): New.\n\t* region-model-manager.h: Add includes of \"svalue.h\", \"region.h\",\n\tand \"known-function-manager.h\".\n\t(region_model_manager::get_ptr_svalue): Update param to\n\tsymbolic::pointer.\n\t(region_model_manager::get_or_create_sub_svalue): Delete.\n\t(region_model_manager::get_or_create_repeated_svalue): Delete.\n\t(region_model_manager::get_or_create_bits_within): Delete.\n\t(region_model_manager::get_or_create_compound_svalue): Delete.\n\t(region_model_manager::get_svalue_from_bit_vector): New.\n\t(region_model_manager::get_svalue_from_scalar): New.\n\t(region_model_manager::get_bit_range): Convert from bit_range to\n\tconcrete_bit_range.\n\t(region_model_manager::get_store_manager): Delete.\n\t(region_model_manager::maybe_fold_sub_svalue): Delete.\n\t(region_model_manager::maybe_fold_repeated_svalue): Delete.\n\t(region_model_manager::maybe_fold_bits_within_svalue): Delete.\n\t(region_model_manager::maybe_undo_optimize_bit_field_compare):\n\tDelete.\n\t(region_model_manager::maybe_fold_svalue_from_bit_vector): New.\n\t(region_model_manager::maybe_fold_sized_region_to_initial_field):\n\tNew.\n\t(region_model_manager::maybe_fold_symbolic_region): New.\n\t(region_model_manager::pointer_values_map_t): Convert from\n\tregion_svalue to pointer_svalue.\n\t(region_model_manager::bit_vector_to_svalue_map_t): New typedef.\n\t(region_model_manager::m_bit_vector_to_svalue_map): New field.\n\t(region_model_manager::sub_values_map_t): Drop.\n\t(region_model_manager::m_sub_values_map): Drop.\n\t(region_model_manager::repeated_values_map_t): Drop.\n\t(region_model_manager::m_repeated_values_map): Drop.\n\t(region_model_manager::bits_within_values_map_t): Drop.\n\t(region_model_manager::m_bits_within_values_map): Drop.\n\t(region_model_manager::compound_values_map_t): Drop.\n\t(region_model_manager::m_compound_values_map): Drop.\n\t(region_model_manager::conjured_values_map_t): Drop.\n\t(region_model_manager::m_conjured_values_map): Drop.\n\t(region_model_manager::m_store_mgr): Drop.\n\t* region-model-reachability.cc: Add include of\n\t\"analyzer/liveness-context.h\".\n\t(recurse_into_children_p): New.\n\t(reachable_regions::init_cluster): Port to\n\tsymbolic::liveness_context.\n\t(reachable_regions::add): Port to new implementation of\n\tbinding_cluster contents.\n\t(reachable_regions::handle_sval_cb): Update for generalization\n\tto symbolic::value_node.\n\t(reachable_regions::handle_sval): Rename to...\n\t(reachable_regions::handle_value): ...this, generalizing from\n\tsvalue to symbolic::value_node.\n\t(reachable_regions::handle_parm): Port to new implementation.\n\t(reachable_regions::mark_escaped_clusters): Likewise.\n\t(reachable_regions::dump_to_pp): Likewise.\n\t* region-model-reachability.h (class reachable_regions): Use\n\tvalue_set rather than svalue_set throughout.\n\t(reachable_regions::handle_sval): Rename to...\n\t(reachable_regions::handle_value): ...this, generalizing from\n\tsvalue to symbolic::value_node.\n\t* region-model.cc: Drop include of \"stor-layout.h\".  Include\n\t\"diagnostics/markup.h\".\n\t(region_to_value_map::dump_to_pp): Drop.\n\t(region_to_value_map::dump): Drop.\n\t(region_to_value_map::make_dump_widget): Update for new signature.\n\t(region_to_value_map::purge_state_involving): Generalize from\n\tsvalue to symbolic::node.\n\t(exception_node::dump_to_pp): Drop.\n\t(exception_node::dump): Drop overload and reimplement in terms\n\tof dump widget.\n\t(exception_node::dump_to_logger): New.\n\t(exception_node::make_dump_widget): Update for signature change.\n\t(exception_node::add_to_reachable_regions): Update for change\n\tto reachable_regions.\n\t(region_model::region_model): Pass node_mgr to store ctor.\n\t(region_model::dump_to_pp): Reimplement in terms of dump_widget.\n\t(region_model::dump): Likewise, simplifying.\n\t(region_model::debug): Drop.\n\t(region_model::dump_to_logger): New.\n\t(region_model::make_dump_widget): Update for signature change.\n\t(region_model::canonicalize): Drop store manager.\n\t(region_model::loop_replay_fixup): Pass baseline state to store.\n\t(region_model::get_gassign_result): Update infinite loop detection\n\tbefore eval_condition does any folding.\n\t(region_model::complain_about_poison): New.\n\t(region_model::check_bytes_for_poison): New.\n\t(region_model::on_assignment): Call region_model::set_value rather\n\tthan going to store for STRING_CST.\n\t(exception_thrown_from_unrecognized_call::update_model): Port\n\tto bit_contents.\n\t(region_model::purge_state_involving): Pass a symbolic::node\n\trather than an svalue, dropping rejection of\n\tcan_have_associated_state_p.\n\t(check_one_function_attr_null_terminated_string_arg): Port to new\n\ttypes.\n\t(region_model::handle_unrecognized_call): Likewise.\n\t(region_model::get_reachable_svalues): Likewise.\n\t(region_model::get_lvalue_1): Likewise.\n\t(region_model::get_baseline_state): New.\n\t(region_model::get_store_value): Move poison-checking.\n\tReimplement in terms of get_store_bits and\n\tget_svalue_from_bit_vector.\n\t(region_model::get_store_bits): New.\n\t(region_model::get_bit_contents): New.\n\t(region_model::set_bit_contents_raw): New.\n\t(region_model::deref_rvalue): Assert that type is non-null.\n\tDrop case for SK_REGION.\n\t(region_model::get_rvalue_for_bits): Reimplement in terms of\n\tget_store_bits, get_cropped_bits, and get_svalue_from_bit_vector.\n\t(region_model::check_for_writable_region): Rename \"dest_reg\" to\n\t\"base_reg\" and assume it is a base region.\n\t(region_model::get_capacity_as_scalar): New.\n\t(region_model::check_region_access): Reimplement as...\n\t(region_model::check_memory_range_access): ...this.\n\t(region_model::check_region_for_read): Delete.\n\t(size_visitor::visit_conjured_svalue): Replace with...\n\t(size_visitor::visit_svalue_from_bit_vector): ...this.\n\t(region_model::write_to_memory_offset): New.\n\t(region_model::set_value): Port to new types, reimplementing\n\tin terms of write_to_memory_offset.\n\t(struct fragment): Delete.\n\t(string_cst_has_null_terminator): Delete.\n\t(svalue_byte_range_has_null_terminator): Delete.\n\t(svalue_byte_range_has_null_terminator_1): Delete.\n\t(get_tree_for_byte_offset): Convert from byte_offset_t to\n\tconcrete_byte_offset.\n\t(class iterable_cluster): Delete.\n\t(region_model::get_store_bytes): Delete.\n\t(region_model::scan_for_null_terminator_1): Reimplement in terms\n\tof string_scan.\n\t(region_model::scan_for_null_terminator): Use symbolic::bit_vector\n\tfor output of scanned bytes, rather than svalue.\n\t(region_model::check_for_null_terminated_string_arg): Likewise.\n\t(region_model::clobber_region): Drop store manager.  Pass baseline\n\tstate.\n\t(region_model::purge_region): Reimplement.\n\t(region_model::fill_region): Delete.\n\t(region_model::zero_fill_region): Reimplement in terms of\n\twrite_to_memory_offset.\n\t(region_model::write_bytes): Reimplement in terms of\n\tsymbolic::pointer, symbolic::bit_vector, and\n\twrite_to_memory_offset.\n\t(region_model::read_bytes): Reimplement in terms of\n\tsymbolic::pointer, symbolic_byte_size, and symbolic::bit_vector.\n\t(region_model::copy_bytes): Reimplement in terms of\n\tsymbolic::pointers and symbolic_byte_size.\n\t(region_model::mark_region_as_unknown): Reimplement.\n\t(region_model::mark_region_as_conjured): New.\n\t(equal_bit_vectors_p): New.\n\t(region_model::canonicalize_svalue_for_constraint): New.\n\t(region_model::can_recurse_eval_condition_p): New.\n\t(region_model::eval_condition): Canonicalize lhs and rhs.  Treat\n\tequal bit vectors as equal (after float rejection for NaN).  Port\n\tfrom region_svalue to symbolic::pointer.  Reject recursion purely\n\tdue to canonicalization, to avoid infinite recursion.\n\t(region_model::compare_initial_and_pointer): Port from\n\tregion_svalue to symbolic::pointer.\n\t(is_positive_svalue): Add positive * positive handler.\n\t(region_model::add_constraint): Canonicalize lhs and rhs.  Port\n\tfrom region_svalue to symbolic::pointer.\n\t(convert_to_type): New.\n\t(region_model::get_representative_path_var_1): Update from\n\tsvalue_set to value_set.  Convert various early returns into\n\tappends to \"pvs\", so that we consider other canidates by\n\treadability.  Port from region_svalue to symbolic::pointer and\n\thandle other new types.\n\t(region_model::get_representative_path_var): Use value_set rather\n\tthan svalue_set.  Only require types_compatible_p, rather than\n\texact type matches.\n\t(region_model::get_representative_tree): Use value_set rather\n\tthan svalue_set.  Strip top-level casts repeatedly, rather than\n\tjust one.\n\t(region_model::get_representative_tree): Update from svalue_set to\n\tvalue_set.\n\t(region_model::maybe_get_region_for_mem_range): New.\n\t(region_model::maybe_get_subregion_for_symbolic_bit_range): New.\n\t(region_model::maybe_get_subregion_for_concrete_bit_range): New.\n\t(get_underlying_index_type): New.\n\t(struct quotient_and_residual): New.\n\t(try_split_exact_multiple): New.\n\t(quotient_and_residual::handle_bits_from_bytes): New.\n\t(region_model::maybe_get_subregion_for_symbolic_bit_range_in_array):\n\tNew.\n\t(region_model::maybe_get_subregion_for_symbolic_bit_range_in_record):\n\tNew.\n\t(region_model::get_representative_path_var_1): Update from\n\tsvalue_set to value_set.\n\t(region_model::get_representative_path_var): Likewise.\n\t(region_model::replay_call_summary): Support failure from\n\tstore::replay_call_summary.\n\t(region_model::on_top_level_param): Drop store manager; pass\n\tbaseline state.\n\t(region_model::push_frame): Try to preserve the type of arg_sval\n\tin the store, by wrapping it in an \"unmergeable\" decorator.\n\t(region_model::poison_any_pointers_to_descendents): Delegate to\n\tthe cluster.\n\t(region_model::can_merge_with_p): Drop store manager and update\n\tfor change to purge_state_involving.\n\t(region_model::get_vtable_from_obj): Port to symbolic::pointer.\n\t(region_model::get_fndecl_for_call): Port from region_svalue to\n\tsymbolic::pointer.\n\t(contains_floating_point_visitor::visit_conjured_svalue): Delete.\n\t(struct uninit_bit_counter): New.\n\t(class exposure_through_uninit_copy): Reimplement using\n\tuninit_bit_counter and new symbolic represenation.\n\t(contains_uninit_p): Reimplement using poison_finder.\n\t(region_model::maybe_complain_about_infoleak): Pass node_mgr to\n\texposure_through_uninit_copy ctor.\n\t(model_merger::dump_to_pp): Drop.\n\t(model_merger::dump): Drop.\n\t(model_merger::dump): Drop.\n\t(model_merger::mergeable_bit_vector_p): New.\n\t(debug): Drop.\n\t(selftest::assert_dump_eq): Drop.\n\t(ASSERT_DUMP_EQ): Drop.\n\t(selftesttest_dump): Reimplement using\n\tsymbolic::dump_node_tree_to_pp.\n\t(selftest::make_test_compound_type): Move to analyzer-selftest.cc.\n\t(struct selftest::coord_test): Likewise.\n\t(selftest::test_struct): Add ASSERT_SYMBOLIC_NODE_MARKUP_TEXT_EQ\n\tin various places.  Use ASSERT_SAME_SYMBOLIC_NODE rather than\n\tASSERT_EQ to get better error messages.  Verify memory ranges.\n\tPort from region_offset to symbolic::memory_offset.  Drop\n\tbinding_cluster code.\n\t(selftest::test_array_1): Verify markup output.\n\t(selftest::test_get_representative_tree): Likewise.  Add test\n\tof a single field within a struct.\n\t(selftest::test_unique_constants): Verify markup output.\n\t(selftest::test_unique_unknowns): Likewise.\n\t(selftest::test_initial_svalue_folding): Replace ASSERT_EQ\n\twith ASSERT_SAME_SYMBOLIC_NODE and verify markup output.\n\t(selftest::test_unaryop_svalue_folding): Likewise.\n\t(selftest::test_binop_svalue_folding): Likewise.\n\t(selftest::test_sub_svalue_folding): Drop.\n\t(selftest::get_bit): Drop.\n\t(selftest::test_bits_within_svalue_folding): Drop.\n\t(selftest::test_bit_range_regions): Port from bit_range\n\tto concrete_bit_range.  Verify markup.\n\t(selftest::test_stack_frames): Update \"popped_stack\" poison test.\n\tUse ASSERT_SAME_SYMBOLIC_NODE.\n\t(selftest::test_get_representative_path_var): Port from svalue_set\n\tto value_set.\n\t(selftest::assert_region_models_merge): Fix indentation.\n\t(selftest::test_state_merging): Port from region_svalue to\n\tpointer_svalue.  Use ASSERT_SAME_SYMBOLIC_NODE rather than\n\tASSERT_EQ.  Update test to use \"p\" rather than \"x\", since p is a\n\tpointer.\n\t(selftest::test_var): Update from region_offset to\n\tsymbolic::memory_range.  Use ASSERT_SAME_SYMBOLIC_NODE rather than\n\tASSERT_EQ\n\t(selftest::test_array_2):  Likewise.\n\t(selftest::test_alloca): Update \"popped_stack\" poison test.\n\t(selftest::test_involves_p): Update for change in signature of\n\tinvolves_p.\n\t(selftest::test_array_in_struct): New test.\n\t(selftest::test_maybe_get_region_for_mem_range): New test.\n\t(selftest::analyzer_region_model_cc_tests): Drop calls to\n\ttest_sub_svalue_folding and test_bits_within_svalue_folding.\n\tAdd calls to test_array_in_struct and\n\ttest_maybe_get_region_for_mem_range.\n\t* region-model.h (region_to_value_map::dump_to_pp): Drop.\n\t(region_to_value_map::dump): Drop.\n\t(region_to_value_map::dump_to_logger): New.\n\t(region_to_value_map::make_dump_widget): Update signature.\n\t(region_to_value_map::void purge_state_involving): Use\n\tsymbolic::node rather than svalue.\n\t(visitor::visit_region_svalue): Replace with...\n\t(visitor::visit_pointer_svalue): ...this.\n\t(visitor::visit_sub_svalue): Delete.\n\t(visitor::visit_repeated_svalue): Delete.\n\t(visitor::visit_bits_within_svalue): Delete.\n\t(visitor::visit_compound_svalue): Delete.\n\t(visitor::visit_conjured_svalue): Delete.\n\t(visitor::visit_svalue_from_bit_vector): New.\n\t(exception_node::dump_to_pp): Drop.\n\t(exception_node::dump): Drop overloads.\n\t(exception_node::dump_to_logger): New.\n\t(exception_node::make_dump_widget): Update signature.\n\t(region_model::dump_to_pp): Simplify signature.\n\t(region_model::dump): Drop overloads.\n\t(region_model::dump_to_logger): New.\n\t(region_model::debug): Drop.\n\t(region_model::make_dump_widget): Update signature.\n\t(region_model::purge_state_involving): Pass a symbolic::node\n\trather than an svalue.\n\t(region_model::purge_state_involving): Use a value_set rather\n\tthan an svalue_set.\n\t(region_model::fill_region): Drop.\n\t(region_model::write_bytes): Port from svalue to symbolic::pointer\n\tand symbolic::bit_vector.\n\t(region_model::read_bytes): Likewise.\n\t(region_model::copy_bytes): Port from region and svalue to\n\tsymbolic::pointer and symbolic_byte_size.\n\t(region_model::mark_region_as_conjured): New.\n\t(region_model::compare_initial_and_pointer): Port from\n\tregion_svalue to symbolic::pointer.\n\t(region_model::get_representative_path_var): Use a value_set\n\trather than an svalue_set.\n\t(region_model::maybe_get_region_for_mem_range): New.\n\t(region_model::get_store_bytes): Replace with...\n\t(region_model::get_store_bit): ...this.\n\t(region_model::get_bit_contents): New.\n\t(region_model::set_bit_contents_raw): New.\n\t(region_model::scan_for_null_terminator): Use symbolic::bit_vector\n\trather than svalue.\n\t(region_model::scan_for_null_terminator_1): Likewise.\n\t(region_model::check_for_null_terminated_string_arg): Likewise.\n\t(region_model::write_to_memory_offset): New.\n\t(region_model::get_capacity_as_scalar): New.\n\t(region_model::check_bytes_for_poison): New.\n\t(region_model::get_baseline_state): New.\n\t(region_model::bits_live_p): New.\n\t(region_model::get_representative_path_var_1): Use a value_set\n\trather than an svalue_set.\n\t(region_model::maybe_get_subregion_for_symbolic_bit_range): New.\n\t(region_model::maybe_get_subregion_for_concrete_bit_range): New.\n\t(region_model::maybe_get_subregion_for_symbolic_bit_range_in_array):\n\tNew.\n\t(region_model::maybe_get_subregion_for_symbolic_bit_range_in_record):\n\tNew.\n\t(region_model::complain_about_poison): New.\n\t(region_model::check_memory_range_for_taint): New.\n\t(region_model::check_memory_range_access): New.\n\t(region_model::check_region_for_read): Drop.\n\t(region_model::check_symbolic_bounds): Update from region\n\tto symbolic::memory_range.\n\t(region_model::check_memory_range_bounds): New.\n\t(region_model::canonicalize_svalue_for_constraint): New.\n\t(region_model::can_recurse_eval_condition_p): New.\n\t(region_model_context::on_liveness_change): Update signature.\n\t(region_model_context::on_unknown_change): Likewise.\n\t(region_model_context::purge_state_involving): Likewise.\n\t(class noop_region_model_context): Update for above changes.\n\t(class region_model_context_decorator): Likewise.\n\t(model_merger::dump_to_pp): Drop.\n\t(model_merger::dump_to_logger): New.\n\t(model_merger::dump): Simplify, dropping overloads.\n\t(model_merger::mergeable_bit_vector_p): New.\n\t(struct poison_finder): New.\n\t* region.cc: Include \"diagnostics/markup.h\" and\n\t\"analyzer/symbolic-pointers.h\".\n\t(compare_bit_offsets_p): Delete.\n\t(region_offset::make_byte_offset): Delete.\n\t(region_offset::calc_symbolic_bit_offset): Delete.\n\t(region_offset::calc_symbolic_byte_offset): Delete.\n\t(region_offset::dump_to_pp): Delete.\n\t(region_offset::dump): Delete.\n\t(struct linear_op): Delete.\n\t(strip_types): Delete.\n\t(eval_byte_offset_comparison): Delete.\n\t(eval_region_offset_comparison): Delete.\n\t(region::print_dump_widget_label): New.\n\t(region::~region): Drop manual deletion of m_cached_offset.\n\t(region::add_dump_widget_children): New.\n\t(region::get_memory_space): Handle RK_SYMBOLIC.\n\t(region::calc_initial_value_at_main): Port to new implementation.\n\t(region::get_offset): Replace with...\n\t(region::get_memory_offset): ...this.\n\t(region::get_next_offset): Delete.\n\t(region::get_memory_range): New.\n\t(region::get_pointer): New.\n\t(region::get_byte_size): Replace with...\n\t(region::maybe_get_byte_size): ...this.\n\t(region::get_byte_size_sval): Reimplement.\n\t(region::get_bit_size_sval): New.\n\t(get_type_size): New.\n\t(get_bit_position): New.\n\t(region::get_bit_size): Replace with...\n\t(region::maybe_get_bit_size): ...this.\n\t(get_field_at_bit_offset): Port to new types.\n\t(region::get_subregions_for_binding): Convert to...\n\t(region::get_subregions_for_bit_range): ...this.\n\t(region::calc_offset): Replace with...\n\t(region::calc_memory_offset): ...this.\n\t(region::get_relative_concrete_offset): Delete.\n\t(region::get_relative_symbolic_offset): Delete.\n\t(region::get_relative_concrete_byte_range): Delete.\n\t(region::calc_memory_range): New.\n\t(region::calc_pointer): New.\n\t(region::dump): Delete.\n\t(region::maybe_get_bit_offset_relative_to_parent): New.\n\t(region::maybe_get_byte_offset_relative_to_parent): New.\n\t(region::to_json): Delete in favor of node::to_json.\n\t(region::dump): Reimplement using dump widget.\n\t(region::make_dump_widget): Delete in favor of\n\tnode::make_dump_widget.\n\t(region::add_dump_widget_children): Update signature.\n\t(region::make_json_obj): New.\n\t(region::empty_p): Add \"rmm\" param and port to new implementation.\n\t(region::region): Update for replacement of m_cached_offset with\n\tm_cached_memory_range.\n\t(region::involves_p): Delete in favor of node::involves_p.\n\t(frame_region::print_dump_widget_label): Rename to...\n\t(frame_region::print_region_for_dump_widget_label): ...this.\n\t(frame_region::accept_node_visitor): New.\n\t(frame_region::to_json): New.\n\t(frame_region::make_markup_node): New.\n\t(globals_region::print_dump_widget_label): Rename to...\n\t(globals_region::print_region_for_dump_widget_label): ...this.\n\t(globals_region::accept_node_visitor) New.\n\t(globals_region::to_json): New.\n\t(globals_region::make_markup_node): New.\n\t(code_region::print_dump_widget_label): Rename to...\n\t(code_region::print_region_for_dump_widget_label): ...this.\n\t(code_region::accept_node_visitor) New.\n\t(code_region::to_json): New.\n\t(code_region::make_markup_node): New.\n\t(function_region::print_dump_widget_label): Rename to...\n\t(function_region::print_region_for_dump_widget_label): ...this.\n\t(function_region::accept_node_visitor) New.\n\t(function_region::to_json): New.\n\t(function_region::make_markup_node): New.\n\t(label_region::print_dump_widget_label): Rename to...\n\t(label_region::print_region_for_dump_widget_label): ...this.\n\t(label_region::accept_node_visitor) New.\n\t(label_region::to_json): New.\n\t(label_region::make_markup_node): New.\n\t(stack_region::print_dump_widget_label): Rename to...\n\t(stack_region::print_region_for_dump_widget_label): ...this.\n\t(stack_region::accept_node_visitor) New.\n\t(stack_region::to_json): New.\n\t(stack_region::make_markup_node): New.\n\t(heap_region::print_dump_widget_label): Rename to...\n\t(heap_region::print_region_for_dump_widget_label): ...this.\n\t(heap_region::accept_node_visitor) New.\n\t(heap_region::to_json): New.\n\t(heap_region::make_markup_node): New.\n\t(root_region::print_dump_widget_label): Rename to...\n\t(root_region::print_region_for_dump_widget_label): ...this.\n\t(root_region::accept_node_visitor) New.\n\t(root_region::to_json): New.\n\t(root_region::make_markup_node): New.\n\t(thread_local_region::print_dump_widget_label): Rename to...\n\t(thread_local_region::print_region_for_dump_widget_label):\n\t...this.\n\t(thread_local_region::accept_node_visitor) New.\n\t(thread_local_region::to_json): New.\n\t(thread_local_region::make_markup_node): New.\n\t(symbolic_region::print_dump_widget_label): Rename to...\n\t(symbolic_region::print_region_for_dump_widget_label): ...this.\n\t(symbolic_region::add_dump_widget_children): Update signature.\n\tDump m_sval_ptr.\n\t(symbolic_region::accept_node_visitor) New.\n\t(symbolic_region::to_json): New.\n\t(symbolic_region::make_markup_node): New.\n\t(decl_region::print_dump_widget_label): Rename to...\n\t(decl_region::print_region_for_dump_widget_label): ...this.\n\t(decl_region::accept_node_visitor) New.\n\t(decl_region::to_json): New.\n\t(decl_region::make_markup_node): New.\n\t(decl_region::calc_svalue_for_constructor): Delete.\n\t(decl_region::get_svalue_for_constructor): Reimplement.\n\t(decl_region::get_bit_contents_for_constructor): New.\n\t(decl_region::get_svalue_for_initializer): Reimplement.\n\t(decl_region::maybe_get_bit_contents_for_initializer): New.\n\t(field_region::print_dump_widget_label): Rename to...\n\t(field_region::print_region_for_dump_widget_label): ...this.\n\t(field_region::accept_node_visitor) New.\n\t(field_region::to_json): New.\n\t(field_region::make_markup_node): New.\n\t(field_region::get_relative_concrete_offset): Drop.\n\t(field_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(field_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(field_region::get_relative_symbolic_offset): Drop.\n\t(element_region::print_dump_widget_label): Rename to...\n\t(element_region::print_region_for_dump_widget_label): ...this.\n\t(element_region::add_dump_widget_children): Update signature.\n\tDump m_index.\n\t(element_region::accept_node_visitor) New.\n\t(element_region::to_json): New.\n\t(element_region::make_markup_node): New.\n\t(element_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(element_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(element_region::get_relative_concrete_offset): Delete.\n\t(element_region::get_relative_symbolic_offset): Delete.\n\t(offset_region::print_dump_widget_label): Rename to...\n\t(offset_region::print_region_for_dump_widget_label): ...this.\n\t(offset_region::add_dump_widget_children): Update signature.\n\tDump m_byte_offset.\n\t(offset_region::accept_node_visitor) New.\n\t(offset_region::to_json): New.\n\t(offset_region::make_markup_node): New.\n\t(offset_region::get_relative_concrete_offset): Delete.\n\t(offset_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(offset_region::get_relative_symbolic_offset): Delete.\n\t(offset_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(sized_region::print_dump_widget_label): Rename to...\n\t(sized_region::print_region_for_dump_widget_label): ...this.\n\t(sized_region::add_dump_widget_children): Update signature.\n\t(sized_region::accept_node_visitor) New.\n\t(sized_region::to_json): New.\n\t(sized_region::make_markup_node): New.\n\t(sized_region::get_byte_size): Replace with...\n\t(sized_region::maybe_get_byte_size): ...this.\n\t(sized_region::get_bit_size): Replace with...\n\t(sized_region::maybe_get_bit_size): ...this.\n\t(sized_region::get_bit_size_sval): Drop.\n\t(cast_region::print_dump_widget_label): Rename to...\n\t(cast_region::print_region_for_dump_widget_label): ...this.\n\t(cast_region::accept_node_visitor) New.\n\t(cast_region::to_json): New.\n\t(cast_region::make_markup_node): New.\n\t(cast_region::get_relative_concrete_offset): Drop.\n\t(cast_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(cast_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(heap_allocated_region::print_dump_widget_label): Rename to...\n\t(heap_allocated_region::print_region_for_dump_widget_label): ...this.\n\t(heap_allocated_region::accept_node_visitor) New.\n\t(heap_allocated_region::to_json): New.\n\t(heap_allocated_region::make_markup_node): New.\n\t(alloca_region::print_dump_widget_label): Rename to...\n\t(alloca_region::print_region_for_dump_widget_label): ...this.\n\t(alloca_region::accept_node_visitor) New.\n\t(alloca_region::to_json): New.\n\t(alloca_region::make_markup_node): New.\n\t(string_region::print_dump_widget_label): Rename to...\n\t(string_region::print_region_for_dump_widget_label): ...this.\n\t(string_region::accept_node_visitor) New.\n\t(string_region::to_json): New.\n\t(string_region::make_markup_node): New.\n\t(bit_range_region::print_dump_widget_label): Rename to...\n\t(bit_range_region::print_region_for_dump_widget_label): ..this.\n\t(bit_range_region::accept_node_visitor): New.\n\t(bit_range_region::to_json): New.\n\t(bit_range_region::make_markup_node): New.\n\t(bit_range_region::get_byte_size): Delete.\n\t(bit_range_region::maybe_get_byte_size): New.\n\t(bit_range_region::get_bit_size): Delete.\n\t(bit_range_region::get_byte_size_sval): Delete.\n\t(bit_range_region::get_bit_size_sval): Delete.\n\t(bit_range_region::maybe_get_bit_size): New.\n\t(bit_range_region::get_relative_concrete_offset): Delete.\n\t(bit_range_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(bit_range_region::get_relative_symbolic_offset): Delete.\n\t(bit_range_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(var_arg_region::print_dump_widget_label): Rename to...\n\t(var_arg_region::print_region_for_dump_widget_label): ...this.\n\t(var_arg_region::accept_node_visitor): New.\n\t(var_arg_region::to_json): New.\n\t(var_arg_region::make_markup_node): New.\n\t(errno_region::print_dump_widget_label): Rename to...\n\t(errno_region::print_region_for_dump_widget_label): ...this.\n\t(errno_region::accept_node_visitor): New.\n\t(errno_region::to_json): New.\n\t(errno_region::make_markup_node): New.\n\t(private_region::print_dump_widget_label): Rename to...\n\t(private_region::print_region_for_dump_widget_label): ...this.\n\t(private_region::accept_node_visitor): New.\n\t(private_region::to_json): New.\n\t(private_region::make_markup_node): New.\n\t(unknown_region::print_dump_widget_label): Rename to...\n\t(unknown_region::print_region_for_dump_widget_label): ...this.\n\t(unknown_region::accept_node_visitor): New.\n\t(unknown_region::to_json): New.\n\t(unknown_region::make_markup_node): New.\n\t* region.h: Drop include of \"text-art/tree-widget.h\".  Add\n\tincludes of \"analyzer/concrete-ranges.h\",\n\t\"analyzer/symbolic-memory-offsets.h\",\n\t\"analyzer/symbolic-memory-ranges.h\", and\n\t\"analyzer/symbolic-pointers.h\".\n\t(region::symbolic_bit_count): New using decl.\n\t(region::symbolic_byte_count): New using decl.\n\t(region::print_dump_widget_label): New.\n\t(region::print_region_for_dump_widget_label): New.\n\t(region::add_dump_widget_children): New.\n\t(region::get_any_dump_color): New.\n\t(region::to_json): Delete in favor of node::to_json.\n\t(region::make_dump_widget): Delete in favor of\n\tnode::make_dump_widget.\n\t(region::involves_p): Delete in favor of node::involves_p.\n\t(region::get_memory_offset): New.\n\t(region::get_memory_range): New.\n\t(region::get_offset): Delete.\n\t(region::get_next_offset): Delete.\n\t(region::get_byte_size): Delete.\n\t(region::get_pointer): New.\n\t(region::get_bit_size): Replace with...\n\t(region::maybe_get_bit_size): ...this.\n\t(region::maybe_get_byte_size): New.\n\t(region::get_bit_size_sval): Delete.\n\t(region::get_byte_size_sval): New.\n\t(region::get_relative_concrete_offset): Replace with...\n\t(region::maybe_get_bit_offset_relative_to_parent): ...this.\n\t(region::get_relative_symbolic_offset): Delete.\n\t(region::get_relative_concrete_byte_range): Delete.\n\t(region::maybe_get_byte_offset_relative_to_parent): New.\n\t(region::get_subregions_for_binding): Replace with...\n\t(region::get_subregions_for_bit_range): ...this.\n\t(region::empty_p): Add region_model_manager param.\n\t(region::make_json_obj): New.\n\t(region::calc_offset): Drop.\n\t(region::calc_memory_offset): New.\n\t(region::calc_memory_range): New.\n\t(region::calc_pointer): New.\n\t(region::print_dump_widget_label): Drop.\n\t(region::add_dump_widget_children): Drop.\n\t(region::add_dump_widget_children_for_region): Drop.\n\t(region::m_cached_offset): Replace with...\n\t(region::m_cached_memory_offset): ...this,\n\t(region::m_cached_memory_range): ...this,\n\t(region::m_cached_pointer): ...and this.\n\t(frame_region::print_dump_widget_label): Rename to...\n\t(frame_region::print_region_for_dump_widget_label): ...this.\n\t(frame_region::accept_node_visitor): New.\n\t(frame_region::to_json): New.\n\t(frame_region::make_markup_node): New.\n\t(globals_region::print_dump_widget_label): Rename to...\n\t(globals_region::print_region_for_dump_widget_label): ...this.\n\t(globals_region::accept_node_visitor): New.\n\t(globals_region::to_json): New.\n\t(globals_region::make_markup_node): New.\n\t(code_region::print_dump_widget_label): Rename to...\n\t(code_region::print_region_for_dump_widget_label): ...this.\n\t(code_region::accept_node_visitor): New.\n\t(code_region::to_json): New.\n\t(code_region::make_markup_node): New.\n\t(function_region::print_dump_widget_label): Rename to...\n\t(function_region::print_region_for_dump_widget_label): ...this.\n\t(function_region::accept_node_visitor): New.\n\t(function_region::to_json): New.\n\t(function_region::make_markup_node): New.\n\t(label_region::print_dump_widget_label): Rename to...\n\t(label_region::print_region_for_dump_widget_label): ...this.\n\t(label_region::accept_node_visitor): New.\n\t(label_region::to_json): New.\n\t(label_region::make_markup_node): New.\n\t(stack_region::print_dump_widget_label): Rename to...\n\t(stack_region::print_region_for_dump_widget_label): ...this.\n\t(stack_region::accept_node_visitor): New.\n\t(stack_region::to_json): New.\n\t(stack_region::make_markup_node): New.\n\t(heap_region::print_dump_widget_label): Rename to...\n\t(heap_region::print_region_for_dump_widget_label): ...this.\n\t(heap_region::accept_node_visitor): New.\n\t(heap_region::to_json): New.\n\t(heap_region::make_markup_node): New.\n\t(thread_local_region::print_dump_widget_label): Rename to...\n\t(thread_local_region::print_region_for_dump_widget_label): ...this.\n\t(thread_local_region::accept_node_visitor): New.\n\t(thread_local_region::to_json): New.\n\t(thread_local_region::make_markup_node): New.\n\t(root_region::print_dump_widget_label): Rename to...\n\t(root_region::print_region_for_dump_widget_label): ...this.\n\t(root_region::accept_node_visitor): New.\n\t(root_region::to_json): New.\n\t(root_region::make_markup_node): New.\n\t(symbolic_region::print_dump_widget_label): Rename to...\n\t(symbolic_region::print_region_for_dump_widget_label): ...this.\n\t(symbolic_region::accept_node_visitor): New.\n\t(symbolic_region::to_json): New.\n\t(symbolic_region::make_markup_node): New.\n\t(symbolic_region::add_dump_widget_children): Update signature.\n\t(decl_region::decl_region): Replace m_ctor with\n\tm_ctor_bit_contents.\n\t(decl_region::print_dump_widget_label): Rename to...\n\t(decl_region::print_region_for_dump_widget_label): ...this.\n\t(decl_region::accept_node_visitor): New.\n\t(decl_region::to_json): New.\n\t(decl_region::make_markup_node): New.\n\t(decl_region::maybe_get_bit_contents_for_initializer): New.\n\t(decl_region::get_bit_contents_for_constructor): New.\n\t(decl_region::maybe_get_bit_vector_for_initializer): New.\n\t(decl_region::calc_svalue_for_constructor): Drop.\n\t(decl_region::m_ctor_svalue): Replace with...\n\t(decl_region::m_ctor_bit_contents): ...this.\n\t(field_region::print_dump_widget_label): Rename to...\n\t(field_region::print_region_for_dump_widget_label): ...this.\n\t(field_region::accept_node_visitor): New.\n\t(field_region::to_json): New.\n\t(field_region::make_markup_node): New.\n\t(field_region::get_relative_concrete_offset): Drop.\n\t(field_region::get_relative_symbolic_offset): Drop.\n\t(field_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(field_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(element_region::print_dump_widget_label): Rename to...\n\t(element_region::print_region_for_dump_widget_label): ...this.\n\t(element_region::accept_node_visitor): New.\n\t(element_region::to_json): New.\n\t(element_region::make_markup_node): New.\n\t(element_region::get_relative_concrete_offset): Drop.\n\t(element_region::get_relative_symbolic_offset): Drop.\n\t(element_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(element_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(offset_region::print_dump_widget_label): Rename to...\n\t(offset_region::print_region_for_dump_widget_label): ...this.\n\t(offset_region::add_dump_widget_children): Update signature.\n\t(offset_region::accept_node_visitor): New.\n\t(offset_region::to_json): New.\n\t(offset_region::make_markup_node): New.\n\t(offset_region::get_relative_concrete_offset): Drop.\n\t(offset_region::get_relative_symbolic_offset): Drop.\n\t(offset_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(offset_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(sized_region::print_dump_widget_label): Rename to...\n\t(sized_region::print_region_for_dump_widget_label): ...this.\n\t(sized_region::add_dump_widget_children): Update signature.\n\t(sized_region::accept_node_visitor): New.\n\t(sized_region::to_json): New.\n\t(sized_region::make_markup_node): New.\n\t(sized_region::get_byte_size): Drop.\n\t(sized_region::get_bit_size): Drop.\n\t(sized_region::get_byte_size_sval): Drop.\n\t(sized_region::get_bit_size_sval): Drop.\n\t(sized_region::maybe_get_byte_size): New.\n\t(sized_region::maybe_get_bit_size): New.\n\t(cast_region::print_dump_widget_label): Rename to...\n\t(cast_region::print_region_for_dump_widget_label): ...this.\n\t(cast_region::accept_node_visitor): New.\n\t(cast_region::to_json): New.\n\t(cast_region::make_markup_node): New.\n\t(cast_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(cast_region::get_relative_concrete_offset): Drop.\n\t(cast_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(heap_allocated_region::print_dump_widget_label): Rename to...\n\t(heap_allocated_region::print_region_for_dump_widget_label):\n\t...this.\n\t(heap_allocated_region::accept_node_visitor): New.\n\t(heap_allocated_region::to_json): New.\n\t(heap_allocated_region::make_markup_node): New.\n\t(alloca_region::print_dump_widget_label): Rename to...\n\t(alloca_region::print_region_for_dump_widget_label): ...this.\n\t(alloca_region::accept_node_visitor): New.\n\t(alloca_region::to_json): New.\n\t(alloca_region::make_markup_node): New.\n\t(string_region::print_dump_widget_label): Rename to...\n\t(string_region::print_region_for_dump_widget_label): ...this.\n\t(string_region::accept_node_visitor): New.\n\t(string_region::to_json): New.\n\t(string_region::make_markup_node): New.\n\t(bit_range_region::key_t::key_t): Convert from bit_range to\n\tconcrete_bit_range.\n\t(bit_range_region::key_t::hash): Likewise.\n\t(bit_range_region::key_t::m_bits): Convert from bit_range to\n\tconcrete_bit_range.\n\t(bit_range_region::bit_range_region): Likewise.\n\t(bit_range_region::print_dump_widget_label): Rename to...\n\t(bit_range_region::print_region_for_dump_widget_label): ...this.\n\t(bit_range_region::accept_node_visitor): New.\n\t(bit_range_region::to_json): New.\n\t(bit_range_region::make_markup_node): New.\n\t(bit_range_region::get_bits): New.\n\t(bit_range_region::maybe_get_byte_size): New.\n\t(bit_range_region::maybe_get_bit_size): New.\n\t(bit_range_region::maybe_get_bit_offset_relative_to_parent): New.\n\t(bit_range_region::maybe_get_byte_offset_relative_to_parent): New.\n\t(bit_range_region::get_byte_size): Delete.\n\t(bit_range_region::get_bit_size): Delete.\n\t(bit_range_region::get_byte_size_sval): Delete.\n\t(bit_range_region::get_bit_size_sval): Delete.\n\t(bit_range_region::get_relative_concrete_offset): Delete.\n\t(bit_range_region::get_relative_symbolic_offset): Delete.\n\t(bit_range_region::m_bits): Convert from bit_range to\n\tconcrete_bit_range.\n\t(var_arg_region::print_dump_widget_label): Rename to...\n\t(var_arg_region::print_region_for_dump_widget_label): ...this.\n\t(var_arg_region::accept_node_visitor): New.\n\t(var_arg_region::to_json): New.\n\t(var_arg_region::make_markup_node): New.\n\t(errno_region::print_dump_widget_label): Rename to...\n\t(errno_region::print_region_for_dump_widget_label): ...this.\n\t(errno_region::accept_node_visitor): New.\n\t(errno_region::to_json): New.\n\t(errno_region::make_markup_node): New.\n\t(private_region::print_dump_widget_label): Rename to...\n\t(private_region::print_region_for_dump_widget_label): ...this.\n\t(private_region::accept_node_visitor): New.\n\t(private_region::to_json): New.\n\t(private_region::make_markup_node): New.\n\t(unknown_region::print_dump_widget_label): Rename to...\n\t(unknown_region::print_region_for_dump_widget_label): ...this.\n\t(unknown_region::accept_node_visitor): New.\n\t(unknown_region::to_json): New.\n\t(unknown_region::make_markup_node): New.\n\t* setjmp-longjmp.cc: Include \"diagnostics/markup.h\".\n\t(setjmp_svalue::print_dump_widget_label): Rename to...\n\t(setjmp_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(setjmp_svalue::add_dump_widget_children): Update for param\n\tchange.\n\t(setjmp_svalue::accept_node_visitor): New.\n\t(setjmp_svalue::to_json): New.\n\t(setjmp_svalue::make_markup_node): New.\n\t* sm-fd.cc: Port from region_svalue to symbolic::pointer. Use\n\tmark_region_as_unknown rather than trying to create a conjured\n\tvalue.\n\t* sm-file.cc: Port from region_svalue to symbolic::pointer. Use\n\tmark_region_as_conjured rather than trying to create a conjured\n\tvalue.\n\t* sm-malloc.cc (malloc_state_machine::get_default_state): Handle\n\tall zeros.  Port from region_svalue to symbolic::pointer.\n\t(add_state_to_state_graph): Port from region_svalue to\n\tsymbolic::pointer.\n\t* sm-taint.cc (taint_diagnostic::describe_state_change):\n\tBulletproof against null change.m_expr.\n\t(region_model::check_memory_range_for_taint): New.\n\t(region_model::check_region_for_taint): Drop casts in RK_OFFSET\n\tcase.\n\t* state-purge.cc (same_binding_p): Replace store_manager param\n\twith region_model_manager.  Reimplement from binding_key to\n\tsymbolic::memory_range.\n\t(fully_overwrites_p): Update for above change.\n\t* store.cc (dump_svalue_set): Delete.\n\t(uncertainty_t::on_maybe_bound_value): New.\n\t(uncertainty_t::dump_to_pp): Delete.\n\t(uncertainty_t::on_mutable_value_at_unknown_call): New.\n\t(uncertainty_t::unknown_sm_state_p): New.\n\t(uncertainty_t::add_bit_contents): New.\n\t(uncertainty_t::dump): Reimplement using dump widget.\n\t(uncertainty_t::dump_to_logger): New.\n\t(binding_key::make): Delete.\n\t(binding_key::dump): Delete.\n\t(binding_key::get_desc): Delete.\n\t(binding_key::cmp_ptrs): Delete.\n\t(binding_key::cmp): Delete.\n\t(bit_range::from_mask): Delete.\n\t(concrete_binding::dump_to_pp): Delete.\n\t(concrete_binding::overlaps_p): Delete.\n\t(concrete_binding::get_byte_range): Delete.\n\t(concrete_binding::cmp_ptr_ptr): Delete.\n\t(symbolic_binding::dump_to_pp): Delete.\n\t(symbolic_binding::cmp_ptr_ptr): Delete.\n\t(concrete_binding_map::dump_to_pp): Delete.\n\t(concrete_binding_map::dump): Delete.\n\t(concrete_binding_map::add_to_tree_widget): Delete.\n\t(concrete_binding_map::validate): Delete.\n\t(concrete_binding_map::cmp): Delete.\n\t(concrete_binding_map::get_any_exact_binding): Delete.\n\t(concrete_binding_map::calc_complexity): Delete.\n\t(concrete_binding_map::remove_overlapping_binding): Delete.\n\t(concrete_binding_map::remove_overlapping_bindings): Delete.\n\t(concrete_binding_map::get_overlapping_bindings): Delete.\n\t(binding_map::const_iterator::operator\u003d\u003d): Delete.\n\t(binding_map::const_iterator::operator++): Delete.\n\t(binding_map::const_iterator::operator*): Delete.\n\t(binding_map::const_iterator::get_svalue): Delete.\n\t(binding_map::iterator::operator\u003d\u003d): Delete.\n\t(binding_map::iterator::operator++): Delete.\n\t(binding_map::iterator::operator*): Delete.\n\t(binding_map::binding_map): Delete.\n\t(binding_map::binding_map): Delete.\n\t(binding_map::operator\u003d): Delete.\n\t(binding_map::operator\u003d\u003d): Delete.\n\t(binding_map::hash): Delete.\n\t(binding_map::get): Delete.\n\t(binding_map::put): Delete.\n\t(binding_map::overwrite): Delete.\n\t(binding_map::remove): Delete.\n\t(binding_map::begin): Delete.\n\t(binding_map::end): Delete.\n\t(binding_map::begin): Delete.\n\t(binding_map::end): Delete.\n\t(binding_map::elements): Delete.\n\t(binding_map::dump_to_pp): Delete.\n\t(binding_map::dump): Delete.\n\t(binding_map::validate): Delete.\n\t(binding_map::to_json): Delete.\n\t(add_binding_to_tree_widget): Delete.\n\t(binding_map::add_to_tree_widget): Delete.\n\t(get_subregion_within_ctor): Move to initializers.cc.\n\t(get_subregion_within_ctor_for_ctor_pair): Likewise.\n\t(get_svalue_for_ctor_val): Delete, reusing in implementation of\n\tinitializers.cc.\n\t(concrete_binding_map::apply_ctor_to_region): Likewise.\n\t(concrete_binding_map::apply_ctor_val_to_range): Likewise.\n\t(concrete_binding_map::apply_ctor_pair_to_child_region): Likewise.\n\t(binding_map::get_overlapping_bindings): Delete.\n\t(binding_map::remove_overlapping_bindings): Delete.\n\t(binding_cluster::binding_cluster): Reimplement, adding\n\tassertions.\n\t(binding_cluster::to_json): New.\n\t(binding_cluster::make_dump_widget): New.\n\t(binding_cluster::get_bits): New.\n\t(binding_cluster::set_bits): New.\n\t(binding_cluster::mark_as_untracked): New.\n\t(binding_cluster::operator\u003d): Reimplement.\n\t(binding_cluster::operator\u003d\u003d): Reimplement.\n\t(binding_cluster::hash): Reimplement.\n\t(binding_cluster::dump_to_pp): Delete.\n\t(binding_cluster::dump): Reimplement.\n\t(binding_cluster::validate): Convert to nop-op\n\t(binding_cluster::bind): Delete.\n\t(binding_cluster::bind_key): Delete.\n\t(binding_cluster::bind_compound_sval): Delete.\n\t(binding_cluster::clobber_region): Delete.\n\t(binding_cluster::purge_region): Delete.\n\t(binding_cluster::fill_region): Delete.\n\t(binding_cluster::zero_fill_region): Delete.\n\t(binding_cluster::mark_region_as_unknown): Delete.\n\t(binding_cluster::purge_state_involving): Delete.\n\t(binding_cluster::get_binding): Delete.\n\t(binding_cluster::get_binding_recursive): Delete.\n\t(binding_cluster::get_any_binding): Delete.\n\t(binding_cluster::maybe_get_compound_binding): Delete.\n\t(binding_cluster::mark_as_untracked): New.\n\t(binding_cluster::remove_overlapping_bindings): Delete.\n\t(binding_cluster::purge_state_involving): New.\n\t(binding_cluster::can_merge_p): Reimplement.\n\t(class possibly_overwritten_values_visitor): New.\n\t(binding_cluster::make_unknown_relative_to): Reimplement.\n\t(binding_cluster::for_each_value): New.\n\t(binding_cluster::on_unknown_fncall): Drop store_manager.\n\tDelegate to...\n\t(binding_cluster::mark_region_as_conjured): ...this new function.\n\t(binding_cluster::on_unknown_fncall): Likewise.\n\t(binding_cluster::on_asm): Reimplement.\n\t(binding_cluster::escaped_p): Treat symbolic regions arising from\n\tdereferencing a conjured pointer as having escaped.\n\t(binding_cluster::redundant_p): Add store and baseline_state\n\tparams, and use them to compare against the implicit contents.\n\t(append_pathvar_with_type): Make non-static.  Handle type being\n\tnull.\n\t(binding_cluster::get_representative_path_vars): Reimplement,\n\tdelegating to m_contents.\n\t(binding_cluster::get_any_value): Delete.\n\t(binding_cluster::maybe_get_simple_value): Delete.\n\t(binding_cluster::poison_any_pointers_to_descendents): New.\n\t(binding_cluster::bits_live_p): New.\n\t(store_manager::get_logger): Delete.\n\t(store_manager::get_concrete_binding): Delete.\n\t(store_manager::get_symbolic_binding): Delete.\n\t(store::store): Initialize m_node_mgr.\n\t(store::dump_to_pp): Delete.\n\t(store::dump): Reimplement using dump widget.\n\t(get_string_for_baseline_state): New.\n\t(store::make_dump_widget): Update for new signature.\n\t(store::get_bits): New.\n\t(store::get_any_binding): Delete.\n\t(store::get_bit_contents): New.\n\t(store::set_bits): New.\n\t(store::set_value): Delete.\n\t(store::set_bit_contents_raw): New.\n\t(store::eval_alias_1): Use derived_from_initial_value_p rather\n\tthan comparing against SK_INITIAL.\n\t(store::get_baseline_contents): New.\n\t(store::get_implicit_contents): New.\n\t(store::on_maybe_live_values): Drop store_manager.  Add\n\tbaseline_state.\n\t(store::bits_live_p): New.\n\t(store::fill_region): Delete.\n\t(store::zero_fill_region): Delete.\n\t(store::clobber_region): Reimplement.\n\t(store::purge_region): Reimplement.\n\t(store::mark_region_as_unknown): Reimplement.\n\t(store::purge_state_involving): Generalize from svalue\n\tto symbolic::node.\n\t(store::get_or_create_cluster): Drop store_manager param.\n\tAdd baseline_state param and use it to get the implicit contents\n\tof the cluster and pass it to the binding_cluster ctor.\n\t(store::can_merge_p): Drop store_manager param.  Update for\n\tchanges to get_or_create_cluster and binding_cluster::can_merge_p.\n\t(store::mark_as_escaped): Drop store_manager param.  Add\n\tbaseline_state param and pass it to get_or_create_cluster.\n\t(store::on_unknown_fncall): Drop store_manager param.\n\t(store::mark_region_as_conjured): New.\n\t(store::get_representative_path_vars): Use value_set rather\n\tthan svalue_set.\n\t(store::remove_overlapping_bindings): Delete.\n\t(struct region_finder): Delete.\n\t(store::canonicalize): Convert to no-op.\n\t(needs_loop_replay_fixup_p): Generalize from svalue to\n\tsymbolic::node.\n\t(store::loop_replay_fixup): Add baseline_state.  Port to new\n\timplementation.\n\t(store::replay_call_summary): Drop store_manager.  Convert return\n\ttype to bool and support failure.\n\t(store::replay_call_summary_cluster): Likewise.  Port to new\n\timplementation.\n\t(store::replay_call_summary_bit_contents): New.\n\t(selftest::assert_bit_range_from_mask_eq): Delete.\n\t(ASSERT_BIT_RANGE_FROM_MASK_EQ): Delete.\n\t(selftest::assert_no_bit_range_from_mask_eq): Delete.\n\t(ASSERT_NO_BIT_RANGE_FROM_MASK): Delete.\n\t(selftest::test_bit_range_from_mask): Delete.\n\t(selftest::assert_overlap): Delete.\n\t(selftest::assert_disjoint): Delete.\n\t(ASSERT_OVERLAP): Delete.\n\t(ASSERT_DISJOINT): Delete.\n\t(selftest::test_binding_key_overlap): Delete.\n\t(selftest::test_binding_map_ops): Delete.\n\t(selftest::analyzer_store_cc_tests): Drop calls to deleted tests.\n\t* store.h: Add includes of \"analyzer/concrete-ranges.h\",\n\t\"analyzer/symbolic-ranges.h\", \"analyzer/symbolic-bit-contents.h\",\n\tand \"analyzer/symbolic-memory-ranges.h\".  Rewrite the introductory\n\tcomment.\n\t(class uncertainty_t): Convert from svalue to symbolic::value_node\n\tthroughout.\n\t(class binding_key): Delete.\n\t(bit_range::from_mask): Delete.\n\t(convert_from_bit_range): New.\n\t(convert_to_bit_range): New.\n\t(class concrete_binding): Delete.\n\t(is_a_helper \u003cconst ana::concrete_binding *\u003e::test): Delete.\n\t(struct default_hash_traits\u003cana::concrete_binding\u003e): Delete.\n\t(class symbolic_binding): Delete.\n\t(struct default_hash_traits\u003cana::symbolic_binding\u003e): Delete.\n\t(class concrete_binding_map): Delete.\n\t(class binding_map): Delete.\n\t(class binding_cluster): Flesh out leading comment.\n\t(binding_cluster::const_iterator_t): Delete.\n\t(binding_cluster::iterator_t): Delete.\n\t(binding_cluster::binding_cluster): Drop store_manager, add\n\tnode_manager and bit_contents.\n\t(binding_cluster::dump_to_pp): Delete.\n\t(binding_cluster::dump): Drop param.\n\t(binding_cluster::make_dump_widget): Update signature.\n\t(binding_cluster::bind): Delete.\n\t(binding_cluster::clobber_region): Delete.\n\t(binding_cluster::purge_region): Delete.\n\t(binding_cluster::fill_region): Delete.\n\t(binding_cluster::zero_fill_region): Delete.\n\t(binding_cluster::mark_region_as_unknown): Delete.\n\t(binding_cluster::purge_state_involving): Update signature.\n\t(binding_cluster::get_binding): Delete.\n\t(binding_cluster::get_binding_recursive): Delete.\n\t(binding_cluster::get_any_binding): Delete.\n\t(binding_cluster::maybe_get_compound_binding): Delete.\n\t(binding_cluster::remove_overlapping_bindings): Delete.\n\t(binding_cluster::for_each_value): Update signature.\n\t(binding_cluster::get_bits): New.\n\t(binding_cluster::set_bits): New.\n\t(binding_cluster::get_bit_contents): New.\n\t(binding_cluster::set_bit_contents): New.\n\t(binding_cluster::mark_as_untracked): New.\n\t(binding_cluster::can_merge_p): Drop store_manager.\n\t(binding_cluster::make_unknown_relative_to): Likewise. Add\n\tbaseline_state.\n\t(binding_cluster::on_unknown_fncall): Drop store_manager.\n\t(binding_cluster::mark_region_as_conjured): New.\n\t(binding_cluster::on_asm): Drop store_manager.\n\t(binding_cluster::redundant_p): Add store and baseline_state\n\tparams.\n\t(binding_cluster::empty_p): Delete.\n\t(binding_cluster::get_representative_path_vars): Update from\n\tsvalue_set to value_set.\n\t(binding_cluster::maybe_get_simple_value): Delete.\n\t(binding_cluster::begin): Delete.\n\t(binding_cluster::end): Delete.\n\t(binding_cluster::poison_any_pointers_to_descendents): New.\n\t(binding_cluster::get_map): Delete.\n\t(binding_cluster::bits_live_p): New.\n\t(binding_cluster::get_any_value): Delete.\n\t(binding_cluster::bind_compound_sval): Delete.\n\t(binding_cluster::bind_key): Delete.\n\t(binding_cluster::m_node_mgr): New field.\n\t(binding_cluster::m_map): Replace with..\n\t(binding_cluster::m_contents): ...this.\n\t(store::store): Add node_mgr param.\n\t(store::dump_to_pp): Delete.\n\t(store::dump): Drop param.\n\t(store::make_dump_widget): Update signature.\n\t(store::get_any_binding): Delete.\n\t(store::get_bits): New.\n\t(store::get_bit_contents): New.\n\t(store::set_value): Delete.\n\t(store::clobber_region): Drop store_manager.  Add baseline_state\n\tand region_model_manager.\n\t(store::purge_region): Drop store_manager.\n\t(store::fill_region): Drop.\n\t(store::zero_fill_region): Drop.\n\t(store::void mark_region_as_unknown): Drop store_manager.  Add\n\tbaseline_state.  Drop maybe_live_values.\n\t(store::set_bits): New.\n\t(store::set_bit_contents_raw): New.\n\t(store::purge_state_involving): Generalize to symbolic::node.\n\t(store::get_or_create_cluster): Drop store manager.  Add\n\tbaseline_state.\n\t(store::can_merge_p): Drop store_manager.\n\t(store::mark_as_escaped): Drop store_manager.  Add baseline_state.\n\t(store::on_unknown_fncall): Drop store_manager.\n\t(store::mark_region_as_conjured): New.\n\t(store::get_representative_path_vars): Use value_set.\n\t(store::canonicalize): Drop store_manager.\n\t(store::loop_replay_fixup): Add baseline_state.\n\t(store::on_maybe_live_values): Drop store_manager.  Add\n\tbaseline_state.\n\t(store::replay_call_summary): Convert return type to bool.\n\t(store::replay_call_summary_cluster): Likewise.\n\t(store::replay_call_summary_bit_contents): New.\n\t(store::bits_live_p): New.\n\t(store::remove_overlapping_bindings): Delete.\n\t(store::get_implicit_contents): New.\n\t(store::get_baseline_contents): New.\n\t(store::m_node_mgr): New field.\n\t(store::m_called_unknown_fn): Update comment.\n\t(class store_manager): Delete.\n\t* string-scan.cc: New file.\n\t* string-scan.h: New file.\n\t* svalue.cc: Add includes of \"diagnostics/markup.h\" and\n\t\"analyzer/liveness-context.h\".\n\t(svalue::print_dump_widget_label): New.\n\t(svalue::add_dump_widget_children): New.\n\t(svalue::dump): Reimplement.\n\t(svalue::to_json): Delete.\n\t(svalue::make_json_obj): New.\n\t(svalue::maybe_print_for_user): Handle SK_BIT_VECTOR.\n\t(svalue::make_dump_widget): Delete in favor of\n\tnode::make_dump_widget.\n\t(svalue::for_each_svalue): New.\n\t(svalue::has_concrete_size_p): New.\n\t(svalue::maybe_get_region): Replace with...\n\t(svalue::maybe_get_symbolic_pointer): ...this.\n\t(svalue::can_merge_p): Add early accept for equal svalues.\n\tPort from region_svalue to symbolic::pointer.\n\t(svalue::live_p): Drop.\n\t(svalue::implicitly_live_p): Drop.\n\t(cmp_csts_and_types): Make non-static.\n\t(svalue::cmp_ptr): Reimplement in terms of ID comparison.\n\t(class involvement_visitor): Reimplement in symbolic-nodes.cc.\n\t(svalue::involves_p): Delete in favor of node::involves_p.\n\t(svalue::extract_bit_range): Delete.\n\t(svalue::maybe_fold_bits_within): Delete.\n\t(svalue::maybe_get_deref_base_region): Port SK_REGION case\n\tto SK_POINTER.\n\t(svalue::maybe_get_type_from_typeinfo): Port to symbolic::pointer.\n\t(svalue::conjured_p): New.\n\t(svalue::derived_from_initial_value_p): New.\n\t(region_svalue::key_t::operator\u003c): Replace with...\n\t(pointer_svalue::key_t::operator\u003c): ...this.\n\t(pointer_svalue::key_t::get_complexity): New.\n\t(region_svalue::dump_to_pp): Replace with...\n\t(pointer_svalue::dump_to_pp): ...this.\n\t(region_svalue::print_dump_widget_label): Replace with...\n\t(pointer_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(region_svalue::add_dump_widget_children): Replace with...\n\t(pointer_svalue::add_dump_widget_children): ...this.\n\t(region_svalue::accept): Replace with...\n\t(pointer_svalue::accept): ...this.\n\t(pointer_svalue::accept_node_visitor): New.\n\t(pointer_svalue::to_json): New.\n\t(region_svalue::implicitly_live_p): Replace with...\n\t(pointer_svalue::implicitly_live_p): ...this.\n\t(pointer_svalue::make_markup_node): New.\n\t(region_svalue::eval_condition): Delete in favor of\n\tsymbolic::pointer::eval_condition.\n\t(constant_svalue::print_dump_widget_label): Rename to...\n\t(constant_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(constant_svalue::add_dump_widget_children): Delete.\n\t(constant_svalue::accept_node_visitor): New.\n\t(constant_svalue::to_json): New.\n\t(constant_svalue::make_markup_node): New.\n\t(constant_svalue::implicitly_live_p): Update signature.\n\t(constant_svalue::maybe_fold_bits_within): Delete.\n\t(unknown_svalue::print_dump_widget_label): Convert to...\n\t(unknown_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(unknown_svalue::add_dump_widget_children): Delete.\n\t(unknown_svalue::accept_node_visitor): New.\n\t(unknown_svalue::make_markup_node): New.\n\t(unknown_svalue::maybe_fold_bits_within): Delete.\n\t(poisoned_svalue::print_dump_widget_label): Rename to...\n\t(poisoned_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(poisoned_svalue::add_dump_widget_children): Update signature.\n\t(poisoned_svalue::accept_node_visitor): New.\n\t(poisoned_svalue::to_json): New.\n\t(poisoned_svalue::make_markup_node): New.\n\t(poisoned_svalue::maybe_fold_bits_within): Delete.\n\t(initial_svalue::initial_svalue): Move here from svalue.h.\n\tAdd assertions that m_reg is non-null and a base region.\n\t(initial_svalue::print_dump_widget_label): Convert to...\n\t(initial_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(initial_svalue::add_dump_widget_children): Update signature.\n\tChain up to base class.\n\t(initial_svalue::accept_node_visitor): New.\n\t(initial_svalue::to_json): New.\n\t(initial_svalue::implicitly_live_p): Update for signature change.\n\t(unaryop_svalue::print_dump_widget_label): Convert to...\n\t(unaryop_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(unaryop_svalue::add_dump_widget_children): Update signature.\n\tChain up to base class.\n\t(unaryop_svalue::accept_node_visitor): New.\n\t(unaryop_svalue::to_json): New.\n\t(unaryop_svalue::make_markup_node): New.\n\t(unaryop_svalue::implicitly_live_p): Update for signature change.\n\t(unaryop_svalue::maybe_fold_bits_within): Delete.\n\t(binop_svalue::print_dump_widget_label): Convert to...\n\t(binop_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(binop_svalue::add_dump_widget_children): Update signature.\n\tChain up to base class.\n\t(binop_svalue::accept_node_visitor): New.\n\t(binop_svalue::to_json): New.\n\t(binop_svalue::make_markup_node): New.\n\t(binop_svalue::implicitly_live_p): Update for signature change.\n\t(sub_svalue::key_t::operator\u003c): Delete.\n\t(sub_svalue::sub_svalue): Delete.\n\t(sub_svalue::dump_to_pp): Delete.\n\t(sub_svalue::print_dump_widget_label): Delete.\n\t(sub_svalue::add_dump_widget_children): Delete.\n\t(sub_svalue::accept): Delete.\n\t(sub_svalue::implicitly_live_p): Delete.\n\t(repeated_svalue::key_t::operator\u003c): Delete.\n\t(repeated_svalue::repeated_svalue): Delete.\n\t(repeated_svalue::dump_to_pp): Delete.\n\t(repeated_svalue::print_dump_widget_label): Delete.\n\t(repeated_svalue::add_dump_widget_children): Delete.\n\t(repeated_svalue::accept): Delete.\n\t(repeated_svalue::all_zeroes_p): Delete.\n\t(repeated_svalue::maybe_fold_bits_within): Delete.\n\t(bits_within_svalue::key_t::operator\u003c): Delete.\n\t(bits_within_svalue::bits_within_svalue): Delete.\n\t(bits_within_svalue::dump_to_pp): Delete.\n\t(bits_within_svalue::print_dump_widget_label): Delete.\n\t(bits_within_svalue::add_dump_widget_children): Delete.\n\t(bits_within_svalue::maybe_fold_bits_within): Delete.\n\t(bits_within_svalue::accept): Delete.\n\t(bits_within_svalue::implicitly_live_p): Delete.\n\t(svalue_from_bit_vector::key_t::operator\u003c): New.\n\t(svalue_from_bit_vector::svalue_from_bit_vector): New.\n\t(svalue_from_bit_vector::dump_to_pp): New.\n\t(svalue_from_bit_vector::print_svalue_for_dump_widget_label): New.\n\t(svalue_from_bit_vector::add_dump_widget_children): New.\n\t(svalue_from_bit_vector::accept_node_visitor): New.\n\t(svalue_from_bit_vector::to_json): New.\n\t(svalue_from_bit_vector::make_markup_node): New.\n\t(svalue_from_bit_vector::accept): New.\n\t(svalue_from_bit_vector::implicitly_live_p): New.\n\t(svalue_from_bit_vector::all_zeroes_p): New.\n\t(svalue_from_bit_vector::maybe_get_value_range_1): New.\n\t(svalue_from_bit_vector::conjured_p): New.\n\t(widening_svalue::print_dump_widget_label): Rename to...\n\t(widening_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(widening_svalue::add_dump_widget_children): Update for signature\n\tchange.  Chain up to svalue implementation.\n\t(widening_svalue::accept_node_visitor): New.\n\t(widening_svalue::to_json): New.\n\t(widening_svalue::make_markup_node): New.\n\t(placeholder_svalue::print_dump_widget_label): Rename to...\n\t(placeholder_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(placeholder_svalue::add_dump_widget_children): Delete.\n\t(placeholder_svalue::accept_node_visitor): New.\n\t(placeholder_svalue::to_json): New.\n\t(placeholder_svalue::make_markup_node): New.\n\t(unmergeable_svalue::print_dump_widget_label): Rename to...\n\t(unmergeable_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(unmergeable_svalue::add_dump_widget_children): Update for\n\tsignature change  Chain up to svalue implementation.\n\t(unmergeable_svalue::implicitly_live_p): Update for signature\n\tchange.\n\t(unmergeable_svalue::accept_node_visitor): New.\n\t(unmergeable_svalue::to_json): New.\n\t(unmergeable_svalue::make_markup_node): New.\n\t(compound_svalue::key_t::operator\u003c): Delete.\n\t(compound_svalue::compound_svalue): Delete.\n\t(compound_svalue::dump_to_pp): Delete.\n\t(compound_svalue::print_dump_widget_label): Delete.\n\t(compound_svalue::add_dump_widget_children): Delete.\n\t(compound_svalue::accept): Delete.\n\t(compound_svalue::maybe_fold_bits_within): Delete.\n\t(conjured_svalue::key_t::operator\u003c): Delete.\n\t(conjured_svalue::dump_to_pp): Delete.\n\t(conjured_svalue::print_dump_widget_label): Delete.\n\t(conjured_svalue::add_dump_widget_children): Delete.\n\t(conjured_svalue::accept): Delete.\n\t(conjured_svalue::lhs_value_p): Delete.\n\t(asm_output_svalue::print_dump_widget_label): Rename to...\n\t(asm_output_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(asm_output_svalue::add_dump_widget_children): Update for\n\tsignature change.  Chain up to svalue implementation.\n\t(asm_output_svalue::accept_node_visitor): New.\n\t(asm_output_svalue::to_json): New.\n\t(make_markup_node): New.\n\t(const_fn_result_svalue::dump_to_pp): Likewise.\n\t(const_fn_result_svalue::print_dump_widget_label): Rename to...\n\t(const_fn_result_svalue::print_svalue_for_dump_widget_label):\n\t...this.\n\t(const_fn_result_svalue::add_dump_widget_children): Update for\n\tsignature change.  Chain up to svalue implementation.\n\t(const_fn_result_svalue::accept_node_visitor): New.\n\t(const_fn_result_svalue::to_json): New.\n\t(const_fn_result_svalue::make_markup_node): New.\n\t* svalue.h: Drop include of \"text-art/widget.h\".  Add include of\n\t\"analyzer/symbolic-pointers.h.  Drop\n\t\"using text_art::dump_widget_info;\"\n\t(enum svalue_kind): Replace SK_REGION with SK_POINTER.\n\tDrop SK_SUB, SK_REPEATED, SK_BITS_WITHIN, SK_COMPOUND, and\n\tSK_CONJURED.  Add SK_BIT_VECTOR.\n\t(class svalue): Update leading comment to show changes to subclass\n\thierarchy.  Inherit from symbolic::value_node rather than directly\n\tfrom symbolic::node.\n\t(svalue::dyn_cast_svalue): New.\n\t(svalue::to_json): Delete in favor of node::to_json.\n\t(svalue::make_dump_widget): Delete in favor of\n\tnode::make_dump_widget.\n\t(svalue::print_dump_widget_label): New.\n\t(svalue::print_svalue_for_dump_widget_label): New.\n\t(svalue::add_dump_widget_children): New.\n\t(svalue::get_any_dump_color): New vfunc implementation.\n\t(svalue::dyn_cast_region_svalue): Delete in favor of...\n\t(svalue::dyn_cast_pointer_svalue): ...this.\n\t(svalue::dyn_cast_sub_svalue): Delete vfunc.\n\t(svalue::dyn_cast_repeated_svalue): Delete vfunc.\n\t(svalue::dyn_cast_bits_within_svalue): Delete vfunc.\n\t(svalue::dyn_cast_compound_svalue): Delete vfunc.\n\t(svalue::dyn_cast_conjured_svalue): Delete vfunc.\n\t(svalue::dyn_cast_svalue_from_bit_vector): New vfunc.\n\t(svalue::for_each_svalue): New decl.\n\t(svalue::has_concrete_size_p): New decl.\n\t(svalue::maybe_get_region): Replace with...\n\t(svalue::maybe_get_symbolic_pointer): ...this.\n\t(svalue::live_p): Drop.\n\t(svalue::implicitly_live_p): New.\n\t(svalue::involves_p): Drop in favor of node::involves_p.\n\t(svalue::extract_bit_range): Drop.\n\t(svalue::maybe_fold_bits_within): Drop.\n\t(svalue::conjured_p): New vfunc decl.\n\t(svalue::derived_from_initial_value_p): New decl.\n\t(svalue::svalue): Update for inheriting from value_node.\n\t(svalue::make_json_obj): New decl.\n\t(svalue::print_dump_widget_label): Drop in favor of\n\tnode::print_dump_widget_label.\n\t(svalue::add_dump_widget_children): Drop in favor of\n\tnode::add_dump_widget_children.\n\t(class region_svalue): Replace with...\n\t(class pointer_svalue): ...this.\n\t(is_a_helper \u003cconst region_svalue *\u003e::test): Replace with...\n\t(is_a_helper \u003cconst pointer_svalue *\u003e::test): ...this.\n\t(constant_svalue::key_t): Fix copy\u0026paste error in leading comment.\n\t(constant_svalue::print_dump_widget_label): Rename to...\n\t(constant_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(constant_svalue::add_dump_widget_children): Update signature.\n\t(constant_svalue::accept_node_visitor): New decl.\n\t(constant_svalue::to_json): New decl.\n\t(constant_svalue::make_markup_node): New decl.\n\t(constant_svalue::implicitly_live_p): Update signature.\n\t(constant_svalue::maybe_fold_bits_within): Delete.\n\t(unknown_svalue::print_dump_widget_label): Rename to...\n\t(unknown_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(unknown_svalue::add_dump_widget_children): Update signature.\n\t(unknown_svalue::accept_node_visitor): New decl.\n\t(unknown_svalue::to_json): New decl.\n\t(unknown_svalue::make_markup_node): New decl.\n\t(unknown_svalue::maybe_fold_bits_within): Delete.\n\t(enum class poison_kind): Move to common.h.\n\t(poison_kind_to_str): Likewise.\n\t(poisoned_svalue::print_dump_widget_label): Rename to...\n\t(poisoned_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(poisoned_svalue::add_dump_widget_children): Update signature.\n\t(poisoned_svalue::accept_node_visitor): New decl.\n\t(poisoned_svalue::to_json): New decl.\n\t(poisoned_svalue::make_markup_node): New decl.\n\t(poisoned_svalue::maybe_fold_bits_within): Delete.\n\t(setjmp_svalue::print_dump_widget_label): Rename to...\n\t(setjmp_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(setjmp_svalue::add_dump_widget_children): Update signature.\n\t(setjmp_svalue::accept_node_visitor): New decl.\n\t(setjmp_svalue::to_json): New decl.\n\t(setjmp_svalue::make_markup_node): New decl.\n\t(class initial_svalue): Flesh out leading comment.\n\t(initial_svalue::initial_svalue): Move ctor implementation to\n\tsvalue.cc.\n\t(initial_svalue::print_dump_widget_label): Rename to...\n\t(initial_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(initial_svalue::add_dump_widget_children): Update signature.\n\t(initial_svalue::accept_node_visitor): New decl.\n\t(initial_svalue::to_json): New decl.\n\t(initial_svalue::make_markup_node): New decl.\n\t(initial_svalue::implicitly_live_p): Update signature.\n\t(class unaryop_svalue): Flesh out leading comment.\n\t(unaryop_svalue::print_dump_widget_label): Rename to...\n\t(unaryop_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(unaryop_svalue::add_dump_widget_children): Update signature.\n\t(unaryop_svalue::accept_node_visitor): New decl.\n\t(unaryop_svalue::to_json): New decl.\n\t(unaryop_svalue::make_markup_node): New decl.\n\t(unaryop_svalue::implicitly_live_p): Update signature.\n\t(unaryop_svalue::maybe_fold_bits_within): Delete.\n\t(class binop_svalue): Flesh out leading comment.\n\t(binop_svalue::print_dump_widget_label): Rename to...\n\t(binop_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(binop_svalue::add_dump_widget_children): Update signature.\n\t(binop_svalue::accept_node_visitor): New decl.\n\t(binop_svalue::to_json): New decl.\n\t(binop_svalue::make_markup_node): New decl.\n\t(binop_svalue::implicitly_live_p): Update signature.\n\t(class sub_svalue): Delete.\n\t(is_a_helper \u003cconst sub_svalue *\u003e::test): Delete.\n\t(class repeated_svalue): Delete.\n\t(is_a_helper \u003cconst repeated_svalue *\u003e::test): Delete.\n\t(class bits_within_svalue): Delete.\n\t(is_a_helper \u003cconst bits_within_svalue *\u003e::test): Delete.\n\t(class svalue_from_bit_vector): New.\n\t(is_a_helper \u003cconst svalue_from_bit_vector *\u003e::test): New.\n\t(class unmergeable_svalue): Flesh out leading comment.\n\t(unmergeable_svalue::print_dump_widget_label): Rename to...\n\t(unmergeable_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(unmergeable_svalue::add_dump_widget_children): Update signature.\n\t(unmergeable_svalue::accept_node_visitor): New decl.\n\t(unmergeable_svalue::to_json): New decl.\n\t(unmergeable_svalue::make_markup_node): New decl.\n\t(unmergeable_svalue::implicitly_live_p): Update signature.\n\t(placeholder_svalue::print_dump_widget_label): Rename to...\n\t(placeholder_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(placeholder_svalue::add_dump_widget_children): Update signature.\n\t(placeholder_svalue::accept_node_visitor): New decl.\n\t(placeholder_svalue::to_json): New decl.\n\t(placeholder_svalue::make_markup_node): New decl.\n\t(class widening_svalue): Flesh out leading comment.\n\t(widening_svalue::print_dump_widget_label): Rename to...\n\t(widening_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(widening_svalue::add_dump_widget_children): Update signature.\n\t(widening_svalue::accept_node_visitor): New decl.\n\t(widening_svalue::to_json): New decl.\n\t(widening_svalue::make_markup_node): New decl.\n\t(class compound_svalue): Delete.\n\t(is_a_helper \u003cconst compound_svalue *\u003e::test): Delete.\n\t(class conjured_purge): Move to symbolic-nodes.h.\n\t(class conjured_svalue): Delete.\n\t(is_a_helper \u003cconst conjured_svalue *\u003e::test): Delete.\n\t(class asm_output_svalue): Flesh out leading comment.\n\t(asm_output_svalue::print_dump_widget_label): Rename to...\n\t(asm_output_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(asm_output_svalue::add_dump_widget_children): Update signature.\n\t(asm_output_svalue::accept_node_visitor): New decl.\n\t(asm_output_svalue::to_json): New decl.\n\t(asm_output_svalue::make_markup_node): New decl.\n\t(const_fn_result_svalue::print_dump_widget_label): Rename to...\n\t(const_fn_result_svalue::print_svalue_for_dump_widget_label): ...this.\n\t(const_fn_result_svalue::add_dump_widget_children): Update signature.\n\t(const_fn_result_svalue::accept_node_visitor): New decl.\n\t(const_fn_result_svalue::to_json): New decl.\n\t(const_fn_result_svalue::make_markup_node): New decl.\n\t* symbolic-bit-contents.cc: New file.\n\t* symbolic-bit-contents.h: New file.\n\t* symbolic-bit-vectors.cc: New file.\n\t* symbolic-bit-vectors.h: New file.\n\t* symbolic-memory-offsets.h: New file.\n\t* symbolic-memory-ranges.cc: New file.\n\t* symbolic-memory-ranges.h: New file.\n\t* symbolic-nodes.cc: Include \"selftest.h\", \"diagnostics/markup.h\",\n\t\"analyzer/symbolic-scalars.h\", \"analyzer/symbolic-bit-vectors.h\",\n\tand \"analyzer/analyzer-selftests.h\".\n\t(symbolic::node::cmp_ids): Cast to int rarther than long.\n\t(symbolic::node::cmp_ptr_ptr): New.\n\t(symbolic::node::dump_to_pp): New.\n\t(symbolic::node::dump): New.\n\t(symbolic::node::dump_to_logger): New.\n\t(symbolic::node::make_dump_widget): New.\n\t(symbolic::node::make_json_obj): New.\n\t(symbolic::node::start_any_dump_color): New.\n\t(symbolic::node::end_any_dump_color): New.\n\t(symbolic::node::get_text_art_tree_style): New.\n\t(symbolic::node::involves_p): New.\n\t(symbolic::value_node::implicitly_live_p): New.\n\t(symbolic::pp_element_for_node::add_to_phase_2): New.\n\t(symbolic::node_set\u003cNodeClass\u003e::contains): New.\n\t(symbolic::node_set\u003cNodeClass\u003e::make_dump_widget): New.\n\t(symbolic::node_set\u003cNodeClass\u003e::dump_to_pp): New.\n\t(symbolic::node_set\u003cNodeClass\u003e::dump): New.\n\t(symbolic::node_manager::node_manager): Create m_scalar_managers,\n\tm_bit_contents_manager, and m_bit_vector_manager.\n\t(symbolic::node_manager::log_stats): Add comment.\n\t(symbolic::node_visitor::visit_bit_contents): New.\n\t(symbolic::node_visitor::visit_bit_vector): New.\n\t(symbolic::node_visitor::visit_region): New.\n\t(symbolic::node_visitor::visit_scalar_unitless): New.\n\t(symbolic::node_visitor::visit_scalar_bit): New.\n\t(symbolic::node_visitor::visit_scalar_byte): New.\n\t(symbolic::node_visitor::visit_svalue): New.\n\t(symbolic::value_node_visitor::visit_bit_vector): New.\n\t(symbolic::value_node_visitor::visit_svalue): New.\n\t(selftest::assert_symbolic_node_dump_eq): New.\n\t(selftest::assert_same_symbolic_node): New.\n\t(selftest::assert_different_symbolic_node): New.\n\t(selftest::assert_symbolic_node_markup_text_eq): New.\n\t(selftest::test_node_visitor): New.\n\t(selftest::analyzer_symbolic_nodes_cc_tests): New.\n\t* symbolic-nodes.h: Include \"pretty-print-markup.h\",\n\t\"analyzer/analyzer-logging.h\", \"analyzer/units.h\",\n\t\"analyzer/integer-with-unit.h\", \"text-art/tree-widget.h\", and\n\t\"text-art/dump.h\".\n\t(node_manager::get_bit_contents_manager): New accessor.\n\t(node_manager::get_bit_vector_manager): New accessor.\n\t(node_manager::get_scalars): New accessor.\n\t(node_manager::m_scalar_managers): New field.\n\t(node_manager::m_bit_contents_manager): New field.\n\t(node_manager::m_bit_vector_manager): New field.\n\t(struct markup_context): New.\n\t(class node): Expand leading comment.  Delete copy/move\n\tconstructors/assignment operators.\n\t(node::cmp): New.\n\t(node::cmp_ptr_ptr): New decl.\n\t(node::dump_to_pp): New decl.\n\t(node::dump_to_logger): New decl.\n\t(node::dump): New decl.\n\t(node::make_dump_widget): New decl.\n\t(node::get_any_dump_color): New vfunc decl.\n\t(node::accept_node_visitor): New vfunc decl.\n\t(node::to_json): New vfunc decl.\n\t(node::make_markup_node): New vfunc decl.\n\t(node::involves_p): New decl.\n\t(node::start_any_dump_color): New decl.\n\t(node::end_any_dump_color): New decl.\n\t(node::get_text_art_tree_style): New decl.\n\t(node::make_json_obj): New decl.\n\t(node::print_dump_widget_label): New decl.\n\t(node::add_dump_widget_children): New decl.\n\t(struct CompareNodeIds): New.\n\t(class pp_element_for_node): New.\n\t(class node_set): New.\n\t(node_set\u003cNodeClass\u003e::union_): New.\n\t(node_set\u003cNodeClass\u003e::operator\u003c): New.\n\t(struct node_dump_state): New.\n\t(dump_node_tree_to_pp): New.\n\t(dump_node_tree_to_file): New.\n\t(dump_node_tree_to_stderr): New.\n\t(dump_node_tree_to_logger): New.\n\t(value_set): New.\n\t(class value_node): New.\n\t(class node_visitor): New.\n\t(class value_node_visitor): New.\n\t(struct baseline_key): New.\n\t(class conjured_purge): New.\n\t(selftest::assert_symbolic_node_dump_eq): New decl.\n\t(ASSERT_SYMBOLIC_NODE_DUMP_EQ): New.\n\t(selftest::assert_same_symbolic_node): New.\n\t(ASSERT_SAME_SYMBOLIC_NODE): New.\n\t(ASSERT_SAME_SYMBOLIC_NODE_AT): New.\n\t(selftest::assert_different_symbolic_node): New.\n\t(ASSERT_DIFFERENT_SYMBOLIC_NODE): New.\n\t(selftest::assert_symbolic_node_markup_text_eq): New.\n\t(ASSERT_SYMBOLIC_NODE_MARKUP_TEXT_EQ): New.\n\t* symbolic-pointers.cc: New file.\n\t* symbolic-pointers.h: New file.\n\t* symbolic-ranges.cc: New file, partly adapted from ranges.cc.\n\t* symbolic-ranges.h: New file.\n\t* symbolic-scalars.cc: New file.\n\t* symbolic-scalars.h: New file.\n\t* type.h: New file.\n\t* varargs.cc: (get_va_copy_arg): Update leading comment to reflect\n\tthat this is just a pointer extracted from va_list, not the\n\tva_list itself.  Port to new implementation.  Drop get_store_value\n\tcall in favor of get_rvalue.  Unify some logic between the two\n\tbranches.\n\t(get_stateful_arg): Add cast to ptr_type_node.\n\t(kf_va_start::impl_call_pre): Use ptr_type_node.  Port to new\n\timplementation when marking region as unknown.\n\t(kf_va_copy::impl_call_pre): Use ptr_type_node.  Rename\n\t\"in_va_list\" to \"in_impl_ptr\" as it\u0027s not necessarily a va_list.\n\tPort from maybe_get_region to deref_rvalue.\n\t(maybe_get_var_arg_region):  Port from maybe_get_region to\n\tderef_rvalue.\n\t(maybe_get_var_arg_svalue): New.\n\t(kf_va_arg::impl_call_pre): Port from maybe_get_region to\n\tderef_rvalue, and use maybe_get_var_arg_svalue.\n\t* write-to-const-diagnostics.cc: Rename \"reg\" to base_reg\" throughout.\n\ngcc/testsuite/ChangeLog:\n\t* c-c++-common/analyzer/aliasing-6.c: New test.\n\t* c-c++-common/analyzer/attr-const-3.c: Tweak depth param.\n\t* c-c++-common/analyzer/call-summaries-malloc.c: Add xfails.\n\t* c-c++-common/analyzer/call-summaries-pr107158-2.c: Drop xfails.\n\t* c-c++-common/analyzer/call-summaries-pr107158.c: Likewise.\n\t* c-c++-common/analyzer/capacity-1.c (test_4): Update expected\n\tcapacity message.\n\t* c-c++-common/analyzer/compound-assignment-5.c: Drop comment.\n\t* c-c++-common/analyzer/deref-before-check-3.c: New test.\n\t* c-c++-common/analyzer/double-free-2.c: New test.\n\t* c-c++-common/analyzer/flex-with-call-summaries.c: Drop xfail.\n\t* c-c++-common/analyzer/flex-without-call-summaries.c: Update\n\texpected results.\n\t* c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c:\n\tAdd dg-bogus for leak false positive seen whilst developing patch.\n\t* c-c++-common/analyzer/large-constants.c: New test.\n\t* c-c++-common/analyzer/leak-multiple-returns.c: New test.\n\t* c-c++-common/analyzer/leak-pr108045-with-call-summaries.c: Drop\n\txfails.\n\t* c-c++-common/analyzer/leak-pr126831.c: New test.\n\t* c-c++-common/analyzer/leak-pr126832.c: New test.\n\t* c-c++-common/analyzer/loop-0-up-to-n-by-1-with-iter-obj.c: Add\n\texpected \"UNKNOWN\" in 2nd iteration.\n\t* c-c++-common/analyzer/loop-2.c: Likewise.  Update expected\n\tconstraint after loop.\n\t* c-c++-common/analyzer/loop-2a.c: Likewise.\n\t* c-c++-common/analyzer/maybe-live-1.c: New test.\n\t* c-c++-common/analyzer/maybe-live-2.c: New test.\n\t* c-c++-common/analyzer/null-compare.c: New test.\n\t* c-c++-common/analyzer/null-terminated-strings-2.c: Drop xfails.\n\t* c-c++-common/analyzer/out-of-bounds-bits.c: New test.\n\t* c-c++-common/analyzer/out-of-bounds-diagram-11.c: Update\n\texpected diagram to show simplication of\n\t\u0027(size * 16) - (size * 4)\u0027 to \u0027size * 12\u0027.\n\t(test_99): Add expected output now that new implementation is able\n\tto create a diagram for this case.\n\t* c-c++-common/analyzer/out-of-bounds-diagram-3.c: Update expected\n\tdiagram.\n\t* c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c: Update\n\tcomment and expected output.  Fix missing \"return\".\n\t* c-c++-common/analyzer/out-of-bounds-pr114472.c: Add expected\n\twarnings from analyzer.\n\t* c-c++-common/analyzer/paths-5.c: Tweak number of expected\n\texploded nodes.\n\t* c-c++-common/analyzer/pointer-comparison-pr125304-eq.c\n\t(test_pointer_eq): Drop xfails.\n\t(test_string_literals): Likewise.\n\t* c-c++-common/analyzer/pointer-comparison-pr125304-ge.c\n\t(test_pointer_ge): Likewise.\n\t* c-c++-common/analyzer/pointer-comparison-pr125304-gt.c\n\t(test_pointer_gt): Likewise.\n\t* c-c++-common/analyzer/pointer-comparison-pr125304-le.c\n\t(test_pointer_le): Likewise.\n\t* c-c++-common/analyzer/pointer-comparison-pr125304-lt.c\n\t(test_pointer_lt): Likewise.\n\t* c-c++-common/analyzer/strlen-pr113999.c: Include\n\t\"analyzer-decls.h\" and use it to tighten up the expected results.\n\t* c-c++-common/analyzer/strncpy-1.c (test_zero_fill): Remove\n\txfails.\n\t* c-c++-common/analyzer/symbolic-1.c: Update comment referring to\n\tstore.h.\n\t* c-c++-common/analyzer/symbolic-4.c: Update expected result.\n\t* c-c++-common/analyzer/taint-inheritance.c: New test.\n\t* c-c++-common/analyzer/uintptr-cast-double-free.c: New test.\n\t* c-c++-common/analyzer/use-after-free-4.c: New test.\n\t* c-c++-common/analyzer/use-after-free-5.c: New test.\n\t* g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C:\n\tUpdate expected message.\n\t* g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C:\n\tLikewise.\n\t* g++.dg/analyzer/initializers-with-RANGE_EXPR.C: New test.\n\t* g++.dg/analyzer/out-of-bounds-placement-new.C: Add expected\n\twarning about allocation size.\n\t* g++.dg/analyzer/pr100244.C: Add -fno-sized-deallocation.\n\t* g++.dg/analyzer/std-unique_ptr-3.C: New test.\n\t* g++.dg/analyzer/torture/std-string-ctor-large-literal.C\n\t(test_ctor_large): Remove xfail.\n\t* g++.dg/analyzer/torture/std-string-ctor-small-literal.C\n\t(test_ctor_small): Likewise.\n\t* gcc.dg/analyzer/analyzer-decls.h (__analyzer_hexdump): New decl.\n\t* gcc.dg/analyzer/boxed-malloc-1.c: Tweak expected messages.\n\t* gcc.dg/analyzer/call-summaries-2.c: Update expected messages to\n\treflect improved precision of analysis; remove and add xfails.\n\t* gcc.dg/analyzer/data-model-1.c: Include \u003cstdint.h\u003e.\n\t(union u): Convert \"i\" from \"int\" to \"intptr_t\".\n\t* gcc.dg/analyzer/doom-d_main-IdentifyVersion.c: Add dg-bogus for\n\tleak false positive seen whilst developing patch.  Drop xfails.\n\t* gcc.dg/analyzer/ice-pr113496.c: Add warning about uninitialized\n\treturn value.\n\t* gcc.dg/analyzer/leak-expressions-1.c: New test.\n\t* gcc.dg/analyzer/leak-pr126832-macro.c: New test.\n\t* gcc.dg/analyzer/mkdtemp-1.c (test_errno): Split into...\n\t(test_errno_possibly_aliased): ...this and...\n\t(test_errno_not_aliased): ...this.\n\t* gcc.dg/analyzer/null-deref-pr102671-1.c: Add\n\t-Wno-analyzer-too-complex.\n\t* gcc.dg/analyzer/null-terminated-strings-1.c: Update expected\n\tresults.  Rewrite tests to avoid use of __analyzer_describe.\n\t* gcc.dg/analyzer/out-of-bounds-diagram-1-debug.c: Update expected\n\tdiagram for changes in how byte ranges are displayed.\n\t* gcc.dg/analyzer/out-of-bounds-diagram-16.c: Update expected\n\tdiagram to show where write is from.\n\t* gcc.dg/analyzer/out-of-bounds-diagram-2.c: Update expected\n\tdiagram for changes to size allocation.\n\t* gcc.dg/analyzer/out-of-bounds-diagram-9.c: Update expected\n\tdiagram.\n\t* gcc.dg/analyzer/pattern-test-2.c: Update expected messages.\n\t* gcc.dg/analyzer/pipe-1.c: Drop tests of __analyzer_describe.\n\t* gcc.dg/analyzer/pipe2-1.c: Likewise.\n\t* gcc.dg/analyzer/pr104417.c (warn_realloc_extern_ptrarr_offset):\n\tAdd expected -Wanalyzer-free-of-non-heap warning.\n\t* gcc.dg/analyzer/pr104434-nonconst.c (exit_level_0:): Drop\n\txfails.\n\t* gcc.dg/analyzer/pr93355-localealias.c (read_alias_file): Drop\n\txfail.\n\t* gcc.dg/analyzer/pr93382.c: Drop xfail.\n\t* gcc.dg/analyzer/single-field.c: Update expected result of\n\t__analyzer_describe.\n\t* gcc.dg/analyzer/state-diagram-2.c (test_pointer_to_global): Add\n\txfail.\n\t* gcc.dg/analyzer/state-diagram-5-sarif.py: Update for changes in\n\tJSON output.\n\t* gcc.dg/analyzer/stdarg-1-ms_abi.c: Tweak expected messages.\n\t* gcc.dg/analyzer/stdarg-1.c: Tweak expected messages for\n\ttarget-specific differences in whether the message reports what\n\tleaked.\n\t* gcc.dg/analyzer/stdarg-2.c: Likewise.\n\t* gcc.dg/analyzer/strcpy-3.c: Drop test of __analyzer_describe.\n\t* gcc.dg/analyzer/strlen-1.c (call_strlen_6a): New.\n\t(test_memcpy_without_termination): New.\n\t(call_strlen_6b): New.\n\t(test_memcpy_with_manual_termination): New.\n\t* gcc.dg/analyzer/taint-read-offset-1.c: Update expected messages.\n\tAdd xfail about false positive.\n\t* gcc.dg/analyzer/torture/loop-inc-ptr-2.c: Tweak expected number\n\tof exploded nodes.\n\t* gcc.dg/analyzer/torture/pr59037.c: Add comment and\n\t-Wno-analyzer-use-of-uninitialized-value.\n\t* gcc.dg/analyzer/unknown-fns-5.c: New test.\n\t* gcc.dg/analyzer/unknown-fns-6.c: New test.\n\t* gcc.dg/analyzer/vla-1.c (test_1): Mark test as xfailing.\n\t(test_vla_ptr): New test.\n\t* gcc.dg/plugin/infoleak-CVE-2011-1078-1.c: Add\n\t-Wno-analyzer-use-of-uninitialized-value.\n\t* gcc.dg/plugin/infoleak-uninit-size-1.c (test_uninit_size): Add\n\texpected warning.\n\t* gcc.dg/plugin/infoleak-vfio_iommu_type1.c: Remove xfail.\n\t* gcc.dg/plugin/taint-pr112850-too-complex.c: Tweak depth param.\n\nSigned-off-by: David Malcolm \u003cdmalcolm@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "38460282f43cb72261d7dc77843ac47ae74b8ba6",
      "old_mode": 33188,
      "old_path": "gcc/Makefile.in",
      "new_id": "f20b3380c1c0ba4ee13f9de977a1df10be1f46b7",
      "new_mode": 33188,
      "new_path": "gcc/Makefile.in"
    },
    {
      "type": "modify",
      "old_id": "f9822e856c4c71a431c4d38538bf6662a21962c1",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/access-diagram.cc",
      "new_id": "17be8d81f28eba329ad43442255914d64d50bc1f",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/access-diagram.cc"
    },
    {
      "type": "modify",
      "old_id": "33c9864f44719e2d6ccbe4b8036fa91999d7aa39",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/access-diagram.h",
      "new_id": "a2ccdd098a1c198179220dcb4a200df2d2279fbe",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/access-diagram.h"
    },
    {
      "type": "modify",
      "old_id": "699a87c8f3fd32af2e8cffaef837d631b331384b",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/ana-state-to-diagnostic-state.cc",
      "new_id": "f7a6303f121b9ece31bf5d15961ce374576027a3",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/ana-state-to-diagnostic-state.cc"
    },
    {
      "type": "modify",
      "old_id": "78cfbbdaded5d607aac92c15b652b8d54e090bf9",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/ana-state-to-diagnostic-state.h",
      "new_id": "c783dca192b06730b13e20da366b08ee949937e1",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/ana-state-to-diagnostic-state.h"
    },
    {
      "type": "modify",
      "old_id": "9224423ee4db615a9720be70b921fdafe760e5eb",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/analyzer-logging.cc",
      "new_id": "b5e74266d8379a1c8feb4ff53f793f1c846d7b1b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/analyzer-logging.cc"
    },
    {
      "type": "modify",
      "old_id": "a45b6acd3d0a3d35de4e99b425127ca2d08d7442",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/analyzer-logging.h",
      "new_id": "4cf985c2610b841579016c0b8a48c73017ab678b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/analyzer-logging.h"
    },
    {
      "type": "modify",
      "old_id": "05a73f291c024518b2df7875d1a8d346a1c5e765",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/analyzer-selftests.cc",
      "new_id": "f55431a04461bbe1fda54b54da02f9a10f72d289",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/analyzer-selftests.cc"
    },
    {
      "type": "modify",
      "old_id": "7b1342bb5cf9e45b0b6d0cb4acb586bda9109579",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/analyzer-selftests.h",
      "new_id": "7421c875102f8f85ff1fd6ec70348de5b25b6bf2",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/analyzer-selftests.h"
    },
    {
      "type": "modify",
      "old_id": "c779c9b6c0f31d0b88765c8885f7c01491dcc645",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/bounds-checking.cc",
      "new_id": "83ed9d172c11d9c0a4a1d96576462c2e5f110cc7",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/bounds-checking.cc"
    },
    {
      "type": "modify",
      "old_id": "52335becd688fad5f4f33b0f8ee51ec1039adbaf",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/call-details.cc",
      "new_id": "c288ab17b5c21b16292fcfb4856aa00cfa0c7e58",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/call-details.cc"
    },
    {
      "type": "modify",
      "old_id": "ae5524499d05559e98b30e9385171fc570808393",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/call-details.h",
      "new_id": "92d3fbfe06ab5d9d2039a7f4d54af70c3faf990b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/call-details.h"
    },
    {
      "type": "modify",
      "old_id": "925d6254f3585278d4665a0fbae1f79de9f33eb7",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/call-string.cc",
      "new_id": "e863c31cf04c0987885863a781a06d5196bae50b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/call-string.cc"
    },
    {
      "type": "modify",
      "old_id": "348172661ab63b4b9e800a53230a5ca5428df64f",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/call-string.h",
      "new_id": "95a6f82fb1aaac30ed7ec3b2e3cd9638284f109f",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/call-string.h"
    },
    {
      "type": "modify",
      "old_id": "9220958afcaa8a8e02fd76a829284971c789b81f",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/call-summary.cc",
      "new_id": "9bdd7598e695be54b875bfc7b0dfe19f34447e8b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/call-summary.cc"
    },
    {
      "type": "modify",
      "old_id": "7280cca8bd791b079c8772a7740c477e3213cfec",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/call-summary.h",
      "new_id": "40f12cc9ee4e66e8adde3c6fc47eae761c339592",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/call-summary.h"
    },
    {
      "type": "modify",
      "old_id": "7e79727f5e69fb2352b396fcc74eb437a37cfc3f",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/checker-event.cc",
      "new_id": "6ded235a2874c79ab7595eb114c1fd5de8f19103",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/checker-event.cc"
    },
    {
      "type": "modify",
      "old_id": "9f100068722d477430491fef775b83a9f5305f7a",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/common.h",
      "new_id": "2254b86f514eba6677e9985a8fb5b6fc31ea9999",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/common.h"
    },
    {
      "type": "modify",
      "old_id": "4819c53e20fcbc7506fe8918864f7472860eac04",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/constraint-manager.cc",
      "new_id": "c0e3b4edb9eef5542401a8e80210d67282615407",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/constraint-manager.cc"
    },
    {
      "type": "modify",
      "old_id": "91fc05885c326333f6f53b18a74d83efb71a9dfc",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/constraint-manager.h",
      "new_id": "67a102702022375c97676021e6abc7bcb258640f",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/constraint-manager.h"
    },
    {
      "type": "modify",
      "old_id": "053d8153ce33655b33b2a40c28e5cb8a43f2226b",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/diagnostic-manager.cc",
      "new_id": "94e23c7ad761f4c605cba2b542a7fcb7624d40d3",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/diagnostic-manager.cc"
    },
    {
      "type": "modify",
      "old_id": "4856966c70077974a4f205096b3c0842e65a6732",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/engine.cc",
      "new_id": "fd4c059b35019d606ad8ca961a9aa83fbad420ac",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/engine.cc"
    },
    {
      "type": "modify",
      "old_id": "43166599067d11def29367841cc6dc84ca08f235",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/exploded-graph.h",
      "new_id": "ab79c34cc41b759c0013ea49f084e4c583307ce4",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/exploded-graph.h"
    },
    {
      "type": "modify",
      "old_id": "4f35de272e24d7c94bb5dd4e1281e69dec29c7e5",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/exploded-path.cc",
      "new_id": "7942a60e389081d10ac2e1d777708d7e2bebb033",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/exploded-path.cc"
    },
    {
      "type": "modify",
      "old_id": "37ba84d012c70951630ce32a446401509e807ebb",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/feasible-graph.cc",
      "new_id": "7cdae63fabe1a75fa46664a63c115e7b49e786fd",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/feasible-graph.cc"
    },
    {
      "type": "modify",
      "old_id": "50da76c4a42f686924166dafcb172791aadcd18f",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/infinite-recursion.cc",
      "new_id": "0c3befd7cd244c048d38e75c563ba6551c45016a",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/infinite-recursion.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "db1521360f010b5d7e8441fcddc6bc6d19b44b00",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/initializers.cc"
    },
    {
      "type": "modify",
      "old_id": "8795f387c99fdea02a4f9aced239f7ed1c43e6fe",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/kf-analyzer.cc",
      "new_id": "91dcfeced90f3c16d2b64aec358c08ce193288fb",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/kf-analyzer.cc"
    },
    {
      "type": "modify",
      "old_id": "8b1a8bde720cce7545b1fd89031faae01754add6",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/kf-lang-cp.cc",
      "new_id": "47d66c470eb934f731757f97a9d72666839eaaca",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/kf-lang-cp.cc"
    },
    {
      "type": "modify",
      "old_id": "89bcce8d0fb7dfc8da09b48535d26fbd083268b0",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/kf.cc",
      "new_id": "6ba997af472a80d89577ac2819ab8a690a33fcbf",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/kf.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "eec06c5b291857630554827d43764b7611d8b257",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/liveness-context.h"
    },
    {
      "type": "modify",
      "old_id": "6d7b23b7e98fd7beea4aa458e4cab2f85a25522a",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/ops.cc",
      "new_id": "5b3f700cc886a0352a088433ad6190769d2cb35b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/ops.cc"
    },
    {
      "type": "modify",
      "old_id": "e5d5cec7a35644450ec7cf0ecac6eae207a21cec",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/poisoned-value-diagnostic.cc",
      "new_id": "840854f494e279e2a1c1ad05d19032ab34ca144d",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/poisoned-value-diagnostic.cc"
    },
    {
      "type": "modify",
      "old_id": "79ba0442f3a38e7101549b0f61f463cb558dbf68",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/program-point.cc",
      "new_id": "299bd461b56ac1da7b969adf5242bffbc1deb53c",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/program-point.cc"
    },
    {
      "type": "modify",
      "old_id": "9fdd290cdbec5b5cf5b2304854e53f6a540c0f15",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/program-point.h",
      "new_id": "0bb0ed3268e3bd1124298239be9160486aa545e2",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/program-point.h"
    },
    {
      "type": "modify",
      "old_id": "c549a8baff1bd94da7c6770d698c41a9f8172cb6",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/program-state.cc",
      "new_id": "4aafff9b964e80c456e0d881cc323ff739e76169",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/program-state.cc"
    },
    {
      "type": "modify",
      "old_id": "b8219158c117457b2b9aa038254eb457ef1176ae",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/program-state.h",
      "new_id": "a8bda5cbc7b915584e673ba103d20596adfbb2ad",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/program-state.h"
    },
    {
      "type": "delete",
      "old_id": "d5977b60784e11c62f02d7ef4d926b546d6fee2f",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/ranges.cc",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "delete",
      "old_id": "4a441f0b5214de25a86d1fb741ea691f601d6dc7",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/ranges.h",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "29295b0098f639dcfaead5709578055f697399d5",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/record-layout.cc",
      "new_id": "1b8262411042ce3a5eb2b6737db95dc744badf94",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/record-layout.cc"
    },
    {
      "type": "modify",
      "old_id": "1ec63c7146c788a2436b8187da18b0580780e662",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/record-layout.h",
      "new_id": "65b6499cf1e3926376e6be352987548ef6d6a664",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/record-layout.h"
    },
    {
      "type": "modify",
      "old_id": "b993bb3684de30ea39494d616f903dcdb8ca6e64",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region-model-asm.cc",
      "new_id": "9b87801d9281eed49837c475769538a37e360228",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region-model-asm.cc"
    },
    {
      "type": "modify",
      "old_id": "1a7bfc2257204b2de4056652a1cc2d2d86aa6f02",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region-model-manager.cc",
      "new_id": "9e33a1649f97ec6dbffcaca7f6b33adfd7a8f122",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region-model-manager.cc"
    },
    {
      "type": "modify",
      "old_id": "fd4ff449344153dff536d2862bba05ea0563a730",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region-model-manager.h",
      "new_id": "2849a15f9a3250a2775ac857248140576bddf63e",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region-model-manager.h"
    },
    {
      "type": "modify",
      "old_id": "e9e8edfcc1a715fd426c2a69d3ea7e610718584f",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region-model-reachability.cc",
      "new_id": "39632d633b23e53c6cc3944882b7c351ca3dceec",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region-model-reachability.cc"
    },
    {
      "type": "modify",
      "old_id": "39c67c3656555e3ead1ae198eeb1cc025775201c",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region-model-reachability.h",
      "new_id": "822dfdce626bd0e5e5c5e857cc3a61ae95102dd6",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region-model-reachability.h"
    },
    {
      "type": "modify",
      "old_id": "1e7b84134eaf88053d9e647fe6bf2de83cd55bfd",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region-model.cc",
      "new_id": "e80574d52c7afffd31cd0e3d9f2c8ba3b1a6d162",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region-model.cc"
    },
    {
      "type": "modify",
      "old_id": "097758c68605586c4f5627a53be1d43880c49eb7",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region-model.h",
      "new_id": "fc1691954c3865043542432bab85ec6fbf876b6b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region-model.h"
    },
    {
      "type": "modify",
      "old_id": "974094d725133f1d78044579f2026ee327b475c9",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region.cc",
      "new_id": "3a4ee52cd51351fffff60e4782bc88489352c8c7",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region.cc"
    },
    {
      "type": "modify",
      "old_id": "3ead50a418c8229384e72c00ae2edb1f22662e79",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/region.h",
      "new_id": "2e19cdeb8166980daf3b31d1f2a3f40ebd8d9375",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/region.h"
    },
    {
      "type": "modify",
      "old_id": "602287d7c238255a9a920fae80c5820399c51051",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/setjmp-longjmp.cc",
      "new_id": "f0788f97a74d824ea139e2560a346c5db99d46d1",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/setjmp-longjmp.cc"
    },
    {
      "type": "modify",
      "old_id": "e627c68a5b246a6e650feecb965558536f54e286",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/sm-fd.cc",
      "new_id": "d79df8d63e55b9d8e4022852b2d2ad4bb2cbf65a",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/sm-fd.cc"
    },
    {
      "type": "modify",
      "old_id": "b8a0e2bda78b12a4b220b14a34f930943e0bcd19",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/sm-file.cc",
      "new_id": "8cf47ec30720b0ceec02da95a21cee871e457b5f",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/sm-file.cc"
    },
    {
      "type": "modify",
      "old_id": "72e6e28e233e5361aed5ed52c7cc5f380e96489c",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/sm-malloc.cc",
      "new_id": "ad51dddcda035a77474d86d2f87088df9abc2dc3",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/sm-malloc.cc"
    },
    {
      "type": "modify",
      "old_id": "6a3f3eadd83f317d2bd5f3f30e04e786b620b6f3",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/sm-taint.cc",
      "new_id": "6165d504b7275308f73f93c00206c8224157d8a8",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/sm-taint.cc"
    },
    {
      "type": "modify",
      "old_id": "e5c7593eaf9ea57d4fa7d20d8f467c1280b936fd",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/state-purge.cc",
      "new_id": "c171f30b3d19bd0b703566e2d5ac744df2c23029",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/state-purge.cc"
    },
    {
      "type": "modify",
      "old_id": "ce6797664b5d174c961f2fd2ff2b002a974cddbb",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/store.cc",
      "new_id": "b4357e942ee070620c85c1e453a28518efd03e27",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/store.cc"
    },
    {
      "type": "modify",
      "old_id": "7d0a98244ef7d3a1cd4658213f87fa5a8089ac85",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/store.h",
      "new_id": "9935f6a7676aa874db1d38c5e6685ee1c6539180",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/store.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4001ad5be9f173d05f542a93a13220ff9d976dc2",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/string-scan.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6dbdc1e27684ffc77bbfbbe435875a224f685e78",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/string-scan.h"
    },
    {
      "type": "modify",
      "old_id": "cde7c66f45befe79f6f8f06394cb3558c1007851",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/svalue.cc",
      "new_id": "abb16bce1cfd2dffccba7fdc29e7d9589ccccf54",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/svalue.cc"
    },
    {
      "type": "modify",
      "old_id": "a5f1b1e9f4c5d098d5d9ac247839eec8a2b76eaa",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/svalue.h",
      "new_id": "7af9025f12cfc3ef09ea3799f1ccfdc8aa772caa",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/svalue.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d9d4162d11cb99656a075b64b40a13ee975bb30c",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-bit-contents.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "988d2a5a08568c956315c39ea44abc2b2b873f85",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-bit-contents.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "200fae5605f3a37b018877f8b114b1f390e771e7",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-bit-vectors.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "02ccbf3a85a4538d74b039a49b43b99fd23b123b",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-bit-vectors.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f7421f32ed75a841e174e405e52a6f3fb4dd8042",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-memory-offsets.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4762e4532b4cbd48507292585ed62c8fdcfe10e5",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-memory-ranges.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0e1434cce895cb40d88f287052bbc6ddb9c26132",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-memory-ranges.h"
    },
    {
      "type": "modify",
      "old_id": "1c17a8d08d36f3125aeacc73cb2cb0d9d6df6f14",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/symbolic-nodes.cc",
      "new_id": "1d891564de49c6870d960cc22d6516990982e931",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-nodes.cc"
    },
    {
      "type": "modify",
      "old_id": "20e0ccaa877d71734ec08e096a9d9f0ae4c2c02e",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/symbolic-nodes.h",
      "new_id": "be9a2e1704f821bf504499719ca05d9c842d8eeb",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-nodes.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a53f38f0e47bf9678b0161884f16a6d676287264",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-pointers.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "46cf98d1cdf1f2c8313d12dae0632f9bca559c1a",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-pointers.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2f4faae5e9c88cfd42f8dcf8d132e03efcd29370",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-ranges.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d2f39a787aa570613e392eae0afd2472cbe51a8a",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-ranges.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8d759e2462ab0816d418f301fe5ec1e61644364a",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-scalars.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "838d06a45f2dad0d4f6c9374b586b2e7da84197d",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/symbolic-scalars.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f620b4d91ca9227b2339b301f2a0551de0b7d63c",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/type.h"
    },
    {
      "type": "modify",
      "old_id": "d2dd8934c6185daee4bb65f2441efebc8b2cfd11",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/varargs.cc",
      "new_id": "7bbd1af9a1397f8fc39e3e59da339e8067ee80c0",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/varargs.cc"
    },
    {
      "type": "modify",
      "old_id": "7d71f1a32aef459a353e01d7bf24425a02c50deb",
      "old_mode": 33188,
      "old_path": "gcc/analyzer/write-to-const-diagnostics.cc",
      "new_id": "8ad18db73e82b87017215660105eaf73c92e6895",
      "new_mode": 33188,
      "new_path": "gcc/analyzer/write-to-const-diagnostics.cc"
    },
    {
      "type": "modify",
      "old_id": "acd8f7a05b3b78d72e9e32c95c2c44efb1237d99",
      "old_mode": 33188,
      "old_path": "gcc/custom-sarif-properties/state-graphs.cc",
      "new_id": "0d5d675c9ffcda91a9ea38c2b672f08a7c70bc2a",
      "new_mode": 33188,
      "new_path": "gcc/custom-sarif-properties/state-graphs.cc"
    },
    {
      "type": "modify",
      "old_id": "bad2d096030be4f243161f7e8879616379c685f2",
      "old_mode": 33188,
      "old_path": "gcc/custom-sarif-properties/state-graphs.h",
      "new_id": "5d8f48c558846524cff6b51abdccc0524d7e9aa3",
      "new_mode": 33188,
      "new_path": "gcc/custom-sarif-properties/state-graphs.h"
    },
    {
      "type": "modify",
      "old_id": "80d80a258b25b7c62670f3de4fa625703629ecb7",
      "old_mode": 33188,
      "old_path": "gcc/diagnostics/color.cc",
      "new_id": "8825f5a19a61f5bd985d405024a77deaf0acd71d",
      "new_mode": 33188,
      "new_path": "gcc/diagnostics/color.cc"
    },
    {
      "type": "modify",
      "old_id": "5d043dcdb4fc720ded5b62565b9178c0095558e6",
      "old_mode": 33188,
      "old_path": "gcc/doc/analyzer.texi",
      "new_id": "96155883ef5860174dcc56d526e41a001fa727bf",
      "new_mode": 33188,
      "new_path": "gcc/doc/analyzer.texi"
    },
    {
      "type": "modify",
      "old_id": "53877889a0f5b3509004b061f8474e2c394e160b",
      "old_mode": 33188,
      "old_path": "gcc/selftest-run-tests.cc",
      "new_id": "fb634a145828b88256d87bf524015edcc11021b1",
      "new_mode": 33188,
      "new_path": "gcc/selftest-run-tests.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8e12973ae3a1720c3fe77d6d98471c6308b9d324",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/aliasing-6.c"
    },
    {
      "type": "modify",
      "old_id": "11238a77a658f714a81576e68eb718b642c6d92d",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/attr-const-3.c",
      "new_id": "fbdc8c85989512b3ae712453c666114163148e49",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/attr-const-3.c"
    },
    {
      "type": "modify",
      "old_id": "d9d9ced8d953e127bf5a405c0543f2c9779fd8c8",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/call-summaries-malloc.c",
      "new_id": "1c7626c01e836e5c2952e22b0936ed6f79aecf10",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/call-summaries-malloc.c"
    },
    {
      "type": "modify",
      "old_id": "a15ab65c476ad80efc5e98bd4ca51d5dfde53253",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/call-summaries-pr107158-2.c",
      "new_id": "4b6ada26abbd523bfbf0c3adc7cf5ed12dec9cd7",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/call-summaries-pr107158-2.c"
    },
    {
      "type": "modify",
      "old_id": "6fbbce41af04677670f218c2ca368370d59f3a91",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/call-summaries-pr107158.c",
      "new_id": "b373c29ede38a008a0c7a4a0c55d6648cde66c23",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/call-summaries-pr107158.c"
    },
    {
      "type": "modify",
      "old_id": "a7674b2eec7bb37f49eed0405faa09bb878e5fe3",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/capacity-1.c",
      "new_id": "212abdac35f20f1f299a75b9fa15cbac46cb6c7d",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/capacity-1.c"
    },
    {
      "type": "modify",
      "old_id": "08f10606d91f096fa3c218fdac7beb45cfd71d4c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/compound-assignment-5.c",
      "new_id": "6ad1f69701465ea8a1179fbac4a99b4189f051d2",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/compound-assignment-5.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4dd75abc28c8a83d8b91eea8f9db86a0ef81e1f0",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/deref-before-check-3.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0f3bcea92f66fa46c32e470700859a0cddce6e5c",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/double-free-2.c"
    },
    {
      "type": "modify",
      "old_id": "b63324f1bfcdb98077fdc6811e5a519ef2de0d2f",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c",
      "new_id": "ba1c70c77ad686a8992f7c989f0700ee652d67bd",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c"
    },
    {
      "type": "modify",
      "old_id": "d7f2333f7f6ac29f862bca837a760e2fd55e381b",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c",
      "new_id": "7ee44e2b4cec2bbdd407026f377233e8588a5017",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c"
    },
    {
      "type": "modify",
      "old_id": "166d6da11f9586ebbc18e22a6be8118ca084a488",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c",
      "new_id": "f0d6ca5b51b9615688e9989190211bdfeb90c2fc",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/infinite-loop-doom-d_main-IdentifyVersion.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7757dcf5f6a97dc7224a100500d85fa53ce88c21",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/large-constants.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "78b05af78a01599476a512e3d6f93907f4085fc2",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/leak-multiple-returns.c"
    },
    {
      "type": "modify",
      "old_id": "e4be5093641b4421efea38ecd045dd55b91bf15c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/leak-pr108045-with-call-summaries.c",
      "new_id": "ebad0b29323adf8a0e502b5d6148c46b892f2efe",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/leak-pr108045-with-call-summaries.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "cef553e3398b6a2735dde89748cd484e49f206f5",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/leak-pr126831.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ac456ca981f48aa699b5ae0797b3ff2069f8b697",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/leak-pr126832.c"
    },
    {
      "type": "modify",
      "old_id": "e169cd44aa17d16db5170aebb1b34428f45c13ac",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/loop-0-up-to-n-by-1-with-iter-obj.c",
      "new_id": "7217d3b6da5693c887056c4160d59822ae2b8254",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/loop-0-up-to-n-by-1-with-iter-obj.c"
    },
    {
      "type": "modify",
      "old_id": "274d5080a51e3352d6fb602f755e88922dea1531",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/loop-2.c",
      "new_id": "2c95e45125dcd7f5559e52fcc5fc2f97b5f6170e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/loop-2.c"
    },
    {
      "type": "modify",
      "old_id": "212acf42dc7a1ef6c9f3142a9c3c72db403abd7e",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/loop-2a.c",
      "new_id": "04115449f3f6cd1dada05172b2704c5ccbbeac32",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/loop-2a.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e4287fca4782d780c7bbaaf01d7ee11e26051e47",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/maybe-live-1.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6fc8a2d246c481e403f0cb9cffbf7e5aedd6b280",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/maybe-live-2.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a9a375a4eb1971d38f41786461ef93fa25628724",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/null-compare.c"
    },
    {
      "type": "modify",
      "old_id": "3bbae821cd46183b70a3543b8a8002b02a64143d",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/null-terminated-strings-2.c",
      "new_id": "86acb7b0bd1691c4f5a7860f97b94fa7961e1376",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/null-terminated-strings-2.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5521864295000f85a2e6f0401bff947f1db860fd",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-bits.c"
    },
    {
      "type": "modify",
      "old_id": "89d1566e53b4cc34006243926b24cec0a5ee4d43",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c",
      "new_id": "2ffcbe45c9a3802b0cb5c083f2aca81b12d26717",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c"
    },
    {
      "type": "modify",
      "old_id": "e75ce1214bd251ae25ee5018cdfc977d727a84b3",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-3.c",
      "new_id": "f38039908f8b7160dee0e03adffbc1726c8cea0f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-3.c"
    },
    {
      "type": "modify",
      "old_id": "a0164c9d046574d65e33129fa92b4fcb874d202c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c",
      "new_id": "609cf322c9a15b8bd488c88a94b25be712bd9db2",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-pr110928.c"
    },
    {
      "type": "modify",
      "old_id": "ef9e7711a2e4669fa5f4eca0440c5fca467f5f9c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c",
      "new_id": "09081d243cb8dfa727f9467627e7d82a9a27f0f4",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/out-of-bounds-pr114472.c"
    },
    {
      "type": "modify",
      "old_id": "21aa23067c1a2ac259beccfa8e209324772dc1d0",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/paths-5.c",
      "new_id": "30b40284bc800003cbec5361ce88b9b36363a41c",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/paths-5.c"
    },
    {
      "type": "modify",
      "old_id": "117afa3c0bba7e3d5476df4d23faa62fbd6f3769",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-eq.c",
      "new_id": "5d03ae87673fe322a92aba201de815639148de3a",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-eq.c"
    },
    {
      "type": "modify",
      "old_id": "407e996a124d5abd260fa16d33e7728d68df5361",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-ge.c",
      "new_id": "b83b13fc4de9847a18efc617b2daacc09a35319a",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-ge.c"
    },
    {
      "type": "modify",
      "old_id": "80e8ab87e24c68fadad65d7deea6a1f5ff95733c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-gt.c",
      "new_id": "03c259fb1ab302cbec899044b884fa2caff72c84",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-gt.c"
    },
    {
      "type": "modify",
      "old_id": "a842bd986e1b44a4a23a5ef7e29e7ff05744140d",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-le.c",
      "new_id": "ad14e8d88be5752c631451110d92ccaea3dacb07",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-le.c"
    },
    {
      "type": "modify",
      "old_id": "a84c1b5d2c7fecc39026f3566ce785526c2d23cc",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-lt.c",
      "new_id": "d09999b43aed6426224930e6cafc9b4b2d238cd0",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/pointer-comparison-pr125304-lt.c"
    },
    {
      "type": "modify",
      "old_id": "f822606415a545f936bd3ed2fa191939cf532906",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/strlen-pr113999.c",
      "new_id": "0ba2fb8fd071d1a890bda65909905a46e73f5843",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/strlen-pr113999.c"
    },
    {
      "type": "modify",
      "old_id": "61f9712a038e7a6b32c9c7d5639ea8971643584a",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/strncpy-1.c",
      "new_id": "ecf76053469d06d18599b54f607b21e1a006c91f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/strncpy-1.c"
    },
    {
      "type": "modify",
      "old_id": "0d78242381a6be39f4b4a061dd711ad4a7da022f",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/symbolic-1.c",
      "new_id": "3674b42bfcedb3d1023f542b6b5b8b92c542664c",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/symbolic-1.c"
    },
    {
      "type": "modify",
      "old_id": "a466f912007cf38eb23315b6faf34cb82f0422df",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/c-c++-common/analyzer/symbolic-4.c",
      "new_id": "2e09b77f5fcc1ab5b87a0ef2804b64bd54033e7e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/symbolic-4.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4ed4172cedaccb2b9362bc5fe285ef098063109e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/taint-inheritance.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "759ea18d0c6f6244ac0616a05a10a36dda57979b",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/uintptr-cast-double-free.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d12c9d000b147abbe0889d3b89df564900b89f6c",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/use-after-free-4.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "18131095c67a1ec02dbc16d65d35ad2f2fbce318",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/c-c++-common/analyzer/use-after-free-5.c"
    },
    {
      "type": "modify",
      "old_id": "609c407cb360ed39c66ec48429e5a728fe939cf3",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C",
      "new_id": "5d1950b32fd1d6ffeaacfa86871eb74288709343",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C"
    },
    {
      "type": "modify",
      "old_id": "6f36a8e16fe9c87c9a4833b1cebd899411600cfb",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C",
      "new_id": "effb816f8f8c218201a503af44027ab9eaf08b5d",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4b919d28a9328766326184bb14f2d3389e2c53ad",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/initializers-with-RANGE_EXPR.C"
    },
    {
      "type": "modify",
      "old_id": "33872e6ddab4ad6f14f46ba18ecaa63c0a86bff9",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/analyzer/out-of-bounds-placement-new.C",
      "new_id": "765bd2b02a968e1b7c36b5c08235e675380d7f5a",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/out-of-bounds-placement-new.C"
    },
    {
      "type": "modify",
      "old_id": "6e2ac4c65bd0bcd12320d398d96a77a7241310c8",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/analyzer/pr100244.C",
      "new_id": "c3af9913852286f07fcf8a0529c1c3d0469f624f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/pr100244.C"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4df19931c4599bf43d9af0adabc86d14fb2664ec",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/std-unique_ptr-3.C"
    },
    {
      "type": "modify",
      "old_id": "8802c5337ce1a4648d8d7f1d3ac9da149a9cda88",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/analyzer/torture/std-string-ctor-large-literal.C",
      "new_id": "94d153baa843a5a1755b18ee165c93ec516a23a4",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/torture/std-string-ctor-large-literal.C"
    },
    {
      "type": "modify",
      "old_id": "05a2f5882d7910b7cd308aa7f51afa72a7a5f811",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/g++.dg/analyzer/torture/std-string-ctor-small-literal.C",
      "new_id": "ba9389e494e3ea93468558e4a05310f068a409ec",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/g++.dg/analyzer/torture/std-string-ctor-small-literal.C"
    },
    {
      "type": "modify",
      "old_id": "8d98fef69dab030d5c3ff26a276db70ef762c028",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h",
      "new_id": "e09ecdc0a2f92522443f94fa47cf4739f7aa6e0e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h"
    },
    {
      "type": "modify",
      "old_id": "97017ad47527bcd24832aa221b8798af440d6f09",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c",
      "new_id": "9b8a2d7fa0f53dc5e59ab89e5eb7ed658e40ebef",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c"
    },
    {
      "type": "modify",
      "old_id": "f309ab683fce8f05ae58dbd590c2f80c144c8156",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c",
      "new_id": "3cd2570bb18eb59948990a0c5ece0bfbff9574ea",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c"
    },
    {
      "type": "modify",
      "old_id": "f55634d52dc71c4fa2bd4587adf1a851b068c929",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/data-model-1.c",
      "new_id": "0a89929436de7e011319b8eec1d4186a31599de7",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/data-model-1.c"
    },
    {
      "type": "modify",
      "old_id": "a52e3528cfa18d71d3550a0b1dc51e73c5063710",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c",
      "new_id": "27766bfa2b1205a637a24e422f8c320c367e8cb4",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c"
    },
    {
      "type": "modify",
      "old_id": "147228bf0c7270250b4406611a9d2aa2efe78b17",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/ice-pr113496.c",
      "new_id": "f273d165e02408ec57ecad06bb8c49a641759d2e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/ice-pr113496.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "593a525f3062c9548b559e205669315a2b8dedc2",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/leak-expressions-1.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ece68a722fecfed782932d94bcc138dd48ac9ec2",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/leak-pr126832-macro.c"
    },
    {
      "type": "modify",
      "old_id": "a9522eb15da15e0314be758f6536adc2d3ca87a4",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c",
      "new_id": "e9a54fdd6ebe0c2c2d377d4f1cd2ab0ab40c8743",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/mkdtemp-1.c"
    },
    {
      "type": "modify",
      "old_id": "7a8ad850e49efa8fd1f685ec9e846da49ea0f70a",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c",
      "new_id": "35fd5c9b4cf9a0e2c33c0c2e52f05f510e38ee96",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c"
    },
    {
      "type": "modify",
      "old_id": "c9095fa3b94a8ee4c91ecf3be7bc9ba42a76343b",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c",
      "new_id": "6ecdef6de7fc4ac9d42b7c3419dc698d04d7f816",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c"
    },
    {
      "type": "modify",
      "old_id": "4c4d9d1b867e9598c2c6cfdb080fd05b869e0aaa",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-debug.c",
      "new_id": "7344ae17cb7031ae2e45bf3b72d5170ef375ee52",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-1-debug.c"
    },
    {
      "type": "modify",
      "old_id": "ea4e76d495e6c43b7f4bba9d455bb1b9a41ff5f3",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c",
      "new_id": "4491c8f7132034754dd555420be28110fb65f6e1",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-16.c"
    },
    {
      "type": "modify",
      "old_id": "535dab1eb9eddee91cb600ca41d155ec537eb2f6",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-2.c",
      "new_id": "51e6f5ff733342ee02730c083bbf3fe44a4fc5ad",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-2.c"
    },
    {
      "type": "modify",
      "old_id": "bb9ad660faea691d67e581967b80531b95eab4ae",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-9.c",
      "new_id": "43fd085a6f0e634459854f42ed8e1d14d995f52e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/out-of-bounds-diagram-9.c"
    },
    {
      "type": "modify",
      "old_id": "5b8ff7bc2e87201a91a5e1d7a8ba86cccfb5813d",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/pattern-test-2.c",
      "new_id": "75c670e59e54fd4eb0f07e63837d78e017fb7092",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/pattern-test-2.c"
    },
    {
      "type": "modify",
      "old_id": "156f0114fd52b3863ad0abf1ecce876aba55ab96",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/pipe-1.c",
      "new_id": "444f3c956da8d52b753860700a5987b0a28caac6",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/pipe-1.c"
    },
    {
      "type": "modify",
      "old_id": "aa0684e5c86c7024a3c6ba920a5ababba1b3006b",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/pipe2-1.c",
      "new_id": "7e4f0c1ad635ac3774363815bbd52d283b16f102",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/pipe2-1.c"
    },
    {
      "type": "modify",
      "old_id": "41ea5dbd0c724b5f45fd193a5230a1096340d4cf",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/pr104417.c",
      "new_id": "7d6171473a57dbb994421d0b174ce726099caf76",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/pr104417.c"
    },
    {
      "type": "modify",
      "old_id": "c06e3a63993d496c49a46d4fdd95e2ee8aaff58b",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c",
      "new_id": "6bcb5bfc8140e1ab09538cba8112829b8cbcccc4",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c"
    },
    {
      "type": "modify",
      "old_id": "44f0e84ffcf8c89058bc7038476f64099fa0f7ad",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c",
      "new_id": "c6a9c98ef03cec82f458a51eddaad0eea94f13e4",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c"
    },
    {
      "type": "modify",
      "old_id": "91eab2192ad9c259c0b80010f96f13d8879bb180",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/pr93382.c",
      "new_id": "a86c8d66bfb4b171c9acee2c0cc5dd5ab61a4a6d",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/pr93382.c"
    },
    {
      "type": "modify",
      "old_id": "31c6feead8fec78c5eb84e606ffc11906082b05d",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/single-field.c",
      "new_id": "1ea41139b0a2c844eb499828ab42db4e2f8fdfd6",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/single-field.c"
    },
    {
      "type": "modify",
      "old_id": "bde2bc46f59dc94938f300464084cbf952d9571b",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/state-diagram-2.c",
      "new_id": "4154f7fc68177c151f74bf7b0cf4c3ce361aad55",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/state-diagram-2.c"
    },
    {
      "type": "modify",
      "old_id": "3a2c6f8ceca4219eea2cd2fee3f6695489e013b3",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/state-diagram-5-sarif.py",
      "new_id": "689dd2616bb92ad69124efe3838d654c554d4c7b",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/state-diagram-5-sarif.py"
    },
    {
      "type": "modify",
      "old_id": "4422075e2b59ea8f7ef06a25d0e75ad62096f9dd",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/stdarg-1-ms_abi.c",
      "new_id": "42f7038b75a4f0aaa35aed8ca3bd44b852015819",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/stdarg-1-ms_abi.c"
    },
    {
      "type": "modify",
      "old_id": "7f0148eb1fb0386dd2c0aef161c8e447c59d55c1",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/stdarg-1.c",
      "new_id": "ab268c96d3d75f57d15ffb9d2e1f7e430fdfc23e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/stdarg-1.c"
    },
    {
      "type": "modify",
      "old_id": "69a2acbc3fafa5e0d63af75f9b1dff3ec251c71f",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/stdarg-2.c",
      "new_id": "a45e44e20962876f1d04fd622632339487cb5234",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/stdarg-2.c"
    },
    {
      "type": "modify",
      "old_id": "582bb075bfbb9c9839c65544af9310f6b5314c14",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/strcpy-3.c",
      "new_id": "d309e544731fe6847ec59f5fc734547421eca9ca",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/strcpy-3.c"
    },
    {
      "type": "modify",
      "old_id": "54e8ef1dd29e93f116a1190f2ea8f9be6dae00e7",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/strlen-1.c",
      "new_id": "90bb750a7018f4712eebe668f956a570aae97a13",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/strlen-1.c"
    },
    {
      "type": "modify",
      "old_id": "b7eda16ac876840d1081ab274975d3d9753d3219",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c",
      "new_id": "700387897d333d2e0cc397cb2e59f96bd73dd501",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c"
    },
    {
      "type": "modify",
      "old_id": "d5b10ab257273fd27f7671b3e50d71b5775328af",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-2.c",
      "new_id": "bf962f45779f974b11befc40daa6339fdfa5e5d7",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-2.c"
    },
    {
      "type": "modify",
      "old_id": "d01aaec8eea5f78b2ad5c034b8749f09df4e859f",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/torture/pr59037.c",
      "new_id": "4ac519a24b96d9a19bbb4f949c631b4103a3f282",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/torture/pr59037.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a5c4a6eff8153e59531ea4d43a139f7bd5a3481f",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/unknown-fns-5.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c4eee7e82df1d74c9eb3fbe1eacc04a9e599fb8e",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/unknown-fns-6.c"
    },
    {
      "type": "modify",
      "old_id": "905f0d79991ea32ac527d80c199c64bcfc7e12f5",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/analyzer/vla-1.c",
      "new_id": "05ace5bf9516d2d4087171525fdf17074e2ee132",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/analyzer/vla-1.c"
    },
    {
      "type": "modify",
      "old_id": "ec187860658ebfcf32592ce121a95f4a665274ab",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c",
      "new_id": "1759b5e412f7288ac315734d6bc4238c74659434",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c"
    },
    {
      "type": "modify",
      "old_id": "7466112fe1499618d3f57dbd218e3ce92713f67c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/plugin/infoleak-uninit-size-1.c",
      "new_id": "324a9111d80c46283503acc6de2083dd19845894",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/plugin/infoleak-uninit-size-1.c"
    },
    {
      "type": "modify",
      "old_id": "af320b6b17eee00835f629237385035ecaadc674",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/plugin/infoleak-vfio_iommu_type1.c",
      "new_id": "7e553dfec8c50132de2bb6a34f59d928176498ce",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/plugin/infoleak-vfio_iommu_type1.c"
    },
    {
      "type": "modify",
      "old_id": "29efab0c9bf9e17ede707e87f0438886c4860d43",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.dg/plugin/taint-pr112850-too-complex.c",
      "new_id": "d2fdd736422e39630d9174f6baac8e1f66536346",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.dg/plugin/taint-pr112850-too-complex.c"
    }
  ]
}
