The patch files in static/webpack-patches/ are derived from third-party
Monaco source and should not be linted as CE code.
🤖 Generated by LLM (Claude, via OpenClaw)
Extend the NormalModuleReplacementPlugin fix to also strip the
editor contribution side-effect imports from the shared
vs/basic-languages/_.contribution.js file.
Monaco 0.55 introduced this pattern across all language contributions
(not just TypeScript), as reported upstream:
https://github.com/microsoft/monaco-editor/issues/5162
Note: the primary bundle size regression (~7 MB) is not from these
side-effect imports (webpack deduplicates them), but from TypeScript's
new direct import of editor.api2.js which pulls in the full standalone
API on the main thread. That path needs further investigation.
🤖 Generated by LLM (Claude, via OpenClaw)
Monaco 0.55 changed vs/language/typescript/monaco.contribution.js from 3
imports to 75, explicitly importing all editor contributions. This causes
the vendor.js bundle to grow from ~4.7 MB to ~12 MB because:
1. The 72 side-effect contrib imports are already included by
MonacoEditorWebpackPlugin's include-loader, creating near-duplicates
2. The new editor.api2.js import bypasses the include-loader's
interception regex (/editor.(api|main).js/) pulling in Monaco's
entire standalone API tree a second time on the main thread
This commit partially addresses the issue by substituting a patched
monaco.contribution.js via NormalModuleReplacementPlugin, stripping
the 72 redundant side-effect imports. Full investigation and upstream
fix still needed — see #8547.
🤖 Generated by LLM (Claude, via OpenClaw)
Fixes#8536.
Adds a new **Compile** option to the *Ctrl+S behaviour* selector in
Settings (alongside the existing Save / Short Link / Reformat / Do
nothing options).
When selected, Ctrl+S behaves identically to Ctrl+Enter: it calls
`maybeEmitChange()` and, if compile-on-change is disabled, explicitly
fires `requestCompilation`.
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
---------
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Recent compilers do not allow parametric functions to be exported, so
remove the keyword. Note that this means the function now gets inlined
with default optimization levels.
## Summary
- Fixes the property parser regex to allow `+` in key names (e.g.
`abc+def=etc`)
- The regex from #8387 used `[^=+]+` for key matching, which excluded
`+` from key names entirely
- Changed to a lazy `.+?` match so `+` is only treated as the `+=`
operator when immediately before `=`
This is a small targeted fix and does not address all edge cases with
the `+=` syntax.
## Test plan
- [x] Added test: `abc+def=etc` correctly sets key `abc+def` to `etc`
- [x] Added test: `abc=def+ghi` correctly sets key `abc` to `def+ghi`
- [x] All existing `+=` append tests continue to pass
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
A `catchswitch` instruction has the form:
catchswitch within none [label %catch.start] unwind to caller
The LLVM IR parser then extracts the labels out of this expression.
However, the regex is too greedy, and (incorrectly) matches
`%catch.start]`. We update the regex to match what LLVM's lexer does.
The [language reference](https://llvm.org/docs/LangRef.html#identifiers)
states that quoted identifiers can include `\xx` escapes, however as far
as I can tell [that is *not*
true](413cafa462/llvm/lib/AsmParser/LLLexer.cpp (L391-L421)),
so I have elected not to support them.
For the following program (targetting WASM, compiled with
`-fwasm-exceptions`):
```c
void bar(int x);
void foo() {
try {
bar(1);
} catch(int x) {
}
}
```
**Before:**
<img width="1492" height="411" alt="A CFG of the above program. The
catch block is entirely disconnected from the main part of the graph."
src="https://github.com/user-attachments/assets/ad9038cc-f372-4109-bc25-328537bcea88"
/>
**After:**
<img width="1286" height="639" alt="A CFG of the above program. The
catch block is now correctly connected to the rest of the graph."
src="https://github.com/user-attachments/assets/27cce7b3-dd67-4c1c-928c-93f7eaa53fa2"
/>
The `links` field in `ParsedAsmResultLine` and the `AsmResultLink` type
have been unused since 2019 when clickable address links were replaced
by the labels system. This just removes the dead code.
Closes#8251
Fixes#8273
The default NASM output format was `elf` (32-bit ELF), causing a
spurious `64-bit unsigned relocation zero-extended from 32 bits
[-w+zext-reloc]` warning when using 64-bit addressing (which is the
common case on CE's x86-64 infrastructure).
Changed the default to `elf64`. Users who explicitly need 32-bit ELF
output can still pass `-felf` to override.
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
Closes#5178
## Problem
NVCC embeds the CUDA fat binary blob in the host-side x86 assembly
inside a `#APP`/`#NO_APP` inline-assembly block, under a label called
`fatbinData`. In a realistic kernel this can be 100+ lines of `.quad`
hex values — a wall of noise before any user-readable code.
Example: https://godbolt.org/z/W3YMcq8oY
## Fix
Per-compiler pre-processing step in `NvccCompiler.processAsm()`: before
the host assembly reaches the ASM parser, any `#APP`/`#NO_APP` block
containing a `.nv_fatbin` section is stripped out entirely.
- Only `.nv_fatbin` blocks are removed; genuine user inline-assembly
blocks (which also use `#APP`/`#NO_APP` but without `.nv_fatbin`) are
left intact.
- Intentionally NVCC-specific — no changes to the base `AsmParser`, no
false-positive risk for other compilers.
- Stripping happens before `findUsedLabels` runs, so `fatbinData`
naturally disappears as unreferenced without any special-casing in the
parser's label-filtering logic.
- Gated on the existing Labels filter: with no filters active everything
remains visible; with Labels on the blob disappears.
## Testing
**New compiler unit tests** (`test/compilers/nvcc-tests.ts`):
- Strips `#APP`/`#NO_APP` blocks containing `.nv_fatbin`
- Preserves `#APP`/`#NO_APP` blocks without `.nv_fatbin` (user inline
asm)
- Handles multiple mixed blocks correctly
- No-op when no `#APP` blocks present
- Gracefully handles malformed unclosed blocks
**New parser filter-case**
(`test/filters-cases/nvcc-x86-host-example.asm`): representative NVCC
12.0 host assembly (real 15-line fat binary, boilerplate functions,
`.nvFatBinSegment` section) with nine filter-combination snapshots
documenting parser behaviour in isolation. These correctly show that the
**base parser itself does not filter `fatbinData`** — that's the
compiler pre-processor's job.
All 767 tests pass.
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Closes#6319Closes#6320
Adds two new opt-in filter checkboxes to the LLVM IR view's **Filters**
dropdown:
### Hide Declarations (off by default)
Filters external function declaration lines (lines starting with
`declare`). These are forward declarations of external functions and are
often noise when focusing on user code.
**Off by default** — as noted in #6319, `declare` lines are part of
valid IR and are needed when copying output into other tools such as
`opt`, `llc`, `alive2`, etc.
### Hide Library Functions (off by default)
Filters compiler-generated library function thunks — specifically
function definitions whose name matches patterns like `@jfptr_*` (used
by Julia). These are boilerplate wrapper functions that aren't useful
when reading IR.
**Off by default** for the same reason — these are real function
definitions in the IR.
Both filters follow the same pattern as existing IR filters (debug info,
metadata, attributes, comments). Unit tests added in
`llvm-ir-parser-tests.ts` covering filter-on, filter-off, and
preservation of unaffected lines.
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
---------
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Today we only support passing options to the codegen backend, but not
the compiler that produces IL.
This change adds a new pseudo-option `-compopt`/`--compiler-options` so
that options follow after this pseudo-option can be passed to the
compiler that produces IL.
Fixes#8006
The ex-WINE compilers were appearing at the **top** of the MSVC compiler
dropdown instead of the bottom, because they used the MSVC compiler
version (`19.xx`) for their semver while native MSVC compilers use the
toolset version (`14.xx`). Since `19.xx > 14.xx`, they sorted as
"newest".
This aligns the ex-WINE semvers to the `14.xx` toolset versioning:
- `19.00.24210` → `14.00.24210` (VS 2015 Update 3)
- `19.10.25017` → `14.10.25017` (VS 2017 RTM)
- `19.14.26423` → `14.14.26423` (VS 2017 15.7)
These now sort correctly before `14.20` (VS 2019 16.0), placing the
ex-WINE compilers at the bottom of the list where they belong.
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Fixes#7493
OneAPI >= 2025.0.0 produces SPIR-V bitcode that clang 18.1.0's
`llvm-dis` can't read, resulting in `Invalid record` errors in the
device viewer. Updating the global `llvmDisassembler` path from clang
18.1.0 to 19.1.0 resolves this while remaining backwards compatible with
older bitcode formats.
Updated in all three properties files:
- `c++.amazon.properties`
- `c.amazon.properties`
- `objc++.amazon.properties`
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
## Summary
Refactors the Cypress test suite to extract common helpers into
`cypress/support/utils.ts`, making it simpler to add new tests.
### Changes
- **Shared helpers extracted to utils.ts**: `findPane()`,
`sourceEditor()`, `compilerOutput()`, `compilerPane()`,
`waitForEditors()`, `setupAndWaitForCompilation()`, `visitPage()`, and
many more
- **New workflow helpers**: `addCompilerFromEditor()`,
`addCompilerFromCompilerPane()`, `openConformanceView()`,
`addConformanceCompiler()`, `openDiffView()`, `allCompilerTabs()`,
`compilerEditorFromTab()`, `compilerPaneFromTab()`,
`lastCompilerContent()`
- **Template literals**: Replaced `.join('\n')` array patterns with
backtick multiline strings
- **Bug fix**: `frontend.cy.ts` hardcoded `localhost:10240` instead of
using `baseUrl` — now uses relative URL
- **Deprecated**: Marked `clearAllIntercepts()` as deprecated with
explanation of why the name is misleading
### Result
- Net reduction of ~110 lines across test files
- All 68 tests pass (7 spec files)
- Adding a new test now typically needs just 3-4 lines of well-named
helper calls
- No changes to test behaviour or coverage
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
🤖 Generated by LLM (Claude, via OpenClaw)
---------
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
## Summary
Adds 11 new Cypress E2E tests across 3 new test files, covering
conformance view, diff view, and multi-compiler pane workflows.
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
## New Test Files
### `conformance.cy.ts` (5 tests)
- Opens conformance view from editor dropdown
- Verifies pass indicator (fa-check-circle) for clean compilation
- Verifies fail indicator (fa-times-circle) for static_assert failure
- Source change updates pass/fail status dynamically
- Multiple compilers with different -D flags showing pass + fail
simultaneously
### `multi-compiler.cy.ts` (4 tests)
- Adds second compiler pane from editor dropdown
- Different -D flags produce different output in separate panes
- Cloning a compiler inherits its options
- Source change triggers recompilation in all panes
### `diff.cy.ts` (2 tests)
- Opens diff view from the Add menu
- Verifies diff content with two compiler panes (auto-selected)
## Approach
All tests use only gdefault (the single compiler available on CI
runners), using preprocessor conditionals (#ifdef) with -D flags to
produce different compilation outputs. This avoids any dependency on
specific compiler versions being installed.
## Test Duration
~55 seconds for all 11 new tests (headless Chrome).
## Follows from
PR #8478 (merged) which added the initial compile workflow tests.
---------
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Cypress bundles its types at `node_modules/cypress/types/` rather than
in `@types`, so the `typeRoots` array in `cypress/tsconfig.json` needs
to include `../node_modules` in addition to `../node_modules/@types`.
Without this, `npx tsc -p cypress/tsconfig.json --noEmit` fails with:
```
TS2688: Cannot find type definition file for 'cypress'
```
Fixes#4831
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
---------
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Inline the escape_html type instead of importing from tom-select's
internal dist/types/ path, which was removed in v2.5.1. The type is just
(str: string) => string, so there's no need to depend on the package's
internal file layout.
Also fix missing iframe title attributes in test/embedding.html.
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
## Summary
- Updates jQuery from 3.7.1 to 4.0.0
- Adds `$.trim` polyfill for golden-layout compatibility (golden-layout
1.5.9 uses the removed `$.trim()` API and has an incorrectly vague
`"jquery": "*"` dependency)
Manually tested locally to verify golden-layout works correctly with the
polyfill.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
m68k GAS uses `|` as the comment character instead of `#`.
The base asm parser doesn't recognise this, so inline asm source
location markers (e.g. `| 2 "file.c" 1`) leak through into the output
instead of being filtered.
Repro on godbolt.org: https://godbolt.org/z/vYneWc8Tf
---------
Co-authored-by: Patrick Quist <partouf@gmail.com>
Some languages like Go update cross-architecture compiler IDs in-place
when new patch releases come out (e.g. `386_gl124` moves from 1.24.2 to
1.24.13). This documents it as an accepted exception to the general rule
that compiler IDs must not change meaning.
Discovered while reviewing #8462.
*(I'm Molty, an AI assistant acting on behalf of @mattgodbolt)*
🤖 Generated by LLM (Claude, via OpenClaw)
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Adds a section to `AddingACompiler.md` explaining that compiler IDs are
permanent and must not be removed or reassigned. This is a common
mistake in version-bump PRs where contributors replace existing entries
with newer patch releases instead of adding alongside them.
The new section covers:
- Why IDs must be stable (shortlinks, saved sessions, embeds)
- The correct approach when adding newer versions (add, don't replace)
- Using `alias` as a fallback when a compiler genuinely can't be kept
- The same rule applying to infra install targets
- The rare exception for lesser-used languages with involved maintainers
🤖 Generated by LLM (Claude, via OpenClaw)
Co-authored-by: mattgodbolt-molty <mattgodbolt-molty@users.noreply.github.com>
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.1
to 46.0.5.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.5 - 2026-02-10</p>
<pre><code>
* An attacker could create a malicious public key that reveals portions
of your
private key when using certain uncommon elliptic curves (binary curves).
This version now includes additional security checks to prevent this
attack.
This issue only affects binary elliptic curves, which are rarely used in
real-world applications. Credit to **XlabAI Team of Tencent Xuanwu Lab
and
Atuin Automated Vulnerability Discovery Engine** for reporting the
issue.
**CVE-2026-26007**
* Support for ``SECT*`` binary elliptic curves is deprecated and will be
removed in the next release.
<p>.. v46-0-4:</p>
<p>46.0.4 - 2026-01-27<br />
</code></pre></p>
<ul>
<li><code>Dropped support for win_arm64 wheels</code>_.</li>
<li>Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
3.5.5.</li>
</ul>
<p>.. _v46-0-3:</p>
<p>46.0.3 - 2025-10-15</p>
<pre><code>
* Fixed compilation when using LibreSSL 4.2.0.
<p>.. _v46-0-2:</p>
<p>46.0.2 - 2025-09-30<br />
</code></pre></p>
<ul>
<li>Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
3.5.4.</li>
</ul>
<p>.. _v46-0-1:</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="06e120e682"><code>06e120e</code></a>
bump version for 46.0.5 release (<a
href="https://redirect.github.com/pyca/cryptography/issues/14289">#14289</a>)</li>
<li><a
href="0eebb9dbb6"><code>0eebb9d</code></a>
EC check key on cofactor > 1 (<a
href="https://redirect.github.com/pyca/cryptography/issues/14287">#14287</a>)</li>
<li><a
href="bedf6e186b"><code>bedf6e1</code></a>
fix openssl version on 46 branch (<a
href="https://redirect.github.com/pyca/cryptography/issues/14220">#14220</a>)</li>
<li><a
href="e6f44fc8e6"><code>e6f44fc</code></a>
bump for 46.0.4 and drop win arm64 due to CI issues (<a
href="https://redirect.github.com/pyca/cryptography/issues/14217">#14217</a>)</li>
<li><a
href="c0af4dd7b7"><code>c0af4dd</code></a>
release 46.0.3 (<a
href="https://redirect.github.com/pyca/cryptography/issues/13681">#13681</a>)</li>
<li><a
href="99efe5ad15"><code>99efe5a</code></a>
bump version for 46.0.2 (<a
href="https://redirect.github.com/pyca/cryptography/issues/13531">#13531</a>)</li>
<li>See full diff in <a
href="https://github.com/pyca/cryptography/compare/46.0.1...46.0.5">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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/compiler-explorer/compiler-explorer/network/alerts).
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
## Summary
- When multiarch compilers (Rust, Zig, etc.) target a non-host
architecture (e.g. `--target=aarch64-unknown-linux-gnu`), GNU `objdump`
fails because it cannot disassemble foreign-arch binaries, producing
`<No output: objdump returned 1>`
- Adds a `llvmObjdumper` config property that switches to `llvm-objdump`
when the compilation targets a non-x86 instruction set, since
`llvm-objdump` can auto-detect the target architecture from the binary
itself
- All multiarch compilers benefit from this generically via
`BaseCompiler.getObjdumperForResult()` — no per-compiler special-casing
needed
## Changes
- **`types/compiler.interfaces.ts`** — Add `llvmObjdumper` to
`CompilerInfo`
- **`lib/compiler-finder.ts`** — Read `llvmObjdumper` from config
- **`lib/base-compiler.ts`** — Add `getObjdumperForResult()` method and
refactor `objdump()` to use it
- **`etc/config/rust.defaults.properties`** — Set
`llvmObjdumper=llvm-objdump`
- **`etc/config/zig.defaults.properties`** — Set
`llvmObjdumper=llvm-objdump`
- **`test/objdumper-tests.ts`** — Add 6 tests for cross-architecture
objdumper selection
## Test plan
- [x] `npm run ts-check` passes
- [x] `npm run lint` passes
- [x] All related tests pass (301 tests across 27 files)
- [x] Smoke test: configure a Rust compiler with
`--target=aarch64-unknown-linux-gnu` and verify `llvm-objdump` is used
instead of GNU `objdump`
Fixes#5593
Add sections covering Ctrl+S file inclusion behaviour (including the
filename dialog), tab stacking in IDE mode, CMake language requirements
and CMakeLists.txt prerequisite, and a note about adding compilers from
the tree view.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>