Skip to content

tests/ui: A New Order [23/N] #143298

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Original file line number Diff line number Diff line change
@@ -1,26 +1,48 @@
//! Check that output slots work correctly for both initializing and non-initializing assignments.
//!
//! Regression test for <https://github.com/rust-lang/rust/issues/24>.

//@ run-pass

#![allow(dead_code)]
#![allow(unused_assignments)]
#![allow(unknown_lints)]

#![allow(dead_assignment)]
#![allow(unused_variables)]

struct A { a: isize, b: isize }
struct Abox { a: Box<isize>, b: Box<isize> }
struct A {
a: isize,
b: isize,
}

fn ret_int_i() -> isize { 10 }
struct Abox {
a: Box<isize>,
b: Box<isize>,
}

fn ret_ext_i() -> Box<isize> { Box::new(10) }
fn ret_int_i() -> isize {
10
}

fn ret_int_rec() -> A { A {a: 10, b: 10} }
fn ret_ext_i() -> Box<isize> {
Box::new(10)
}

fn ret_ext_rec() -> Box<A> { Box::new(A {a: 10, b: 10}) }
fn ret_int_rec() -> A {
A { a: 10, b: 10 }
}

fn ret_ext_mem() -> Abox { Abox {a: Box::new(10), b: Box::new(10) } }
fn ret_ext_rec() -> Box<A> {
Box::new(A { a: 10, b: 10 })
}

fn ret_ext_mem() -> Abox {
Abox { a: Box::new(10), b: Box::new(10) }
}

fn ret_ext_ext_mem() -> Box<Abox> { Box::new(Abox{a: Box::new(10), b: Box::new(10) }) }
fn ret_ext_ext_mem() -> Box<Abox> {
Box::new(Abox { a: Box::new(10), b: Box::new(10) })
}

