Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Panic when compiling expression [1, 2].slice(1, undefined) #7742

Closed
vanilla-lake opened this issue Aug 2, 2023 · 1 comment · Fixed by #7745
Closed

Panic when compiling expression [1, 2].slice(1, undefined) #7742

vanilla-lake opened this issue Aug 2, 2023 · 1 comment · Fixed by #7745
Assignees
Labels
Milestone

Comments

@vanilla-lake
Copy link

Describe the bug

When compiling the expression [1, 2].slice(1, undefined), which is taken from Ext.js, SWC panics with the following output:

Panic: PanicInfo { payload: Any { .. }, message: Some(slice index starts at 1 but ends at 0), location: Location { file: "/rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/alloc/src/vec/mod.rs", line: 1993, col: 36 }, can_unwind: true }
Backtrace:    0: <unknown>
   1: <unknown>
   2: _napi_register_module_v1
   3: _napi_register_module_v1
   4: _napi_register_module_v1
   5: _napi_register_module_v1
   6: _wasmer_vm_imported_memory32_atomic_notify
   7: _wasmer_vm_imported_memory32_atomic_notify
   8: _napi_register_module_v1
   9: _napi_register_module_v1
  10: _napi_register_module_v1
  11: _napi_register_module_v1
  12: _napi_register_module_v1
  13: _napi_register_module_v1
  14: _napi_register_module_v1
  15: _napi_register_module_v1
  16: _napi_register_module_v1
  17: <unknown>
  18: __ZN6v8impl12_GLOBAL__N_123FunctionCallbackWrapper6InvokeERKN2v820FunctionCallbackInfoINS2_5ValueEEE
  19: __ZN2v88internal25FunctionCallbackArguments4CallENS0_15CallHandlerInfoE
  20: __ZN2v88internal12_GLOBAL__N_119HandleApiCallHelperILb0EEENS0_11MaybeHandleINS0_6ObjectEEEPNS0_7IsolateENS0_6HandleINS0_10HeapObjectEEENS8_INS0_20FunctionTemplateInfoEEENS8_IS4_EEPmi
  21: __ZN2v88internal21Builtin_HandleApiCallEiPmPNS0_7IsolateE

failed to handle: slice index starts at 1 but ends at 0
Error: Failed to compile 1 file with swc.
    at Object.assertCompilationResult (/SwcBug/node_modules/@swc/cli/lib/swc/util.js:149:15)
    at files (/SwcBug/node_modules/@swc/cli/lib/swc/file.js:201:19)
    at async _default (/SwcBug/node_modules/@swc/cli/lib/swc/file.js:220:9)

Unfortunately, that stack trace is not very helpful... However, I was able to get a much more useful one by running RUST_BACKTRACE=1 cargo run es minifier ensure-size panic.js from the SWC repo:

