)]}'
{
  "commit": "207bbaec4b300579115979fac92bca106bc972c9",
  "tree": "4698dc120ff80c2617ea375a5528a0f49531e82b",
  "parents": [
    "611832f3397d49aef175bab4cf90b337df5f8f46"
  ],
  "author": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Fri Oct 09 03:17:36 2026"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Oct 09 03:17:36 2026"
  },
  "message": " Fuzzer: Emit more br_on_cast_desc_eq{_fail} (#9198)\n\nPreviously, br_on_cast_desc_eq and br_on_cast_desc_eq_fail were rarely\nemitted (~0.2 per module) because:\n1. makeBrOn had low selection weight despite covering 6 instructions.\n2. breakableStack searches stopped immediately on Type::none targets\n   (forcing br_on_null) and often lacked reference targets.\n3. Descriptor casts were only emitted when getSubType happened by\n   chance to pick a struct with a descriptor.\n\nFix this by:\n- Tracking described struct types by Shareability in describedTypes and\n  adding hasDescribedSubType / getDescribedSubType helpers.\n- Increasing makeBrOn weight to Important.\n- Preferring reference targets (especially those with described\n  subtypes) with randomness when searching breakableStack, and wrapping\n  in a new target block when makeBrOn is called for a reference type\n  without a suitable target.\n- Selecting BrOnCastDescEq and BrOnCastDescEqFail directly when\n  described subtypes are available instead of upgrading BrOnCast /\n  BrOnCastFail.\n\nAcross 200 fuzzer modules, this increases br_on_cast_desc_eq from 0.20\nto 2.69 per module (16.0% -\u003e 48.0% of modules) and\nbr_on_cast_desc_eq_fail from 0.18 to 2.88 per module (11.5% -\u003e 50.0% of\nmodules), while also increasing br_on_null from 27.40 to 34.46 per\nmodule.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e48707f9527fc0bf06a9cc11e32c705d2df5ce13",
      "old_mode": 33188,
      "old_path": "src/tools/fuzzing.h",
      "new_id": "214a9ad96d3f592d60d9b820e8bfb7aeddd628c5",
      "new_mode": 33188,
      "new_path": "src/tools/fuzzing.h"
    },
    {
      "type": "modify",
      "old_id": "f3cdd2aca0ec55fd3ebf0aefe648dc883f3e8293",
      "old_mode": 33188,
      "old_path": "src/tools/fuzzing/fuzzing.cpp",
      "new_id": "2e3fb68a8cbd4586ee3d7ee40fcd38f0113f99b8",
      "new_mode": 33188,
      "new_path": "src/tools/fuzzing/fuzzing.cpp"
    },
    {
      "type": "modify",
      "old_id": "618beb1979d850623a4fc1b9db3b3bd80ee4a1f9",
      "old_mode": 33188,
      "old_path": "test/passes/translate-to-fuzz_all-features_metrics_noprint.txt",
      "new_id": "dc16f301d636247df9605efe930a7ffcca14f4ef",
      "new_mode": 33188,
      "new_path": "test/passes/translate-to-fuzz_all-features_metrics_noprint.txt"
    }
  ]
}
