rustc_mir: create the let and "remainder" scopes in source order.

This commit is contained in:
Eduard-Mihai Burtescu 2018-06-01 19:25:28 +03:00
parent 9260305c9e
commit c3ca9a35be
6 changed files with 11 additions and 10 deletions

View file

@ -505,14 +505,15 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
UserTypeProjections::none(),
&mut |this, mutability, name, mode, var, span, ty, user_ty| {
if visibility_scope.is_none() {
visibility_scope =
Some(this.new_source_scope(scope_span, LintLevel::Inherited, None));
// If we have lints, create a new source scope
// that marks the lints for the locals. See the comment
// on the `source_info` field for why this is needed.
if lint_level.is_explicit() {
scope = this.new_source_scope(scope_span, lint_level, None);
}
visibility_scope = Some(this.new_source_scope(scope_span,
LintLevel::Inherited,
None));
}
let source_info = SourceInfo { span, scope };
let visibility_scope = visibility_scope.unwrap();

View file

@ -26,9 +26,9 @@ impl Drop for S {
// let mut _3: ();
// let mut _4: std::boxed::Box<S>;
// scope 1 {
// let _1: std::boxed::Box<S>;
// }
// scope 2 {
// let _1: std::boxed::Box<S>;
// }
// bb0: {
// StorageLive(_1);

View file

@ -34,9 +34,9 @@ impl S {
// let mut _4: S;
// let mut _5: bool;
// scope 1 {
// let _1: ();
// }
// scope 2 {
// let _1: ();
// }
// ...
// bb0: {
@ -48,9 +48,9 @@ impl S {
// let mut _5: S;
// let mut _6: bool;
// ...
// let mut _2: S;
// ...
// let _1: S;
// ...
// let mut _2: S;
// ...
// bb0: {
// END rustc.test.ElaborateDrops.after.mir

View file

@ -23,9 +23,9 @@ fn main() {
// let mut _5: ();
// let mut _6: &i32;
// scope 1 {
// let _2: i32;
// }
// scope 2 {
// let _2: i32;
// }
// bb0: {
// goto -> bb1;

View file

@ -27,10 +27,10 @@ fn main() {
// | '_#4r | U0 | {bb2[4..=5], bb3[0..=1]}
// END rustc.main.nll.0.mir
// START rustc.main.nll.0.mir
// let _6: &'_#4r usize;
// ...
// let _2: &'_#3r usize;
// ...
// let _6: &'_#4r usize;
// ...
// _2 = &'_#2r _1[_3];
// ...
// _6 = _2;

View file

@ -24,9 +24,9 @@ impl Drop for Droppy {
// let mut _5: Droppy;
// let mut _6: Aligned;
// scope 1 {
// let mut _1: Packed;
// }
// scope 2 {
// let mut _1: Packed;
// }
//
// bb0: {