Skip to content

Commit 73db287

Browse files
committed
Use newly exposed Freeze trait.
1 parent e12ef79 commit 73db287

8 files changed

+58
-54
lines changed

Diff for: tests/mir-opt/copy-prop/borrowed_local.borrowed.CopyProp.panic-abort.diff

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
- // MIR for `borrowed` before CopyProp
22
+ // MIR for `borrowed` after CopyProp
33

4-
fn borrowed(_1: u32) -> bool {
4+
fn borrowed(_1: T) -> bool {
55
let mut _0: bool;
6-
let mut _2: u32;
7-
let mut _3: &u32;
6+
let mut _2: T;
7+
let mut _3: &T;
88

99
bb0: {
1010
- _2 = _1;
1111
_3 = &_1;
12-
_0 = opaque::<&u32>(_3) -> [return: bb1, unwind unreachable];
12+
_0 = opaque::<&T>(_3) -> [return: bb1, unwind unreachable];
1313
}
1414

1515
bb1: {
16-
- _0 = opaque::<u32>(_2) -> [return: bb2, unwind unreachable];
17-
+ _0 = opaque::<u32>(_1) -> [return: bb2, unwind unreachable];
16+
- _0 = opaque::<T>(_2) -> [return: bb2, unwind unreachable];
17+
+ _0 = opaque::<T>(_1) -> [return: bb2, unwind unreachable];
1818
}
1919

2020
bb2: {

Diff for: tests/mir-opt/copy-prop/borrowed_local.borrowed.CopyProp.panic-unwind.diff

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
- // MIR for `borrowed` before CopyProp
22
+ // MIR for `borrowed` after CopyProp
33

4-
fn borrowed(_1: u32) -> bool {
4+
fn borrowed(_1: T) -> bool {
55
let mut _0: bool;
6-
let mut _2: u32;
7-
let mut _3: &u32;
6+
let mut _2: T;
7+
let mut _3: &T;
88

99
bb0: {
1010
- _2 = _1;
1111
_3 = &_1;
12-
_0 = opaque::<&u32>(_3) -> [return: bb1, unwind continue];
12+
_0 = opaque::<&T>(_3) -> [return: bb1, unwind continue];
1313
}
1414

1515
bb1: {
16-
- _0 = opaque::<u32>(_2) -> [return: bb2, unwind continue];
17-
+ _0 = opaque::<u32>(_1) -> [return: bb2, unwind continue];
16+
- _0 = opaque::<T>(_2) -> [return: bb2, unwind continue];
17+
+ _0 = opaque::<T>(_1) -> [return: bb2, unwind continue];
1818
}
1919

2020
bb2: {

Diff for: tests/mir-opt/copy-prop/borrowed_local.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
22
//@ unit-test: CopyProp
33

4-
#![feature(custom_mir, core_intrinsics)]
4+
#![feature(custom_mir, core_intrinsics, freeze)]
55
#![allow(unused_assignments)]
66
extern crate core;
7+
use core::marker::Freeze;
78
use core::intrinsics::mir::*;
89

910
fn opaque(_: impl Sized) -> bool { true }
@@ -42,14 +43,15 @@ fn compare_address() -> bool {
4243
)
4344
}
4445

46+
/// Generic type `T` is `Freeze`, so shared borrows are immutable.
4547
#[custom_mir(dialect = "analysis", phase = "post-cleanup")]
46-
fn borrowed(x: u32) -> bool {
48+
fn borrowed<T: Copy + Freeze>(x: T) -> bool {
4749
// CHECK-LABEL: fn borrowed(
4850
// CHECK: bb0: {
4951
// CHECK-NEXT: _3 = &_1;
50-
// CHECK-NEXT: _0 = opaque::<&u32>(_3)
52+
// CHECK-NEXT: _0 = opaque::<&T>(_3)
5153
// CHECK: bb1: {
52-
// CHECK-NEXT: _0 = opaque::<u32>(_1)
54+
// CHECK-NEXT: _0 = opaque::<T>(_1)
5355
mir!(
5456
{
5557
let a = x;

Diff for: tests/mir-opt/gvn.borrowed.GVN.panic-abort.diff

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
- // MIR for `borrowed` before GVN
22
+ // MIR for `borrowed` after GVN
33

4-
fn borrowed(_1: u32) -> () {
4+
fn borrowed(_1: T) -> () {
55
let mut _0: ();
6-
let mut _2: u32;
7-
let mut _3: &u32;
6+
let mut _2: T;
7+
let mut _3: &T;
88

99
bb0: {
1010
_2 = _1;
1111
_3 = &_1;
12-
_0 = opaque::<&u32>(_3) -> [return: bb1, unwind unreachable];
12+
_0 = opaque::<&T>(_3) -> [return: bb1, unwind unreachable];
1313
}
1414

1515
bb1: {
16-
- _0 = opaque::<u32>(_2) -> [return: bb2, unwind unreachable];
17-
+ _0 = opaque::<u32>(_1) -> [return: bb2, unwind unreachable];
16+
- _0 = opaque::<T>(_2) -> [return: bb2, unwind unreachable];
17+
+ _0 = opaque::<T>(_1) -> [return: bb2, unwind unreachable];
1818
}
1919

2020
bb2: {
21-
- _0 = opaque::<u32>((*_3)) -> [return: bb3, unwind unreachable];
22-
+ _0 = opaque::<u32>(_1) -> [return: bb3, unwind unreachable];
21+
- _0 = opaque::<T>((*_3)) -> [return: bb3, unwind unreachable];
22+
+ _0 = opaque::<T>(_1) -> [return: bb3, unwind unreachable];
2323
}
2424

2525
bb3: {

Diff for: tests/mir-opt/gvn.borrowed.GVN.panic-unwind.diff

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
- // MIR for `borrowed` before GVN
22
+ // MIR for `borrowed` after GVN
33

4-
fn borrowed(_1: u32) -> () {
4+
fn borrowed(_1: T) -> () {
55
let mut _0: ();
6-
let mut _2: u32;
7-
let mut _3: &u32;
6+
let mut _2: T;
7+
let mut _3: &T;
88

99
bb0: {
1010
_2 = _1;
1111
_3 = &_1;
12-
_0 = opaque::<&u32>(_3) -> [return: bb1, unwind continue];
12+
_0 = opaque::<&T>(_3) -> [return: bb1, unwind continue];
1313
}
1414

1515
bb1: {
16-
- _0 = opaque::<u32>(_2) -> [return: bb2, unwind continue];
17-
+ _0 = opaque::<u32>(_1) -> [return: bb2, unwind continue];
16+
- _0 = opaque::<T>(_2) -> [return: bb2, unwind continue];
17+
+ _0 = opaque::<T>(_1) -> [return: bb2, unwind continue];
1818
}
1919

2020
bb2: {
21-
- _0 = opaque::<u32>((*_3)) -> [return: bb3, unwind continue];
22-
+ _0 = opaque::<u32>(_1) -> [return: bb3, unwind continue];
21+
- _0 = opaque::<T>((*_3)) -> [return: bb3, unwind continue];
22+
+ _0 = opaque::<T>(_1) -> [return: bb3, unwind continue];
2323
}
2424

2525
bb3: {

Diff for: tests/mir-opt/gvn.fn_pointers.GVN.panic-abort.diff

+9-9
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@
88
let mut _3: fn(u8) -> u8;
99
let _5: ();
1010
let mut _6: fn(u8) -> u8;
11-
let mut _9: {closure@$DIR/gvn.rs:610:19: 610:21};
11+
let mut _9: {closure@$DIR/gvn.rs:612:19: 612:21};
1212
let _10: ();
1313
let mut _11: fn();
14-
let mut _13: {closure@$DIR/gvn.rs:610:19: 610:21};
14+
let mut _13: {closure@$DIR/gvn.rs:612:19: 612:21};
1515
let _14: ();
1616
let mut _15: fn();
1717
scope 1 {
1818
debug f => _1;
1919
let _4: fn(u8) -> u8;
2020
scope 2 {
2121
debug g => _4;
22-
let _7: {closure@$DIR/gvn.rs:610:19: 610:21};
22+
let _7: {closure@$DIR/gvn.rs:612:19: 612:21};
2323
scope 3 {
2424
debug closure => _7;
2525
let _8: fn();
@@ -62,16 +62,16 @@
6262
StorageDead(_6);
6363
StorageDead(_5);
6464
- StorageLive(_7);
65-
- _7 = {closure@$DIR/gvn.rs:610:19: 610:21};
65+
- _7 = {closure@$DIR/gvn.rs:612:19: 612:21};
6666
- StorageLive(_8);
6767
+ nop;
68-
+ _7 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21};
68+
+ _7 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
6969
+ nop;
7070
StorageLive(_9);
7171
- _9 = _7;
7272
- _8 = move _9 as fn() (PointerCoercion(ClosureFnPointer(Normal)));
73-
+ _9 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21};
74-
+ _8 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
73+
+ _9 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
74+
+ _8 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
7575
StorageDead(_9);
7676
StorageLive(_10);
7777
StorageLive(_11);
@@ -88,8 +88,8 @@
8888
StorageLive(_13);
8989
- _13 = _7;
9090
- _12 = move _13 as fn() (PointerCoercion(ClosureFnPointer(Normal)));
91-
+ _13 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21};
92-
+ _12 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
91+
+ _13 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
92+
+ _12 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
9393
StorageDead(_13);
9494
StorageLive(_14);
9595
StorageLive(_15);

Diff for: tests/mir-opt/gvn.fn_pointers.GVN.panic-unwind.diff

+9-9
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@
88
let mut _3: fn(u8) -> u8;
99
let _5: ();
1010
let mut _6: fn(u8) -> u8;
11-
let mut _9: {closure@$DIR/gvn.rs:610:19: 610:21};
11+
let mut _9: {closure@$DIR/gvn.rs:612:19: 612:21};
1212
let _10: ();
1313
let mut _11: fn();
14-
let mut _13: {closure@$DIR/gvn.rs:610:19: 610:21};
14+
let mut _13: {closure@$DIR/gvn.rs:612:19: 612:21};
1515
let _14: ();
1616
let mut _15: fn();
1717
scope 1 {
1818
debug f => _1;
1919
let _4: fn(u8) -> u8;
2020
scope 2 {
2121
debug g => _4;
22-
let _7: {closure@$DIR/gvn.rs:610:19: 610:21};
22+
let _7: {closure@$DIR/gvn.rs:612:19: 612:21};
2323
scope 3 {
2424
debug closure => _7;
2525
let _8: fn();
@@ -62,16 +62,16 @@
6262
StorageDead(_6);
6363
StorageDead(_5);
6464
- StorageLive(_7);
65-
- _7 = {closure@$DIR/gvn.rs:610:19: 610:21};
65+
- _7 = {closure@$DIR/gvn.rs:612:19: 612:21};
6666
- StorageLive(_8);
6767
+ nop;
68-
+ _7 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21};
68+
+ _7 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
6969
+ nop;
7070
StorageLive(_9);
7171
- _9 = _7;
7272
- _8 = move _9 as fn() (PointerCoercion(ClosureFnPointer(Normal)));
73-
+ _9 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21};
74-
+ _8 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
73+
+ _9 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
74+
+ _8 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
7575
StorageDead(_9);
7676
StorageLive(_10);
7777
StorageLive(_11);
@@ -88,8 +88,8 @@
8888
StorageLive(_13);
8989
- _13 = _7;
9090
- _12 = move _13 as fn() (PointerCoercion(ClosureFnPointer(Normal)));
91-
+ _13 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21};
92-
+ _12 = const ZeroSized: {closure@$DIR/gvn.rs:610:19: 610:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
91+
+ _13 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21};
92+
+ _12 = const ZeroSized: {closure@$DIR/gvn.rs:612:19: 612:21} as fn() (PointerCoercion(ClosureFnPointer(Normal)));
9393
StorageDead(_13);
9494
StorageLive(_14);
9595
StorageLive(_15);

Diff for: tests/mir-opt/gvn.rs

+6-4
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
#![feature(rustc_attrs)]
77
#![feature(custom_mir)]
88
#![feature(core_intrinsics)]
9+
#![feature(freeze)]
910
#![allow(unconditional_panic)]
1011

1112
use std::intrinsics::mir::*;
13+
use std::marker::Freeze;
1214
use std::mem::transmute;
1315

1416
struct S<T>(T);
@@ -721,16 +723,16 @@ fn wide_ptr_integer() {
721723
}
722724

723725
#[custom_mir(dialect = "analysis", phase = "post-cleanup")]
724-
fn borrowed(x: u32) {
726+
fn borrowed<T: Copy + Freeze>(x: T) {
725727
// CHECK-LABEL: fn borrowed(
726728
// CHECK: bb0: {
727729
// CHECK-NEXT: _2 = _1;
728730
// CHECK-NEXT: _3 = &_1;
729-
// CHECK-NEXT: _0 = opaque::<&u32>(_3)
731+
// CHECK-NEXT: _0 = opaque::<&T>(_3)
730732
// CHECK: bb1: {
731-
// CHECK-NEXT: _0 = opaque::<u32>(_1)
733+
// CHECK-NEXT: _0 = opaque::<T>(_1)
732734
// CHECK: bb2: {
733-
// CHECK-NEXT: _0 = opaque::<u32>(_1)
735+
// CHECK-NEXT: _0 = opaque::<T>(_1)
734736
mir!(
735737
{
736738
let a = x;

0 commit comments

Comments
 (0)