mirror of
https://github.com/github/codeql.git
synced 2026-07-14 07:48:16 +02:00
A source underscore variable (an unused `_` in a `catch (_: E)` clause or a `val _ = ...` discard) is named differently by the two frontends: - K1 keeps the source spelling `_`. - K2 assigns the synthetic `SpecialNames.UNDERSCORE_FOR_UNUSED_VAR`, which renders as `<unused var>`. Decision (D15): adopt the K1 behaviour. `_` is the actual source token, so it is the more intuitive and source-faithful name; it also keeps the local variable name consistent with the corresponding value-parameter case, where a prior fix already normalises the underscore setter parameter to `_`. `extractVariableExpr` now maps a variable whose IR name is `SpecialNames.UNDERSCORE_FOR_UNUSED_VAR` to `_` before writing `localvars`. The check is on the special name rather than a raw string so it is robust across compiler versions, and it only fires for the frontend-synthesised unused-variable name, leaving all other locals untouched. Full dual-suite relearn: all 3333 tests pass. The only changed expected row is in query-tests/UnderscoreIdentifier, where the K2 catch parameter row converges from `Exception <unused var>` to `Exception _`, matching K1. The remaining divergence in that file (the destructuring container `<destruct>` vs `tmp0_container`) is a separate naming/location issue tracked under C14. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>