Closed
Description
TL;DR
When initializing a struct with update syntax inside a closure, an ICE occurs if a nonexistent or misspelled member is listed.
Example that Triggers ICE
struct Point {
pub x: u64,
pub y: u64,
}
const TEMPLATE: Point = Point {
x: 0,
y: 0
};
fn main() {
let x = || {
Point {
nonexistent: 0,
..TEMPLATE
}
};
}
Backtrace
thread 'main' panicked at 'no index for a field', libcore/option.rs:914:5
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::print
at libstd/sys_common/backtrace.rs:71
at libstd/sys_common/backtrace.rs:59
2: std::panicking::default_hook::{{closure}}
at libstd/panicking.rs:211
3: std::panicking::default_hook
at libstd/panicking.rs:227
4: rustc::util::common::panic_hook
at librustc/util/common.rs:54
5: std::panicking::rust_panic_with_hook
at libstd/panicking.rs:467
6: std::panicking::begin_panic_fmt
at libstd/panicking.rs:350
7: rust_begin_unwind
at libstd/panicking.rs:328
8: core::panicking::panic_fmt
at libcore/panicking.rs:71
9: core::option::expect_failed
at libcore/option.rs:914
10: rustc::ty::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::field_index
at /home/drobertson/git/rust/src/libcore/option.rs:302
at librustc/ty/mod.rs:2410
11: rustc::middle::expr_use_visitor::ExprUseVisitor::walk_expr
at librustc/middle/expr_use_visitor.rs:665
at /home/drobertson/git/rust/src/libcore/iter/iterator.rs:1689
at /home/drobertson/git/rust/src/libcore/iter/iterator.rs:1519
at /home/drobertson/git/rust/src/libcore/slice/mod.rs:2693
at /home/drobertson/git/rust/src/libcore/iter/iterator.rs:1519
at /home/drobertson/git/rust/src/libcore/iter/iterator.rs:1688
at librustc/middle/expr_use_visitor.rs:664
at librustc/middle/expr_use_visitor.rs:423
12: rustc::middle::expr_use_visitor::ExprUseVisitor::consume_expr
at librustc/middle/expr_use_visitor.rs:358
13: rustc::middle::expr_use_visitor::ExprUseVisitor::walk_block
at librustc/middle/expr_use_visitor.rs:639
14: rustc::middle::expr_use_visitor::ExprUseVisitor::walk_expr
at librustc/middle/expr_use_visitor.rs:0
15: rustc::middle::expr_use_visitor::ExprUseVisitor::consume_expr
at librustc/middle/expr_use_visitor.rs:358
16: rustc::middle::expr_use_visitor::ExprUseVisitor::consume_body
at librustc/middle/expr_use_visitor.rs:329
17: rustc_typeck::check::upvar::<impl rustc_typeck::check::FnCtxt<'a, 'gcx, 'tcx>>::analyze_closure
at librustc_typeck/check/upvar.rs:171
18: <rustc_typeck::check::upvar::InferBorrowKindVisitor<'a, 'gcx, 'tcx> as rustc::hir::intravisit::Visitor<'gcx>>::visit_expr
at librustc_typeck/check/upvar.rs:80
19: rustc::hir::intravisit::walk_local
at /home/drobertson/git/rust/src/<walk_list macros>:2
20: rustc::hir::intravisit::walk_block
at /home/drobertson/git/rust/src/<walk_list macros>:2
21: rustc_typeck::check::upvar::<impl rustc_typeck::check::FnCtxt<'a, 'gcx, 'tcx>>::closure_analyze
at librustc_typeck/check/upvar.rs:59
22: rustc::ty::context::tls::with_related_context
at librustc_typeck/check/mod.rs:904
at librustc_typeck/check/mod.rs:617
at /home/drobertson/git/rust/src/librustc/infer/mod.rs:453
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1578
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1844
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1787
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1843
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1577
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1905
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1889
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1880
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1889
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1900
23: rustc::ty::context::GlobalCtxt::enter_local
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1570
24: rustc::infer::InferCtxtBuilder::enter
at /home/drobertson/git/rust/src/librustc/infer/mod.rs:453
25: rustc_typeck::check::InheritedBuilder::enter
at librustc_typeck/check/mod.rs:617
26: rustc_typeck::check::typeck_tables_of
at librustc_typeck/check/mod.rs:855
27: rustc::ty::maps::<impl rustc::ty::maps::config::QueryConfig<'tcx> for rustc::ty::maps::queries::typeck_tables_of<'tcx>>::compute
at librustc/ty/maps/plumbing.rs:723
28: rustc::dep_graph::graph::DepGraph::with_task_impl
at librustc/dep_graph/graph.rs:343
29: rustc::dep_graph::graph::DepGraph::with_task
at librustc/dep_graph/graph.rs:209
30: rustc::ty::context::tls::with_related_context
at librustc/ty/maps/plumbing.rs:530
at librustc/ty/maps/plumbing.rs:200
at librustc/ty/context.rs:1844
at librustc/ty/context.rs:1787
at librustc/ty/context.rs:1843
at librustc/ty/maps/plumbing.rs:199
at librustc/ty/context.rs:1905
at librustc/ty/context.rs:1889
at librustc/ty/context.rs:1880
at librustc/ty/context.rs:1889
at librustc/ty/context.rs:1900
31: <rustc::ty::maps::plumbing::JobOwner<'a, 'tcx, Q>>::start
at librustc/ty/maps/plumbing.rs:189
32: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::force_query_with_job
at librustc/ty/maps/plumbing.rs:523
33: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::get_query
at librustc/ty/maps/plumbing.rs:372
at librustc/ty/maps/plumbing.rs:599
at librustc/ty/maps/plumbing.rs:606
34: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::ensure_query
at librustc/ty/maps/plumbing.rs:574
35: rustc::session::Session::track_errors
at librustc_typeck/check/mod.rs:715
at /home/drobertson/git/rust/src/librustc/session/mod.rs:318
36: rustc_typeck::check::typeck_item_bodies
at librustc_typeck/check/mod.rs:713
37: rustc::ty::maps::<impl rustc::ty::maps::config::QueryConfig<'tcx> for rustc::ty::maps::queries::typeck_item_bodies<'tcx>>::compute
at librustc/ty/maps/plumbing.rs:723
38: rustc::dep_graph::graph::DepGraph::with_task_impl
at librustc/dep_graph/graph.rs:343
39: rustc::dep_graph::graph::DepGraph::with_task
at librustc/dep_graph/graph.rs:209
40: rustc::ty::context::tls::with_related_context
at librustc/ty/maps/plumbing.rs:530
at librustc/ty/maps/plumbing.rs:200
at librustc/ty/context.rs:1844
at librustc/ty/context.rs:1787
at librustc/ty/context.rs:1843
at librustc/ty/maps/plumbing.rs:199
at librustc/ty/context.rs:1905
at librustc/ty/context.rs:1889
at librustc/ty/context.rs:1880
at librustc/ty/context.rs:1889
at librustc/ty/context.rs:1900
41: <rustc::ty::maps::plumbing::JobOwner<'a, 'tcx, Q>>::start
at librustc/ty/maps/plumbing.rs:189
42: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::force_query_with_job
at librustc/ty/maps/plumbing.rs:523
43: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::get_query
at librustc/ty/maps/plumbing.rs:372
at librustc/ty/maps/plumbing.rs:599
at librustc/ty/maps/plumbing.rs:606
44: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::typeck_item_bodies
at librustc/ty/maps/plumbing.rs:769
45: rustc::util::common::time
at librustc_typeck/lib.rs:344
at /home/drobertson/git/rust/src/librustc/util/common.rs:166
at /home/drobertson/git/rust/src/librustc/util/common.rs:160
46: rustc_typeck::check_crate
at librustc_typeck/lib.rs:344
47: rustc::ty::context::tls::enter_context
at librustc_driver/driver.rs:1121
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1867
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1844
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1787
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1843
48: <std::thread::local::LocalKey<T>>::with
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1866
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1833
at /home/drobertson/git/rust/src/libstd/thread/local.rs:294
at /home/drobertson/git/rust/src/libstd/thread/local.rs:248
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1825
at /home/drobertson/git/rust/src/libstd/thread/local.rs:294
at /home/drobertson/git/rust/src/libstd/thread/local.rs:248
49: rustc::ty::context::tls::enter_global
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1817
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1855
50: rustc::ty::context::TyCtxt::create_and_enter
at /home/drobertson/git/rust/src/librustc/ty/context.rs:1299
51: rustc_driver::driver::phase_3_run_analysis_passes
at librustc_driver/driver.rs:1095
52: rustc_driver::driver::compile_input
at librustc_driver/driver.rs:231
53: rustc_driver::run_compiler_impl
at librustc_driver/lib.rs:540
54: <scoped_tls::ScopedKey<T>>::set
at librustc_driver/lib.rs:457
at /home/drobertson/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.1/src/lib.rs:155
at /home/drobertson/git/rust/src/libsyntax/lib.rs:97
at /home/drobertson/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.1/src/lib.rs:155
55: syntax::with_globals
at /home/drobertson/git/rust/src/libsyntax/lib.rs:96
56: rustc_driver::run_compiler
at librustc_driver/lib.rs:456
57: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
at librustc_driver/lib.rs:1684
at librustc_driver/lib.rs:174
at librustc_driver/lib.rs:1598
at /home/drobertson/git/rust/src/libstd/panic.rs:305
58: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:105
59: std::panicking::try
at /home/drobertson/git/rust/src/libstd/panicking.rs:289
60: rustc_driver::run
at librustc_driver/lib.rs:1530
at librustc_driver/lib.rs:1597
at librustc_driver/lib.rs:173
61: rustc_driver::main
at librustc_driver/lib.rs:1677
62: std::rt::lang_start::{{closure}}
at /home/drobertson/git/rust/src/libstd/rt.rs:74
63: std::panicking::try::do_call
at libstd/rt.rs:59
at libstd/panicking.rs:310
64: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:105
65: std::panicking::try
at libstd/panicking.rs:289
66: std::panic::catch_unwind
at libstd/panic.rs:374
67: std::rt::lang_start_internal
at libstd/rt.rs:58
68: std::rt::lang_start
at /home/drobertson/git/rust/src/libstd/rt.rs:74
69: __libc_start_main
70: _start
Meta
$ rustc +stage1 --version --verbose
rustc 1.27.0-dev
binary: rustc
commit-hash: unknown
commit-date: unknown
host: x86_64-unknown-linux-gnu
release: 1.27.0-dev
LLVM version: 6.0
$ git rev-parse HEAD
0a223d139cd26e5bfab23a478a5cad845eaab131