[BUG] Claude Unlaunchable- BUN 1.4.0 Segmentation Fault
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
after running claude update, claude cannot be executed on this system.
What Should Happen?
Claude should launch.
Error Messages/Logs
claude --version
============================================================
Bun v1.4.0 (eb835313a) Linux x64 (baseline)
Linux Kernel v7.0.11 | glibc v2.39
CPU: sse42 popcnt avx avx2
Args: "claude" "--version"
Features: jsc standalone_executable claude_code
Builtins: "bun:main"
Elapsed: 35ms | User: 21ms | Sys: 16ms
RSS: 0.15 GB | Peak: 0.15 GB | Commit: 96.60 MB | Faults: 0 | Machine: 67.26 GB
panic(main thread): Segmentation fault at address 0x0
oh no: Bun has crashed. This indicates a bug in Bun, not your code.
To send a redacted crash report to Bun's team,
please file a GitHub issue using the link below:
https://bun.report/1.4.0/[$sumtoken]
Steps to Reproduce
claude update
launch claude /resume | --model | --dangerously-skip-permissions | doctor (flag doesn't change outcome- every invocation crashes.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
2.1.222
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
Other
Additional Information
grep -n -- '--- SIG' /tmp/claude.strace | head
1541:37489 --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=NULL} ---
1760:37489 --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_TKILL, si_pid=37489, si_uid=1000} ---
sed -n '1440,1541p' /tmp/claude.strace
sed -n '1440,1541p' /tmp/claude.strace
37495 sched_yield( <unfinished ...>
37494 futex(0x45291450088, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37493 futex(0x452914700dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37492 futex(0x452914700dc, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37491 sched_yield( <unfinished ...>
37489 <... sched_yield resumed>) = 0
37497 <... sched_yield resumed>) = 0
37496 sched_yield( <unfinished ...>
37495 <... sched_yield resumed>) = 0
37494 <... futex resumed>) = 0
37493 <... futex resumed>) = -1 EAGAIN (Resource temporarily unavailable)
37492 <... futex resumed>) = 0
37491 <... sched_yield resumed>) = 0
37489 sched_yield( <unfinished ...>
37497 sched_yield( <unfinished ...>
37496 <... sched_yield resumed>) = 0
37495 sched_yield( <unfinished ...>
37494 sched_yield( <unfinished ...>
37493 futex(0x45291470088, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37492 futex(0x452915400dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37491 futex(0x452915400dc, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37489 <... sched_yield resumed>) = 0
37497 <... sched_yield resumed>) = 0
37496 sched_yield( <unfinished ...>
37495 <... sched_yield resumed>) = 0
37494 <... sched_yield resumed>) = 0
37493 <... futex resumed>) = 0
37492 <... futex resumed>) = -1 EAGAIN (Resource temporarily unavailable)
37491 <... futex resumed>) = 0
37489 sched_yield( <unfinished ...>
37497 sched_yield( <unfinished ...>
37496 <... sched_yield resumed>) = 0
37495 sched_yield( <unfinished ...>
37494 sched_yield( <unfinished ...>
37493 sched_yield( <unfinished ...>
37492 futex(0x45291540088, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37491 futex(0x452914f00dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37489 <... sched_yield resumed>) = 0
37497 <... sched_yield resumed>) = 0
37496 futex(0x452914f00dc, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37495 <... sched_yield resumed>) = 0
37494 <... sched_yield resumed>) = 0
37493 <... sched_yield resumed>) = 0
37492 <... futex resumed>) = 0
37491 <... futex resumed>) = -1 EAGAIN (Resource temporarily unavailable)
37489 sched_yield( <unfinished ...>
37497 sched_yield( <unfinished ...>
37496 <... futex resumed>) = 0
37495 sched_yield( <unfinished ...>
37494 sched_yield( <unfinished ...>
37493 sched_yield( <unfinished ...>
37492 sched_yield( <unfinished ...>
37491 futex(0x452914f0088, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37489 <... sched_yield resumed>) = 0
37497 <... sched_yield resumed>) = 0
37496 futex(0x452914000dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37495 <... sched_yield resumed>) = 0
37494 <... sched_yield resumed>) = 0
37493 <... sched_yield resumed>) = 0
37492 <... sched_yield resumed>) = 0
37491 <... futex resumed>) = 0
37489 futex(0x452914000dc, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37497 sched_yield( <unfinished ...>
37496 <... futex resumed>) = -1 EAGAIN (Resource temporarily unavailable)
37495 sched_yield( <unfinished ...>
37494 sched_yield( <unfinished ...>
37493 sched_yield( <unfinished ...>
37492 sched_yield( <unfinished ...>
37491 sched_yield( <unfinished ...>
37489 <... futex resumed>) = 0
37497 <... sched_yield resumed>) = 0
37496 futex(0x45291400088, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37495 <... sched_yield resumed>) = 0
37494 <... sched_yield resumed>) = 0
37493 <... sched_yield resumed>) = 0
37492 <... sched_yield resumed>) = 0
37491 <... sched_yield resumed>) = 0
37489 futex(0x45290ef2bd8, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, NULL, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37497 futex(0x452915200dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1785958928, tv_nsec=978830575}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37496 <... futex resumed>) = 0
37495 futex(0x452914a00dc, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1785958928, tv_nsec=978841066}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37494 futex(0x452914500d8, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1785958928, tv_nsec=978845119}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37493 futex(0x452914700d8, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1785958928, tv_nsec=978849887}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37492 futex(0x452915400d8, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1785958928, tv_nsec=978853464}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37491 futex(0x452914f00d8, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1785958928, tv_nsec=978858232}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37496 futex(0x45290ef2bd8, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37489 <... futex resumed>) = 0
37496 <... futex resumed>) = 1
37489 futex(0x45290ef2b88, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
37496 futex(0x452914000d8, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 0, {tv_sec=1785958928, tv_nsec=978980064}, FUTEX_BITSET_MATCH_ANY <unfinished ...>
37489 <... futex resumed>) = 0
37489 pread64(6, "1403272 6663 5282 14199 0 138173"..., 256, 0) = 36
37489 sched_yield() = 0
37489 openat(AT_FDCWD, "/sys/kernel/debug/tracing/trace_marker", O_WRONLY) = -1 EACCES (Permission denied)
37489 futex(0x54dc5e0, FUTEX_WAKE_PRIVATE, 2147483647) = 0
37489 futex(0x54db5a8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
37489 futex(0x54dbeb8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
37489 pread64(6, "1403272 18150 12112 14199 0 1381"..., 256, 0) = 38
37489 pread64(6, "1403272 18606 12400 14199 0 1381"..., 256, 0) = 38
37489 pread64(6, "1403272 19144 12720 14199 0 1381"..., 256, 0) = 38
37489 pread64(6, "1403272 25196 16624 14199 0 1381"..., 256, 0) = 38
37489 --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=NULL} ---
What the trace shows:
- Threads 37491–37497 doing sched_yield/futex ping-pong are Bun/JavaScriptCore's worker and GC threads parking themselves — normal.
- The main thread's repeated pread64(6, "1403272 6663 5282 ...", 256, 0) is it re-reading /proc/self/statm (its own memory footprint) — that's JSC's allocator/GC polling memory usage, which it does around garbage-collection and heap-limit decisions.
- The EACCES on /sys/kernel/debug/tracing/trace_marker is harmless (tracing instrumentation probing).
- Then: four rapid memory-footprint reads and an immediate GPF-style SIGSEGV.
So the crash is inside engine/allocator/GC code (or JIT-generated code), not while processing any of your files — no config or session file was being read anywhere near the fault. That means strace has given you all it can, and it points away from "corrupt user data" and toward the runtime itself, consistent with the SI_KERNEL general-protection-fault signature.
The segfault is in JavaScriptCore's CachedTypes decoder — the code that deserializes precompiled bytecode. The stack reads bottom-up as: Claude Code starts → loads its main CommonJS module → JSC tries to decode the module's cached bytecode instead of parsing source → hits a corrupt/invalid pointer in that cache at CachedTypes.cpp:547 → general protection fault.
Claude Code's native build is a Bun standalone executable compiled with embedded bytecode ([StandaloneExecutable] is right there in the report). So the "cache" being decoded is baked into the claude binary itself. Decoding it segfaults, which means one of two things:
- The binary on that box is corrupted — most likely a partially-written or damaged download, e.g. an auto-update that got interrupted. This is by far the most common cause of this exact signature and fits everything else we saw: crash within milliseconds, GPF rather than clean null-read, and no user file involved (your strace confirmed it never touched a session or config file).
- A Bun 1.4.0 bug in bytecode-cache decoding on the baseline build — possible but much less likely.
This also retroactively explains the weirdness: it doesn't matter what arguments you pass — any invocation that loads the main module will crash identically.
Solution was as follows:
rm -rf ~/.local/share/claude ~/.local/bin/claude
curl -fsSL https://claude.ai/install.sh | bash