rustfmt tests/mir-opt.

The only non-obvious changes:
- `building/storage_live_dead_in_statics.rs` has a `#[rustfmt::skip]`
  attribute to avoid reformating a table of data.
- Two `.mir` files have slight changes involving line numbers.
- In `unusual_item_types.rs` an `EMIT_MIR` annotation is moved to
  outside a function, which is the usual spot, because `tidy` complains
  if such a comment is indented.

The commit also tweaks the comments in `rustfmt.toml`.
This commit is contained in:
Nicholas Nethercote 2024-06-03 10:18:33 +10:00
parent ac24299636
commit c9c80d2c5f
66 changed files with 251 additions and 236 deletions

View File

@ -10,17 +10,13 @@ ignore = [
"/build-*/",
"/vendor/",
# Some tests are not formatted, for multiple reasons:
# - some contain syntax errors that cause rustfmt to give an error
# - some UI tests are broken by different formatting
# - some require special comments in a particular position (e.g. `EMIT_MIR` comments)
# Some tests are not formatted, for various reasons.
"/tests/codegen/simd-intrinsic/", # Many types like `u8x64` are better hand-formatted.
"/tests/crashes/", # Many tests contain syntax errors.
"/tests/debuginfo/", # Tests are somewhat sensitive to source code layout.
"/tests/incremental/", # Tests are somewhat sensitive to source code layout.
"/tests/mir-opt/",
"/tests/crashes/", # Many of these tests contain syntax errors.
"/tests/debuginfo/", # These tests are somewhat sensitive to source code layout.
"/tests/incremental/", # These tests are somewhat sensitive to source code layout.
"/tests/pretty/",
"/tests/run-make/translation/test.rs", # Contains syntax errors.
"/tests/run-make/translation/test.rs", # This test contains syntax errors.
"/tests/run-make-fulldeps/",
"/tests/run-pass-valgrind/",
"/tests/rustdoc/",

View File

@ -9,7 +9,7 @@ fn address_of_reborrow() {
y as *const [i32; 10];
y as *const dyn Send;
y as *const [i32];
y as *const i32; // This is a cast, not a coercion
y as *const i32; // This is a cast, not a coercion
let p: *const _ = y;
let p: *const [i32; 10] = y;

View File

@ -9,7 +9,6 @@ unsafe fn foo(z: *mut usize) -> u32 {
99
}
// EMIT_MIR array_index_is_temporary.main.SimplifyCfg-pre-optimizations.after.mir
fn main() {
// CHECK-LABEL: fn main(

View File

@ -27,7 +27,9 @@ fn numbered(i: (u32, i32)) {
}
}
struct S { x: f32 }
struct S {
x: f32,
}
// EMIT_MIR debuginfo.structured.built.after.mir
#[custom_mir(dialect = "analysis", phase = "post-cleanup")]

View File

@ -5,21 +5,24 @@
// EMIT_MIR enum_cast.far.built.after.mir
enum Foo {
A
A,
}
enum Bar {
A, B
A,
B,
}
#[repr(u8)]
enum Boo {
A, B
A,
B,
}
#[repr(i16)]
enum Far {
A, B
A,
B,
}
fn foo(foo: Foo) -> usize {
@ -40,7 +43,9 @@ fn far(far: Far) -> isize {
// EMIT_MIR enum_cast.droppy.built.after.mir
enum Droppy {
A, B, C
A,
B,
C,
}
impl Drop for Droppy {
@ -82,12 +87,15 @@ fn unsigny(x: UnsignedAroundZero) -> u16 {
x as u16
}
enum NotStartingAtZero { A = 4, B = 6, C = 8 }
enum NotStartingAtZero {
A = 4,
B = 6,
C = 8,
}
// EMIT_MIR enum_cast.offsetty.built.after.mir
fn offsetty(x: NotStartingAtZero) -> u32 {
x as u32
}
fn main() {
}
fn main() {}

View File

@ -30,9 +30,13 @@ fn test_or() {
// EMIT_MIR logical_or_in_conditional.test_complex.built.after.mir
fn test_complex() {
if let E::A(_) = E::f() && ((always_true() && Droppy(0).0 > 0) || Droppy(1).0 > 1) {}
if let E::A(_) = E::f()
&& ((always_true() && Droppy(0).0 > 0) || Droppy(1).0 > 1)
{}
if !always_true() && let E::B = E::f() {}
if !always_true()
&& let E::B = E::f()
{}
}
fn main() {

View File

@ -1,7 +1,6 @@
// skip-filecheck
// Test that we don't generate unnecessarily large MIR for very simple matches
// EMIT_MIR simple_match.match_bool.built.after.mir
fn match_bool(x: bool) -> usize {
match x {

View File

@ -3,19 +3,12 @@
// EMIT_MIR shifts.shift_signed.built.after.mir
fn shift_signed(small: i8, big: u128, a: i8, b: i32, c: i128) -> ([i8; 3], [u128; 3]) {
(
[small >> a, small >> b, small >> c],
[big << a, big << b, big << c],
)
([small >> a, small >> b, small >> c], [big << a, big << b, big << c])
}
// EMIT_MIR shifts.shift_unsigned.built.after.mir
fn shift_unsigned(small: u8, big: i128, a: u8, b: u32, c: u128) -> ([u8; 3], [i128; 3]) {
(
[small >> a, small >> b, small >> c],
[big << a, big << b, big << c],
)
([small >> a, small >> b, small >> c], [big << a, big << b, big << c])
}
fn main() {
}
fn main() {}

View File

@ -3,6 +3,7 @@
// generate `StorageStart` or `StorageEnd` statements.
// EMIT_MIR storage_live_dead_in_statics.XXX.built.after.mir
#[rustfmt::skip]
static XXX: &'static Foo = &Foo {
tup: "hi",
data: &[
@ -20,13 +21,13 @@ static XXX: &'static Foo = &Foo {
(0, 1), (0, 2), (0, 3),
(0, 1), (0, 2), (0, 3),
(0, 1), (0, 2), (0, 3),
]
],
};
#[derive(Debug)]
struct Foo {
tup: &'static str,
data: &'static [(u32, u32)]
data: &'static [(u32, u32)],
}
fn main() {

View File

@ -11,7 +11,7 @@ impl<This> NeedsDrop for This {}
// EMIT_MIR control_flow_simplification.hello.GVN.diff
// EMIT_MIR control_flow_simplification.hello.PreCodegen.before.mir
fn hello<T>(){
fn hello<T>() {
if <bool>::NEEDS {
panic!()
}

View File

@ -8,7 +8,11 @@
#[derive(Copy, Clone)]
#[repr(u32)]
enum E { A, B, C }
enum E {
A,
B,
C,
}
#[derive(Copy, Clone)]
enum Empty {}
@ -39,7 +43,5 @@ fn main() {
// A non-UTF-8 string slice. Regression test for #75763 and #78520.
struct Str<const S: &'static str>;
let _non_utf8_str: Str::<{
unsafe { std::mem::transmute::<&[u8], &str>(&[0xC0, 0xC1, 0xF5]) }
}>;
let _non_utf8_str: Str<{ unsafe { std::mem::transmute::<&[u8], &str>(&[0xC0, 0xC1, 0xF5]) } }>;
}

View File

@ -31,7 +31,7 @@ struct Delta<T> {
enum Epsilon {
A(u8, u16),
B,
C { c: u32 }
C { c: u32 },
}
enum Zeta<T> {

View File

@ -2,7 +2,7 @@
//@ test-mir-pass: GVN
#[inline(never)]
fn read(_: usize) { }
fn read(_: usize) {}
// EMIT_MIR pointer_expose_provenance.main.GVN.diff
fn main() {

View File

@ -10,4 +10,4 @@ fn main() {
}
#[inline(never)]
fn consume(_: u32) { }
fn consume(_: u32) {}

View File

@ -3,7 +3,7 @@
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
#[inline(never)]
fn foo(_: i32) { }
fn foo(_: i32) {}
// EMIT_MIR switch_int.main.GVN.diff
// EMIT_MIR switch_int.main.SimplifyConstCondition-after-const-prop.diff

View File

@ -45,7 +45,10 @@ pub unsafe fn undef_union_as_integer() -> u32 {
// CHECK-LABEL: fn undef_union_as_integer(
// CHECK: _1 = Union32 {
// CHECK: _0 = move _1 as u32 (Transmute);
union Union32 { value: u32, unit: () }
union Union32 {
value: u32,
unit: (),
}
unsafe { transmute(Union32 { unit: () }) }
}

View File

@ -10,4 +10,4 @@ fn main() {
}
#[inline(never)]
fn consume(_: (u32, u32)) { }
fn consume(_: (u32, u32)) {}

View File

@ -4,10 +4,12 @@
#![feature(custom_mir, core_intrinsics, freeze)]
#![allow(unused_assignments)]
extern crate core;
use core::marker::Freeze;
use core::intrinsics::mir::*;
use core::marker::Freeze;
fn opaque(_: impl Sized) -> bool { true }
fn opaque(_: impl Sized) -> bool {
true
}
fn cmp_ref(a: &u8, b: &u8) -> bool {
std::ptr::eq(a as *const u8, b as *const u8)

View File

@ -7,7 +7,9 @@
extern crate core;
use core::intrinsics::mir::*;
fn opaque(_: impl Sized) -> bool { true }
fn opaque(_: impl Sized) -> bool {
true
}
struct Foo(u8);

View File

@ -8,7 +8,7 @@ use std::intrinsics::mir::*;
#[derive(Copy, Clone)]
enum E {
V1(i32),
V2(i32)
V2(i32),
}
// EMIT_MIR enum.simple.DataflowConstProp.diff
@ -23,7 +23,10 @@ fn simple() {
// CHECK: switchInt(const 0_isize) -> [0: [[target_bb:bb.*]], 1: bb2, otherwise: bb1];
// CHECK: [[target_bb]]: {
// CHECK: [[x]] = const 0_i32;
let x = match e { E::V1(x1) => x1, E::V2(x2) => x2 };
let x = match e {
E::V1(x1) => x1,
E::V2(x2) => x2,
};
}
// EMIT_MIR enum.constant.DataflowConstProp.diff
@ -39,7 +42,10 @@ fn constant() {
// CHECK: switchInt(const 0_isize) -> [0: [[target_bb:bb.*]], 1: bb2, otherwise: bb1];
// CHECK: [[target_bb]]: {
// CHECK: [[x]] = const 0_i32;
let x = match e { E::V1(x1) => x1, E::V2(x2) => x2 };
let x = match e {
E::V1(x1) => x1,
E::V2(x2) => x2,
};
}
// EMIT_MIR enum.statics.DataflowConstProp.diff
@ -58,7 +64,10 @@ fn statics() {
// CHECK: switchInt(const 0_isize) -> [0: [[target_bb:bb.*]], 1: bb2, otherwise: bb1];
// CHECK: [[target_bb]]: {
// CHECK: [[x1]] = const 0_i32;
let x1 = match e1 { E::V1(x11) => x11, E::V2(x12) => x12 };
let x1 = match e1 {
E::V1(x11) => x11,
E::V2(x12) => x12,
};
static RC: &E = &E::V2(4);
@ -72,7 +81,10 @@ fn statics() {
// One is `_9 = &(*_12) and another is `_9 = _11`. It is different from what we can
// get by printing MIR directly. It is better to check if there are any bugs in the
// MIR passes around this stage.
let x2 = match e2 { E::V1(x21) => x21, E::V2(x22) => x22 };
let x2 = match e2 {
E::V1(x21) => x21,
E::V2(x22) => x22,
};
}
#[rustc_layout_scalar_valid_range_start(1)]
@ -132,7 +144,10 @@ fn multiple(x: bool, i: u8) {
// CHECK: [[x2]] = const 0_u8;
// CHECK: [[some:_.*]] = (({{_.*}} as Some).0: u8)
// CHECK: [[x2]] = [[some]];
let x2 = match e { Some(i) => i, None => 0 };
let x2 = match e {
Some(i) => i,
None => 0,
};
// Therefore, `x2` should be `Top` here, and no replacement shall happen.

View File

@ -2,9 +2,9 @@
// EMIT_MIR mult_by_zero.test.DataflowConstProp.diff
// CHECK-LABEL: fn test(
fn test(x : i32) -> i32 {
x * 0
// CHECK: _0 = const 0_i32;
fn test(x: i32) -> i32 {
x * 0
// CHECK: _0 = const 0_i32;
}
fn main() {

View File

@ -45,7 +45,10 @@ pub unsafe fn undef_union_as_integer() -> u32 {
// CHECK-LABEL: fn undef_union_as_integer(
// CHECK: _1 = Union32 {
// CHECK: _0 = move _1 as u32 (Transmute);
union Union32 { value: u32, unit: () }
union Union32 {
value: u32,
unit: (),
}
unsafe { transmute(Union32 { unit: () }) }
}

View File

@ -4,5 +4,7 @@
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
fn main() {
for &foo in &[42, 43] { drop(foo) }
for &foo in &[42, 43] {
drop(foo)
}
}

View File

@ -7,7 +7,9 @@ fn main() {
let b = foo();
let d = foo();
match ****(&&&&b) {
true => {let x = 5;},
true => {
let x = 5;
}
false => {}
}
let y = 42;

View File

@ -2,7 +2,7 @@
//@ test-mir-pass: Derefer
// EMIT_MIR derefer_test.main.Derefer.diff
fn main() {
let mut a = (42,43);
let mut a = (42, 43);
let mut b = (99, &mut a);
let x = &mut (*b.1).0;
let y = &mut (*b.1).1;

View File

@ -1,7 +1,7 @@
// skip-filecheck
//@ test-mir-pass: Derefer
// EMIT_MIR derefer_test_multiple.main.Derefer.diff
fn main () {
fn main() {
let mut a = (42, 43);
let mut b = (99, &mut a);
let mut c = (11, &mut b);

View File

@ -7,22 +7,22 @@
// Tests that an enum with a variant with no data gets correctly transformed.
pub enum NoData {
Large([u8; 8196]),
None,
Large([u8; 8196]),
None,
}
// Tests that an enum with a variant with data that is a valid candidate gets transformed.
pub enum Candidate {
Small(u8),
Large([u8; 8196]),
Small(u8),
Large([u8; 8196]),
}
// Tests that an enum which has a discriminant much higher than the variant does not get
// tformed.
#[repr(u32)]
pub enum InvalidIdxs {
A = 302,
Large([u64; 1024]),
A = 302,
Large([u64; 1024]),
}
// Tests that an enum with too high of a discriminant index (not in bounds of usize) does not
@ -37,51 +37,51 @@ pub enum NotTrunctable {
// Tests that an enum with discriminants in random order still gets tformed correctly.
#[repr(u32)]
pub enum RandOrderDiscr {
A = 13,
B([u8; 1024]) = 5,
C = 7,
A = 13,
B([u8; 1024]) = 5,
C = 7,
}
// EMIT_MIR enum_opt.unin.EnumSizeOpt.diff
pub fn unin() -> NoData {
let mut a = NoData::None;
a = NoData::Large([1; 8196]);
a
let mut a = NoData::None;
a = NoData::Large([1; 8196]);
a
}
// EMIT_MIR enum_opt.cand.EnumSizeOpt.diff
pub fn cand() -> Candidate {
let mut a = Candidate::Small(1);
a = Candidate::Large([1; 8196]);
a
let mut a = Candidate::Small(1);
a = Candidate::Large([1; 8196]);
a
}
// EMIT_MIR enum_opt.invalid.EnumSizeOpt.diff
pub fn invalid() -> InvalidIdxs {
let mut a = InvalidIdxs::A;
a = InvalidIdxs::Large([0; 1024]);
a
let mut a = InvalidIdxs::A;
a = InvalidIdxs::Large([0; 1024]);
a
}
// EMIT_MIR enum_opt.trunc.EnumSizeOpt.diff
pub fn trunc() -> NotTrunctable {
let mut a = NotTrunctable::A;
a = NotTrunctable::B([0; 1024]);
a = NotTrunctable::C([0; 4096]);
a
let mut a = NotTrunctable::A;
a = NotTrunctable::B([0; 1024]);
a = NotTrunctable::C([0; 4096]);
a
}
pub fn rand_order() -> RandOrderDiscr {
let mut a = RandOrderDiscr::A;
a = RandOrderDiscr::B([0; 1024]);
a = RandOrderDiscr::C;
a
let mut a = RandOrderDiscr::A;
a = RandOrderDiscr::B([0; 1024]);
a = RandOrderDiscr::C;
a
}
pub fn main() {
unin();
cand();
invalid();
trunc();
rand_order();
unin();
cand();
invalid();
trunc();
rand_order();
}

View File

@ -32,7 +32,6 @@ impl<T: Call> Call for A<T> {
}
}
impl<T: Call> Call for B<T> {
#[inline]
fn call() {

View File

@ -26,7 +26,6 @@ impl Call for A {
}
}
impl<T: Call> Call for B<T> {
#[inline]
fn call() {

View File

@ -16,8 +16,16 @@ fn main() {
// Cost is approximately 3 * 25 + 5 = 80.
#[inline]
pub fn not_inlined() { g(); g(); g(); }
pub fn inlined<T>() { g(); g(); g(); }
pub fn not_inlined() {
g();
g();
g();
}
pub fn inlined<T>() {
g();
g();
g();
}
#[inline(never)]
fn g() {}

View File

@ -5,7 +5,7 @@
fn main() {
// CHECK-LABEL: fn main(
// CHECK: (inlined <Vec<()> as Foo>::bar)
let x = <Vec::<()> as Foo>::bar();
let x = <Vec<()> as Foo>::bar();
}
trait Foo {
@ -14,5 +14,7 @@ trait Foo {
impl<T> Foo for Vec<T> {
#[inline(always)]
default fn bar() -> u32 { 123 }
default fn bar() -> u32 {
123
}
}

View File

@ -19,11 +19,7 @@ fn inner() -> usize {
// CHECK: = {{.*}}[_0];
let buffer = &[true];
let index = index();
if buffer[index] {
index
} else {
0
}
if buffer[index] { index } else { 0 }
}
fn main() {

View File

@ -13,6 +13,9 @@ fn main() {
// CHECK-NEXT: }
// CHECK-NEXT: }
// CHECK-NEXT: }
let f = |x| { let y = x; y };
let f = |x| {
let y = x;
y
};
f(())
}

View File

@ -7,9 +7,9 @@ fn norm2(x: [f32; 2]) -> f32 {
// CHECK-NOT: Len(
let a = x[0];
let b = x[1];
a*a + b*b
a * a + b * b
}
fn main() {
assert_eq!(norm2([3.0, 4.0]), 5.0*5.0);
assert_eq!(norm2([3.0, 4.0]), 5.0 * 5.0);
}

View File

@ -5,7 +5,7 @@
#![feature(custom_mir)]
use std::intrinsics::mir::*;
use std::mem::{MaybeUninit, ManuallyDrop, transmute};
use std::mem::{transmute, ManuallyDrop, MaybeUninit};
// EMIT_MIR combine_transmutes.identity_transmutes.InstSimplify.diff
pub unsafe fn identity_transmutes() {
@ -61,4 +61,7 @@ pub unsafe fn adt_transmutes() {
let _a: ManuallyDrop<String> = transmute(MaybeUninit::<String>::uninit());
}
pub union Union32 { u32: u32, i32: i32 }
pub union Union32 {
u32: u32,
i32: i32,
}

View File

@ -5,9 +5,7 @@
// EMIT_MIR issue_104451_unwindable_intrinsics.main.AbortUnwindingCalls.after.mir
fn main() {
unsafe {
core::intrinsics::const_eval_select((), ow_ct, ow_ct)
}
unsafe { core::intrinsics::const_eval_select((), ow_ct, ow_ct) }
}
const fn ow_ct() -> ! {

View File

@ -3,7 +3,6 @@
// check that we don't emit multiple drop flags when they are not needed.
// EMIT_MIR issue_41110.main.ElaborateDrops.diff
fn main() {
let x = S.other(S.id());
@ -21,11 +20,12 @@ pub fn test() {
struct S;
impl Drop for S {
fn drop(&mut self) {
}
fn drop(&mut self) {}
}
impl S {
fn id(self) -> Self { self }
fn id(self) -> Self {
self
}
fn other(self, s: Self) {}
}

View File

@ -14,9 +14,8 @@ trait Foo {
fn get(&self) -> [u8; 2];
}
// EMIT_MIR issue_41697.{impl#0}-{constant#0}.SimplifyCfg-promote-consts.after.mir
impl Foo for [u8; 1+1] {
impl Foo for [u8; 1 + 1] {
fn get(&self) -> [u8; 2] {
*self
}
@ -33,7 +32,7 @@ fn unsize_nested_fat_ptr(x: Arc<Foo + Send>) -> Arc<Foo> {
}
fn main() {
let x: Box<Bar<Foo + Send>> = Box::new(Bar([1,2]));
let x: Box<Bar<Foo + Send>> = Box::new(Bar([1, 2]));
assert_eq!(unsize_fat_ptr(&*x).0.get(), [1, 2]);
let x: Arc<Foo + Send> = Arc::new([3, 4]);

View File

@ -1,6 +1,6 @@
// MIR for `<impl at $DIR/issue_41697.rs:19:1: 19:23>::{constant#0}` after SimplifyCfg-promote-consts
// MIR for `<impl at $DIR/issue_41697.rs:18:1: 18:25>::{constant#0}` after SimplifyCfg-promote-consts
<impl at $DIR/issue_41697.rs:19:1: 19:23>::{constant#0}: usize = {
<impl at $DIR/issue_41697.rs:18:1: 18:25>::{constant#0}: usize = {
let mut _0: usize;
let mut _1: (usize, bool);

View File

@ -15,11 +15,13 @@ fn main() {
}
}
fn cond() -> bool { false }
fn cond() -> bool {
false
}
struct K;
enum E {
F(K),
G(Box<E>)
G(Box<E>),
}

View File

@ -9,16 +9,18 @@ enum Never {}
union Foo {
a: u64,
b: Never
b: Never,
}
// EMIT_MIR issue_72181.foo.built.after.mir
fn foo(xs: [(Never, u32); 1]) -> u32 { xs[0].1 }
fn foo(xs: [(Never, u32); 1]) -> u32 {
xs[0].1
}
// EMIT_MIR issue_72181.bar.built.after.mir
fn bar([(_, x)]: [(Never, u32); 1]) -> u32 { x }
fn bar([(_, x)]: [(Never, u32); 1]) -> u32 {
x
}
// EMIT_MIR issue_72181.main.built.after.mir
fn main() {

View File

@ -14,9 +14,7 @@ fn f(v: Void) -> ! {
// EMIT_MIR issue_72181_1.main.built.after.mir
fn main() {
let v: Void = unsafe {
std::mem::transmute::<(), Void>(())
};
let v: Void = unsafe { std::mem::transmute::<(), Void>(()) };
f(v);
}

View File

@ -1,32 +1,30 @@
// skip-filecheck
//@ compile-flags: -Z mir-opt-level=0
// EMIT_MIR issue_91633.hey.built.after.mir
fn hey<T> (it: &[T])
where
[T] : std::ops::Index<usize>,
{
let _ = &it[0];
}
fn hey<T>(it: &[T])
where
[T]: std::ops::Index<usize>,
{
let _ = &it[0];
}
// EMIT_MIR issue_91633.bar.built.after.mir
fn bar<T> (it: Box<[T]>)
where
[T] : std::ops::Index<usize>,
{
let _ = it[0];
}
fn bar<T>(it: Box<[T]>)
where
[T]: std::ops::Index<usize>,
{
let _ = it[0];
}
// EMIT_MIR issue_91633.fun.built.after.mir
fn fun<T> (it: &[T]) -> &T
{
let f = &it[0];
f
}
fn fun<T>(it: &[T]) -> &T {
let f = &it[0];
f
}
// EMIT_MIR issue_91633.foo.built.after.mir
fn foo<T: Clone> (it: Box<[T]>) -> T
{
let f = it[0].clone();
f
}
fn main(){}
fn foo<T: Clone>(it: Box<[T]>) -> T {
let f = it[0].clone();
f
}
fn main() {}

View File

@ -8,11 +8,7 @@ pub fn foo(bytes: [u8; 16]) -> Option<[u8; 4]> {
// big endian `u32`s
let dwords: [u32; 4] = unsafe { transmute(bytes) };
const FF: u32 = 0x0000_ffff_u32.to_be();
if let [0, 0, 0 | FF, ip] = dwords {
Some(unsafe { transmute(ip) })
} else {
None
}
if let [0, 0, 0 | FF, ip] = dwords { Some(unsafe { transmute(ip) }) } else { None }
}
fn main() {

View File

@ -330,11 +330,7 @@ fn mutable_ref() -> bool {
let a = std::ptr::addr_of_mut!(x);
x = 7;
unsafe { *a = 8 };
if x == 7 {
true
} else {
false
}
if x == 7 { true } else { false }
}
/// This function has 2 TOs: 1-3-4 and 0-1-3-4-6.
@ -461,11 +457,7 @@ fn aggregate(x: u8) -> u8 {
const FOO: (u8, u8) = (5, 13);
let (a, b) = FOO;
if a == 7 {
b
} else {
a
}
if a == 7 { b } else { a }
}
/// Verify that we can leverage the existence of an `Assume` terminator.

View File

@ -7,11 +7,7 @@ pub fn array_bound<const N: usize>(index: usize, slice: &[u8; N]) -> u8 {
// CHECK-LABEL: fn array_bound(
// CHECK: [[len:_.*]] = const N;
// CHECK: Lt(move {{_.*}}, move [[len]]);
if index < slice.len() {
slice[index]
} else {
42
}
if index < slice.len() { slice[index] } else { 42 }
}
// EMIT_MIR lower_array_len.array_bound_mut.NormalizeArrayLen.diff

View File

@ -5,11 +5,7 @@
pub fn bound(index: usize, slice: &[u8]) -> u8 {
// CHECK-LABEL: fn bound(
// CHECK-NOT: ::len(
if index < slice.len() {
slice[index]
} else {
42
}
if index < slice.len() { slice[index] } else { 42 }
}
fn main() {

View File

@ -1,7 +1,6 @@
// skip-filecheck
//@ test-mir-pass: MatchBranchSimplification
// EMIT_MIR matches_u8.exhaustive_match.MatchBranchSimplification.diff
// EMIT_MIR matches_u8.exhaustive_match_i8.MatchBranchSimplification.diff
@ -27,9 +26,9 @@ pub fn exhaustive_match_i8(e: E) -> i8 {
}
fn main() {
assert_eq!(exhaustive_match(E::A), 0);
assert_eq!(exhaustive_match(E::B), 1);
assert_eq!(exhaustive_match(E::A), 0);
assert_eq!(exhaustive_match(E::B), 1);
assert_eq!(exhaustive_match_i8(E::A), 0);
assert_eq!(exhaustive_match_i8(E::B), 1);
assert_eq!(exhaustive_match_i8(E::A), 0);
assert_eq!(exhaustive_match_i8(E::B), 1);
}

View File

@ -10,7 +10,8 @@
#![allow(warnings)]
// EMIT_MIR named_lifetimes_basic.use_x.nll.0.mir
fn use_x<'a, 'b: 'a, 'c>(w: &'a mut i32, x: &'b u32, y: &'a u32, z: &'c u32) -> bool { true }
fn main() {
fn use_x<'a, 'b: 'a, 'c>(w: &'a mut i32, x: &'b u32, y: &'a u32, z: &'c u32) -> bool {
true
}
fn main() {}

View File

@ -10,5 +10,7 @@ fn nrvo(init: fn(&mut [u8; 1024])) -> [u8; 1024] {
}
fn main() {
let _ = nrvo(|buf| { buf[4] = 4; });
let _ = nrvo(|buf| {
buf[4] = 4;
});
}

View File

@ -1,7 +1,6 @@
// skip-filecheck
// EMIT_MIR_FOR_EACH_PANIC_STRATEGY
// EMIT_MIR packed_struct_drop_aligned.main.SimplifyCfg-pre-optimizations.after.mir
fn main() {
let mut x = Packed(Aligned(Droppy(0)));

View File

@ -12,7 +12,6 @@ pub fn f_unit() {
f_dispatch(());
}
// EMIT_MIR intrinsics.f_u64.PreCodegen.after.mir
pub fn f_u64() {
f_dispatch(0u64);
@ -28,8 +27,7 @@ pub fn f_dispatch<T>(t: T) {
}
#[inline(never)]
pub fn f_zst<T>(_t: T) {
}
pub fn f_zst<T>(_t: T) {}
#[inline(never)]
pub fn f_non_zst<T>(_t: T) {}

View File

@ -15,5 +15,5 @@ struct Point {
fn main() {
let x = 2 + 2;
let y = [0, 1, 2, 3, 4, 5][3];
let z = (Point { x: 12, y: 42}).y;
let z = (Point { x: 12, y: 42 }).y;
}

View File

@ -17,18 +17,16 @@ fn new<T, E>(x: Result<T, E>) -> Result<T, E> {
} {
ControlFlow::Continue(v) => v,
ControlFlow::Break(e) => return Err(e),
}
},
)
}
// EMIT_MIR try_identity.old.PreCodegen.after.mir
fn old<T, E>(x: Result<T, E>) -> Result<T, E> {
Ok(
match x {
Ok(v) => v,
Err(e) => return Err(e),
}
)
Ok(match x {
Ok(v) => v,
Err(e) => return Err(e),
})
}
fn main() {

View File

@ -787,7 +787,9 @@ fn mut_raw_then_mut_shr() -> (i32, i32) {
let xshr = &*xref;
// Verify that we completely replace with `x` in both cases.
let a = *xshr;
unsafe { *xraw = 4; }
unsafe {
*xraw = 4;
}
(a, x)
}
@ -842,8 +844,7 @@ fn debuginfo() {
// `constant_index_from_end` and `subslice` should not be promoted, as their value depends
// on the slice length.
if let [_, ref constant_index, subslice @ .., ref constant_index_from_end] = &[6; 10][..] {
}
if let [_, ref constant_index, subslice @ .., ref constant_index_from_end] = &[6; 10][..] {}
let multiple_borrow = &&&mut T(6).0;
}

View File

@ -59,7 +59,9 @@ pub fn main() {
fn array_casts() {
let mut x: [usize; 2] = [0, 0];
let p = &mut x as *mut usize;
unsafe { *p.add(1) = 1; }
unsafe {
*p.add(1) = 1;
}
let x: [usize; 2] = [0, 1];
let p = &x as *const usize;

View File

@ -2,8 +2,8 @@
// this tests move up progration, which is not yet implemented
fn foo() -> [u8; 1024] {
let x = [0; 1024];
return x;
let x = [0; 1024];
return x;
}
fn main() { }
fn main() {}

View File

@ -1,13 +1,12 @@
// skip-filecheck
//@ test-mir-pass: SimplifyLocals-before-const-prop
#![feature(thread_local)]
#[derive(Copy, Clone)]
enum E {
A,
B,
A,
B,
}
// EMIT_MIR simplify_locals.c.SimplifyLocals-before-const-prop.diff
@ -26,7 +25,7 @@ fn d1() {
// EMIT_MIR simplify_locals.d2.SimplifyLocals-before-const-prop.diff
fn d2() {
// Unused set discriminant
{(10, E::A)}.1 = E::B;
{ (10, E::A) }.1 = E::B;
}
// EMIT_MIR simplify_locals.r.SimplifyLocals-before-const-prop.diff
@ -37,7 +36,8 @@ fn r() {
let _ = &mut a;
}
#[thread_local] static mut X: u32 = 0;
#[thread_local]
static mut X: u32 = 0;
// EMIT_MIR simplify_locals.t1.SimplifyLocals-before-const-prop.diff
fn t1() {

View File

@ -4,9 +4,7 @@
fn foo<T>() {
if let (Some(a), None) = (Option::<u8>::None, Option::<T>::None) {
if a > 42u8 {
}
if a > 42u8 {}
}
}

View File

@ -5,8 +5,11 @@ fn noop() {}
// EMIT_MIR simplify_match.main.GVN.diff
fn main() {
match { let x = false; x } {
match {
let x = false;
x
} {
true => noop(),
false => {},
false => {}
}
}

View File

@ -19,10 +19,7 @@ fn foo<T: Err>() {
// CHECK-NOT: [foo:_.*]: Foo
// CHECK-NOT: Box<dyn std::fmt::Display + 'static>
let foo: Foo<T> = Foo {
x: Ok(Box::new(5_u32)),
y: 7_u32,
};
let foo: Foo<T> = Foo { x: Ok(Box::new(5_u32)), y: 7_u32 };
let x = foo.x;
let y = foo.y;

View File

@ -6,15 +6,15 @@ pub enum Void {}
// EMIT_MIR uninhabited_enum.process_never.SimplifyLocals-final.after.mir
#[no_mangle]
pub fn process_never(input: *const !) {
let _input = unsafe { &*input };
let _input = unsafe { &*input };
}
// EMIT_MIR uninhabited_enum.process_void.SimplifyLocals-final.after.mir
#[no_mangle]
pub fn process_void(input: *const Void) {
let _input = unsafe { &*input };
// In the future, this should end with `unreachable`, but we currently only do
// unreachability analysis for `!`.
let _input = unsafe { &*input };
// In the future, this should end with `unreachable`, but we currently only do
// unreachability analysis for `!`.
}
fn main() {}

View File

@ -17,7 +17,7 @@ struct Foo {
_: struct {
d: [u8; 1],
}
}
},
}
#[repr(C)]
@ -31,10 +31,9 @@ union Bar {
_: union {
d: [u8; 1],
}
}
},
}
fn access<T>(_: T) {}
// CHECK-LABEL: fn foo(
@ -71,5 +70,4 @@ fn bar(bar: Bar) {
}
}
fn main() {}

View File

@ -35,7 +35,7 @@ fn if_let() {
_y = 42;
}
match _x { }
match _x {}
}
}
@ -56,7 +56,7 @@ fn as_match() {
// CHECK: return;
match empty() {
None => {}
Some(_x) => match _x {}
Some(_x) => match _x {},
}
}

View File

@ -3,7 +3,6 @@
// that we don't create filenames containing `<` and `>`
//@ compile-flags: -Zmir-opt-level=0
struct A;
// EMIT_MIR unusual_item_types.{impl#0}-ASSOCIATED_CONSTANT.built.after.mir
@ -23,8 +22,8 @@ enum E {
V = 5,
}
// EMIT_MIR core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir
pub fn main() {
let f = Test::X as fn(usize) -> Test;
// EMIT_MIR core.ptr-drop_in_place.Vec_i32_.AddMovesForPackedDrops.before.mir
let v = Vec::<i32>::new();
}

View File

@ -1,6 +1,6 @@
// MIR for `<impl at $DIR/unusual_item_types.rs:10:1: 10:7>::ASSOCIATED_CONSTANT` after built
// MIR for `<impl at $DIR/unusual_item_types.rs:9:1: 9:7>::ASSOCIATED_CONSTANT` after built
const <impl at $DIR/unusual_item_types.rs:10:1: 10:7>::ASSOCIATED_CONSTANT: i32 = {
const <impl at $DIR/unusual_item_types.rs:9:1: 9:7>::ASSOCIATED_CONSTANT: i32 = {
let mut _0: i32;
bb0: {