Open
Description
Code
In the Rust repository, modify libcore with this patch:
diff --git a/library/core/src/num/int_macros.rs b/library/core/src/num/int_macros.rs
index fa37ee4ffb2..136d048025d 100644
--- a/library/core/src/num/int_macros.rs
+++ b/library/core/src/num/int_macros.rs
@@ -2653,19 +2653,24 @@ pub const fn pow(self, mut exp: u32) -> Self {
let mut base = self;
let mut acc = 1;
- while exp > 1 {
- if (exp & 1) == 1 {
+ loop {
+ let n_zeros = exp.trailing_zeros();
+ for _ in 0..n_zeros {
+ base = base * base;
+ }
+ exp >>= n_zeros;
+ let n_ones = exp.trailing_ones();
+ for _ in 0..(n_ones - 1) {
acc = acc * base;
+ base = base * base;
+ }
+ acc = acc * base;
+ exp >>= n_ones;
+ if exp == 0 {
+ return acc;
}
- exp /= 2;
base = base * base;
}
-
- // since exp!=0, finally the exp must be 1.
- // Deal with the final bit of the exponent separately, since
- // squaring the base afterwards is not necessary and may cause a
- // needless overflow.
- acc * base
}
diff --git a/library/core/src/num/uint_macros.rs b/library/core/src/num/uint_macros.rs
index 081a3c0b118..adbc48d3cd2 100644
--- a/library/core/src/num/uint_macros.rs
+++ b/library/core/src/num/uint_macros.rs
@@ -2439,19 +2439,24 @@ pub const fn pow(self, mut exp: u32) -> Self {
let mut base = self;
let mut acc = 1;
- while exp > 1 {
- if (exp & 1) == 1 {
+ loop {
+ let n_zeros = exp.trailing_zeros();
+ for _ in 0..n_zeros {
+ base = base * base;
+ }
+ exp >>= n_zeros;
+ let n_ones = exp.trailing_ones();
+ for _ in 0..(n_ones - 1) {
acc = acc * base;
+ base = base * base;
+ }
+ acc = acc * base;
+ exp >>= n_ones;
+ if exp == 0 {
+ return acc;
}
- exp /= 2;
base = base * base;
}
-
- // since exp!=0, finally the exp must be 1.
- // Deal with the final bit of the exponent separately, since
- // squaring the base afterwards is not necessary and may cause a
- // needless overflow.
- acc * base
}
Changed settings in config.toml
:
codegen-units-std = 1
incremental = false
Then build the library with ./x build library/core --stage 0
Meta
rustc version: 1.78.0-beta.1 (efd9d2d 2024-03-18)
Error output
error: internal compiler error: compiler/rustc_passes/src/check_const.rs:142:17: we should not have reached this point, since `.await` is denied earlier
--> library/core/src/num/int_macros.rs:2658:17
|
1 | / macro_rules! int_impl {
2 | | (
3 | | Self = $SelfT:ty,
4 | | ActualT = $ActualT:ident,
... |
2658 | | / for _ in 0..n_zeros {
2659 | | | base = base * base;
2660 | | | }
| | |_________________^
... |
3533 | | }
3534 | | }
| |___- in this expansion of `int_impl!` (#1)
|
::: library/core/src/num/mod.rs:301:5
|
301 | / int_impl! {
302 | | Self = i8,
303 | | ActualT = i8,
304 | | UnsignedT = u8,
... |
319 | | bound_condition = "",
320 | | }
| |_____- in this macro invocation (#1)
thread 'rustc' panicked at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/compiler/rustc_middle/src/util/bug.rs:34:50:
Box<dyn Any>
Backtrace
0: 0x7f38bdf8930f - std::backtrace_rs::backtrace::libunwind::trace::h539c03b0789a3163
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
1: 0x7f38bdf8930f - std::backtrace_rs::backtrace::trace_unsynchronized::h90a51b49b444fc01
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x7f38bdf8930f - std::backtrace::Backtrace::create::h52a6c1d2ae0a3112
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/std/src/backtrace.rs:331:13
3: 0x7f38bdf89250 - std::backtrace::Backtrace::force_capture::h70557b27472ed963
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/std/src/backtrace.rs:312:9
4: 0x7f38bac2ccb7 - std[999bdecce25602ed]::panicking::update_hook::<alloc[5d2a9fe8278cb303]::boxed::Box<rustc_driver_impl[e6c4295f52574c92]::install_ice_hook::{closure#0}>>::{closure#0}
5: 0x7f38bdfa3b50 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h8e05c89c9dfd827c
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/alloc/src/boxed.rs:2034:9
6: 0x7f38bdfa3b50 - std::panicking::rust_panic_with_hook::h6987b578e7dec23c
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/std/src/panicking.rs:783:13
7: 0x7f38bac55b94 - std[999bdecce25602ed]::panicking::begin_panic::<rustc_errors[17bedd29219f425c]::ExplicitBug>::{closure#0}
8: 0x7f38bac52906 - std[999bdecce25602ed]::sys_common::backtrace::__rust_end_short_backtrace::<std[999bdecce25602ed]::panicking::begin_panic<rustc_errors[17bedd29219f425c]::ExplicitBug>::{closure#0}, !>
9: 0x7f38bac525e6 - std[999bdecce25602ed]::panicking::begin_panic::<rustc_errors[17bedd29219f425c]::ExplicitBug>
10: 0x7f38bac5f2b1 - <rustc_errors[17bedd29219f425c]::diagnostic::BugAbort as rustc_errors[17bedd29219f425c]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
11: 0x7f38bb2d6c1c - <rustc_errors[17bedd29219f425c]::DiagCtxt>::span_bug::<rustc_span[ebf54beea9088bcf]::span_encoding::Span, alloc[5d2a9fe8278cb303]::string::String>
12: 0x7f38bb2e844d - rustc_middle[f6bb74e4dd5a8f75]::util::bug::opt_span_bug_fmt::<rustc_span[ebf54beea9088bcf]::span_encoding::Span>::{closure#0}
13: 0x7f38bb2e858a - rustc_middle[f6bb74e4dd5a8f75]::ty::context::tls::with_opt::<rustc_middle[f6bb74e4dd5a8f75]::util::bug::opt_span_bug_fmt<rustc_span[ebf54beea9088bcf]::span_encoding::Span>::{closure#0}, !>::{closure#0}
14: 0x7f38bb2e3178 - rustc_middle[f6bb74e4dd5a8f75]::ty::context::tls::with_context_opt::<rustc_middle[f6bb74e4dd5a8f75]::ty::context::tls::with_opt<rustc_middle[f6bb74e4dd5a8f75]::util::bug::opt_span_bug_fmt<rustc_span[ebf54beea9088bcf]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
15: 0x7f38bb2e24d4 - rustc_middle[f6bb74e4dd5a8f75]::util::bug::span_bug_fmt::<rustc_span[ebf54beea9088bcf]::span_encoding::Span>
16: 0x7f38bcead8f1 - <rustc_passes[6fa7bc5fc5542eb4]::check_const::CheckConstVisitor>::const_check_violated
17: 0x7f38b948bb28 - <rustc_passes[6fa7bc5fc5542eb4]::check_const::CheckConstVisitor as rustc_hir[121f359932e59ede]::intravisit::Visitor>::visit_expr
18: 0x7f38b948bc6a - <rustc_passes[6fa7bc5fc5542eb4]::check_const::CheckConstVisitor as rustc_hir[121f359932e59ede]::intravisit::Visitor>::visit_expr
19: 0x7f38bc084c42 - <rustc_passes[6fa7bc5fc5542eb4]::check_const::CheckConstVisitor as rustc_hir[121f359932e59ede]::intravisit::Visitor>::visit_block
20: 0x7f38bc084b4d - <rustc_passes[6fa7bc5fc5542eb4]::check_const::CheckConstVisitor as rustc_hir[121f359932e59ede]::intravisit::Visitor>::visit_body
21: 0x7f38bc081d46 - rustc_passes[6fa7bc5fc5542eb4]::check_const::check_mod_const_bodies
22: 0x7f38bc081839 - rustc_query_impl[e29825a6f88888a7]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e29825a6f88888a7]::query_impl::check_mod_const_bodies::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f6bb74e4dd5a8f75]::query::erase::Erased<[u8; 0usize]>>
23: 0x7f38bc6528ca - rustc_query_system[3350c2d9ca0121e2]::query::plumbing::try_execute_query::<rustc_query_impl[e29825a6f88888a7]::DynamicConfig<rustc_query_system[3350c2d9ca0121e2]::query::caches::DefaultCache<rustc_span[ebf54beea9088bcf]::def_id::LocalModDefId, rustc_middle[f6bb74e4dd5a8f75]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[e29825a6f88888a7]::plumbing::QueryCtxt, false>
24: 0x7f38bc65243f - rustc_query_impl[e29825a6f88888a7]::query_impl::check_mod_const_bodies::get_query_non_incr::__rust_end_short_backtrace
25: 0x7f38bc655482 - rustc_interface[2cd87b402a7bbb07]::passes::analysis
26: 0x7f38bc654f65 - rustc_query_impl[e29825a6f88888a7]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e29825a6f88888a7]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[f6bb74e4dd5a8f75]::query::erase::Erased<[u8; 1usize]>>
27: 0x7f38bcb01ba2 - rustc_query_system[3350c2d9ca0121e2]::query::plumbing::try_execute_query::<rustc_query_impl[e29825a6f88888a7]::DynamicConfig<rustc_query_system[3350c2d9ca0121e2]::query::caches::SingleCache<rustc_middle[f6bb74e4dd5a8f75]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[e29825a6f88888a7]::plumbing::QueryCtxt, false>
28: 0x7f38bcb01949 - rustc_query_impl[e29825a6f88888a7]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
29: 0x7f38bc9a5894 - rustc_interface[2cd87b402a7bbb07]::interface::run_compiler::<core[75bed1c93f3984e1]::result::Result<(), rustc_span[ebf54beea9088bcf]::ErrorGuaranteed>, rustc_driver_impl[e6c4295f52574c92]::run_compiler::{closure#0}>::{closure#0}
30: 0x7f38bccb1b2e - std[999bdecce25602ed]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[2cd87b402a7bbb07]::util::run_in_thread_with_globals<rustc_interface[2cd87b402a7bbb07]::interface::run_compiler<core[75bed1c93f3984e1]::result::Result<(), rustc_span[ebf54beea9088bcf]::ErrorGuaranteed>, rustc_driver_impl[e6c4295f52574c92]::run_compiler::{closure#0}>::{closure#0}, core[75bed1c93f3984e1]::result::Result<(), rustc_span[ebf54beea9088bcf]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[75bed1c93f3984e1]::result::Result<(), rustc_span[ebf54beea9088bcf]::ErrorGuaranteed>>
31: 0x7f38bccb198a - <<std[999bdecce25602ed]::thread::Builder>::spawn_unchecked_<rustc_interface[2cd87b402a7bbb07]::util::run_in_thread_with_globals<rustc_interface[2cd87b402a7bbb07]::interface::run_compiler<core[75bed1c93f3984e1]::result::Result<(), rustc_span[ebf54beea9088bcf]::ErrorGuaranteed>, rustc_driver_impl[e6c4295f52574c92]::run_compiler::{closure#0}>::{closure#0}, core[75bed1c93f3984e1]::result::Result<(), rustc_span[ebf54beea9088bcf]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[75bed1c93f3984e1]::result::Result<(), rustc_span[ebf54beea9088bcf]::ErrorGuaranteed>>::{closure#1} as core[75bed1c93f3984e1]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
32: 0x7f38bdfad1e5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h3b366b3d6b556d67
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/alloc/src/boxed.rs:2020:9
33: 0x7f38bdfad1e5 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h49756348eb63eea1
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/alloc/src/boxed.rs:2020:9
34: 0x7f38bdfad1e5 - std::sys::pal::unix::thread::Thread::new::thread_start::hdf802a7c2e3fdf20
at /rustc/efd9d2df12b5e17fac0b4d0fb89f612ecd79f259/library/std/src/sys/pal/unix/thread.rs:108:17
note: compiler flags: --crate-type lib -C opt-level=3 -C embed-bitcode=no -C codegen-units=1 -Z unstable-options -C symbol-mangling-version=legacy -Z unstable-options -Z unstable-options -Z macro-backtrace -C split-debuginfo=off -C prefer-dynamic -Z inline-mir -C link-args=-Wl,-z,origin -C link-args=-Wl,-rpath,$ORIGIN/../lib -C force-frame-pointers=yes -Z crate-attr=doc(html_root_url="https://doc.rust-lang.org/nightly/") -Z binary-dep-depinfo -Z force-unstable-if-unmarked
Metadata
Metadata
Assignees
Labels
Area: `#[stable]`, `#[unstable]` etc.Category: This is a bug.Internal rustc attributes gated on the `#[rustc_attrs]` feature gate.Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Low priorityRelevant to the compiler team, which will review and decide on the PR/issue.This issue requires the use of internal features.