As I commented is the issue #51994 a variant of what is not being stabilized gave me an internal compiler error.
Code:
#![feature(self_struct_ctor)]
#![allow(dead_code)]
enum Foo {}
impl Foo {
fn bar() {
Self(1u8);
}
}
fn main() {}
Compiler output:
C:/Users/Caio/.cargo/bin/cargo.exe run --package nespera --bin nespera
Compiling nespera v0.1.0 (C:\Users\Caio\projects\nespera)
error: internal compiler error: cat_expr Errd
--> src\main.rs:7:14
|
7 | fn bar() {
| ______________^
8 | | Self(1u8);
9 | | }
| |_____^
error: internal compiler error: cat_expr Errd
--> src\main.rs:8:9
|
8 | Self(1u8);
| ^^^^^^^^^
error: internal compiler error: cat_expr Errd
--> src\main.rs:8:9
|
8 | Self(1u8);
| ^^^^
error: internal compiler error: QualifyAndPromoteConstants: Mir had errors
--> src\main.rs:7:5
|
7 | / fn bar() {
8 | | Self(1u8);
9 | | }
| |_____^
error: internal compiler error: broken MIR in DefId(0/0:5 ~ nespera[1ed1]::{{impl}}[0]::bar[0]) ("return type"): bad type [type error]
--> src\main.rs:7:5
|
7 | / fn bar() {
8 | | Self(1u8);
9 | | }
| |_____^
error: internal compiler error: broken MIR in DefId(0/0:5 ~ nespera[1ed1]::{{impl}}[0]::bar[0]) (LocalDecl { mutability: Mut, is_user_variable: None, internal: false, is_block_tail: None, ty: [type error], user_ty: UserTypeProjections { contents: [] }, name: None, source_info: SourceInfo { span: src\main.rs:7:5: 9:6, scope: scope[0] }, visibility_scope: scope[0] }): bad type [type error]
--> src\main.rs:7:5
|
7 | / fn bar() {
8 | | Self(1u8);
9 | | }
| |_____^
thread 'main' panicked at 'no errors encountered even though `delay_span_bug` issued', src\librustc_errors\lib.rs:334:17
stack backtrace:
0: std::sys_common::alloc::realloc_fallback
1: std::panicking::take_hook
2: std::panicking::take_hook
3: rustc::ty::structural_impls::<impl rustc::ty::context::Lift<'tcx> for rustc::ty::instance::InstanceDef<'a>>::lift_to_tcx
4: std::panicking::rust_panic_with_hook
5: <rustc_errors::diagnostic::SubDiagnostic as core::fmt::Debug>::fmt
6: <rustc_errors::Handler as core::ops::drop::Drop>::drop
7: <humantime::duration::Error as std::error::Error>::cause
8: <humantime::duration::Error as std::error::Error>::cause
9: <humantime::duration::Error as std::error::Error>::cause
10: <rustc_driver::derive_registrar::Finder as rustc::hir::itemlikevisit::ItemLikeVisitor<'v>>::visit_item
11: _rust_maybe_catch_panic
12: rustc_driver::profile::dump
13: rustc_driver::main
14: <unknown>
15: std::panicking::update_panic_count
16: _rust_maybe_catch_panic
17: std::rt::lang_start_internal
18: <unknown>
19: <unknown>
20: BaseThreadInitThunk
21: RtlUserThreadStart
query stack during panic:
end of query stack
error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: rustc 1.32.0-nightly (1f57e4841 2018-11-23) running on x86_64-pc-windows-msvc
note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin
note: some of the compiler flags provided by cargo are hidden
error: Could not compile `nespera`.
To learn more, run the command again with --verbose.
Process finished with exit code 101
cc @alexreg @oli-obk
Reduced:
#![feature(self_struct_ctor)]
enum Foo {}
impl Foo {
fn bar() {
Self
}
}
also:
#![feature(self_struct_ctor)]
enum Foo {}
impl Foo {
fn bar() {
Self();
}
}
Possibly fixed by #56205. Verify after that PR is merged and add regression test.
I'd like to handle the verification & test.
Thanks @kevgrasso, that would be great!
I tried compiling it with the nightly toolchain and it still panicked:
applesaucers@DESKTOP-I15PRGM:/mnt/c/Users/applesaucers/Documents/rust_test$ RUST_BACKTRACE=1 rustc +nightly i56199.rs
warning: the feature `self_struct_ctor` has been stable since 1.32.0 and no longer requires an attribute to enable
--> i56199.rs:1:12
|
1 | #![feature(self_struct_ctor)]
| ^^^^^^^^^^^^^^^^
|
= note: #[warn(stable_features)] on by default
warning: path statement with no effect
--> i56199.rs:8:9
|
8 | Self;
| ^^^^^
|
= note: #[warn(path_statements)] on by default
error: internal compiler error: cat_expr Errd
--> i56199.rs:7:14
|
7 | fn bar() {
| ______________^
8 | | Self;
9 | | }
| |_____^
error: internal compiler error: cat_expr Errd
--> i56199.rs:8:9
|
8 | Self;
| ^^^^
error: internal compiler error: broken MIR in DefId(0/0:5 ~ i56199[317d]::{{impl}}[0]::bar[0]) ("return type"): bad type [type error]
--> i56199.rs:7:5
|
7 | / fn bar() {
8 | | Self;
9 | | }
| |_____^
error: internal compiler error: broken MIR in DefId(0/0:5 ~ i56199[317d]::{{impl}}[0]::bar[0]) (LocalDecl { mutability: Mut, is_user_variable: None, internal: false, is_block_tail: None, ty: [type error], user_ty: UserTypeProjections { contents: [] }, name: None, source_info: SourceInfo { span: i56199.rs:7:5: 9:6, scope: scope[0] }, visibility_scope: scope[0] }): bad type [type error]
--> i56199.rs:7:5
|
7 | / fn bar() {
8 | | Self;
9 | | }
| |_____^
error: internal compiler error: QualifyAndPromoteConstants: Mir had errors
--> i56199.rs:7:5
|
7 | / fn bar() {
8 | | Self;
9 | | }
| |_____^
thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:334:17
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::_print
at src/libstd/sys_common/backtrace.rs:71
2: std::panicking::default_hook::{{closure}}
at src/libstd/sys_common/backtrace.rs:59
at src/libstd/panicking.rs:211
3: std::panicking::default_hook
at src/libstd/panicking.rs:227
4: rustc::util::common::panic_hook
5: std::panicking::rust_panic_with_hook
at src/libstd/panicking.rs:495
6: std::panicking::begin_panic
7: <rustc_errors::Handler as core::ops::drop::Drop>::drop
8: core::ptr::real_drop_in_place
9: core::ptr::real_drop_in_place
10: core::ptr::real_drop_in_place
11: rustc_driver::monitor::{{closure}}
12: __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:102
13: <F as alloc::boxed::FnBox<A>>::call_box
14: std::sys::unix::thread::Thread::new::thread_start
at /rustc/0c999ed132d67bf2520643e9bd619972cf3888ba/src/liballoc/boxed.rs:683
at src/libstd/sys_common/thread.rs:24
at src/libstd/sys/unix/thread.rs:90
15: start_thread
16: __clone
query stack during panic:
end of query stack
error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: rustc 1.32.0-nightly (0c999ed13 2018-12-03) running on x86_64-unknown-linux-gnu
for the sample code:
#![feature(self_struct_ctor)]
#![allow(dead_code)]
enum Foo {}
impl Foo {
fn bar() {
Self;
}
}
fn main() {}
Would you still want me to do a regression test for this, even though it's still bugged?
@kevgrasso we probably should fix the bug, we normally don't add tests for ICEs that haven't been fixed. CC @alexreg follow up to #56365.
On a related note, this also fails (see https://github.com/rust-lang/rust/issues/56611):
#![feature(self_struct_ctor)]
struct Foo {}
impl Foo {
fn bar() {
Self()
}
}
with
error: internal compiler error: src/librustc/hir/def.rs:265: attempted .def_id() on invalid def: SelfCtor(DefId(0/0:4 ~ playground[6463]::{{impl}}[0]))
I've fixed all of the above cases in https://github.com/rust-lang/rust/pull/56225 now.
@alexreg should this be closed?
The output of the original issue is now:
error: the `Self` constructor can only be used with tuple or unit structs
--> src/main.rs:8:9
|
8 | Self(1u8);
| ^^^^
|
= help: did you mean to use one of the enum's variants?
Most helpful comment
I'd like to handle the verification & test.