Skip to content

Commit fcf734c

Browse files
authored
Rollup merge of rust-lang#58743 - varkor:bulk-needstest-1, r=alexcrichton
Add tests for several E-needstest issues This PR adds a number of tests for various `E-needstest` errors. These tend to have been left open for a long time and seem unlikely to be closed otherwise. Closes rust-lang#10876. Closes rust-lang#22892. Closes rust-lang#26448. Closes rust-lang#26577. Closes rust-lang#26619. Closes rust-lang#27054. Closes rust-lang#28587. Closes rust-lang#44127. Closes rust-lang#44255. Closes rust-lang#55731. Closes rust-lang#57781.
2 parents 11e7256 + 70b853d commit fcf734c

20 files changed

+329
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#![feature(asm)]
2+
3+
fn main() {
4+
let a: usize;
5+
6+
unsafe {
7+
asm!("" : "=d"(a) : : : );
8+
//~^ ERROR couldn't allocate output register for constraint 'd'
9+
}
10+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
error: couldn't allocate output register for constraint 'd'
2+
--> $DIR/invalid-inline-asm-2.rs:7:9
3+
|
4+
LL | asm!("" : "=d"(a) : : : );
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
6+
7+
error: aborting due to previous error
8+

src/test/ui/asm/invalid-inline-asm.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#![feature(asm)]
2+
3+
fn main() {
4+
let byte = 0;
5+
let port = 0x80;
6+
7+
unsafe { asm!("out %al, %dx" :: "a" (byte), "d" (port) :: "volatile"); }
8+
//~^ ERROR couldn't allocate input reg for constraint 'a'
9+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
error: couldn't allocate input reg for constraint 'a'
2+
--> $DIR/invalid-inline-asm.rs:7:14
3+
|
4+
LL | unsafe { asm!("out %al, %dx" :: "a" (byte), "d" (port) :: "volatile"); }
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6+
7+
error: aborting due to previous error
8+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
fn foo() -> i32 {
2+
0
3+
}
4+
5+
fn main() {
6+
let x: i32 = {
7+
//~^ ERROR mismatched types
8+
foo(); //~ HELP consider removing this semicolon
9+
};
10+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
error[E0308]: mismatched types
2+
--> $DIR/block-expression-remove-semicolon.rs:6:18
3+
|
4+
LL | let x: i32 = {
5+
| __________________^
6+
LL | | //~^ ERROR mismatched types
7+
LL | | foo(); //~ HELP consider removing this semicolon
8+
| | - help: consider removing this semicolon
9+
LL | | };
10+
| |_____^ expected i32, found ()
11+
|
12+
= note: expected type `i32`
13+
found type `()`
14+
15+
error: aborting due to previous error
16+
17+
For more information about this error, try `rustc --explain E0308`.

src/test/ui/borrowck/issue-10876.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// run-pass
2+
3+
#![feature(nll)]
4+
5+
enum Nat {
6+
S(Box<Nat>),
7+
Z
8+
}
9+
fn test(x: &mut Nat) {
10+
let mut p = &mut *x;
11+
loop {
12+
match p {
13+
&mut Nat::Z => break,
14+
&mut Nat::S(ref mut n) => p = &mut *n
15+
}
16+
}
17+
}
18+
19+
fn main() {}

src/test/ui/issues/issue-26448-1.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// run-pass
2+
3+
pub trait Foo<T> {
4+
fn foo(self) -> T;
5+
}
6+
7+
impl<'a, T> Foo<T> for &'a str where &'a str: Into<T> {
8+
fn foo(self) -> T {
9+
panic!();
10+
}
11+
}
12+
13+
fn main() {}

src/test/ui/issues/issue-26448-2.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// run-pass
2+
3+
pub struct Bar<T> {
4+
items: Vec<&'static str>,
5+
inner: T,
6+
}
7+
8+
pub trait IntoBar<T> {
9+
fn into_bar(self) -> Bar<T>;
10+
}
11+
12+
impl<'a, T> IntoBar<T> for &'a str where &'a str: Into<T> {
13+
fn into_bar(self) -> Bar<T> {
14+
Bar {
15+
items: Vec::new(),
16+
inner: self.into(),
17+
}
18+
}
19+
}
20+
21+
fn main() {}

src/test/ui/issues/issue-26448-3.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// run-pass
2+
3+
pub struct Item {
4+
_inner: &'static str,
5+
}
6+
7+
pub struct Bar<T> {
8+
items: Vec<Item>,
9+
inner: T,
10+
}
11+
12+
pub trait IntoBar<T> {
13+
fn into_bar(self) -> Bar<T>;
14+
}
15+
16+
impl<'a, T> IntoBar<T> for &'a str where &'a str: Into<T> {
17+
fn into_bar(self) -> Bar<T> {
18+
Bar {
19+
items: Vec::new(),
20+
inner: self.into(),
21+
}
22+
}
23+
}
24+
25+
fn main() {}

0 commit comments

Comments
 (0)