Skip to content

ice: no type-dependent def for method #116893

New issue

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

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

Already on GitHub? # to your account

Closed
matthiaskrgr opened this issue Oct 18, 2023 · 1 comment · Fixed by #120020
Closed

ice: no type-dependent def for method #116893

matthiaskrgr opened this issue Oct 18, 2023 · 1 comment · Fixed by #120020
Labels
C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@matthiaskrgr
Copy link
Member

File: /tmp/icemaker/AE153D8D5D57B27605224C96E644139B2BD809C19625E0FE2660FDA8A2906DF3.rs

auto-reduced (treereduce-rust):

struct X;
struct Y;
struct Z;

trait Foo<T> {
    type Ty;
    fn foo() -> Self::Ty;
}

impl Foo<Y> for X {
    type Ty = Z;
    fn foo() -> Self::Ty {
        unimplemented!()
    }
}

fn main() {
    let s = [(); {
        let mut n = 113383;
        while n != 0 {}
        n
    }];
    s.doit();
    X::foo();
}

original:

// check-pass

#![feature(inline_const_pat)]

const TLC: usize = 4;

trait Tr { fn doit(&self); }

impl Tr for [usize; TLC] {
    fn doit(&self) {
        println!("called 4");
    }
}

struct X;
struct Y;
struct Z;

trait Foo<T> {
    type Ty;
    fn foo() -> Self::Ty;
}

impl Foo<Y> for X {
    type Ty = Z;
    fn foo() -> Self::Ty {
        unimplemented!()
    }
}

enum E {
    A,
    B, //~ WARN variants `B` and `C` are never constructed
    C,
}

type F = E;

impl E {
    fn check(&self) -> bool {
        match self {
            Self::A => true,
            Self::B => false,
            F::C => false,
        }
    }
}

fn main() {
    let s = [(); { //~ ERROR failed to evaluate the given constant
        let mut n = 113383; // #20 in https://oeis.org/A006884
        while n != 0 {
            n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
            //~^ ERROR evaluation of constant value failed
        }
        n
    }];
    s.doit();
    X::foo();
    E::A.check();
}

Version information

rustc 1.75.0-nightly (e1de04ad4 2023-10-18)
binary: rustc
commit-hash: e1de04ad4e32afc6c82080a0b46408fee31dce88
commit-date: 2023-10-18
host: x86_64-unknown-linux-gnu
release: 1.75.0-nightly
LLVM version: 17.0.3

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc

Program output

warning: the feature `inline_const_pat` is incomplete and may not be safe to use and/or cause compiler crashes
 --> /tmp/icemaker/AE153D8D5D57B27605224C96E644139B2BD809C19625E0FE2660FDA8A2906DF3.rs:3:12
  |
3 | #![feature(inline_const_pat)]
  |            ^^^^^^^^^^^^^^^^
  |
  = note: see issue #76001 <https://github.com/rust-lang/rust/issues/76001> for more information
  = note: `#[warn(incomplete_features)]` on by default

error: constant evaluation is taking a long time
  --> /tmp/icemaker/AE153D8D5D57B27605224C96E644139B2BD809C19625E0FE2660FDA8A2906DF3.rs:52:9
   |
52 | /         while n != 0 {
53 | |             n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
54 | |             //~^ ERROR evaluation of constant value failed
55 | |         }
   | |_________^
   |
   = note: this lint makes sure the compiler doesn't get stuck due to infinite loops in const eval.
           If your compilation actually takes a long time, you can safely allow the lint.
help: the constant being evaluated
  --> /tmp/icemaker/AE153D8D5D57B27605224C96E644139B2BD809C19625E0FE2660FDA8A2906DF3.rs:50:18
   |