thread 'main' panicked at 'slice index starts at 1 but ends at 0', /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/alloc/src/vec/mod.rs:1993:36
stack backtrace:
   0: rust_begin_unwind
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/std/src/panicking.rs:593:5
   1: core::panicking::panic_fmt
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/panicking.rs:67:14
   2: core::slice::index::slice_index_order_fail_rt
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/slice/index.rs:98:5
   3: core::slice::index::slice_index_order_fail
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/slice/index.rs:91:14
   4: core::slice::index::range
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/slice/index.rs:720:9
   5: alloc::vec::Vec<T,A>::drain
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/alloc/src/vec/mod.rs:1993:36
   6: swc_ecma_minifier::compress::pure::evaluate::<impl swc_ecma_minifier::compress::pure::Pure>::eval_array_method_call
             at ./crates/swc_ecma_minifier/src/compress/pure/evaluate.rs:122:45
   7: <swc_ecma_minifier::compress::pure::Pure as swc_ecma_visit::VisitMut>::visit_mut_expr
             at ./crates/swc_ecma_minifier/src/compress/pure/mod.rs:491:9
   8: swc_ecma_visit::visit_mut_expr_stmt
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
   9: <swc_ecma_ast::stmt::ExprStmt as swc_ecma_visit::VisitMutWith<V>>::visit_mut_children_with
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  10: <swc_ecma_minifier::compress::pure::Pure as swc_ecma_visit::VisitMut>::visit_mut_expr_stmt
             at ./crates/swc_ecma_minifier/src/compress/pure/mod.rs:564:9
  11: swc_ecma_visit::visit_mut_stmt
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  12: <swc_ecma_ast::stmt::Stmt as swc_ecma_visit::VisitMutWith<V>>::visit_mut_children_with
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  13: <swc_ecma_minifier::compress::pure::Pure as swc_ecma_visit::VisitMut>::visit_mut_stmt
             at ./crates/swc_ecma_minifier/src/compress/pure/mod.rs:869:13
  14: swc_ecma_visit::visit_mut_module_item
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  15: swc_ecma_visit::VisitMut::visit_mut_module_item
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  16: <swc_ecma_ast::module::ModuleItem as swc_ecma_visit::VisitMutWith<V>>::visit_mut_with
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  17: swc_ecma_minifier::compress::pure::Pure::visit_par::{{closure}}
             at ./crates/swc_ecma_minifier/src/compress/pure/mod.rs:244:21
  18: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/ops/function.rs:305:13
  19: core::option::Option<T>::map
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/option.rs:1075:29
  20: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/iter/adapters/map.rs:103:26
  21: core::iter::traits::iterator::Iterator::reduce
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/iter/traits/iterator.rs:2517:21
  22: swc_ecma_minifier::compress::pure::Pure::visit_par
             at ./crates/swc_ecma_minifier/src/compress/pure/mod.rs:232:23
  23: <swc_ecma_minifier::compress::pure::Pure as swc_ecma_visit::VisitMut>::visit_mut_module_items
             at ./crates/swc_ecma_minifier/src/compress/pure/mod.rs:692:9
  24: swc_ecma_visit::visit_mut_module
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  25: swc_ecma_visit::VisitMut::visit_mut_module
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  26: <swc_ecma_ast::module::Module as swc_ecma_visit::VisitMutWith<V>>::visit_mut_with
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  27: <swc_ecma_ast::module::Module as swc_ecma_minifier::util::unit::CompileUnit>::apply
             at ./crates/swc_ecma_minifier/src/util/unit.rs:70:9
  28: swc_ecma_minifier::compress::Compressor::optimize_unit
             at ./crates/swc_ecma_minifier/src/compress/mod.rs:244:13
  29: swc_ecma_minifier::compress::Compressor::optimize_unit_repeatedly
             at ./crates/swc_ecma_minifier/src/compress/mod.rs:120:13
  30: <swc_ecma_minifier::compress::Compressor as swc_ecma_visit::VisitMut>::visit_mut_module
             at ./crates/swc_ecma_minifier/src/compress/mod.rs:332:9
  31: swc_ecma_visit::visit_mut_program
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  32: swc_ecma_visit::VisitMut::visit_mut_program
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  33: <swc_ecma_ast::module::Program as swc_ecma_visit::VisitMutWith<V>>::visit_mut_with
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  34: <swc_ecma_visit::Folder<V> as swc_ecma_visit::VisitMut>::visit_mut_program
             at ./crates/swc_ecma_visit/src/lib.rs:257:13
  35: <swc_visit::AndThen<A,B> as swc_ecma_visit::VisitMut>::visit_mut_program
             at ./crates/swc_ecma_visit/src/lib.rs:48:9
  36: <swc_ecma_ast::module::Program as swc_ecma_visit::VisitMutWith<V>>::visit_mut_with
             at ./crates/swc_ecma_visit/src/lib.rs:537:1
  37: swc_ecma_minifier::optimize
             at ./crates/swc_ecma_minifier/src/lib.rs:223:13
  38: dbg_swc::util::minifier::get_minified
             at ./crates/dbg-swc/src/util/minifier.rs:27:9
  39: dbg_swc::es::minifier::ensure_size::EnsureSize::check_file::{{closure}}::{{closure}}
             at ./crates/dbg-swc/src/es/minifier/ensure_size.rs:158:44
  40: scoped_tls::ScopedKey<T>::set
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9
  41: better_scoped_tls::ScopedKey<T>::set
             at ./crates/better_scoped_tls/src/lib.rs:55:9
  42: dbg_swc::es::minifier::ensure_size::EnsureSize::check_file::{{closure}}
             at ./crates/dbg-swc/src/es/minifier/ensure_size.rs:156:13
  43: dbg_swc::util::wrap_task
             at ./crates/dbg-swc/src/util/mod.rs:24:5
  44: dbg_swc::es::minifier::ensure_size::EnsureSize::check_file
             at ./crates/dbg-swc/src/es/minifier/ensure_size.rs:150:9
  45: dbg_swc::es::minifier::ensure_size::EnsureSize::run::{{closure}}::{{closure}}::{{closure}}
             at ./crates/dbg-swc/src/es/minifier/ensure_size.rs:46:56
  46: scoped_tls::ScopedKey<T>::set
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9
  47: better_scoped_tls::ScopedKey<T>::set
             at ./crates/better_scoped_tls/src/lib.rs:55:9
  48: dbg_swc::es::minifier::ensure_size::EnsureSize::run::{{closure}}::{{closure}}
             at ./crates/dbg-swc/src/es/minifier/ensure_size.rs:46:32
  49: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &F>::call_mut
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/ops/function.rs:272:13
  50: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/ops/function.rs:305:13
  51: core::option::Option<T>::map
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/option.rs:1075:29
  52: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/iter/adapters/map.rs:103:26
  53: rayon::iter::plumbing::Folder::consume_iter
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/plumbing/mod.rs:178:21
  54: <rayon::iter::map::MapFolder<C,F> as rayon::iter::plumbing::Folder<T>>::consume_iter
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/map.rs:248:21
  55: rayon::iter::plumbing::Producer::fold_with
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/plumbing/mod.rs:110:9
  56: rayon::iter::plumbing::bridge_producer_consumer::helper
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/plumbing/mod.rs:438:13
  57: rayon::iter::plumbing::bridge_producer_consumer
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/plumbing/mod.rs:397:12
  58: <rayon::iter::plumbing::bridge::Callback<C> as rayon::iter::plumbing::ProducerCallback<I>>::callback
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/plumbing/mod.rs:373:13
  59: <rayon::slice::Iter<T> as rayon::iter::IndexedParallelIterator>::with_producer
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/slice/mod.rs:732:9
  60: rayon::iter::plumbing::bridge
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/plumbing/mod.rs:357:12
  61: <rayon::slice::Iter<T> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/slice/mod.rs:708:9
  62: <rayon::iter::map::Map<I,F> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/map.rs:49:9
  63: <rayon::iter::filter_map::FilterMap<I,P> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/filter_map.rs:46:9
  64: <rayon::iter::map::Map<I,F> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/map.rs:49:9
  65: <rayon::iter::while_some::WhileSome<I> as rayon::iter::ParallelIterator>::drive_unindexed
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/while_some.rs:44:9
  66: rayon::iter::extend::<impl rayon::iter::ParallelExtend<T> for alloc::vec::Vec<T>>::par_extend
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/extend.rs:576:28
  67: rayon::iter::from_par_iter::collect_extended
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/from_par_iter.rs:17:5
  68: rayon::iter::from_par_iter::<impl rayon::iter::FromParallelIterator<T> for alloc::vec::Vec<T>>::from_par_iter
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/from_par_iter.rs:30:9
  69: rayon::iter::ParallelIterator::collect
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/mod.rs:2056:9
  70: rayon::result::<impl rayon::iter::FromParallelIterator<core::result::Result<T,E>> for core::result::Result<C,E>>::from_par_iter
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/result.rs:121:26
  71: rayon::iter::ParallelIterator::collect
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/rayon-1.7.0/src/iter/mod.rs:2056:9
  72: dbg_swc::es::minifier::ensure_size::EnsureSize::run::{{closure}}
             at ./crates/dbg-swc/src/es/minifier/ensure_size.rs:44:13
  73: scoped_tls::ScopedKey<T>::with
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:171:13
  74: better_scoped_tls::ScopedKey<T>::with
             at ./crates/better_scoped_tls/src/lib.rs:73:9
  75: dbg_swc::es::minifier::ensure_size::EnsureSize::run
             at ./crates/dbg-swc/src/es/minifier/ensure_size.rs:43:27
  76: dbg_swc::es::minifier::MinifierCommand::run
             at ./crates/dbg-swc/src/es/minifier/mod.rs:31:49
  77: dbg_swc::es::EsCommand::run
             at ./crates/dbg-swc/src/es/mod.rs:24:36
  78: dbg_swc::main::{{closure}}::{{closure}}::{{closure}}
             at ./crates/dbg-swc/src/main.rs:121:37
  79: scoped_tls::ScopedKey<T>::set
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9
  80: better_scoped_tls::ScopedKey<T>::set
             at ./crates/better_scoped_tls/src/lib.rs:55:9
  81: dbg_swc::main::{{closure}}::{{closure}}
             at ./crates/dbg-swc/src/main.rs:120:17
  82: scoped_tls::ScopedKey<T>::set
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9
  83: better_scoped_tls::ScopedKey<T>::set
             at ./crates/better_scoped_tls/src/lib.rs:55:9
  84: dbg_swc::main::{{closure}}
             at ./crates/dbg-swc/src/main.rs:119:13
  85: swc_error_reporters::handler::try_with_handler::{{closure}}
             at ./crates/swc_error_reporters/src/handler.rs:105:40
  86: scoped_tls::ScopedKey<T>::set
             at /Users/jflr/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9
  87: better_scoped_tls::ScopedKey<T>::set
             at ./crates/better_scoped_tls/src/lib.rs:55:9
  88: swc_error_reporters::handler::try_with_handler
             at ./crates/swc_error_reporters/src/handler.rs:105:15
  89: dbg_swc::main
             at ./crates/dbg-swc/src/main.rs:112:5
  90: core::ops::function::FnOnce::call_once
             at /rustc/839e9a6e1210934fd24b15548b811a97c77138fc/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Input code

