Skip to content

ICE When Building combine in DEBUG MODE (WITHOUT --release) #107678

@HTGAzureX1212

Description

@HTGAzureX1212
Contributor

Code

/* this ICE lies in the combine crate */

Meta

rustc --version --verbose:

rustc 1.69.0-nightly (50d3ba5bc 2023-02-04)
binary: rustc
commit-hash: 50d3ba5bcbf5c7e13d4ce068d3339710701dd603
commit-date: 2023-02-04
host: x86_64-pc-windows-msvc
release: 1.69.0-nightly
LLVM version: 15.0.7

Error output

error: internal compiler error: no errors encountered even though `delay_span_bug` issued

error: internal compiler error: broken MIR in Item(WithOptConstParam { did: DefId(0:3569 ~ combine[b357]::stream::{impl#47}::reset), const_param_did: None }) (after phase change to runtime-optimized) at bb0[2]:
                                encountered `Assign((_0, const Result::<(), StringStreamError>::Ok(())))` with incompatible types:
                                left-hand side has type: Result<(), <&str as StreamOnce>::Error>
                                right-hand side has type: Result<(), StringStreamError>
Backtrace

error: internal compiler error: no errors encountered even though `delay_span_bug` issued

error: internal compiler error: broken MIR in Item(WithOptConstParam { did: DefId(0:3569 ~ combine[b357]::stream::{impl#47}::reset), const_param_did: None }) (after phase change to runtime-optimized) at bb0[2]:
                                encountered `Assign((_0, const Result::<(), StringStreamError>::Ok(())))` with incompatible types:
                                left-hand side has type: Result<(), <&str as StreamOnce>::Error>
                                right-hand side has type: Result<(), StringStreamError>
   --> C:\Users\USER\.cargo\registry\src\github.com-1ecc6299db9ec823\combine-4.6.6\src\stream\mod.rs:44:17
    |
44  |                 Ok(())
    |                 ^^^^^^
...
153 | clone_resetable! {('a) &'a str}
    | ------------------------------- in this macro invocation
    |
    = note: delayed at    0: std::backtrace::Backtrace::disabled
               1: std::backtrace::Backtrace::force_capture
               2: <rustc_errors::HandlerInner>::emit_diagnostic
               3: <rustc_const_eval::interpret::validity::PathElem as core::fmt::Debug>::fmt
               4: rustc_const_eval::transform::promote_consts::is_const_fn_in_array_repeat_expression
               5: <rustc_const_eval::transform::validate::Validator as rustc_middle::mir::MirPass>::run_pass
               6: <rustc_mir_transform::ctfe_limit::CtfeLimit as rustc_middle::mir::MirPass>::run_pass
               7: <rustc_mir_transform::unreachable_prop::UnreachablePropagation as rustc_middle::mir::MirPass>::run_pass
               8: <rustc_middle::ty::Visibility as rustc_privacy::VisibilityLike>::new_min
               9: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::as_any
              10: <rustc_metadata::rmeta::encoder::EncodeContext as rustc_type_ir::codec::TyEncoder>::position
              11: rustc_metadata::rmeta::encoder::encode_metadata
              12: <rustc_metadata::rmeta::LazyTables as rustc_serialize::serialize::Decodable<rustc_metadata::rmeta::decoder::DecodeContext>>::decode
              13: rustc_metadata::rmeta::encoder::encode_metadata
              14: rustc_metadata::fs::encode_and_write_metadata
              15: rustc_interface::passes::start_codegen
              16: rustc_interface::passes::output_filenames
              17: <rustc_interface::queries::Queries>::ongoing_codegen
              18: rustc_driver_impl::args::arg_expand_all
              19: <rustc_data_structures::temp_dir::MaybeTempDir>::new
              20: rustc_driver_impl::args::arg_expand_all
              21: <rustc_data_structures::temp_dir::MaybeTempDir>::new
              22: <rustc_data_structures::temp_dir::MaybeTempDir>::new
              23: std::sys::windows::thread::Thread::new
              24: BaseThreadInitThunk
              25: RtlUserThreadStart

    = note: this error: internal compiler error originates in the macro `clone_resetable` (in Nightly builds, run with -Z macro-backtrace for more info)

note: the compiler unexpectedly panicked. this is a bug.

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.69.0-nightly (50d3ba5bc 2023-02-04) running on x86_64-pc-windows-msvc

note: compiler flags: --crate-type lib -C embed-bitcode=no -C debuginfo=2 -C target-cpu=native

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
end of query stack

Activity

added
C-bugCategory: This is a bug.
I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
on Feb 5, 2023
HTGAzureX1212

HTGAzureX1212 commented on Feb 5, 2023

@HTGAzureX1212
ContributorAuthor

Compilation works fine when building WITH --release.

lukas-code

lukas-code commented on Feb 5, 2023

@lukas-code
Member

searched nightlies: from nightly-2023-02-03 to nightly-2023-02-05
regressed nightly: nightly-2023-02-05
searched commit range: 658fad6...50d3ba5
regressed commit: 9dee4e4 (#107267)

bisected with cargo-bisect-rustc v0.6.5

Host triple: x86_64-unknown-linux-gnu
Reproduce with:

cargo bisect-rustc --regress=ice -- build 
lukas-code

lukas-code commented on Feb 5, 2023

@lukas-code
Member

reduced example:

#![crate_type = "lib"]

pub trait StreamOnce {
    type Error;
}

pub trait ResetStream: StreamOnce {
    fn reset(&mut self) -> Result<(), Self::Error>;
}

impl<'a> ResetStream for &'a str
    where Self: StreamOnce
{
    #[inline]
    fn reset(&mut self) -> Result<(), Self::Error> {
        Ok(())
    }
}

// impl<T> StreamOnce for T {
//     type Error = ();
// }

Building a library and the inline attribute are required to reproduce.

This example will also ICE on stable, but if you uncomment the last three lines it only ICEs on nighly. So #107267 probably only revealed this bug and isn't the root cause of it.

@rustbot label S-bug-has-mcve

added
S-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issue
on Feb 5, 2023
added a commit that references this issue on Feb 5, 2023
pinned this issue on Feb 6, 2023
lqd

lqd commented on Feb 6, 2023

@lqd
Member

@rustbot label regression-from-stable-to-nightly

8 remaining items

JakobDegen

JakobDegen commented on Feb 8, 2023

@JakobDegen
Contributor

cc either @oli-obk or @lcnr , this seems to be some weirdness in the handling of trivially false bounds (at least the stable variant, the nightly one might be a different root cause)

Edit: Oh, I didn't see that there was a fix up already

NobodyXu

NobodyXu commented on Feb 8, 2023

@NobodyXu
Contributor

This ICE also happens on target x86_64-unknown-linux-gnu in cargo-bins/cargo-binstall#773 , however on target x86_64-pc-windows-msvc it did not occur.

added a commit that references this issue on Feb 9, 2023
unpinned this issue on Feb 11, 2023
removed
I-prioritizeIssue: Indicates that prioritization has been requested for this issue.
on Feb 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️S-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issueT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @lqd@Bjohnson131@apiraino@lukas-code@NobodyXu

      Issue actions

        ICE When Building `combine` in DEBUG MODE (WITHOUT `--release`) · Issue #107678 · rust-lang/rust