50 |       let s = [(); { //~ ERROR failed to evaluate the given constant
   |  __________________^
51 | |         let mut n = 113383; // #20 in https://oeis.org/A006884
52 | |         while n != 0 {
53 | |             n = if n % 2 == 0 { n/2 } else { 3*n + 1 };
...  |
56 | |         n
57 | |     }];
   | |_____^
   = note: `#[deny(long_running_const_eval)]` on by default

error: internal compiler error: compiler/rustc_passes/src/dead.rs:131:13: no type-dependent def for method

thread 'rustc' panicked at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/compiler/rustc_errors/src/lib.rs:1659:9:
Box<dyn Any>
stack backtrace:
   0:     0x7f8b8816922c - std::backtrace_rs::backtrace::libunwind::trace::h78b9e962e243ca8f
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7f8b8816922c - std::backtrace_rs::backtrace::trace_unsynchronized::h10b60b94f8e8e90f
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f8b8816922c - std::sys_common::backtrace::_print_fmt::heabe9f83d4e1fbf2
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/sys_common/backtrace.rs:67:5
   3:     0x7f8b8816922c - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h81b76958dc64cc2e
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f8b881cb1c0 - core::fmt::rt::Argument::fmt::h7f74343dbffe9183
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/core/src/fmt/rt.rs:142:9
   5:     0x7f8b881cb1c0 - core::fmt::write::hc2d1091c5ed1b3b7
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/core/src/fmt/mod.rs:1117:17
   6:     0x7f8b8815cf3f - std::io::Write::write_fmt::hb67a8f48bcfb1f4f
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/io/mod.rs:1762:15
   7:     0x7f8b88169014 - std::sys_common::backtrace::_print::h67add1984c5a1838
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7f8b88169014 - std::sys_common::backtrace::print::h404a822bd43d8000
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7f8b8816bca7 - std::panicking::default_hook::{{closure}}::h4e8ae7bcfd2c52aa
  10:     0x7f8b8816ba0f - std::panicking::default_hook::h004c8707dedde48e
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/panicking.rs:292:9
  11:     0x7f8b8aca0400 - std[7217ace3ed74fbee]::panicking::update_hook::<alloc[624d8125282ac140]::boxed::Box<rustc_driver_impl[f4c3d59f9c31edf1]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7f8b8816c3e8 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hbb7dfda09706e9c5
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/alloc/src/boxed.rs:2021:9
  13:     0x7f8b8816c3e8 - std::panicking::rust_panic_with_hook::h9ccb8adbf5a6f206
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/panicking.rs:735:13
  14:     0x7f8b8b059704 - std[7217ace3ed74fbee]::panicking::begin_panic::<rustc_errors[9290e2584ae7ad32]::ExplicitBug>::{closure#0}
  15:     0x7f8b8b051126 - std[7217ace3ed74fbee]::sys_common::backtrace::__rust_end_short_backtrace::<std[7217ace3ed74fbee]::panicking::begin_panic<rustc_errors[9290e2584ae7ad32]::ExplicitBug>::{closure#0}, !>
  16:     0x7f8b8b04b536 - std[7217ace3ed74fbee]::panicking::begin_panic::<rustc_errors[9290e2584ae7ad32]::ExplicitBug>
  17:     0x7f8b8b033f24 - <rustc_errors[9290e2584ae7ad32]::HandlerInner>::bug::<alloc[624d8125282ac140]::string::String>
  18:     0x7f8b8b033ce4 - <rustc_errors[9290e2584ae7ad32]::Handler>::bug::<alloc[624d8125282ac140]::string::String>
  19:     0x7f8b8b0d2a7d - rustc_middle[c3bb664540fd40fe]::util::bug::opt_span_bug_fmt::<rustc_span[86ba460ec05b7c05]::span_encoding::Span>::{closure#0}
  20:     0x7f8b8b0b9a2a - rustc_middle[c3bb664540fd40fe]::ty::context::tls::with_opt::<rustc_middle[c3bb664540fd40fe]::util::bug::opt_span_bug_fmt<rustc_span[86ba460ec05b7c05]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  21:     0x7f8b8b0b98c8 - rustc_middle[c3bb664540fd40fe]::ty::context::tls::with_context_opt::<rustc_middle[c3bb664540fd40fe]::ty::context::tls::with_opt<rustc_middle[c3bb664540fd40fe]::util::bug::opt_span_bug_fmt<rustc_span[86ba460ec05b7c05]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  22:     0x7f8b891bfe70 - rustc_middle[c3bb664540fd40fe]::util::bug::bug_fmt
  23:     0x7f8b89495d72 - <rustc_passes[fe3435d9db1f5a89]::dead::MarkSymbolVisitor as rustc_hir[d5ac411c7739f82b]::intravisit::Visitor>::visit_expr
  24:     0x7f8b8c13b4c4 - <rustc_passes[fe3435d9db1f5a89]::dead::MarkSymbolVisitor as rustc_hir[d5ac411c7739f82b]::intravisit::Visitor>::visit_block
  25:     0x7f8b8c139b6f - rustc_hir[d5ac411c7739f82b]::intravisit::walk_item::<rustc_passes[fe3435d9db1f5a89]::dead::MarkSymbolVisitor>
  26:     0x7f8b8cc8236a - rustc_passes[fe3435d9db1f5a89]::dead::live_symbols_and_ignored_derived_traits
  27:     0x7f8b8cc81856 - rustc_query_impl[1e4b497268a3bf63]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[1e4b497268a3bf63]::query_impl::live_symbols_and_ignored_derived_traits::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c3bb664540fd40fe]::query::erase::Erased<[u8; 8usize]>>
  28:     0x7f8b8cb147b3 - rustc_query_system[643e04207a7d8bda]::query::plumbing::try_execute_query::<rustc_query_impl[1e4b497268a3bf63]::DynamicConfig<rustc_query_system[643e04207a7d8bda]::query::caches::SingleCache<rustc_middle[c3bb664540fd40fe]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[1e4b497268a3bf63]::plumbing::QueryCtxt, false>
  29:     0x7f8b8cb13f06 - rustc_query_impl[1e4b497268a3bf63]::query_impl::live_symbols_and_ignored_derived_traits::get_query_non_incr::__rust_end_short_backtrace
  30:     0x7f8b8c5ba402 - rustc_passes[fe3435d9db1f5a89]::dead::check_mod_deathness
  31:     0x7f8b8c5ba307 - rustc_query_impl[1e4b497268a3bf63]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[1e4b497268a3bf63]::query_impl::check_mod_deathness::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c3bb664540fd40fe]::query::erase::Erased<[u8; 0usize]>>
  32:     0x7f8b8c5c4234 - rustc_query_system[643e04207a7d8bda]::query::plumbing::try_execute_query::<rustc_query_impl[1e4b497268a3bf63]::DynamicConfig<rustc_query_system[643e04207a7d8bda]::query::caches::DefaultCache<rustc_span[86ba460ec05b7c05]::def_id::LocalModDefId, rustc_middle[c3bb664540fd40fe]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[1e4b497268a3bf63]::plumbing::QueryCtxt, false>
  33:     0x7f8b8c5c3a8b - rustc_query_impl[1e4b497268a3bf63]::query_impl::check_mod_deathness::get_query_non_incr::__rust_end_short_backtrace
  34:     0x7f8b8c75a18f - rustc_interface[41ec36dc370840d6]::passes::analysis
  35:     0x7f8b8c759121 - rustc_query_impl[1e4b497268a3bf63]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[1e4b497268a3bf63]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c3bb664540fd40fe]::query::erase::Erased<[u8; 1usize]>>
  36:     0x7f8b8c91e0a6 - rustc_query_system[643e04207a7d8bda]::query::plumbing::try_execute_query::<rustc_query_impl[1e4b497268a3bf63]::DynamicConfig<rustc_query_system[643e04207a7d8bda]::query::caches::SingleCache<rustc_middle[c3bb664540fd40fe]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[1e4b497268a3bf63]::plumbing::QueryCtxt, false>
  37:     0x7f8b8c91ded5 - rustc_query_impl[1e4b497268a3bf63]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  38:     0x7f8b8cb2cc6a - std[7217ace3ed74fbee]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[41ec36dc370840d6]::util::run_in_thread_with_globals<rustc_interface[41ec36dc370840d6]::interface::run_compiler<core[1d18a34c428c8cbf]::result::Result<(), rustc_span[86ba460ec05b7c05]::ErrorGuaranteed>, rustc_driver_impl[f4c3d59f9c31edf1]::run_compiler::{closure#1}>::{closure#0}, core[1d18a34c428c8cbf]::result::Result<(), rustc_span[86ba460ec05b7c05]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[1d18a34c428c8cbf]::result::Result<(), rustc_span[86ba460ec05b7c05]::ErrorGuaranteed>>
  39:     0x7f8b8cb2bf73 - <<std[7217ace3ed74fbee]::thread::Builder>::spawn_unchecked_<rustc_interface[41ec36dc370840d6]::util::run_in_thread_with_globals<rustc_interface[41ec36dc370840d6]::interface::run_compiler<core[1d18a34c428c8cbf]::result::Result<(), rustc_span[86ba460ec05b7c05]::ErrorGuaranteed>, rustc_driver_impl[f4c3d59f9c31edf1]::run_compiler::{closure#1}>::{closure#0}, core[1d18a34c428c8cbf]::result::Result<(), rustc_span[86ba460ec05b7c05]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[1d18a34c428c8cbf]::result::Result<(), rustc_span[86ba460ec05b7c05]::ErrorGuaranteed>>::{closure#1} as core[1d18a34c428c8cbf]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  40:     0x7f8b88176f05 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h2ccd842889ca1510
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/alloc/src/boxed.rs:2007:9
  41:     0x7f8b88176f05 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h0b4e82b761ce431b
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/alloc/src/boxed.rs:2007:9
  42:     0x7f8b88176f05 - std::sys::unix::thread::Thread::new::thread_start::hd80c9211641b110c
                               at /rustc/e1de04ad4e32afc6c82080a0b46408fee31dce88/library/std/src/sys/unix/thread.rs:108:17
  43:     0x7f8b87f409eb - <unknown>
  44:     0x7f8b87fc47cc - <unknown>
  45:                0x0 - <unknown>

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.75.0-nightly (e1de04ad4 2023-10-18) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [live_symbols_and_ignored_derived_traits] finding live symbols in crate
#1 [check_mod_deathness] checking deathness of variables in top-level module
#2 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 2 previous errors; 1 warning emitted


@matthiaskrgr matthiaskrgr added I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. C-bug Category: This is a bug. labels Oct 18, 2023
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Oct 18, 2023
@matthiaskrgr
Copy link
Member Author

Regression in nightly-2023-06-02
Regression in 23f93a1
#103877 cc @oli-obk

@saethlin saethlin removed the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Oct 22, 2023
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Jan 16, 2024
… r=compiler-errors

Gracefully handle missing typeck information if typeck errored

fixes rust-lang#116893

I created some logs and the typeck of `fn main` is exactly the same, no matter whether the constant's body is what it is, or if it is replaced with `panic!()`. The latter will cause the ICE not to be emitted though. The reason for that is that we abort compilation if *errors* were emitted, but not if *lint errors* were emitted. This took me way too long to debug, and is another reason why I would have liked rust-lang/compiler-team#633
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Jan 16, 2024
… r=compiler-errors

Gracefully handle missing typeck information if typeck errored

fixes rust-lang#116893

I created some logs and the typeck of `fn main` is exactly the same, no matter whether the constant's body is what it is, or if it is replaced with `panic!()`. The latter will cause the ICE not to be emitted though. The reason for that is that we abort compilation if *errors* were emitted, but not if *lint errors* were emitted. This took me way too long to debug, and is another reason why I would have liked rust-lang/compiler-team#633
compiler-errors added a commit to compiler-errors/rust that referenced this issue Jan 17, 2024
… r=compiler-errors

Gracefully handle missing typeck information if typeck errored

fixes rust-lang#116893

I created some logs and the typeck of `fn main` is exactly the same, no matter whether the constant's body is what it is, or if it is replaced with `panic!()`. The latter will cause the ICE not to be emitted though. The reason for that is that we abort compilation if *errors* were emitted, but not if *lint errors* were emitted. This took me way too long to debug, and is another reason why I would have liked rust-lang/compiler-team#633
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this issue Jan 17, 2024
… r=compiler-errors

Gracefully handle missing typeck information if typeck errored

fixes rust-lang#116893

I created some logs and the typeck of `fn main` is exactly the same, no matter whether the constant's body is what it is, or if it is replaced with `panic!()`. The latter will cause the ICE not to be emitted though. The reason for that is that we abort compilation if *errors* were emitted, but not if *lint errors* were emitted. This took me way too long to debug, and is another reason why I would have liked rust-lang/compiler-team#633
compiler-errors added a commit to compiler-errors/rust that referenced this issue Jan 17, 2024
… r=compiler-errors

Gracefully handle missing typeck information if typeck errored

fixes rust-lang#116893

I created some logs and the typeck of `fn main` is exactly the same, no matter whether the constant's body is what it is, or if it is replaced with `panic!()`. The latter will cause the ICE not to be emitted though. The reason for that is that we abort compilation if *errors* were emitted, but not if *lint errors* were emitted. This took me way too long to debug, and is another reason why I would have liked rust-lang/compiler-team#633
@bors bors closed this as completed in 6ca77ff Jan 18, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this issue Jan 18, 2024
Rollup merge of rust-lang#120020 - oli-obk:long_const_eval_err_taint, r=compiler-errors

Gracefully handle missing typeck information if typeck errored

fixes rust-lang#116893

I created some logs and the typeck of `fn main` is exactly the same, no matter whether the constant's body is what it is, or if it is replaced with `panic!()`. The latter will cause the ICE not to be emitted though. The reason for that is that we abort compilation if *errors* were emitted, but not if *lint errors* were emitted. This took me way too long to debug, and is another reason why I would have liked rust-lang/compiler-team#633
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants