-
Notifications
You must be signed in to change notification settings - Fork 700
Labels
Description
Reproduction link or steps
treeshake: true, this reproduces with disabled tree-shaking.
rolldown.config.js
export default {
experimental: {
hmr: true
},
treeshake: false // fails regardless if true or false ❗
};
index.js
const routes = {
foo: import('./foo.js'),
bar: import('./bar.js')
}
foo.js
import { trim } from './utils/index.js'; // import via barrel
export default function() {
return trim('Route Foo');
}
bar.js
import { trim } from './utils/string.js'; // import directly
export default function() {
return trim('Route Bar');
}
utils/index.js
export * from './string.js'
utils/string.js
export function trim(s) {
return s.trim();
}
export function unused() {
return 'unused';
}
What is expected?
Should produce output
What is actually happening?
Crashes with
thread '<unnamed>' panicked at crates/rolldown_common/src/types/symbol_ref_db.rs:216:7:
canonical name not found for SymbolRef { owner: 4, symbol: SymbolId(2) }, original_name: "unused"
stack backtrace:
0: __rustc::rust_begin_unwind
1: core::panicking::panic_fmt
2: rolldown_common::types::symbol_ref_db::SymbolRefDb::canonical_name_for::{{closure}}
at ./crates/rolldown_common/src/types/symbol_ref_db.rs:216:7
3: core::option::Option<T>::unwrap_or_else
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/option.rs:1048:21
Full stacktrace
thread '<unnamed>' panicked at crates/rolldown_common/src/types/symbol_ref_db.rs:216:7:
canonical name not found for SymbolRef { owner: 4, symbol: SymbolId(2) }, original_name: "unused"
stack backtrace:
0: __rustc::rust_begin_unwind
1: core::panicking::panic_fmt
2: rolldown_common::types::symbol_ref_db::SymbolRefDb::canonical_name_for::{{closure}}
at ./crates/rolldown_common/src/types/symbol_ref_db.rs:216:7
3: core::option::Option<T>::unwrap_or_else
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/option.rs:1048:21
4: rolldown_common::types::symbol_ref_db::SymbolRefDb::canonical_name_for
at ./crates/rolldown_common/src/types/symbol_ref_db.rs:215:5
5: rolldown::module_finalizers::ScopeHoistingFinalizer::canonical_name_for
at ./crates/rolldown/src/module_finalizers/mod.rs:53:5
6: rolldown::module_finalizers::ScopeHoistingFinalizer::finalized_expr_for_symbol_ref
at ./crates/rolldown/src/module_finalizers/mod.rs:235:39
7: rolldown::module_finalizers::ScopeHoistingFinalizer::generate_declaration_of_module_namespace_object::{{closure}}
at ./crates/rolldown/src/module_finalizers/mod.rs:396:22
8: core::iter::traits::iterator::Iterator::for_each::call::{{closure}}
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/iter/traits/iterator.rs:798:29
9: core::iter::adapters::filter_map::filter_map_fold::{{closure}}
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/iter/adapters/filter_map.rs:40:20
10: core::iter::traits::iterator::Iterator::fold
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/iter/traits/iterator.rs:2576:21
11: <core::iter::adapters::filter_map::FilterMap<I,F> as core::iter::traits::iterator::Iterator>::fold
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/iter/adapters/filter_map.rs:146:9
12: core::iter::traits::iterator::Iterator::for_each
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/iter/traits/iterator.rs:801:9
13: rolldown::module_finalizers::ScopeHoistingFinalizer::generate_declaration_of_module_namespace_object
at ./crates/rolldown/src/module_finalizers/mod.rs:388:5
14: rolldown::module_finalizers::impl_visit_mut::<impl oxc_ast_visit::generated::visit_mut::VisitMut for rolldown::module_finalizers::ScopeHoistingFinalizer>::visit_program
at ./crates/rolldown/src/module_finalizers/impl_visit_mut.rs:54:7
15: rolldown::utils::finalize_normal_module::{{closure}}
at ./crates/rolldown/src/utils/mod.rs:44:5
16: rolldown_ecmascript::ecma_ast::program_cell::ProgramCell::with_mut::{{closure}}
at ./crates/rolldown_ecmascript/src/ecma_ast/program_cell.rs:43:9
17: rolldown_ecmascript::ecma_ast::program_cell::ProgramCell::with_dependent_mut
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/self_cell-1.2.0/src/lib.rs:384:13
18: rolldown_ecmascript::ecma_ast::program_cell::ProgramCell::with_mut
at ./crates/rolldown_ecmascript/src/ecma_ast/program_cell.rs:41:5
19: rolldown::utils::finalize_normal_module
at ./crates/rolldown/src/utils/mod.rs:34:3
20: rolldown::stages::generate_stage::GenerateStage::generate::{{closure}}::{{closure}}::{{closure}}
at ./crates/rolldown/src/stages/generate_stage/mod.rs:128:9
21: <rayon::iter::for_each::ForEachConsumer<F> as rayon::iter::plumbing::Folder<T>>::consume
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/for_each.rs:47:9
22: <rayon::iter::filter::FilterFolder<C,P> as rayon::iter::plumbing::Folder<T>>::consume
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/filter.rs:123:24
23: rayon::iter::plumbing::Folder::consume_iter
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:178:20
24: rayon::iter::plumbing::Producer::fold_with
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:109:9
25: rayon::iter::plumbing::bridge_producer_consumer::helper
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:437:13
26: rayon::iter::plumbing::bridge_producer_consumer::helper::{{closure}}
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:417:21
27: rayon_core::join::join_context::call_a::{{closure}}
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/join/mod.rs:124:17
28: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/panic/unwind_safe.rs:272:9
29: std::panicking::try::do_call
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/std/src/panicking.rs:589:40
30: ___rust_try
31: std::panicking::try
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/std/src/panicking.rs:552:19
32: std::panic::catch_unwind
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/std/src/panic.rs:359:14
33: rayon_core::unwind::halt_unwinding
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/unwind.rs:17:5
34: rayon_core::join::join_context::{{closure}}
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/join/mod.rs:142:24
35: rayon_core::registry::in_worker
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:951:13
36: rayon_core::join::join_context
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/join/mod.rs:132:5
37: rayon::iter::plumbing::bridge_producer_consumer::helper
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:415:47
38: rayon::iter::plumbing::bridge_producer_consumer::helper::{{closure}}
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-1.10.0/src/iter/plumbing/mod.rs:426:21
39: rayon_core::join::join_context::call_b::{{closure}}
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/join/mod.rs:129:25
40: rayon_core::job::JobResult<T>::call::{{closure}}
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:218:41
41: <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/core/src/panic/unwind_safe.rs:272:9
42: std::panicking::try::do_call
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/std/src/panicking.rs:589:40
43: ___rust_try
44: std::panicking::try
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/std/src/panicking.rs:552:19
45: std::panic::catch_unwind
at /private/tmp/rust-20250628-8015-2pvnvd/rustc-1.88.0-src/library/std/src/panic.rs:359:14
46: rayon_core::unwind::halt_unwinding
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/unwind.rs:17:5
47: rayon_core::job::JobResult<T>::call
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:218:15
48: <rayon_core::job::StackJob<L,F,R> as rayon_core::job::Job>::execute
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:120:32
49: rayon_core::job::JobRef::execute
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/job.rs:64:9
50: rayon_core::registry::WorkerThread::execute
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:860:9
51: rayon_core::registry::WorkerThread::wait_until_cold
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:794:21
52: rayon_core::registry::WorkerThread::wait_until
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:769:13
53: rayon_core::registry::WorkerThread::wait_until_out_of_work
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:818:9
54: rayon_core::registry::main_loop
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:923:5
55: rayon_core::registry::ThreadBuilder::run
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:53:18
56: <rayon_core::registry::DefaultSpawn as rayon_core::registry::ThreadSpawn>::spawn::{{closure}}
at /Users/romanhotsiy/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rayon-core-1.12.1/src/registry.rs:98:20
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
node:internal/process/promises:394
triggerUncaughtException(err, true /* fromPromise */);
^
[Error: Panic in async function] { code: 'GenericFailure' }
System Info
System:
OS: macOS 15.5
CPU: (8) arm64 Apple M1 Pro
Memory: 124.58 MB / 16.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 22.17.0 - ~/.asdf/cache/installs/nodejs/22.17.0/bin/node
npm: 10.9.2 - ~/.asdf/cache/plugins/nodejs/shims/npm
pnpm: 10.10.0 - ~/.asdf/cache/shims/pnpm
bun: 1.1.36 - ~/.bun/bin/bun
Browsers:
Chrome: 138.0.7204.94
Safari: 18.5
Any additional comments?
Probably related to #5235 but this time it has nothing to do with treeshake as I explicitly disabled treeshake.
My fix for #5235 in #5237 is not fixing this one.
As @hyf0 mentioned in my PR:
HMR is an experitmental and incomplete core feature. The current focus is to make it work in rolldown-vite...
HMR doesn't work with treeshaking is expected so far.
But it repdoduces without treeshaking so it may technically be reproducible with Vite.
Reactions are currently unavailable