console.log([1, 2].slice(1, undefined));

Config

{
  "minify": true,
  "jsc": {
    "minify": {
      "compress": true
    }
  }
}

Playground link

https://play.swc.rs/?version=1.3.73&code=H4sIAAAAAAAAA0vOzyvOz0nVy8lP14g21FEwitUrzslMTtUAskvzUlLTMvNSUzQ1rbkABC6U%2BykAAAA%3D&config=H4sIAAAAAAAAA32US5LjMAiG932KlNe9nVnMAXo3Z1ApEnKUloVLoHRcXbn74FeS6WDvbD5%2BkADx%2FXY4NGdyzZ%2FDt3zKT28LQbn%2Fi4WGzPYqlgZcZ8mV2HPzvtIzjSjYRDCZbjNp2JYWeFLRr8W9SYgEq%2Fti62KOYXhO6LDrCxA92cQq8WoHmel%2F%2FcIKfo2AS322HxET2LxDjCUTM0MLRQvsMCXbE5iLLUqU8aS2REItxQgrgzd9wV7l2UeOmCXnK%2FVgvXHoQUGxgON4AU0muUSWSa6n3GfCHo61bacm%2F1DDxaZqWckJ16klclol6gkjsQk1ayWc4UYNZrgU96cyBlOAa8mvujPGvNGTTwCpQLJE2XagxZ08gszTljrsKmMOMrI8KFzmW7tlhlaKamIMSmXHykDhqHWzgK8Oxso67TgL3igfRQ8GQpBZUULTV2R30pLy0AMGBUh%2FbdCmagbm%2Fgo3%2BPggdvCH3JL1AVs8OsunbUpDd8S0k6ADPqHfcZBWMG7jIlvi2m%2Fzmj3IaIBXXSpN4HUJyANgNGlali%2BzIc9DIpo24fGxJhaH230Jdza3j%2Fc%2B7%2BG3xaHp0NcJLht%2B7O%2B8l383D6d1C68naCL9XYVz1Ns%2FLRqxri0GAAA%3D

Expected behavior

SWC should be able to compile that expression.

Actual behavior

No response

Version

1.3.73

Additional context

No response

@kdy1 kdy1 added this to the Planned milestone Aug 2, 2023
@kdy1 kdy1 self-assigned this Aug 2, 2023
@kdy1 kdy1 closed this as completed in #7745 Aug 7, 2023
kdy1 added a commit that referenced this issue Aug 7, 2023
@kdy1 kdy1 modified the milestones: Planned, v1.3.75 Aug 8, 2023
kdy1 added a commit to kdy1/swc that referenced this issue Aug 15, 2023
@swc-bot
Copy link
Collaborator

swc-bot commented Sep 7, 2023

This closed issue has been automatically locked because it had no new activity for a month. If you are running into a similar issue, please create a new issue with the steps to reproduce. Thank you.

@swc-project swc-project locked as resolved and limited conversation to collaborators Sep 7, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Development

Successfully merging a pull request may close this issue.

3 participants