]> git.lizzy.rs Git - rust.git/commitdiff
Do not panic on tuple struct access out of bounds
authorShotaro Yamada <sinkuu@sinkuu.xyz>
Tue, 6 Mar 2018 22:16:25 +0000 (07:16 +0900)
committerShotaro Yamada <sinkuu@sinkuu.xyz>
Tue, 6 Mar 2018 23:48:36 +0000 (08:48 +0900)
src/librustc_save_analysis/dump_visitor.rs
src/test/run-make/save-analysis-fail/foo.rs

index d4d76ff786fa0d47fe07e6b44360a29a830cfb22..d92025a6787d6f63597ab87accae8599e012f37b 100644 (file)
@@ -1665,13 +1665,16 @@ fn visit_expr(&mut self, ex: &'l ast::Expr) {
                         if !self.span.filter_generated(sub_span, ex.span) {
                             let span =
                                 self.span_from_span(sub_span.expect("No span found for var ref"));
-                            let ref_id =
-                                ::id_from_def_id(def.non_enum_variant().fields[idx.node].did);
-                            self.dumper.dump_ref(Ref {
-                                kind: RefKind::Variable,
-                                span,
-                                ref_id,
-                            });
+                            if let Some(field) = def.non_enum_variant().fields.get(idx.node) {
+                                let ref_id = ::id_from_def_id(field.did);
+                                self.dumper.dump_ref(Ref {
+                                    kind: RefKind::Variable,
+                                    span,
+                                    ref_id,
+                                });
+                            } else {
+                                return;
+                            }
                         }
                     }
                     ty::TyTuple(..) => {}
index f123c3a812d3fac63de8ede2b0a84fa179523477..b844f2e49e71ed1af9d98d85114d55b1e57b8b80 100644 (file)
@@ -462,4 +462,7 @@ fn new(f: u32) -> Rls699 {
 
 fn invalid_tuple_struct_access() {
     bar.0;
+
+    struct S;
+    S.0;
 }