-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
A-NLLArea: Non-lexical lifetimes (NLL)Area: Non-lexical lifetimes (NLL)A-borrow-checkerArea: The borrow checkerArea: The borrow checkerC-bugCategory: This is a bug.Category: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-highHigh priorityHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.
Description
The following code (playground) panics the compiler in stable 1.38.0, beta 1.39.0-beta.6, and nightly 2019-10-17:
use serde::de::Deserializer;
use serde_derive::Deserialize;
#[derive(Deserialize)]
struct A {
#[serde(deserialize_with = "d")]
b: i64
}
pub fn d<'de, D>(_des: D) -> Result<i64, D::Error>
where
D: Deserializer<'de>,
D::Error:
{
Ok(5)
}
Removing the D::Error
bound or filling it with D::Error: Debug
makes it compile just fine.
Error + backtrace:
error: internal compiler error: src/librustc_mir/borrow_check/nll/universal_regions.rs:764: cannot convert `ReEmpty` to a region vid
thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:917:9
stack backtrace:
0: backtrace::backtrace::libunwind::trace
at /cargo/registry/src/github.spider-man.dpdns.org-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/libunwind.rs:88
1: backtrace::backtrace::trace_unsynchronized
at /cargo/registry/src/github.spider-man.dpdns.org-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/mod.rs:66
2: std::sys_common::backtrace::_print_fmt
at src/libstd/sys_common/backtrace.rs:77
3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
at src/libstd/sys_common/backtrace.rs:61
4: core::fmt::write
at src/libcore/fmt/mod.rs:1028
5: std::io::Write::write_fmt
at src/libstd/io/mod.rs:1412
6: std::sys_common::backtrace::_print
at src/libstd/sys_common/backtrace.rs:65
7: std::sys_common::backtrace::print
at src/libstd/sys_common/backtrace.rs:50
8: std::panicking::default_hook::{{closure}}
at src/libstd/panicking.rs:189
9: std::panicking::default_hook
at src/libstd/panicking.rs:206
10: rustc_driver::report_ice
11: std::panicking::rust_panic_with_hook
at src/libstd/panicking.rs:473
12: std::panicking::begin_panic
13: rustc_errors::HandlerInner::bug
14: rustc_errors::Handler::bug
15: rustc::util::bug::opt_span_bug_fmt::{{closure}}
16: rustc::ty::context::tls::with_opt::{{closure}}
17: rustc::ty::context::tls::with_context_opt
18: rustc::ty::context::tls::with_opt
19: rustc::util::bug::opt_span_bug_fmt
20: rustc::util::bug::bug_fmt
21: rustc_mir::borrow_check::nll::universal_regions::UniversalRegionIndices::to_region_vid::{{closure}}
22: <&mut rustc_mir::borrow_check::nll::type_check::constraint_conversion::ConstraintConversion as rustc::infer::outlives::obligations::TypeOutlivesDelegate>::push_verify
23: rustc::infer::outlives::obligations::TypeOutlives<D>::components_must_outlive
24: rustc::infer::outlives::obligations::TypeOutlives<D>::type_must_outlive
25: rustc::infer::outlives::obligations::TypeOutlives<D>::components_must_outlive
26: rustc::infer::outlives::obligations::TypeOutlives<D>::type_must_outlive
27: rustc_mir::borrow_check::nll::type_check::constraint_conversion::ConstraintConversion::convert_all
28: rustc_mir::borrow_check::nll::type_check::TypeChecker::prove_predicate
29: rustc_mir::borrow_check::nll::type_check::TypeChecker::normalize_and_prove_instantiated_predicates
30: <rustc_mir::borrow_check::nll::type_check::TypeVerifier as rustc::mir::visit::Visitor>::visit_constant
31: <rustc_mir::borrow_check::nll::type_check::TypeVerifier as rustc::mir::visit::Visitor>::visit_body
32: rustc_mir::borrow_check::nll::type_check::type_check
33: rustc_mir::borrow_check::nll::compute_regions
34: rustc_mir::borrow_check::do_mir_borrowck
35: rustc::ty::context::GlobalCtxt::enter_local
36: rustc_mir::borrow_check::mir_borrowck
37: rustc::ty::query::__query_compute::mir_borrowck
38: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::mir_borrowck>::compute
39: rustc::dep_graph::graph::DepGraph::with_task_impl
40: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
41: rustc::ty::<impl rustc::ty::context::TyCtxt>::par_body_owners
42: rustc::util::common::time
43: rustc_interface::passes::analysis
44: rustc::ty::query::__query_compute::analysis
45: rustc::dep_graph::graph::DepGraph::with_task_impl
46: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
47: rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}
48: rustc_interface::passes::create_global_ctxt::{{closure}}
49: rustc_interface::passes::BoxedGlobalCtxt::enter
50: rustc_interface::interface::run_compiler_in_existing_thread_pool
51: std::thread::local::LocalKey<T>::with
52: scoped_tls::ScopedKey<T>::set
53: syntax::with_globals
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
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.40.0-nightly (c27f7568b 2019-10-13) running on x86_64-unknown-linux-gnu
note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin
note: some of the compiler flags provided by cargo are hidden
query stack during panic:
#0 [mir_borrowck] processing `<<_IMPL_DESERIALIZE_FOR_A::<impl _IMPL_DESERIALIZE_FOR_A::_serde::Deserialize<'de> for A>::deserialize::__Visitor<'de> as _IMPL_DESERIALIZE_FOR_A::_serde::de::Visitor<'de>>::visit_seq::__DeserializeWith<'de> as _IMPL_DESERIALIZE_FOR_A::_serde::Deserialize<'de>>::deserialize`
#1 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to previous error
error: could not compile `rust_ice`.
To learn more, run the command again with --verbose.
Metadata
Metadata
Assignees
Labels
A-NLLArea: Non-lexical lifetimes (NLL)Area: Non-lexical lifetimes (NLL)A-borrow-checkerArea: The borrow checkerArea: The borrow checkerC-bugCategory: This is a bug.Category: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-highHigh priorityHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.