pub fn main() {
let mut int_i: isize;
Expand All @@ -29,40 +51,28 @@ pub fn main() {
let mut ext_rec: Box<A>;
let mut ext_mem: Abox;
let mut ext_ext_mem: Box<Abox>;
int_i = ret_int_i(); // initializing

int_i = ret_int_i(); // initializing
int_i = ret_int_i(); // non-initializing

int_i = ret_int_i(); // non-initializing

ext_i = ret_ext_i(); // initializing

ext_i = ret_ext_i(); // non-initializing

ext_i = ret_ext_i(); // non-initializing

int_rec = ret_int_rec(); // initializing

int_rec = ret_int_rec(); // non-initializing

int_rec = ret_int_rec(); // non-initializing

ext_rec = ret_ext_rec(); // initializing

ext_rec = ret_ext_rec(); // non-initializing

ext_rec = ret_ext_rec(); // non-initializing

ext_mem = ret_ext_mem(); // initializing

ext_mem = ret_ext_mem(); // non-initializing

ext_mem = ret_ext_mem(); // non-initializing

ext_ext_mem = ret_ext_ext_mem(); // initializing

ext_ext_mem = ret_ext_ext_mem(); // non-initializing

ext_ext_mem = ret_ext_ext_mem(); // non-initializing

}
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
//! Check that `-Cremark` flag correctly emits LLVM optimization remarks.
//!
//! Regression test for <https://github.com/rust-lang/rust/issues/90924>.

//@ build-pass
//@ ignore-pass
//@ revisions: all inline merge1 merge2
//@ compile-flags: --crate-type=lib -Cdebuginfo=1 -Copt-level=2
//

// Check that remarks can be enabled individually or with "all":
//
//@ [all] compile-flags: -Cremark=all
//@ [inline] compile-flags: -Cremark=inline
//

// Check that values of -Cremark flag are accumulated:
//
//@ [merge1] compile-flags: -Cremark=all -Cremark=giraffe
//@ [merge2] compile-flags: -Cremark=inline -Cremark=giraffe

//@ dont-check-compiler-stderr
//@ dont-require-annotations: NOTE

#[no_mangle]
#[inline(never)]
pub fn f() {
}
pub fn f() {}

#[no_mangle]
pub fn g() {
Expand Down
18 changes: 18 additions & 0 deletions tests/ui/codegen/shift-right-operand-mutation.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
//! Ensure shift operations don't mutate their right operand.
//!
//! This test checks that expressions like `0 << b` don't accidentally
//! modify the variable `b` due to codegen issues with virtual registers.
//!
//! Regression test for <https://github.com/rust-lang/rust/issues/152>.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow, old issue! That's only two months after https://www.github.com/rust-lang/rust/issues/1


//@ run-pass

pub fn main() {
let mut b: usize = 1;
while b < std::mem::size_of::<usize>() {
// This shift operation should not mutate `b`
let _ = 0_usize << b;
b <<= 1;
}
assert_eq!(8, b);
}
28 changes: 28 additions & 0 deletions tests/ui/codegen/sret-aliasing-rules.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//! Check that functions with sret results don't violate aliasing rules.
//!
//! When `foo = func(&mut foo)` is called, the compiler must avoid creating
//! two mutable references to the same variable simultaneously (one for the
//! parameter and one for the hidden sret out-pointer).
//!
//! Regression test for <https://github.com/rust-lang/rust/pull/18250>.

//@ run-pass

#[derive(Copy, Clone)]
pub struct Foo {
f1: isize,
_f2: isize,
}

#[inline(never)]
pub fn foo(f: &mut Foo) -> Foo {
let ret = *f;
f.f1 = 0;
ret
}

pub fn main() {
let mut f = Foo { f1: 8, _f2: 9 };
f = foo(&mut f);
assert_eq!(f.f1, 8);
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
// Be smart about span of parenthesized expression in macro.
//! Check that error spans in parenthesized macro expressions point to the call site.

#[rustfmt::skip]
macro_rules! paren {
($e:expr) => (($e))
// ^^^^ do not highlight here
}

mod m {
pub struct S {
x: i32
x: i32,
}

pub fn make() -> S {
S { x: 0 }
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error[E0616]: field `x` of struct `S` is private
--> $DIR/paren-span.rs:19:14
--> $DIR/macro-paren-span-diagnostic.rs:21:14
|
LL | paren!(s.x);
| ^ private field
Expand Down
23 changes: 0 additions & 23 deletions tests/ui/out-pointer-aliasing.rs

This file was deleted.

12 changes: 0 additions & 12 deletions tests/ui/over-constrained-vregs.rs

This file was deleted.

10 changes: 0 additions & 10 deletions tests/ui/panic_implementation-closures.rs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//! Check that panics in `Display::fmt` during printing are properly handled.

//@ run-pass
//@ needs-unwind

Expand All @@ -18,8 +20,10 @@ impl Display for A {

fn main() {
set_output_capture(Some(Arc::new(Mutex::new(Vec::new()))));
assert!(std::panic::catch_unwind(|| {
eprintln!("{}", A);
})
.is_err());
assert!(
std::panic::catch_unwind(|| {
eprintln!("{}", A);
})
.is_err()
);
}
12 changes: 12 additions & 0 deletions tests/ui/panics/panic-handler-closures.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//! Check that closures can be used inside `#[panic_handler]` functions.

//@ check-pass

#![crate_type = "rlib"]
#![no_std]

#[panic_handler]
pub fn panicfmt(_: &::core::panic::PanicInfo) -> ! {
|x: u8| x;
loop {}
}
20 changes: 20 additions & 0 deletions tests/ui/parser/ufcs-return-unused-parens.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//! Check that UFCS syntax works correctly in return statements
//! without requiring workaround parentheses.
//!
//! Regression test for <https://github.com/rust-lang/rust/issues/37765>.

//@ run-pass
//@ run-rustfix

#![allow(dead_code)]
#![warn(unused_parens)]

fn with_parens<T: ToString>(arg: T) -> String {
return <T as ToString>::to_string(&arg); //~ WARN unnecessary parentheses around `return` value
}

fn no_parens<T: ToString>(arg: T) -> String {
return <T as ToString>::to_string(&arg);
}

fn main() {}
20 changes: 20 additions & 0 deletions tests/ui/parser/ufcs-return-unused-parens.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
//! Check that UFCS syntax works correctly in return statements
//! without requiring workaround parentheses.
//!
//! Regression test for <https://github.com/rust-lang/rust/issues/37765>.

//@ run-pass
//@ run-rustfix

#![allow(dead_code)]
#![warn(unused_parens)]

fn with_parens<T: ToString>(arg: T) -> String {
return (<T as ToString>::to_string(&arg)); //~ WARN unnecessary parentheses around `return` value
}

fn no_parens<T: ToString>(arg: T) -> String {
return <T as ToString>::to_string(&arg);
}

fn main() {}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
warning: unnecessary parentheses around `return` value
--> $DIR/path-lookahead.rs:10:12
--> $DIR/ufcs-return-unused-parens.rs:13:12
|
LL | return (<T as ToString>::to_string(&arg));
| ^ ^
|
note: the lint level is defined here
--> $DIR/path-lookahead.rs:5:9
--> $DIR/ufcs-return-unused-parens.rs:10:9
|
LL | #![warn(unused_parens)]
| ^^^^^^^^^^^^^
Expand Down
17 changes: 0 additions & 17 deletions tests/ui/path-lookahead.fixed

This file was deleted.

17 changes: 0 additions & 17 deletions tests/ui/path-lookahead.rs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
//! Check diagnostic messages for `PartialEq` trait bound mismatches between `&T` and `T`.

fn foo<T: PartialEq>(a: &T, b: T) {
a == b; //~ ERROR E0277
}

fn foo2<T: PartialEq>(a: &T, b: T) where {
fn foo2<T: PartialEq>(a: &T, b: T) {
a == b; //~ ERROR E0277
}

Expand Down
Loading
Loading