Implements a two-pass solution for issue #1648 where statically linked
library functions (like __divdc3) were incorrectly filtered out even
when directly called by user code.
Changes:
- Add collectReferencedFunctions() method that scans assembly for function calls
- Modify binary filtering logic to keep functions that are either:
- User functions (existing behavior), OR
- Referenced by user functions (new behavior)
- Add comprehensive test case with __divdc3 usage
The fix ensures that functions like __divdc3 are now visible when called
from user code, while still filtering out unreferenced library functions
to avoid excessive output.
Fixes#1648🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
FAO @partouf adds two new `/` commands in claude, seems to work quite
well. Needs the sentry MCP which is pretty easy to install. Will do a
github one too
## Summary
Fixes COMPILER-EXPLORER-BY7: TypeError accessing 'blocks' property of
undefined layout when clicking zoom-out button before any CFG has been
generated.
- Uses modern TypeScript optional chaining for null-safe access
- Prevents crashes when users click zoom-out before compiling code
## Test plan
- [ ] Load CFG view pane
- [ ] Click zoom-out button before generating any CFG (should not crash)
- [ ] Generate a CFG and verify zoom-out still works as expected
🤖 Generated with [Claude Code](https://claude.ai/code)
## Summary
- Fixes syntax highlighting issue where Rust hex literals with
underscores after hex letters (like `0x01_02_0a_0b`) would lose
highlighting after the underscore
- Created custom Rust language mode (`rustp`) that patches Monaco's
built-in tokenizer
- Filed upstream issue with Monaco Editor:
https://github.com/microsoft/monaco-editor/issues/4917
## Test plan
- [x] Verified fix works locally with test cases like `0x01_02_0a_0b`,
`0xFF_AA_BB_CC`, etc.
- [x] Confirmed all existing tests pass
- [x] Checked that TypeScript compilation and linting pass
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
Fixes `TypeError: Cannot read properties of undefined (reading
'content')` in `findConfig()` when URL parsing fails and no saved state
is available.
## Root Cause
This error occurs when:
1. `url.deserialiseState()` throws an exception due to
malformed/corrupted URLs
2. No saved state exists in localStorage
(`sessionThenLocalStorage.get('gl', null)` returns `null`)
3. Code attempts to access `config.content` when `config` is still
`undefined`
The error happens legitimately from truncated URLs, corrupted bookmarks,
or URL shortener issues.
## Changes
- Changed `if (!config.content || config.content.length === 0)` to use
optional chaining: `if (!config?.content || config.content?.length ===
0)`
- This gracefully handles the null/undefined case and falls back to
default config as intended
## Impact
- Maintains existing user experience (fallback to default config when
URL parsing fails)
- Prevents crash with 1430+ reported occurrences
- No behavioral changes for valid URLs
Fixes COMPILER-EXPLORER-DE3
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
- Fix TypeError when diff pane receives execution results before
compiler is registered
- Add null check to prevent crash and gracefully handle race condition
## Description
This PR fixes issue #7761 where a `TypeError: Cannot set properties of
null (setting 'compiler')` occurs in the diff pane.
### The Problem
A race condition can occur where:
1. An executor pane resends its results (e.g., during layout
initialization)
2. The diff pane receives the `executeResult` event
3. The diff pane tries to update its state, but `this.compiler` is still
null
4. The code crashes trying to set `this.compiler.compiler = compiler`
### The Solution
Add a null check in the `update` method of `DiffStateObject`. If
`this.compiler` is null, we simply ignore the update and return false.
This is safe because:
- When `onCompiler` is eventually called, it will properly initialize
the compiler
- `onCompiler` calls `onDiffSelect()` which calls
`requestResendResult()`
- This will re-request the compilation/execution results
- By then, the compiler will be properly initialized and the update will
succeed
### Testing
- TypeScript checks pass
- Linting passes
- The fix prevents the crash while maintaining correct behavior
Fixes#7761🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Bumps [tar-fs](https://github.com/mafintosh/tar-fs) from 1.16.4 to
1.16.5.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/mafintosh/tar-fs/commits">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 merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@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>
Fixes a subtle breakage from the bootstrap migration: The motd close
button works for update/motds but not community ads. This PR cleans up
the duplicate code and subsequent deviation.
Proposing to add the B-MPI3 library to the live site.
https://gitlab.com/correaa/boost-mpi3
Followed the steps as best as I could in based on other gitlab type
libraries (bmulti)
Feedback on improving the hooks and the organizations of files in the
repository is welcome.
The goal is to include the library by doing
#include<mpi3/communicator.hpp>.
This PR fixes the LLVM IR output for the Mojo compiler integration,
ensuring the LLVM IR panel works correctly and no longer shows "Internal
error; unable to open output path" errors.
Fixes issues with missing components (e.g. from beta, 'explain')
The issue was that the exceptions are thrown in `initLayout`, not in the
constructor.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
## Summary
This PR updates test files to use the new Vitest timeout syntax,
resolving deprecation warnings.
## Changes
- Updated `test/packager-tests.ts` to pass timeout as a number instead
of `{timeout: 5000}`
- Updated `test/filter-tests.ts` to pass timeout as a number instead of
`{timeout: 10000}`
## Details
Vitest now expects timeouts to be passed directly as a number as the
third parameter to `it()`, rather than as an object. This change updates
all occurrences to use the new syntax.
## Test plan
- [x] All existing tests continue to pass
- [x] No deprecation warnings are shown when running tests
- [x] Linter and type checks pass
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
- Add DynamoDB support to Google URL shortener to check in preference to goo.gl itself (which will be going away)
- Update ShortLinkResolver to accept AWS properties and use DynamoDB table `goo-gl-links`
- First check DynamoDB for fragment lookup before falling back to Google URL shortener (for now)
- Refactor resolve method to use async/await instead of raw promises for better readability
- Add awsProps to ServerDependencies and pass through component hierarchy
- Configure googleLinksDynamoTable property in AWS config files (defaults to empty)
## Implementation Details
- When `googleLinksDynamoTable` property is configured, `ShortLinkResolver` creates a DynamoDB client
- DynamoDB table uses `fragment` as the key and stores `expanded_url`
- Maintains backwards compatibility by falling back to Google URL (for now) shortener if DynamoDB is not configured or lookup fails
- Google URL shortener fallback will be removed in August 2025 when the service shuts down
## Test plan
- [x] All existing tests pass
- [x] TypeScript compilation succeeds
- [x] Linting passes
- [x] Updated tests to accommodate new awsProps parameter
- [x] Verify fallback to Google URL shortener when DynamoDB not
configured
- [x] Manual testing
🤖 Generated with [Claude Code](https://claude.ai/code)
---------
Co-authored-by: Claude <noreply@anthropic.com>
## Summary
Fix production CDN loading issues where URLs like
`https://static.ce-cdn.net//vendor.v57...css` (double slash) were being
generated when the `staticUrl` config has a trailing slash.
## Root Cause
PR #7681 refactored static asset handling and replaced
`urljoin(staticRoot, path)` with `${staticRoot}/${path}` string
interpolation, losing URL normalization that `urljoin` provides.
## Changes
- Replace string interpolation with `urljoin()` in
`createDefaultPugRequireHandler()`
- Add comprehensive tests covering all trailing slash scenarios
- Maintain full backward compatibility with existing configurations
## Test plan
- [x] All existing tests pass
- [x] Added 4 new test cases for static URL handling with various slash
scenarios
- [x] Verified TypeScript compilation and linting
- [x] Tested production CDN scenario where
`staticUrl=https://static.ce-cdn.net/`
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
Add nvc 25.5 to etc/config/c.amazon.properties
Add nvc++ 25.5 to etc/config/c++.amazon.properties
Add nvfortran 25.5 to etc/config/fortran.amazon.properties
Add CUDA 12.9 to etc/config/cuda.amazon.properties
Follow up to
https://github.com/compiler-explorer/compiler-explorer/pull/7540.
Fixes#7528
Last time I tried this, the 14.2.0 GCC builds were still using 2.38 for
Arm and AArch64, now there are 15.1.0 builds and those both use 2.44.
Which I have confirmed locally:
$
/opt/compiler-explorer/arm64/gcc-15.1.0/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-as
--version
GNU assembler (GNU Binutils) 2.44
$
/opt/compiler-explorer/arm/gcc-15.1.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-as
--version
GNU assembler (GNU Binutils) 2.44
While I'm here, I added 2.38 to Arm since it was missing. From the GCC
13.2.0 build:
$
/opt/compiler-explorer/arm/gcc-13.2.0/arm-unknown-linux-gnueabihf/bin/arm-unknown-linux-gnueabihf-as
--version
GNU assembler (GNU Binutils) 2.38