mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-11-15 15:38:10 +00:00
dependabot/github_actions/github-actions-major-8a185ec9c8
5986
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6f94206f2d |
Bump the github-actions-major group across 5 directories with 9 updates
Bumps the github-actions-major group with 7 updates in the / directory: | Package | From | To | | --- | --- | --- | | [dorny/paths-filter](https://github.com/dorny/paths-filter) | `3.0.2` | `4.0.3` | | [actions/checkout](https://github.com/actions/checkout) | `6.0.2` | `7.0.1` | | [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `8.1.0` | `10.3.3` | | [actions/configure-pages](https://github.com/actions/configure-pages) | `5.0.0` | `6.0.0` | | [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) | `4.0.0` | `5.0.0` | | [actions/deploy-pages](https://github.com/actions/deploy-pages) | `4.0.5` | `5.0.1` | | [actions/stale](https://github.com/actions/stale) | `9.0.0` | `11.0.0` | | [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) | `8.1.0` | `10.3.3` | | [dorny/paths-filter](https://github.com/dorny/paths-filter) | `3.0.2` | `4.0.3` | Bumps the github-actions-major group with 1 update in the /.github/actions/build-setup-common directory: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv). Bumps the github-actions-major group with 1 update in the /.github/actions/build-setup-macos directory: [actions/cache](https://github.com/actions/cache). Bumps the github-actions-major group with 2 updates in the /.github/actions/build-setup-ubuntu directory: [actions/cache](https://github.com/actions/cache) and [jlumbroso/free-disk-space](https://github.com/jlumbroso/free-disk-space). Bumps the github-actions-major group with 1 update in the /.github/actions/test-setup directory: [dorny/paths-filter](https://github.com/dorny/paths-filter). Updates `dorny/paths-filter` from 3.0.2 to 4.0.3 - [Release notes](https://github.com/dorny/paths-filter/releases) - [Changelog](https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md) - [Commits](https://github.com/dorny/paths-filter/compare/de90cc6fb38fc0963ad72b210f1f284cd68cea36...ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d) Updates `actions/checkout` from 6.0.2 to 7.0.1 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...3d3c42e5aac5ba805825da76410c181273ba90b1) Updates `astral-sh/setup-uv` from 8.1.0 to 10.3.3 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](https://github.com/astral-sh/setup-uv/compare/08807647e7069bb48b6ef5acd8ec9567f424441b...68559e99cc807c1eb7e9238fd43a15bba460eec2) Updates `actions/configure-pages` from 5.0.0 to 6.0.0 - [Release notes](https://github.com/actions/configure-pages/releases) - [Commits](https://github.com/actions/configure-pages/compare/983d7736d9b0ae728b81ab479565c72886d7745b...45bfe0192ca1faeb007ade9deae92b16b8254a0d) Updates `actions/upload-pages-artifact` from 4.0.0 to 5.0.0 - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](https://github.com/actions/upload-pages-artifact/compare/7b1f4a764d45c48632c6b24a0339c27f5614fb0b...fc324d3547104276b827a68afc52ff2a11cc49c9) Updates `actions/deploy-pages` from 4.0.5 to 5.0.1 - [Release notes](https://github.com/actions/deploy-pages/releases) - [Commits](https://github.com/actions/deploy-pages/compare/d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e...368f82528645a54fb793d4d04e342629a3f51346) Updates `actions/stale` from 9.0.0 to 11.0.0 - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/28ca1036281a5e5922ead5184a1bbf96e5fc984e...4391f3da665fdf50b6810c1a66712fb9ba21aa93) Updates `astral-sh/setup-uv` from 8.1.0 to 10.3.3 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](https://github.com/astral-sh/setup-uv/compare/08807647e7069bb48b6ef5acd8ec9567f424441b...68559e99cc807c1eb7e9238fd43a15bba460eec2) Updates `dorny/paths-filter` from 3.0.2 to 4.0.3 - [Release notes](https://github.com/dorny/paths-filter/releases) - [Changelog](https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md) - [Commits](https://github.com/dorny/paths-filter/compare/de90cc6fb38fc0963ad72b210f1f284cd68cea36...ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d) Updates `astral-sh/setup-uv` from 8.1.0 to 10.3.3 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](https://github.com/astral-sh/setup-uv/compare/08807647e7069bb48b6ef5acd8ec9567f424441b...68559e99cc807c1eb7e9238fd43a15bba460eec2) Updates `astral-sh/setup-uv` from 8.1.0 to 10.3.3 - [Release notes](https://github.com/astral-sh/setup-uv/releases) - [Commits](https://github.com/astral-sh/setup-uv/compare/08807647e7069bb48b6ef5acd8ec9567f424441b...68559e99cc807c1eb7e9238fd43a15bba460eec2) Updates `actions/cache` from 5.0.3 to 6.1.0 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/cdf6c1fa76f9f475f3d7449005a359c84ca0f306...55cc8345863c7cc4c66a329aec7e433d2d1c52a9) Updates `actions/cache` from 5.0.3 to 6.1.0 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/cdf6c1fa76f9f475f3d7449005a359c84ca0f306...55cc8345863c7cc4c66a329aec7e433d2d1c52a9) Updates `actions/cache` from 5.0.3 to 6.1.0 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/cdf6c1fa76f9f475f3d7449005a359c84ca0f306...55cc8345863c7cc4c66a329aec7e433d2d1c52a9) Updates `jlumbroso/free-disk-space` from 1.3.1 to 2.0.0 - [Release notes](https://github.com/jlumbroso/free-disk-space/releases) - [Commits](https://github.com/jlumbroso/free-disk-space/compare/54081f138730dfa15788a46383842cd2f914a1be...ceedf095f4ec1a097402bc6bd80831f2e1a6fde6) Updates `actions/cache` from 5.0.3 to 6.1.0 - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/cdf6c1fa76f9f475f3d7449005a359c84ca0f306...55cc8345863c7cc4c66a329aec7e433d2d1c52a9) Updates `dorny/paths-filter` from 3.0.2 to 4.0.3 - [Release notes](https://github.com/dorny/paths-filter/releases) - [Changelog](https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md) - [Commits](https://github.com/dorny/paths-filter/compare/de90cc6fb38fc0963ad72b210f1f284cd68cea36...ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d) Updates `dorny/paths-filter` from 3.0.2 to 4.0.3 - [Release notes](https://github.com/dorny/paths-filter/releases) - [Changelog](https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md) - [Commits](https://github.com/dorny/paths-filter/compare/de90cc6fb38fc0963ad72b210f1f284cd68cea36...ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d) --- updated-dependencies: - dependency-name: dorny/paths-filter dependency-version: 4.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/checkout dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: astral-sh/setup-uv dependency-version: 10.3.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/configure-pages dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/upload-pages-artifact dependency-version: 5.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/deploy-pages dependency-version: 5.0.1 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/stale dependency-version: 11.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: astral-sh/setup-uv dependency-version: 10.3.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: dorny/paths-filter dependency-version: 4.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: astral-sh/setup-uv dependency-version: 10.3.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: astral-sh/setup-uv dependency-version: 10.3.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/cache dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/cache dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/cache dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: jlumbroso/free-disk-space dependency-version: 2.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: actions/cache dependency-version: 6.1.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: dorny/paths-filter dependency-version: 4.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major - dependency-name: dorny/paths-filter dependency-version: 4.0.3 dependency-type: direct:production update-type: version-update:semver-major dependency-group: github-actions-major ... Signed-off-by: dependabot[bot] <support@github.com> |
||
|
|
5ae3dcaa92 |
allow trailing commas in a struct pattern after an _ field (#8074)
Following a leads decision (https://github.com/carbon-language/carbon-lang/issues/7404), this PR adds support for trailing commas in a struct pattern where it was previously only allowed after a full field. |
||
|
|
80a4a4d005 |
Fix detection of dependabot-authored descriptions (#8083)
Instead of looking for a marker within the description, look at the editor directly using the `gh` API querying capabilities. This lets us detect when we have the initial description, as well as when the description is updated by dependabot rebasing or recreating a PR. Also prunes URL prefixes that aren't needed. Assisted-by: Antigravity with Opus |
||
|
|
66f03aecb1 | Export class friends to C++ (#8068) | ||
|
|
5af3b7c47a | Try to silence a zizmor warning (#8078) | ||
|
|
9fb428d713 |
Ensure specific in ImplWitness has resolved definition before accessing witness table (#8040)
When impl lookup results in an `ImplWitness`, either directly or later through `LookupImplWitness` evaluating to an `ImplWitness` inside some specific, it represents a dependency on the eval blocks of the `ImplDecl` that the `ImplWitness` comes from. The `ImplWitness` contains a `SpecificId` of the `ImplDecl`, and the constants in the witness table must be viewed through that `SpecificId`. The constants may depend on the declaration or the definition block of the `ImplDecl`'s specific, so any use of the witness table from `ImplWitness` requires the specific from the `ImplWitness` to be fully resolved: both the decl and definition blocks. The specific declaration block is always resolved immediately when forming a specific id, so there's nothing to do there. And things are simple when the `ImplWitness` returned from impl lookup is concrete. We would simply resolve the specific definition directly in the evaluation of `LookupImplWitness`. But when the `ImplWitness` is symbolic, meaning there's a dependency on generic parameters in its referenced specific, then we have a dependency on resolving the specific definition in the `ImplWitness` for every specific that gets applied to the `ImplWitness`, eventually resulting in a concrete specific. Previously we attempted to do this by representing a dependency edge from the eval block containing the `ImplWitness` instruction to the definition block of the specific inside the `ImplWitness`. We represented this dependency edge with the `RequireSpecificDefinition` instruction. The challenge with the `RequireSpecificDefinition` instruction was ensuring it always landed in the _same eval block_ as the one holding the symbolic `ImplWitness`. Ultimately, we've found a way to do this without the `RequireSpecificDefinition`. The witness table is accessed through `ImplWitnessAccess`, so we resolve the specific definition before each access to the witness table. If the definition is already resolved, this just costs a lookup of the Specific from the value store. We document the other things we tried, which don't work or were too complex, below. In PR #6236, we added the `RequireSpecificDefinition` instruction in the eval of `LookupImplWitness`, but this is too late. If impl lookup resolved to a symbolic `LookupImplWitness`, the `LookupImplWitness` is added some eval block. Later, we form specifics and re-evaluate that eval block, and the `LookupImplWitness` can evaluate to an `ImplWitness`. Adding the `RequireSpecificDefinition` instruction at this point inserts the instruction into whatever generic's eval block happens to be on the top of the generic stack, not the eval block of the generic we are building a specific for. And indeed we can't add instructions to a generic's eval block later like this, as it would be missing from specifics that were already resolved for the generic. This incorrect insertion shows up as a crash in eval at the CHECK introduced but commented out in [eval.cpp in #7981](https://github.com/carbon-language/carbon-lang/blob/56d9bbc40add1e9263f2f9b2555c3a27292d1725/toolchain/check/eval.cpp#L3507-L3512). This is covered by the `require_specific_impl_definition_through_specific_instantiation.carbon` test. We tried moving the insertion of `RequireSpecificDefinition` to be earlier - at the point where the `LookupImplWitness` is constructed, in the `LookupImplWitness()` function, instead of inside evaluation. This seemed like a straightforwardly correct answer, as the eval block that contains the `LookupImplWitness` will then also contain the `RequireSpecificDefinition`. However, this can cause us to lose the `RequireSpecificDefinition` entirely. Because it's a separate instruction, not an operand of `LookupImplWitness`, it does not get treated as a dependency of the witness. When we do an impl lookup inside an `alias`, we build a generic for the alias and then discard it. This discards the eval block containing the `LookupImplWitness`. Then, in an enclosing generic, we refer to the constructed `AliasDecl` instruction, which pulls all its dependent operands into the enclosing eval block. This pulls in the `LookupImplWitness` into the enclosing eval block, but it does not preserve the `RequireSpecificDefinition`. This is covered by the `require_specific_impl_definition_from_lookup_impl_witness_in_class_definition.carbon` test. We tried having `ImplWitness` evaluation resolve the specific definition of the specific `ImplDecl` it refers to. This seems like the simplest approach by far as we should always be working with the correct eval block and nothing can get lost. However it does not work because of the recursive nature of `ImplWitness`. The `ImplWitness` instruction appears in the declaration of an `ImplDecl`, and the `ImplWitness` holds a `SpecificId` for that same `ImplDecl`. When building a specific `ImplDecl`, we evaluate the `ImplWitness` in the `ImplDecl`'s declaration block which then immediately resolves the specific definition before the declaration is finished. This leads to missing instructions in the specific definition. In short, this puts the dependency edge to the `ImplDecl`'s specific inside the `ImplDecl` itself, which is problematic. We tried wrapping `ImplWitness` in another instruction, `ImplWitnessUse`. Inside the `ImplDecl` declaration there is still `ImplWitness`, but then in the definition there is `ImplWitnessUse` and that is what is returned from the evaluation of `LookupImplWitness`. The `ImplWitnessUse` is an `ImplWitness` plus it ensures the specific referred to by the witness has its definition resolved. However this breaks constant comparisons, as we get different witnesses inside an impl versus outside. The first iteration of this PR's solution had us insert the `RequireSpecificDefinition` into the eval block when we sniffed a `LookupImplWitness` instruction, however that missed cases where impl lookup immediately resolved to a symbolic `ImplWitness`, which is why we now sniff for the `ImplWitness` in the eval block. This is covered by the `require_specific_impl_definition_from_symbolic_impl_in_class_definition.carbon` test. We also originally made a mistake of not inserting `RequireSpecificDefinition` when inside the impl definition that the `ImplWitness` refers to. But we can form specifics ImplWitness values through function signatures, and these must add the dependency edge on that specific ImplDecl definition. This is covered by the `require_specific_impl_definition_from_inside_impl_definition.carbon` test. Finally, we did have a working solution. It was to sniff instructions added to the eval block of a generic, and when an `ImplWitness` is added to the eval block (it is implied that it is symbolic), also add a `RequireSpecificDefinition` to that eval block immediately. We also resolved the definition of a specific referred to by `ImplWitness` when `LookupImplWitness` evaluates to `ImplWitness` to cover the concrete witness case. This complicated the construction of the eval block immensely, however. It caused a situation where adding one inst to the eval block actually adds two, which we needed to avoid when importing. And it required inst-kind specific behaviour in the very general construction of an eval block, completely outside of eval itself. |
||
|
|
b7919e8f50 |
Bump the github-actions group across 1 directory with 4 updates (#8080)
- `actions/download-artifact` 8.0.0 -> 8.0.2 - `actions/upload-artifact` 7.0.0 -> 7.0.2 - `reviewdog/action-setup` 1.3.0 -> 1.5.0 - `ruby/setup-ruby` 1.290.0 -> 1.335.0 Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
a7e2f3418f |
Setup dependabot updates for more layers, and improve commits (#8073)
This configures dependabot to update our GitHub actions, our pre-commit steps, and our Bazel modules. It also adds a workflow to replace PR descriptions from Dependabot with ones that work well with our squash-merge setup. Last but not least, a couple of cases were missing SHA-pinning and it is added here. Assisted-by: Antigravity with Gemini |
||
|
|
d99b767dde |
Export fields of imported Carbon classes to C++ (#8021)
When a Carbon class from another library was used from C++, its fields were never exported, so C++ member access failed with 'no member named'. The class scope of an imported class holds import references rather than `FieldDecl`s, so `LookupClassFieldByStructField` didn't find them. Resolve scope entries to their constant `FieldDecl`, load the import references before exporting fields, and consistently key exported fields by the `FieldDecl`. Unfortunately `SemIR::LookupClassFieldByStructField` can't call `LoadImportRef` because `SemIR::LookupClassFieldByStructField` is in `SemIR` and `LoadImportRef` needs a `Check::Context` (and `check` depends on `sem_ir`, not the other way around, so `sem_ir` can't use check). So instead, make a `Check::LookupClassFieldByStructField` that wraps the `SemIR` version, and does the `LoadImportRef` Assisted-By: Claude --------- Co-authored-by: Christopher Di Bella <cjdb.ns@gmail.com> |
||
|
|
be0f11be95 |
Build a generic scope around where expressions (#8062)
A `where` expression can have symbolic references to `.Self` inside it, but those references do not represent symbolic instructions that should be part of an enclosing generic eval block. They are internal details of the facet type, and as such they are PeriodSelfSymbolic, not Symbolic. The WhereExpr evaluation is careful to produce a Symbolic constant value only if it has symbolic dependencies on the LHS of the `where`, which avoids leaking the symbolic nature of `.Self` into he facet type's constant value. But until now, those PeriodSelfSymbolic insts could still leak into the enclosing eval block if they ended up in an operand of a Call expression. A compile-time Call expr evaluates to a TemplateSymbolic phase constant if it's not concrete, which includes PeriodSelfSymbolic, because we don't want to evaluate the Call expr until the `.Self` gets replaced during identify. But that means the Call constant value, and its operands including PeriodSelfSymbolic constants, all end up in the eval block. We fix this by making Call evaluate to a PeriodSelfSymbolic phase if its input phase is PeriodSelfSymbolic. This keeps the RHS of the `where` expression self-contained. If the facet type is concrete, then it doesn't add any instructions to the enclosing eval block (which may not exist at all in a non-generic context). Regardless, when we identify the facet type and replace `.Self`, the dependent Call expression will be rebuilt as well and it will evaluate as appropriate. We also enclose the `where` expression in its own generic scope. This means that instructions which are not part of the facet type do not end up in an eval block. They may be symbolic instructions, and they will not get updated by a specific when it's applied the enclosing generic anymore. But since they are not part of the facet type their substitution is not required. The new test had an incorrectly elided SpecificImplFunction instruction in the resulting semir, as SubstPeriodSelf was using the location of the input canonical instructions as the location for the results which resulted in an instruction without a location. We fix that by using `loc_id_` in the subst rebuild. Formatting now saw the initialization of a value from an `eval fn` call to a function in a witness table, so it needed to be taught to look through ImplWitnessAssociatedConstant (which is what we find in the witness table). |
||
|
|
5c9ab26d74 |
Give Carbon thunks for C++ callers linkonce_odr linkage (#8022)
This allows two C++ callers to the same Carbon function, written in different Carbon files, to generate thunks that won't collide/duplicate symbol at link time - instead the thunks get deduplicated silently by the linker. |
||
|
|
8fc87ebf76 |
Add manual installation commands for syntax highlighting in Neovim (#8038)
[Carbon Syntax Highlighting for Vim & Neovim][1] is missing manual installation commands for Neovim. Custom syntax files have to be present in `~/.config/nvim/syntax/` ([source][2]) and filetypes in `~/.config/nvim/ftdetect` ([source][3]). [1]: https://github.com/carbon-language/carbon-lang/tree/trunk/utils/vim [2]: https://neovim.io/doc/user/syntax/#mysyntaxfile [3]: https://neovim.io/doc/user/filetype/#new-filetype Co-authored-by: Christopher Di Bella <cjdb@google.com> |
||
|
|
68569d234d |
Improve lexer and parser diagnostic locations (#7990)
Lexer diagnostics used a single `const char*` as their source location, which only allowed pointing at a single character rather than a run of characters. This limited the underlining of unrecognized tokens, and also made escape sequence diagnostics particularly strange by stopping at whatever point the lexer discovered the error and pointing only at that location. For example: `"\w"` was reported at the `w`, and `"\x"` at the closing `"`. This change tries to always keep the primary location of a diagnostic the point at which typing (inserting or deleting) might fix the error. So for `"\x"`, `\x` is underlined, but the position is at the `"` as that's where you would type a hex code. The lexer's emitter now takes a special lexing source location that represents either a single position _between_ two characters, a single character, or a range of the source buffer. The lexer diagnostics are updated to construct these for the character range as appropriate. Parser diagnostics for a missing token were located at the _next_ token, which is particularly confusing for terminators like missing `;`s. Now they are located at a position after the previous token, with or without a space depending on the token, but typically on the same line. Diagnostics still sort by how far the parser has read. The parser diagnostics for unclosed groups also now attaches a label to the opening token when it is on a separate line. And the diagnostics for mismatched indent in a multi-line string attaches a label to the closing `'''` that establishes that indent. There are likely more location improvements we should do here, but this seemed like a reasonable incremental improvement and is what Claude found when doing an initial audit. One example where I think we should make further improvements is around suggesting raw identifiers when we find an unexpected `Cpp` or `Core` or `base`. We do this consistently now, but raw identifiers should be rare. A TODO is added for these cases. Assisted-by: Claude Code --------- Co-authored-by: Richard Smith <richard@metafoo.co.uk> |
||
|
|
611e6a210e |
Bump the npm_and_yarn group across 1 directory with 3 updates (#8067)
Bumps the npm_and_yarn group with 3 updates in the /utils/vscode directory: [@azure/msal-node](https://github.com/AzureAD/microsoft-authentication-library-for-js), [qs](https://github.com/ljharb/qs) and [undici](https://github.com/nodejs/undici). Updates `@azure/msal-node` from 5.1.4 to 7.1.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/releases">@azure/msal-node's releases</a>.</em></p> <blockquote> <h2><code>@azure/msal-node</code> v7.1.2</h2> <h2>7.1.2</h2> <p>Tue, 27 Oct 2026 18:15:10 GMT</p> <h3>Patches</h3> <ul> <li>Bump <code>@azure/msal-common</code> to v16.15.0 (beachball)</li> </ul> <h2><code>@azure/msal-node</code> v7.1.1</h2> <h2>7.1.1</h2> <p>Wed, 21 Oct 2026 18:37:17 GMT</p> <h3>Patches</h3> <ul> <li>Bump <code>@azure/msal-common</code> to v16.14.3 (beachball)</li> </ul> <h2><code>@azure/msal-node</code> v7.1.0</h2> <h2>7.1.0</h2> <p>Tue, 13 Oct 2026 22:26:37 GMT</p> <h3>Minor changes</h3> <ul> <li>Sanitize authorization code payloads and reject unsupported instance-aware inputs for confidential clients. <a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/pull/8901">#8901</a> (<a href="mailto:hemoral@microsoft.com">hemoral@microsoft.com</a>)</li> </ul> <h2><code>@azure/msal-node</code> v7.0.2</h2> <h2>7.0.2</h2> <p>Tue, 13 Oct 2026 19:04:36 GMT</p> <h3>Patches</h3> <ul> <li>Sanitize authorization code payloads and reject unsupported instance-aware inputs for confidential clients. <a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/pull/8901">#8901</a> (<a href="mailto:rginsburg@microsoft.com">rginsburg@microsoft.com</a>)</li> </ul> <h2><code>@azure/msal-node</code> v7.0.1</h2> <h2>7.0.1</h2> <p>Fri, 02 Oct 2026 19:03:42 GMT</p> <h3>Patches</h3> <ul> <li>Bump <code>@azure/msal-common</code> to v16.14.2 (beachball)</li> </ul> <h2><code>@azure/msal-node</code> v7.0.0</h2> <h2>7.0.0</h2> <p>Wed, 23 Sep 2026 15:49:44 GMT</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/96488ec6e583adbfd2940374c62d9c70e4327165"><code>96488ec</code></a> Clarify authority discovery trust model (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8938">#8938</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/95e5031808e1e290468a7d9d783fdeea1d7ec3a4"><code>95e5031</code></a> Handle response headers case-insensitively (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8916">#8916</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/01b6a8fdda1bf6373ca87085df47ba392eab3f57"><code>01b6a8f</code></a> Introduce "popup origin check done" param (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8793">#8793</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/0f98b8ca3718486015e2b13600943e92fd10d1fb"><code>0f98b8c</code></a> Improve redirect response URL cleanup (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8918">#8918</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/4cf9a6156da7967efbaac18501a8de94269a38b1"><code>4cf9a61</code></a> Post-release PR (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8925">#8925</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/16a4714f38ba2844f34d154dd59dd8f1402457c9"><code>16a4714</code></a> Fix web silent-request deduplication for refresh policies and extra parameter...</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/bd8b2cdfb4d476b008442902fd799d321f1c5b2b"><code>bd8b2cd</code></a> Fallback from EAR to auth code flow in Safari (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8903">#8903</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/a9a1221ac325f30e73fd4d6cfbb4c0636a3ffcbe"><code>a9a1221</code></a> Native Auth V2 entry and validation fixes (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8898">#8898</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/8bd17ffb63577f2b0ccd9013b20a3ab93b8e08e7"><code>8bd17ff</code></a> chore: update basic-ftp to patched 6.2.2 (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8915">#8915</a>)</li> <li><a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/commit/4d1e6f9516df2d0d21b8537010bbd8afd5bffe4c"><code>4d1e6f9</code></a> build(deps): bump dorny/paths-filter from 3.0.4 to 4.0.3 (<a href="https://redirect.github.com/AzureAD/microsoft-authentication-library-for-js/issues/8841">#8841</a>)</li> <li>Additional commits viewable in <a href="https://github.com/AzureAD/microsoft-authentication-library-for-js/compare/msal-node-v5.1.4...msal-node-v7.1.2">compare view</a></li> </ul> </details> <br /> Updates `qs` from 6.15.2 to 6.17.1 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/ljharb/qs/blob/main/CHANGELOG.md">qs's changelog</a>.</em></p> <blockquote> <h2><strong>6.17.1</strong></h2> <ul> <li>[Fix] <code>parse</code>: <code>interpretNumericEntities</code>: decode code points above U+FFFF as surrogate pairs (<a href="https://redirect.github.com/ljharb/qs/issues/640">#640</a>)</li> <li>[Fix] <code>parse</code>: respect <code>plainObjects</code> for <code>[]</code> with <code>parseArrays: false</code> (<a href="https://redirect.github.com/ljharb/qs/issues/639">#639</a>)</li> <li>[Fix] <code>utils</code>: <code>merge</code>: count the elements of a sparse array against <code>arrayLimit</code>, not its holes</li> <li>[Fix] <code>parse</code>: guard bracket-wrapped prototype keys at depth 0 (<a href="https://redirect.github.com/ljharb/qs/issues/638">#638</a>)</li> <li>[Refactor] <code>parse</code>: extract wrapping-bracket stripping helper</li> <li>[readme] document that <code>depth: 0</code> and <code>depth: false</code> keep keys flat</li> <li>[Tests] <code>parse</code>: pin depth-0 bracket stripping and prototype keys kept by <code>allowPrototypes</code>/<code>plainObjects</code></li> </ul> <h2><strong>6.17.0</strong></h2> <ul> <li>[New] <code>stringify</code>: add <code>WHATWG</code> format (<a href="https://redirect.github.com/ljharb/qs/issues/623">#623</a>)</li> <li>[Fix] <code>stringify</code>: do not sort the caller's <code>filter</code> array in place (<a href="https://redirect.github.com/ljharb/qs/issues/637">#637</a>)</li> <li>[Fix] <code>parse</code>: copy an own <code>__proto__</code> key as data (<a href="https://redirect.github.com/ljharb/qs/issues/636">#636</a>)</li> <li>[Fix] <code>parse</code>: decode percent-encoded dots case-insensitively (<a href="https://redirect.github.com/ljharb/qs/issues/635">#635</a>)</li> <li>[Fix] <code>stringify</code>: encode keys when <code>allowEmptyArrays</code> is set (<a href="https://redirect.github.com/ljharb/qs/issues/561">#561</a>)</li> <li>[Fix] <code>parse</code>: preserve comma arrays when interpreting numeric entities (<a href="https://redirect.github.com/ljharb/qs/issues/630">#630</a>)</li> <li>[Fix] <code>parse</code>: allow scalar fields with a zero array limit (<a href="https://redirect.github.com/ljharb/qs/issues/627">#627</a>)</li> <li>[Fix] <code>parse</code>: do not count an existing comma array toward <code>arrayLimit</code> when <code>duplicates</code> discards or replaces it</li> <li>[Fix] <code>utils</code>: <code>encode</code>: encode lone surrogates as U+FFFD instead of consuming the next code unit (<a href="https://redirect.github.com/ljharb/qs/issues/624">#624</a>)</li> <li>[eslint] fix indentation</li> <li>[readme] document the encoder's <code>format</code> argument</li> <li>[meta] add changelog acknowledgement</li> <li>[meta] fix changelog indents</li> <li>[Dev Deps] update <code>eslint</code>, <code>evalmd</code>, <code>npmignore</code></li> <li>[Tests] <code>stringify</code>: pin <code>allowEmptyArrays</code> output for keys that need no encoding</li> <li>[Tests] <code>stringify</code>: pin <code>sort</code> order for nested keys selected by an array <code>filter</code></li> <li>[Tests] <code>parse</code>: cover <code>interpretNumericEntities</code> across value shapes, keys, and the charset sentinel</li> <li>[Tests] <code>parse</code>: cover more input that builds no array at a zero or negative <code>arrayLimit</code></li> <li>[Tests] <code>parse</code>: cover <code>comma</code> with a zero or negative <code>arrayLimit</code>, and combining a full comma array</li> <li>[Tests] <code>parse</code>: pin the behavior of a zero or negative <code>arrayLimit</code></li> <li>[Tests] <code>utils</code>/<code>stringify</code>: pin <code>~</code>, <code>*</code>, and parens encoding in RFC3986 and RFC1738</li> </ul> <h2><strong>6.16.2</strong></h2> <ul> <li>[Fix] <code>stringify</code>: encode keys when <code>allowEmptyArrays</code> is set (<a href="https://redirect.github.com/ljharb/qs/issues/561">#561</a>)</li> <li>[meta] use double quotes for better OS support</li> <li>[Dev Deps] update <code>evalmd</code>, <code>npmignore</code></li> <li>[Tests] <code>stringify</code>: pin <code>allowEmptyArrays</code> output for keys that need no encoding</li> </ul> <h2><strong>6.16.1</strong></h2> <ul> <li>[Fix] <code>parse</code>: do not mutate an object input</li> <li>[Fix] <code>stringify</code>: stop re-encoding structural separator dots when <code>encodeDotInKeys</code> is set (<a href="https://redirect.github.com/ljharb/qs/issues/564">#564</a>)</li> <li>[Fix] <code>stringify</code>: <code>arrayFormat: 'comma'</code>: pass the full encoder arguments with <code>encodeValuesOnly</code></li> <li>[Fix] <code>utils</code>: encode <code>+</code> as <code>%2B</code> in iso-8859-1 mode so values round-trip (<a href="https://redirect.github.com/ljharb/qs/issues/565">#565</a>)</li> <li>[Fix] parse: only convert top-level dots to brackets when allowDots is on (<a href="https://redirect.github.com/ljharb/qs/issues/621">#621</a>)</li> <li>[Fix] <code>stringify</code>: ignore inherited array format names (<a href="https://redirect.github.com/ljharb/qs/issues/622">#622</a>)</li> <li>[Fix] <code>stringify</code>: <code>arrayFormat: 'comma'</code>: do not throw on elements with no callable <code>toString</code></li> <li>[Fix] <code>utils</code>: <code>merge</code>: seed an overflow container's index from its own keys, not just the source</li> <li>[Fix] <code>utils</code>: <code>merge</code>: keep a <code>strictMerge</code> conflict container's index and <code>arrayLimit</code> correct</li> <li>[Fix] <code>parse</code>: only treat <code>[]</code> as array syntax when it ends the key</li> <li>[Perf] <code>decode</code>: skip decoders when there is no percent sign (<a href="https://redirect.github.com/ljharb/qs/issues/583">#583</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/ljharb/qs/commit/43baea4655cb9b543fb1c5cc0db95cde42852140"><code>43baea4</code></a> v6.17.1</li> <li><a href="https://github.com/ljharb/qs/commit/54623b64dcef77a436b834b0413cf4cbb6bc6927"><code>54623b6</code></a> [Fix] <code>parse</code>: <code>interpretNumericEntities</code>: decode code points above U+FFFF as...</li> <li><a href="https://github.com/ljharb/qs/commit/7924b65958d41cd91dbaf688f61e7029673eb33f"><code>7924b65</code></a> [Fix] <code>parse</code>: respect <code>plainObjects</code> for <code>[]</code> with <code>parseArrays: false</code></li> <li><a href="https://github.com/ljharb/qs/commit/7d4b440de3c028e8497544d0474d5264d9d2bad9"><code>7d4b440</code></a> [readme] document that <code>depth: 0</code> and <code>depth: false</code> keep keys flat</li> <li><a href="https://github.com/ljharb/qs/commit/101492a5c4d9cb72f6510ecc15483759ec8e45fa"><code>101492a</code></a> [Fix] <code>utils</code>: <code>merge</code>: count the elements of a sparse array against `arrayLi...</li> <li><a href="https://github.com/ljharb/qs/commit/42eccf0f6292c502fb4bc175191f0812d5476769"><code>42eccf0</code></a> [Fix] <code>parse</code>: guard bracket-wrapped prototype keys at depth 0</li> <li><a href="https://github.com/ljharb/qs/commit/ae0b5c7481fcc6483c4d8ff875e290b2387f87b6"><code>ae0b5c7</code></a> [Refactor] <code>parse</code>: extract wrapping-bracket stripping helper</li> <li><a href="https://github.com/ljharb/qs/commit/6459f9fc5e5036cfdb6e120fcb94df8e48f584df"><code>6459f9f</code></a> [Tests] <code>parse</code>: pin depth-0 bracket stripping and prototype keys kept by `al...</li> <li><a href="https://github.com/ljharb/qs/commit/cb6855c1eb72eb0a3ef549b3cf9fce904e6263ec"><code>cb6855c</code></a> Merge backport release tags v6.12.6–v6.16.2 into main</li> <li><a href="https://github.com/ljharb/qs/commit/136912a619c2d81c090ca196ea02b6c193580d1d"><code>136912a</code></a> v6.16.2</li> <li>Additional commits viewable in <a href="https://github.com/ljharb/qs/compare/v6.15.2...v6.17.1">compare view</a></li> </ul> </details> <br /> Updates `undici` from 7.30.0 to 7.30.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/nodejs/undici/releases">undici's releases</a>.</em></p> <blockquote> <h2>v7.30.1</h2> <h2>Security fixes</h2> <h3>High severity</h3> <h4>Denial of service via TLS 1.2 certificate-changing renegotiation</h4> <p><strong>CVE-2026-87018 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-qrxm-fqhp-jwvm">GHSA-qrxm-fqhp-jwvm</a></strong></p> <p>A malicious or compromised HTTPS server could crash the Node.js process by initiating TLS 1.2 renegotiation and presenting a different, CA-trusted certificate whose hostname did not match the requested host. The resulting socket error reached an assertion in undici's HTTP/1.1 and HTTP/2 connection handling. This release handles post-connect certificate errors without terminating the process.</p> <h4>TLS certificate validation bypass through dropped <code>Agent</code> options</h4> <p><strong>CVE-2026-109383 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-2m5v-pch6-74hx">GHSA-2m5v-pch6-74hx</a></strong></p> <p><code>Agent</code> used a JSON-based clone for constructor options, which silently removed function-valued TLS options such as <code>checkServerIdentity</code>. Applications relying on custom certificate or public-key verification could therefore accept a certificate that the callback was intended to reject. This release preserves TLS options when creating per-origin dispatchers.</p> <h4>Cache poisoning and cross-user disclosure through cross-origin redirects</h4> <p><strong>CVE-2026-109829 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-4w7w-5xrc-9h26">GHSA-4w7w-5xrc-9h26</a></strong></p> <p>When an originless <code>Agent</code> combined redirect and shared-cache interceptors as <code>compose(redirect(), cache())</code>, a response from a cross-origin redirect could be stored under the original URL. This could allow persistent cache poisoning or disclosure of user-specific responses to later callers. This release verifies the response origin before caching and preserves redirect-hop cache-control policy.</p> <h4>Denial of service through excessive <code>Content-Encoding</code> values</h4> <p><strong>CVE-2026-109869 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-xjj6-f33q-929c">GHSA-xjj6-f33q-929c</a></strong></p> <p>A malicious HTTP server could crash the Node.js process by returning more than five content codings and closing the connection before sending the body. Although <code>fetch()</code> rejected the response, an error from an orphaned internal stream could remain unhandled. This release validates the content-encoding chain before creating the body stream and aborts oversized chains safely.</p> <h3>Medium severity</h3> <h4>Denial of service through the <code>decompress</code> interceptor</h4> <p><strong>CVE-2026-87029 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-55wc-3pg8-jfw6">GHSA-55wc-3pg8-jfw6</a></strong></p> <p>An exception thrown by a downstream response handler from an asynchronous decompression callback could escape as an uncaught exception. A server could trigger this when <code>decompress</code> was composed with a handler such as <code>dump</code> with a size limit. This release converts downstream handler exceptions into per-request errors.</p> <h4>Subresource Integrity bypass with non-lowercase algorithm tokens</h4> <p><strong>CVE-2026-109841 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-f72v-6w45-q472">GHSA-f72v-6w45-q472</a></strong></p> <p><code>fetch()</code> treated valid mixed-case or uppercase SRI algorithm tokens, such as <code>SHA256</code>, as unknown and could accept a response whose body did not match the configured digest. This release normalizes algorithm tokens before validation and digest selection.</p> <h4>Denial of service through unbounded EventSource parser state</h4> <p><strong>CVE-2026-109924 · <a href="https://github.com/nodejs/undici/security/advisories/GHSA-4qv8-2p9j-2685">GHSA-4qv8-2p9j-2685</a></strong></p> <p>A malicious Server-Sent Events endpoint could exhaust process memory by sending many tiny <code>data:</code> fields without completing an event, or by splitting an unfinished line across many chunks. This release bounds retained EventSource parser state, including field counts, buffered chunks, unfinished-line length, and retained field data.</p> <h4>Denial of service through unbounded automatic WebSocket PONG buffering</h4> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/nodejs/undici/commit/7507102a675b082a71437f0a00681e537875556c"><code>7507102</code></a> Bumped v7.30.1 (<a href="https://redirect.github.com/nodejs/undici/issues/6022">#6022</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/7d60c7b6ee342d3b5489beef02a88e3da72d6463"><code>7d60c7b</code></a> [v7.x] fix(cookies): backport <a href="https://redirect.github.com/nodejs/undici/issues/5663">#5663</a>, <a href="https://redirect.github.com/nodejs/undici/issues/5808">#5808</a> and <a href="https://redirect.github.com/nodejs/undici/issues/5832">#5832</a> (<a href="https://redirect.github.com/nodejs/undici/issues/6019">#6019</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/0227d5de51ed14d88a95e2cd4c01abddfce9b5fc"><code>0227d5d</code></a> fix: avoid unbounded recursion in Set-Cookie attribute parser (<a href="https://redirect.github.com/nodejs/undici/issues/5757">#5757</a>) (<a href="https://redirect.github.com/nodejs/undici/issues/5997">#5997</a>)</li> <li><a href="https://github.com/nodejs/undici/commit/53944624462b6797560288c55dbd8c66857bb495"><code>5394462</code></a> fix(websocket): bound automatic PONG writes under backpressure</li> <li><a href="https://github.com/nodejs/undici/commit/299162740d5f39120092277e70efacb4d151c1c6"><code>2991627</code></a> fix(eventsource): bound retained SSE parser state</li> <li><a href="https://github.com/nodejs/undici/commit/18bc8a1e09d15bc45815154a289dcf6fd5254d00"><code>18bc8a1</code></a> fix(sri): accept non-lowercase algorithm tokens</li> <li><a href="https://github.com/nodejs/undici/commit/63cba7712ca012b2603c6aeeb4c72d8692332cd0"><code>63cba77</code></a> fix(decompress): converge downstream handler throws to per-request errors</li> <li><a href="https://github.com/nodejs/undici/commit/07ded4941b1e72afec862958c3b8ddf468f3b429"><code>07ded49</code></a> fix(fetch): abort excessive content encoding responses</li> <li><a href="https://github.com/nodejs/undici/commit/b20b82ad80a405a12b6ce1f341bcd418de390aa0"><code>b20b82a</code></a> fix(cache): prevent cross-origin redirect cache confusion</li> <li><a href="https://github.com/nodejs/undici/commit/04cb74b1db131ff8f5b4557dce811cbf5f4664b4"><code>04cb74b</code></a> fix: preserve Agent connection options</li> <li>Additional commits viewable in <a href="https://github.com/nodejs/undici/compare/v7.30.0...v7.30.1">compare view</a></li> </ul> </details> <br /> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
ff0d3ff107 |
Add another C++ keyword to avoid: enum (#8069)
I've seen at least one failure on a PR because of randomly producing this as an identifier. |
||
|
|
c0eee3e0bd |
Updates harden-runner and tries to stabilize (#8071)
2.22.3 appears to fix blocking legitimate connections to GitHub infrastructure, which aligns with numerous flakes we've seen in our actions recently. There is also a fix to `prek`'s configuration to allow a URL that we already allow in other workflows. I'm also looking at how to automate all af this. Assisted-by: Antigravity with Opus |
||
|
|
c608c35e12 |
Rework the initial terminal rendering into the form the design landed on (#7994)
There were a number of iterations on the design that weren't reflected in the initial port to the terminal rendering library. This PR tries to complete the rendering side of things to match the design we landed on: code-focused, with messages attached by lines to the code, and condensed as much as possible to avoid the vertical space. It also improves the styling to make things more visually distinguishable such as adding a `->` to the main error line, and making the underlines and connectors for it have a heavy weight (when the font supports that). Another major change is having multiple messages on a single line be drawn in source lexical order. This requires the connectors to cross without joining, but makes it easier to read the messages. This PR also has some refactorings to enable these improvements, and a _number_ of improvements to comment prose and terminology to try and avoid jargon and make things read more naturally. Sorry for the fact that Claude left a bunch of this mannerly language in comments despite my efforts, but I'm continuing to try and drive the prose towards something direct and simple to read. Some of the terminology improvements also needed to be made in the design doc and those have been made here. Note that I don't think this rendering is perfect or should be viewed as final. I'm happy to iterate on it further, and have a few adjustments in mind already, but would like to focus this on getting the _implementation_ of the current rendering design in place, and then we can make targeted changes or tweaks as needed. For example, I'm not yet fully happy with the rendering when messages are too long and we move them all the way to the left, but am leaving that for a follow-up. Assisted-by: Claude Code |
||
|
|
5a614167c2 |
Update macos runners from 14 to 26 (#8064)
The macos-14 runners are being deprecated: https://github.com/actions/runner-images/issues/13518 Add `formulae.brew.sh` and `pkg-containers.githubusercontent.com` to the list of allowed endpoints. These are needed for `brew` on the new runners. |
||
|
|
c6b54b57e2 |
Add check support for struct patterns (#7876)
Implements check and pattern matching support for struct patterns. This PR implements complete patterns, and leaves `_` field handling for future work. |
||
|
|
3ee012b86a |
Upgrade j178/prek-action to v3.1.0 (#8065)
The previous "v2" commit hash was pointed at a commit that is no longer in the repository. There is a v2 tag, but it points at a different commit. Upgrade to the latest release. (Starting in 3.0.1, the releases are now immutable.) |
||
|
|
54f37b35bd |
Fix Carbon methods always being exported as public to C++ (#8063)
Add access tests for private fields and methods, in both regular classes and generic. Modify `BuildCppToCarbonThunkDecl` to properly set the access rather than always using public. Also add `static` to a method that isn't used outside export.cpp. |
||
|
|
fda41783e5 |
Extend and adjust the terminal API for the diagnostics rendering (#7993)
The rendering we're trying to implement based on `toolchain/docs/diagnostics_rendering.md` needs some features the initial terminal API didn't support: - Heavy stroke weight on lines - Vertical lines that cross earlier lines without joining them - Wrapping that keeps quoted code whole This PR adds support for these and removes the two `buffer.h` TODOs that described them. This PR also tries to improve the ASCII fallback quality a bit by using `^`-lines for "heavy" weight, and using `.` and `'` when drawing tees. Still not perfect of course, but seems reasonable given the constraints of ASCII rendering. Assisted-by: Claude Code |
||
|
|
39e69f0b4f |
Address a subtle instability in source_gen and shard its tests (#8052)
Previously, it was possible for rounding to result in small percentage constructs to be dropped entirely, breaking invariants. For example, when generating >100 entities, a 2% share should reliably be >=2. Some parts of source gen already propagated remainders to avoid exactly this issue, but we weren't propagating them everywhere, notably across depths and different definitions in plans. We fix this by introducing a helper for this more robust form of percent scaling that carries remainders across the slices. It also seeds this rounding from Phi across [0,100) to keep the edge cases uniformly distributed without causing instability from the source generator's seed. The seeded remainder doesn't impact providing the invariant, so the fix should be durable. Once this is done, we can shard the tests without the separate processes allowing the above failure mode to occur. Assisted-by: Antigravity with Gemini --------- Co-authored-by: Richard Smith <richard@metafoo.co.uk> |
||
|
|
4abb6100e7 |
Define exported C++ thunks in the LLVM function Clang uses for them (#8060)
Carbon gives the C++ declaration of an exported Carbon thunk an asm label that includes the target's global symbol prefix (`_` on Mach-O). Clang names a declaration with an asm label `\01<label>` in the IR, so that LLVM uses the label verbatim as the symbol name, while Carbon lowered the thunk definition under its unprefixed name. Both name the same symbol, but they were distinct globals in the IR, so LLVM couldn't see that the C++ calls refer to the Carbon definition. That only works while the definition is never discarded. Mark the Carbon thunk as a `CppThunk` (as described in `toolchain/docs/check/cpp/thunks.md`), record its C++ declaration in `clang_decls`, and when lowering the thunk, ask Clang for its function (creating it if necessary) and define the thunk in that function. This means that the thunk and the C++ calls to it always use the same IR global, with Clang's name and signature. The thunk takes all of its parameters by reference, so Clang lowers its parameters the same way Carbon does, but some C++ ABIs (such as Apple arm64) return `this` from constructors. In that case, return the parameter that Clang marks `returned`. On targets without a global prefix, the IR names already matched, so the only change is that the thunk definitions now carry Clang's parameter and function attributes. |
||
|
|
9192ee0032 |
Make TokenInfo use a single 32-bit store for initialization. (#8054)
We need to zero-initialize the `token_payload_` bits in order for the normal creation to just be zeroing the whole structure. We do this only when MSan isn't enabled so we don't lose bit-accurate bug detection. Assisted-by: Antigravity with Gemini |
||
|
|
07718a8329 |
Switch symbol token to be templated on its character to simplify its dispatch (#8041)
Instead of using a table to select a bool parameter, this embeds the first character as a template parameter and uses `if constexpr` in the dispatch body to only test multi-character symbols with that start with that character. Also template the one-char symbol lexing dispatch routines to remove runtime lookup in the bool table, and use constexpr property queries of the token kinds. Last but not least, add a table to precompute a table at compile time to synthesize `LexError` based on the last byte. Benchmark results (./scripts/bench_runner.py --runs=12, -march=x86-64-v3): - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Lex>/65536: CPU Time: -5.297% - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Lex>/262144: CPU Time: -4.936% - BM_RandomSource: CPU Time: -4.475%, tokens_per_second: +4.684% - BM_GroupingSymbols/32/32/32: CPU Time: -3.215%, tokens_per_second: +3.321% Assisted-by: Antigravity with Gemini |
||
|
|
22f3cd3539 |
Factor hot functions in the parser's Context to allow fast path inlining (#8053)
This moves the fast path of several functions into the header, and extracts and sinks the slow paths into cold-attributed out-of-line functions. The result is that the large cold code is separated and the fast path is easily inlined into callers. Also does some factoring to have the simplest and most minimal dispatch to the cold paths throughout. Benchmark results (./scripts/bench_runner.py --runs=12, -march=x86-64-v3): - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Parse>/16384: CPU Time: -7.285% - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Parse>/65536: CPU Time: -6.995% - BM_CompileImplFile<Lang::Carbon, Phase::Parse>/16384: CPU Time: -7.341% - BM_CompileImplFile<Lang::Carbon, Phase::Parse>/65536: CPU Time: -5.805% Assisted-by: Antigravity with various models |
||
|
|
6d51427790 |
Add tests for generic terse function declarations. (#8051)
We have test coverage for both features in isolation, but it seems worthwhile having coverage for the combination of the two. |
||
|
|
0421bf3b43 |
Optimize token kinds and whitespace flags (#8044)
Currently, these lookup the token in its `ValueStore`, and then access the kind and flag from that. This is near-optimal in the lexer while _writing_ the tokens, but ends up being considerably slower in parsing when the overhead of digging the token out of the value store dominates the actual use case. This PR does an struct-of-arrays reorganization of the kinds and whitespace flags, but only after lexing. This lets lexing write a linear series of info structs, and only afterward re-organize into a query-optimized representation that is a struct of arrays. However, to make this a net performance gain, we have to create the arrays _very_ efficiently. We can avoid hand-written assembly here by very carefully and precisely writing the inner loop to build these arrays so that LLVM will vectorize it into high-quality SIMD code for us across both x86 and Arm. We also need the arrays to have a particular shape (for example, using a `SmallVector<bool>` rather than a `BitVector`) in order to preserve this vectorized creation. It burns a tiny amount of memory, but is key to the whole thing being a net win of 5% to 10% across parsing. Benchmark results (./scripts/bench_runner.py --runs=12, -march=x86-64-v3): - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Parse>/16384: CPU Time: -9.045% - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Parse>/65536: CPU Time: -6.526% - BM_CompileImplFile<Lang::Carbon, Phase::Parse>/16384: CPU Time: -9.275% - BM_CompileImplFile<Lang::Carbon, Phase::Parse>/65536: CPU Time: -8.382% Assisted-by: Antigravity with both Gemini and Claude |
||
|
|
e6fddcf975 |
Add all stores in File to CollectMemUsage (#8050)
A number of stores have been added to File without updating CollectMemUsage. Add all the stores that were missed, ordering everything by the order the fields appear in the class. Also include the filename_ string, which requires a new overload of Collect, since strings are like vectors of chars. |
||
|
|
c008bec1a5 |
Fix clang-tidy issue with the u suffix (#8047)
Assisted-by: Antigravity with Gemini |
||
|
|
f27a977d86 |
Fix ASan CI failures due to preserve_none (#8045)
These only show up post-merge as we're only running ASan there. This disables the recent `[[clang::preserve_none]]` optimization when ASan is enabled as there is an LLVM bug on AArch64 that causes register corruption with that calling convention. This is factored into a common helper library so we can use it in other places as well. Assisted-by: Antigravity with Gemini |
||
|
|
a450026679 |
Clarify the infinitely recursive types through interop test (#8046)
This test generates an infinite recursion between Carbon and C++ making a new type at each step through the recursion, producing an infinite number of types. We improve the test in a few ways: - Remove direct dependencies on min_prelude parts, we should just depend on a single min_prelude, and not `import Core` explicitly. - Remove a dependency on `i32` so we rely on less prelude. - Remove the use of pointers, which currently introduce a dependency on `Optional`, so we rely on less prelude. Instead use a generic `Wrap(T)` type that we nest repeatedly to generate types. - Add some comments and expand function names to help explain the behaviour being tested Now the test just depends on the convert.carbon prelude, which makes it much simpler when running under a debugger. |
||
|
|
33863ed07c |
Enhance benchmark source to have more call expressions (#8029)
This adds free function declarations to the top of the source and
adjusts many of the synthesized expressions in the benchmark source to
emit calls to them. This gets the distribution of expressions in our
generated definitions to be significantly more realistic compared to
existing C++ function bodies here and in LLVM.
This still doesn't get us to start calling more methods, have class
types in the signatures of the calls, or have more interesting call
graphs, but seems like a reasonable first step and still an improvement
in the overall fidelity of our benchmarks.
Illustrative generated Carbon:
```carbon
fn Abcde(x: i32, y: i64*) -> (bool, i64);
fn Fghij(p: i32*) -> i32;
// ...
fn MyClass.Method(self, p: i32) -> i32 {
var acc64: i64 = 0;
var acc: i32 = acc64 as i32;
acc = acc + self.Checksum() + p + 1;
let (abc: bool, def: i64) = Abcde(0, &acc64);
acc = (acc + (if abc then 1 else 0) + (def as i32)) + Fghij(&acc) * 2;
return 0;
}
```
Assisted-by: Claude Code and Antigravity with Gemini
---------
Co-authored-by: Geoff Romer <gromer@google.com>
|
||
|
|
4c5734a8cc |
Make tag application and removal a compile time property (#8042)
For stores with untagged ID types, `Apply` and `Remove` still did (some) of the work, despite the fact that it could never be needed. Because both depend on runtime parts of the class, we need to explicitly check whether the store's IDs are tagged at compile time with `if constexpr`. This is important because the hottest value stores aren't tagged, and we get significant performance uplift in lexing and parsing. Benchmark results (./scripts/bench_runner.py --runs=12, -march=x86-64-v3): - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Lex>/65536: CPU Time: -4.713% - BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Parse>/65536: CPU Time: -7.251% - BM_CompileImplFile<Lang::Carbon, Phase::Lex>/65536: CPU Time: -8.016% - BM_CompileImplFile<Lang::Carbon, Phase::Parse>/65536: CPU Time: -9.477% Assisted-by: Antigravity with various models --------- Co-authored-by: josh11b <15258583+josh11b@users.noreply.github.com> |
||
|
|
5f1dd4941a |
Optimize the horizontal space skip fast path for x86 (#8033)
This uses SSE2 to optimize the horizontal space skipping path when there is more than a single character. That helps with indentation and other edge cases and doesn't cost much because we only begin when >1 horizontal space to skip. We use SSE2 here which is available ubiquitously as AVX2 doesn't provide any significant advantage. Agy's benchmarks (`./scripts/bench_runner.py --runs=12`, `-c opt --copt=-march=x86-64-v3`, vs. `trunk`): - `BM_HorizontalWhitespace/16`: -4.610% CPU time, +4.832% bytes/s & tokens/s - `BM_HorizontalWhitespace/64`: -45.977% CPU time, +85.106% bytes/s & tokens/s - `BM_HorizontalWhitespace/128`: 0.428x CPU time, 2.338x bytes/s & tokens/s Assisted-by: Antigravity with Gemini --------- Co-authored-by: Geoff Romer <gromer@google.com> |
||
|
|
7cc1d08989 |
Add an AVX2 optimized newline scanner (#8032)
The `memchr` approach didn't really fully capture what we can do with AVX2, so build a dedicated optimized path for it. The optimized path does carefully optimized 64-byte block scanning and decodes the newline positions. I've tried to ensure there are enough comments to understand the different micro-optimizations that went into it getting the full performance potential. My agent's benchmarks (`./scripts/bench_runner.py --runs=12`, `-c opt --copt=-march=x86-64-v3`, vs. `trunk`): - `BM_BlankLines/16`: -11.158% CPU time, +12.557% bytes/s & lines/s - `BM_BlankLines/64`: -21.623% CPU time, +27.587% bytes/s & lines/s - `BM_BlankLines/128`: -26.332% CPU time, +35.742% bytes/s & lines/s - `BM_CommentLines/128/0/0`: -22.198% CPU time, +28.531% bytes/s & lines/s Assisted-by: Antigravity with Gemini |
||
|
|
05a7ecbd34 |
Move SubobjectDestroy and SelfDestruct out of interface Destroy (#7942)
Determining that a type has trivial destruction requires checking whether all of its subobjects have trivial destruction and whether its type has a custom witness for `Destroy.Op`. This isn't possible when `Destroy` is the custodian for `Destroy.Op` and `SubobjectDestroy.Op`, so we need to make `SubobjectDestroy` its own interface. `Destroy.SelfDestruct` becomes a standalone function because it depends on `SubobjectDestroy` and `Destroy` being implemented, and is also responsible for generating any custom witnesses for both interfaces. Making `SelfDestruct` an interface was experimented with, but this required a blanket impl that caused issues for facet types. `Destroy` depends on `SubobjectDestroy` to be implemented. We'd ideally use `require impls SubobjectDestroy`, but it isn't complete yet, and it also causes problems when `Destroy` is implemented inside the class definition. We work around this by temporarily renaming the `Destroy` interface to `DestroyImpl`, and introducing a constraint called `Destroy` so that user code doesn't need to write `Core.SubobjectDestroy & Core.Destroy`. |
||
|
|
57bf903ef1 |
Keep resolving generics and templates until they're all resolved (#7957)
`FinishAst` resolves C++ template instantiation. Template instantiation can complete Carbon types, generate thunks, and call generic functions. These operations can add new entries to `definitions_required_by_use()`. Similarly, resolving any of those can generate more C++ templates that need instantiating. This change moves `FinishAst` ahead of `CheckRequiredDefinitions` and loops until no new Carbon definitions have been added. This prevents later passes from crashing when evaluating specifics on unresolved generics or uninstantiated templates. `FinishAst` also disconnects the AST. Subsequent definitions and `impl`s may depend on C++ interop, so the AST must remain connected until all the Carbon end-of-file checks complete. We achieve this by decoupling AST disconnection from finalisation. Assisted-by: Antigravity with Gemini Assisted-by: Antigravity with Claude Opus 5.5 Max |
||
|
|
dd30c76556 |
Bump fast-uri from 3.1.8 to 3.1.9 in /utils/vscode in the npm_and_yarn group across 1 directory (#8028)
Bumps the npm_and_yarn group with 1 update in the /utils/vscode directory: [fast-uri](https://github.com/fastify/fast-uri). Updates `fast-uri` from 3.1.8 to 3.1.9 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/fastify/fast-uri/releases">fast-uri's releases</a>.</em></p> <blockquote> <h2>v3.1.9</h2> <h2>Security</h2> <p>This security release fixes four URI parsing and normalization vulnerabilities in fast-uri 3.x. Applications that process untrusted URI input should upgrade to v3.1.9.</p> <ul> <li><strong>Medium — URI scheme spoofing through percent-encoded schemes</strong> (<a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-w74x-v6f9-j3xg">GHSA-w74x-v6f9-j3xg</a>, CVE-2026-110306): percent-encoded scheme input is now rejected instead of being decoded into a live scheme.</li> <li><strong>Medium — Host confusion during domain-host canonicalization</strong> (<a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-wjr9-j795-jxcr">GHSA-wjr9-j795-jxcr</a>, CVE-2026-110180): malformed domain hosts containing ambiguous delimiters or stripped control characters are now rejected instead of being silently rewritten.</li> <li><strong>Low — Incorrect relative-reference normalization</strong> (<a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-xhq7-xmqj-769h">GHSA-xhq7-xmqj-769h</a>, CVE-2026-110095): dot-segment removal now preserves the resolution semantics of relative references.</li> <li><strong>Low — Scheme injection in suffix references</strong> (<a href="https://github.com/fastify/fast-uri/security/advisories/GHSA-333x-w4r6-6crp">GHSA-333x-w4r6-6crp</a>, CVE-2026-110725): first-segment colons in path-only suffix references are now escaped so the output is not reparsed as a scheme.</li> </ul> <p>Upgrade with:</p> <pre lang="sh"><code>npm install fast-uri@3.1.9 </code></pre> <p>Thanks to <a href="https://github.com/zekth"><code>@zekth</code></a> for reporting the scheme, host, and relative-reference issues, and to <a href="https://github.com/UlisesGascon"><code>@UlisesGascon</code></a> for finding the suffix-reference issue and reviewing the remediations.</p> <h2>What's Changed</h2> <ul> <li>ci: enable trusted publishing releases (v3.x) by <a href="https://github.com/mcollina"><code>@mcollina</code></a> in <a href="https://redirect.github.com/fastify/fast-uri/pull/229">fastify/fast-uri#229</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9">https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/fastify/fast-uri/commit/0def70338a0fa2f12a10c83ae8eafc2139ae9a07"><code>0def703</code></a> Bumped v3.1.9</li> <li><a href="https://github.com/fastify/fast-uri/commit/a1d0da2f5c703244027c1b204c1aebd0516da338"><code>a1d0da2</code></a> test: generate only relative path references</li> <li><a href="https://github.com/fastify/fast-uri/commit/9eb8759a9825c046f57f7f695f1944bc39b88abd"><code>9eb8759</code></a> fix: preserve relative paths in suffix and relative resolution</li> <li><a href="https://github.com/fastify/fast-uri/commit/54c30f75891b74e5a4393b44be9ea7ba43dd1e4b"><code>54c30f7</code></a> docs: note suffix-reference authority ambiguity</li> <li><a href="https://github.com/fastify/fast-uri/commit/39e6493c1356f30a0084171627eb266786e1620e"><code>39e6493</code></a> fix: escape a first-segment colon in suffix references</li> <li><a href="https://github.com/fastify/fast-uri/commit/745183c1d9d98d113bed8a57bb1c9ceaf0147b7a"><code>745183c</code></a> test: cover first-segment colon in suffix references</li> <li><a href="https://github.com/fastify/fast-uri/commit/ddfc6a51122dfce0365655f04479fc3adb7f6b3c"><code>ddfc6a5</code></a> fix(SEC-03): reject non reg-name characters in domain hosts</li> <li><a href="https://github.com/fastify/fast-uri/commit/d86a8d29f45187819dac2d4fe171c35e3e488264"><code>d86a8d2</code></a> fix: keep a colon-first segment behind "./" in relative normalization</li> <li><a href="https://github.com/fastify/fast-uri/commit/eb483b5da2580bdecb8af644bbfee878d5424850"><code>eb483b5</code></a> test: cover colon-first relative references in normalization</li> <li><a href="https://github.com/fastify/fast-uri/commit/b110a3571c37dfcf9d1c72ce2e2e178c78d1a424"><code>b110a35</code></a> fix(SEC-02): preserve meaning of relative references during normalization</li> <li>Additional commits viewable in <a href="https://github.com/fastify/fast-uri/compare/v3.1.8...v3.1.9">compare view</a></li> </ul> </details> <details> <summary>Maintainer changes</summary> <p>This version was pushed to npm by <a href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new releaser for fast-uri since your current version.</p> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/carbon-language/carbon-lang/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
600fd55ba7 |
Add a realistic header compile benchmark (#8023)
Add `BM_CompileApiFileRealisticHeader`, which models a typical C++ header. Each class defines 2 getters, 1 predicate, 2 forwarders, and 2 function definitions inline, and declares 2 methods along with the private methods that the forwarders call. The dense declarations benchmarks keep modeling a declaration-heavy API file. The counts come from classifying, with libclang, the member functions defined in class definitions in the hand-written headers that the toolchain includes: 1,612 in the Carbon toolchain's headers, 10,406 in LLVM's, and 13,366 in Clang's. Classified the same way, the generated C++ defines 69% of its member functions inline in the class definition, against 61-70% in the real headers. 78% of its inline definitions are a single statement, against 72-82%, and 21% return the result of a member call, against 19-21%. Only 2% have control flow, against 7-13%, because most inline function definitions have only the three statements that every plan-based definition has. Assisted-by: Claude Code and Antigravity with Gemini --------- Co-authored-by: Geoff Romer <gromer@google.com> |
||
|
|
56d9bbc40a | Support C++ friend declarations for Carbon generic classes (#8026) | ||
|
|
8779d15e18 |
Optimize the musttail-dispatch in the lexer (#8034)
The primary performance challenge with `musttail` dispatch is register allocation. We can use the `[[clang::preserve_none]]` calling convention to address this, dramatically improving the register pressure across these dispatched routines. However, to be effective, we need to very carefully manage inlining to keep out-of-line functions from breaking the ideal register allocation, but keep the right functions out-of-line. A bunch of annontations are added to push things in one direction or another. This also requires us to move error handling out of the tight dispatch loop in more places, for example by returning `LexResult::NoMatch()` and letting the outer loop handle it. Agy's benchmarks (`./scripts/bench_runner.py --runs=12`, `-c opt --copt=-march=x86-64-v3`, vs. `trunk`): - `BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Lex>/65536`: -9.594% CPU time - `BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Lex>/262144`: -7.786% CPU time - `BM_ValidIdentifiers<3, 5, true>`: -9.194% CPU time, +10.125% bytes/s & tokens/s - `BM_RandomSource`: -5.062% CPU time, +5.332% bytes/s, lines/s & tokens/s Assisted-by: Antigravity with Gemini |
||
|
|
e9d8d06f92 |
Add lifetime comments to CanonicalValueStore and IdentifierStore (#8037)
Followup to https://github.com/carbon-language/carbon-lang/pull/8025. It's easy to accidentally put a string into the `IdentifierStore` that doesn't live long enough. Add some comments to document this pitfall. |
||
|
|
c7de727575 |
Adds support for exporting default values for concrete parameters of generic functions. (#8019)
Adds support for exporting both the generic function decl with concrete default arguments to clang, as well as exporting the monomorphized concrete function def. This required adding the `SpecificId` to the exported global variable name, to avoid duplicate names in the global vars. I also now set up an evaluated context in `clang_sema` when declaring the default arg expression with clang, to avoid the problem of emitting concrete AST expressions in an unevaluated context from the in-progress template function decl context when exporting default values for generics. Note: Default values for generic parameters of generic functions are not yet supported. |
||
|
|
21c825a3f7 |
Hot-path optimizations for (Canonical)ValueStore::Add (#8031)
Extract the allocation path (which is inherently cold due to growth). Making the outlining effective requires both blocking further inlining and using `preserve_most` so that the existence of the call doesn't disrupt the register allocation. We also mark the insertion statements with callbacks as `always_inline` so it being cold doesn't cause it to be left out-of-line and further disrupt register allocation. It's a bit strange to force inlining of a cold-path function, but the register impact of the call extends back into the hot-path. Agy's benchmarks (`./scripts/bench_runner.py --runs=12`, `-c opt --copt=-march=x86-64-v3`, vs. `trunk`): - `BM_ValidIdentifiers<3, 5, true>`: -6.277% CPU time - `BM_ValidIdentifiers<3, 16, true>`: -4.525% CPU time - `BM_CompileApiFileDenseDecls<Lang::Carbon, Phase::Lex>/262144`: -2.012% CPU time (47.5 ms ± 6.358% -> 46.54 ms ± 1.773%, p=0.0167) Assisted-by: Antigravity with Gemini |
||
|
|
8fdc8ebc37 |
Fix use-after-free of var name in BuildDefaultValueExpr (#8025)
The `var_name` string was built on the stack and then added to the `IdentifierStore`. This lead to use-after-free, since `IdentifierStore` just stores a `llvm::StringRef`. Add it to `ast_context().Idents` to provide a longer-lived reference. |
||
|
|
224a22ef30 |
Bump markdown-it from 14.3.2 to 14.3.3 in /utils/vscode in the npm_and_yarn group across 1 directory (#8014)
Bumps the npm_and_yarn group with 1 update in the /utils/vscode directory: [markdown-it](https://github.com/markdown-it/markdown-it). Updates `markdown-it` from 14.3.2 to 14.3.3 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/markdown-it/markdown-it/blob/14.3.3/CHANGELOG.md">markdown-it's changelog</a>.</em></p> <blockquote> <h2>[14.3.3] - 2026-10-16</h2> <h3>Security</h3> <ul> <li>Backported 15.0.3 fixes.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/markdown-it/markdown-it/commit/d372f0d8a68bef0b0acaa68868ce8ae8ba85b384"><code>d372f0d</code></a> 14.3.3 released</li> <li><a href="https://github.com/markdown-it/markdown-it/commit/d99f48839d37af6fd8a2617516c43dab90755503"><code>d99f488</code></a> Backported 15.0.3 fixes</li> <li>See full diff in <a href="https://github.com/markdown-it/markdown-it/compare/14.3.2...14.3.3">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/carbon-language/carbon-lang/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
427c448dcd |
Simplify the generic function default values test. (#8027)
As demonstrated in #8020, removes an extraneous dependency on `Core.Copy` in favour of a locally declared interface. |
||
|
|
7601be9666 |
Bump certifi from 2024.7.4 to 2026.10.19 in /github_tools in the pip group across 1 directory (#8024)
Bumps the pip group with 1 update in the /github_tools directory: [certifi](https://github.com/certifi/python-certifi). Updates `certifi` from 2024.7.4 to 2026.10.19 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/certifi/python-certifi/commit/662df63d7906df66f1f07c0751a3dfe9da14d914"><code>662df63</code></a> Restore unaffected emSign roots (<a href="https://redirect.github.com/certifi/python-certifi/issues/439">#439</a>) (<a href="https://redirect.github.com/certifi/python-certifi/issues/440">#440</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/5cb238caeeb6c30ec1a7309ad3e16a5aa7b10ce8"><code>5cb238c</code></a> Remove emsign (<a href="https://redirect.github.com/certifi/python-certifi/issues/437">#437</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/69494a764d0a08f90838d53d4b0fefd3e84045d6"><code>69494a7</code></a> Bump actions/download-artifact from 8.0.1 to 8.0.2 (<a href="https://redirect.github.com/certifi/python-certifi/issues/436">#436</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/029c7b0913d79e2efb73a216fc5c5e13ef958536"><code>029c7b0</code></a> Bump actions/upload-artifact from 7.0.1 to 7.0.2 (<a href="https://redirect.github.com/certifi/python-certifi/issues/435">#435</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/9d0a8f1f3a0d6b2e38d5773db7afe1a37e4527b6"><code>9d0a8f1</code></a> Add support for Python 3.15 (<a href="https://redirect.github.com/certifi/python-certifi/issues/432">#432</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/db472abf0a37067cb4488f036f4c19adf6b6ec3c"><code>db472ab</code></a> Bump pypa/gh-action-pypi-publish from 1.14.1 to 1.14.2 (<a href="https://redirect.github.com/certifi/python-certifi/issues/431">#431</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/f4bc676bc101fe2235846e37044e8c693d6cbaf4"><code>f4bc676</code></a> 2026.07.22 (<a href="https://redirect.github.com/certifi/python-certifi/issues/428">#428</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6"><code>4c91f9c</code></a> Bump actions/setup-python from 6.3.0 to 7.0.0 (<a href="https://redirect.github.com/certifi/python-certifi/issues/427">#427</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248"><code>01a66c5</code></a> Bump actions/checkout from 7.0.0 to 7.0.1 (<a href="https://redirect.github.com/certifi/python-certifi/issues/426">#426</a>)</li> <li><a href="https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337"><code>eb355f4</code></a> Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (<a href="https://redirect.github.com/certifi/python-certifi/issues/425">#425</a>)</li> <li>Additional commits viewable in <a href="https://github.com/certifi/python-certifi/compare/2024.07.04...2026.10.19">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/carbon-language/carbon-lang/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |