diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-05-29 13:55:21 +0300 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2018-05-30 20:30:10 +0300 |
| commit | 6c5397247856d49d89712f9d0c208c1981e9b72d (patch) | |
| tree | 387c6fb0da032c67bfe7b6a4182fe53fa40910b7 | |
| parent | 3da186b67fcfa01e3c719b3eb4edeb99d1d1aafb (diff) | |
| download | rust-6c5397247856d49d89712f9d0c208c1981e9b72d.tar.gz rust-6c5397247856d49d89712f9d0c208c1981e9b72d.zip | |
rustc: turn mir::LocalDecl's visibility_source_info into a SourceScope.
| -rw-r--r-- | src/librustc/ich/impls_mir.rs | 2 | ||||
| -rw-r--r-- | src/librustc/mir/mod.rs | 29 | ||||
| -rw-r--r-- | src/librustc/mir/visit.rs | 4 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/debuginfo/create_scope_map.rs | 2 | ||||
| -rw-r--r-- | src/librustc_codegen_llvm/mir/mod.rs | 7 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/error_reporting.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/mod.rs | 6 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/borrow_check/nll/type_check/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/build/expr/into.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/build/matches/mod.rs | 17 | ||||
| -rw-r--r-- | src/librustc_mir/build/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/dataflow/move_paths/builder.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/shim.rs | 2 | ||||
| -rw-r--r-- | src/librustc_mir/transform/generator.rs | 6 | ||||
| -rw-r--r-- | src/librustc_mir/transform/inline.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/transform/promote_consts.rs | 4 | ||||
| -rw-r--r-- | src/librustc_mir/transform/qualify_consts.rs | 4 |
18 files changed, 44 insertions, 55 deletions
diff --git a/src/librustc/ich/impls_mir.rs b/src/librustc/ich/impls_mir.rs index e5d28fdf785..15240570a7a 100644 --- a/src/librustc/ich/impls_mir.rs +++ b/src/librustc/ich/impls_mir.rs @@ -26,7 +26,7 @@ impl_stable_hash_for!(struct mir::LocalDecl<'tcx> { ty, name, syntactic_source_info, - visibility_source_info, + visibility_scope, internal, is_user_variable }); diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs index 2251d4a4b60..998af9ebcfe 100644 --- a/src/librustc/mir/mod.rs +++ b/src/librustc/mir/mod.rs @@ -558,7 +558,7 @@ pub struct LocalDecl<'tcx> { /// To allow both uses to work, we need to have more than a single scope /// for a local. We have the `syntactic_source_info.scope` represent the /// "syntactic" lint scope (with a variable being under its let - /// block) while the `visibility_source_info.scope` represents the "local variable" + /// block) while the `visibility_scope` represents the "local variable" /// scope (where the "rest" of a block is under all prior let-statements). /// /// The end result looks like this: @@ -577,18 +577,18 @@ pub struct LocalDecl<'tcx> { /// │ │ /// │ │ │{ let y: u32 } /// │ │ │ - /// │ │ │← y.visibility_source_info.scope + /// │ │ │← y.visibility_scope /// │ │ │← `y + 2` /// │ /// │ │{ let x: u32 } - /// │ │← x.visibility_source_info.scope + /// │ │← x.visibility_scope /// │ │← `drop(x)` // this accesses `x: u32` /// ``` pub syntactic_source_info: SourceInfo, - /// Source info of the local. The `SourceScope` is the *visibility* one, - /// not the the *syntactic* one (see `syntactic_source_info` for more details). - pub visibility_source_info: SourceInfo, + /// Source scope within which the local is visible (for debuginfo) + /// (see `syntactic_source_info` for more details). + pub visibility_scope: SourceScope, } impl<'tcx> LocalDecl<'tcx> { @@ -603,10 +603,7 @@ impl<'tcx> LocalDecl<'tcx> { span, scope: OUTERMOST_SOURCE_SCOPE }, - visibility_source_info: SourceInfo { - span, - scope: OUTERMOST_SOURCE_SCOPE - }, + visibility_scope: OUTERMOST_SOURCE_SCOPE, internal: false, is_user_variable: false } @@ -623,10 +620,7 @@ impl<'tcx> LocalDecl<'tcx> { span, scope: OUTERMOST_SOURCE_SCOPE }, - visibility_source_info: SourceInfo { - span, - scope: OUTERMOST_SOURCE_SCOPE - }, + visibility_scope: OUTERMOST_SOURCE_SCOPE, internal: true, is_user_variable: false } @@ -644,10 +638,7 @@ impl<'tcx> LocalDecl<'tcx> { span, scope: OUTERMOST_SOURCE_SCOPE }, - visibility_source_info: SourceInfo { - span, - scope: OUTERMOST_SOURCE_SCOPE - }, + visibility_scope: OUTERMOST_SOURCE_SCOPE, internal: false, name: None, // FIXME maybe we do want some name here? is_user_variable: false @@ -2201,7 +2192,7 @@ BraceStructTypeFoldableImpl! { ty, name, syntactic_source_info, - visibility_source_info, + visibility_scope, } } diff --git a/src/librustc/mir/visit.rs b/src/librustc/mir/visit.rs index 3a1a8f02f49..6cd1271cccf 100644 --- a/src/librustc/mir/visit.rs +++ b/src/librustc/mir/visit.rs @@ -715,7 +715,7 @@ macro_rules! make_mir_visitor { ref $($mutability)* ty, name: _, ref $($mutability)* syntactic_source_info, - ref $($mutability)* visibility_source_info, + ref $($mutability)* visibility_scope, internal: _, is_user_variable: _, } = *local_decl; @@ -725,7 +725,7 @@ macro_rules! make_mir_visitor { source_info: *syntactic_source_info, }); self.visit_source_info(syntactic_source_info); - self.visit_source_info(visibility_source_info); + self.visit_source_scope(visibility_scope); } fn super_source_scope(&mut self, diff --git a/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs b/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs index 81d8e510d11..9ced0f5f4ec 100644 --- a/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs +++ b/src/librustc_codegen_llvm/debuginfo/create_scope_map.rs @@ -65,7 +65,7 @@ pub fn create_mir_scopes(cx: &CodegenCx, mir: &Mir, debug_context: &FunctionDebu let mut has_variables = BitVector::new(mir.source_scopes.len()); for var in mir.vars_iter() { let decl = &mir.local_decls[var]; - has_variables.insert(decl.visibility_source_info.scope.index()); + has_variables.insert(decl.visibility_scope.index()); } // Instantiate all scopes. diff --git a/src/librustc_codegen_llvm/mir/mod.rs b/src/librustc_codegen_llvm/mir/mod.rs index 8dd8cc3f4bc..26680937d41 100644 --- a/src/librustc_codegen_llvm/mir/mod.rs +++ b/src/librustc_codegen_llvm/mir/mod.rs @@ -265,7 +265,7 @@ pub fn codegen_mir<'a, 'tcx: 'a>( if let Some(name) = decl.name { // User variable - let debug_scope = fx.scopes[decl.visibility_source_info.scope]; + let debug_scope = fx.scopes[decl.visibility_scope]; let dbg = debug_scope.is_valid() && bx.sess().opts.debuginfo == FullDebugInfo; if !memory_locals.contains(local.index()) && !dbg { @@ -276,7 +276,10 @@ pub fn codegen_mir<'a, 'tcx: 'a>( debug!("alloc: {:?} ({}) -> place", local, name); let place = PlaceRef::alloca(&bx, layout, &name.as_str()); if dbg { - let (scope, span) = fx.debug_loc(decl.visibility_source_info); + let (scope, span) = fx.debug_loc(mir::SourceInfo { + span: decl.syntactic_source_info.span, + scope: decl.visibility_scope, + }); declare_local(&bx, &fx.debug_context, name, layout.ty, scope, VariableAccess::DirectVariable { alloca: place.llval }, VariableKind::LocalVariable, span); diff --git a/src/librustc_mir/borrow_check/error_reporting.rs b/src/librustc_mir/borrow_check/error_reporting.rs index eedf8decd16..9b5e266917b 100644 --- a/src/librustc_mir/borrow_check/error_reporting.rs +++ b/src/librustc_mir/borrow_check/error_reporting.rs @@ -398,7 +398,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { let borrow_span = self.mir.source_info(borrow.reserve_location).span; let proper_span = match *root_place { - Place::Local(local) => self.mir.local_decls[local].visibility_source_info.span, + Place::Local(local) => self.mir.local_decls[local].syntactic_source_info.span, _ => drop_span, }; diff --git a/src/librustc_mir/borrow_check/mod.rs b/src/librustc_mir/borrow_check/mod.rs index 7b6bec06fa6..2c5d9156f2e 100644 --- a/src/librustc_mir/borrow_check/mod.rs +++ b/src/librustc_mir/borrow_check/mod.rs @@ -306,13 +306,13 @@ fn do_mir_borrowck<'a, 'gcx, 'tcx>( None => continue, } - let source_info = local_decl.visibility_source_info; - let mut_span = tcx.sess.codemap().span_until_non_whitespace(source_info.span); + let span = local_decl.syntactic_source_info.span; + let mut_span = tcx.sess.codemap().span_until_non_whitespace(span); tcx.struct_span_lint_node( UNUSED_MUT, vsi[local_decl.syntactic_source_info.scope].lint_root, - source_info.span, + span, "variable does not need to be mutable" ) .span_suggestion_short(mut_span, "remove this `mut`", "".to_owned()) diff --git a/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs b/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs index 88b9afbd138..10a0e4e127d 100644 --- a/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs +++ b/src/librustc_mir/borrow_check/nll/explain_borrow/mod.rs @@ -67,7 +67,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> { } None => { err.span_label( - mir.local_decls[local].visibility_source_info.span, + mir.local_decls[local].syntactic_source_info.span, "borrow may end up in a temporary, created here", ); diff --git a/src/librustc_mir/borrow_check/nll/type_check/mod.rs b/src/librustc_mir/borrow_check/nll/type_check/mod.rs index f8a0eb3749c..bad5b40d340 100644 --- a/src/librustc_mir/borrow_check/nll/type_check/mod.rs +++ b/src/librustc_mir/borrow_check/nll/type_check/mod.rs @@ -1201,7 +1201,7 @@ impl<'a, 'gcx, 'tcx> TypeChecker<'a, 'gcx, 'tcx> { LocalKind::Var | LocalKind::Temp => {} } - let span = local_decl.visibility_source_info.span; + let span = local_decl.syntactic_source_info.span; let ty = local_decl.ty; // Erase the regions from `ty` to get a global type. The diff --git a/src/librustc_mir/build/expr/into.rs b/src/librustc_mir/build/expr/into.rs index 049d4340193..398c619c0b1 100644 --- a/src/librustc_mir/build/expr/into.rs +++ b/src/librustc_mir/build/expr/into.rs @@ -247,7 +247,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { ty: ptr_ty, name: None, syntactic_source_info: source_info, - visibility_source_info: source_info, + visibility_scope: source_info.scope, internal: true, is_user_variable: false }); diff --git a/src/librustc_mir/build/matches/mod.rs b/src/librustc_mir/build/matches/mod.rs index e6ad36f3034..91812da2534 100644 --- a/src/librustc_mir/build/matches/mod.rs +++ b/src/librustc_mir/build/matches/mod.rs @@ -324,11 +324,8 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { span, scope: syntactic_scope, }; - let visibility_source_info = SourceInfo { - span, - scope: visibility_scope.unwrap() - }; - this.declare_binding(syntactic_source_info, visibility_source_info, mutability, name, var, + let visibility_scope = visibility_scope.unwrap(); + this.declare_binding(syntactic_source_info, visibility_scope, mutability, name, var, ty, has_guard); }); visibility_scope @@ -1118,16 +1115,16 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { /// in the arm body, which will have type `T`. fn declare_binding(&mut self, syntactic_source_info: SourceInfo, - visibility_source_info: SourceInfo, + visibility_scope: SourceScope, mutability: Mutability, name: Name, var_id: NodeId, var_ty: Ty<'tcx>, has_guard: ArmHasGuard) { - debug!("declare_binding(var_id={:?}, name={:?}, var_ty={:?}, visibility_source_info={:?}, \ + debug!("declare_binding(var_id={:?}, name={:?}, var_ty={:?}, visibility_scope={:?}, \ syntactic_source_info={:?})", - var_id, name, var_ty, visibility_source_info, syntactic_source_info); + var_id, name, var_ty, visibility_scope, syntactic_source_info); let tcx = self.hir.tcx(); let local = LocalDecl::<'tcx> { @@ -1135,7 +1132,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { ty: var_ty.clone(), name: Some(name), syntactic_source_info, - visibility_source_info, + visibility_scope, internal: false, is_user_variable: true, }; @@ -1147,7 +1144,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { ty: tcx.mk_imm_ref(tcx.types.re_empty, var_ty), name: Some(name), syntactic_source_info, - visibility_source_info, + visibility_scope, internal: false, is_user_variable: true, }); diff --git a/src/librustc_mir/build/mod.rs b/src/librustc_mir/build/mod.rs index 527e605a16a..ea3a6ae68e7 100644 --- a/src/librustc_mir/build/mod.rs +++ b/src/librustc_mir/build/mod.rs @@ -665,7 +665,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> { mutability: Mutability::Mut, ty, syntactic_source_info: source_info, - visibility_source_info: source_info, + visibility_scope: source_info.scope, name, internal: false, is_user_variable: false, diff --git a/src/librustc_mir/dataflow/move_paths/builder.rs b/src/librustc_mir/dataflow/move_paths/builder.rs index 321f307a43c..2c6828d7cf9 100644 --- a/src/librustc_mir/dataflow/move_paths/builder.rs +++ b/src/librustc_mir/dataflow/move_paths/builder.rs @@ -233,7 +233,7 @@ impl<'a, 'gcx, 'tcx> MoveDataBuilder<'a, 'gcx, 'tcx> { fn gather_args(&mut self) { for arg in self.mir.args_iter() { let path = self.data.rev_lookup.locals[arg]; - let span = self.mir.local_decls[arg].visibility_source_info.span; + let span = self.mir.local_decls[arg].syntactic_source_info.span; let init = self.data.inits.push(Init { path, span, kind: InitKind::Deep diff --git a/src/librustc_mir/shim.rs b/src/librustc_mir/shim.rs index f168292897e..19967cc323f 100644 --- a/src/librustc_mir/shim.rs +++ b/src/librustc_mir/shim.rs @@ -142,7 +142,7 @@ fn temp_decl(mutability: Mutability, ty: Ty, span: Span) -> LocalDecl { LocalDecl { mutability, ty, name: None, syntactic_source_info: source_info, - visibility_source_info: source_info, + visibility_scope: source_info.scope, internal: false, is_user_variable: false } diff --git a/src/librustc_mir/transform/generator.rs b/src/librustc_mir/transform/generator.rs index 940a13a42df..d084d09971d 100644 --- a/src/librustc_mir/transform/generator.rs +++ b/src/librustc_mir/transform/generator.rs @@ -301,7 +301,7 @@ fn replace_result_variable<'tcx>(ret_ty: Ty<'tcx>, ty: ret_ty, name: None, syntactic_source_info: source_info, - visibility_source_info: source_info, + visibility_scope: source_info.scope, internal: false, is_user_variable: false, }; @@ -642,7 +642,7 @@ fn create_generator_drop_shim<'a, 'tcx>( ty: tcx.mk_nil(), name: None, syntactic_source_info: source_info, - visibility_source_info: source_info, + visibility_scope: source_info.scope, internal: false, is_user_variable: false, }; @@ -658,7 +658,7 @@ fn create_generator_drop_shim<'a, 'tcx>( }), name: None, syntactic_source_info: source_info, - visibility_source_info: source_info, + visibility_scope: source_info.scope, internal: false, is_user_variable: false, }; diff --git a/src/librustc_mir/transform/inline.rs b/src/librustc_mir/transform/inline.rs index 868d7cadde4..cc1da268d68 100644 --- a/src/librustc_mir/transform/inline.rs +++ b/src/librustc_mir/transform/inline.rs @@ -401,9 +401,7 @@ impl<'a, 'tcx> Inliner<'a, 'tcx> { local.syntactic_source_info.scope = scope_map[local.syntactic_source_info.scope]; local.syntactic_source_info.span = callsite.location.span; - local.visibility_source_info.scope = - scope_map[local.visibility_source_info.scope]; - local.visibility_source_info.span = callsite.location.span; + local.visibility_scope = scope_map[local.visibility_scope]; let idx = caller_mir.local_decls.push(local); local_map.push(idx); diff --git a/src/librustc_mir/transform/promote_consts.rs b/src/librustc_mir/transform/promote_consts.rs index 98cc0ed8234..c61d5e268a9 100644 --- a/src/librustc_mir/transform/promote_consts.rs +++ b/src/librustc_mir/transform/promote_consts.rs @@ -210,7 +210,7 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> { let no_stmts = self.source[loc.block].statements.len(); let new_temp = self.promoted.local_decls.push( LocalDecl::new_temp(self.source.local_decls[temp].ty, - self.source.local_decls[temp].visibility_source_info.span)); + self.source.local_decls[temp].syntactic_source_info.span)); debug!("promote({:?} @ {:?}/{:?}, {:?})", temp, loc, no_stmts, self.keep_original); @@ -335,7 +335,7 @@ impl<'a, 'tcx> Promoter<'a, 'tcx> { // otherwise we would use the `promoted` directly. let mut promoted_ref = LocalDecl::new_temp(ref_ty, span); promoted_ref.syntactic_source_info = statement.source_info; - promoted_ref.visibility_source_info = statement.source_info; + promoted_ref.visibility_scope = statement.source_info.scope; let promoted_ref = local_decls.push(promoted_ref); assert_eq!(self.temps.push(TempState::Unpromotable), promoted_ref); self.extra_statements.push((loc, Statement { diff --git a/src/librustc_mir/transform/qualify_consts.rs b/src/librustc_mir/transform/qualify_consts.rs index 05e232753d7..828d8fa60e8 100644 --- a/src/librustc_mir/transform/qualify_consts.rs +++ b/src/librustc_mir/transform/qualify_consts.rs @@ -1046,7 +1046,7 @@ This does not pose a problem by itself because they can't be accessed directly." // conservatively, that drop elaboration will do. let needs_drop = if let Place::Local(local) = *place { if self.local_qualif[local].map_or(true, |q| q.intersects(Qualif::NEEDS_DROP)) { - Some(self.mir.local_decls[local].visibility_source_info.span) + Some(self.mir.local_decls[local].syntactic_source_info.span) } else { None } @@ -1102,7 +1102,7 @@ This does not pose a problem by itself because they can't be accessed directly." let mut err = feature_err( &self.tcx.sess.parse_sess, "const_let", - decl.visibility_source_info.span, + decl.syntactic_source_info.span, GateIssue::Language, "arguments of constant functions can only be immutable by-value bindings" ); |
