Skip to content

Commit a2775a6

Browse files
committed
test codegen of eii
1 parent 2d3bf55 commit a2775a6

34 files changed

+402
-1
lines changed

tests/ui/eii/auxiliary/codegen1.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//@ no-prefer-dynamic
2+
#![crate_type = "rlib"]
3+
#![feature(eii)]
4+
5+
#[eii(eii1)]
6+
fn decl1(x: u64);
7+
8+
mod private {
9+
#[eii(eii2)]
10+
pub fn decl2(x: u64);
11+
}
12+
13+
pub use private::eii2 as eii3;
14+
pub use private::decl2 as decl3;
15+
16+
pub fn local_call_decl1(x: u64) {
17+
decl1(x)
18+
}

tests/ui/eii/auxiliary/codegen2.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//@ no-prefer-dynamic
2+
#![crate_type = "rlib"]
3+
#![feature(eii)]
4+
5+
#[eii(eii1)]
6+
pub fn decl1(x: u64);
7+

tests/ui/eii/auxiliary/codegen3.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//@ no-prefer-dynamic
2+
#![crate_type = "rlib"]
3+
#![feature(eii)]
4+
5+
// does have an impl but can't be called
6+
#[eii(eii1)]
7+
fn decl1(x: u64);
8+
9+
#[eii(eii2)] //~ ERROR couldn't find an implementation for `#[eii2]`
10+
pub fn decl2(x: u64);
11+
12+
mod private {
13+
#[eii(eii3)] //~ ERROR couldn't find an implementation for `#[eii3]`
14+
pub fn decl3(x: u64);
15+
}
16+
17+
pub use private::eii3 as eii4;
18+
pub use private::decl3 as decl4;
19+
20+
pub fn local_call_decl1(x: u64) {
21+
decl1(x)
22+
}

tests/ui/eii/auxiliary/cross_crate_eii_declaration.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
//@ no-prefer-dynamic
2+
#![crate_type = "rlib"]
13
#![feature(eii)]
24
#![feature(decl_macro)]
35
#![feature(rustc_attrs)]

tests/ui/eii/codegen_cross_crate.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//@ run-pass
2+
//@ check-run-results
3+
//@ aux-build: codegen2.rs
4+
//@ compile-flags: -O
5+
#![feature(eii)]
6+
7+
extern crate codegen2 as codegen;
8+
9+
#[codegen::eii1]
10+
fn eii1_impl(x: u64) {
11+
println!("{x:?}")
12+
}
13+
14+
// what you would write:
15+
fn main() {
16+
// directly
17+
eii1_impl(21);
18+
// through the alias
19+
codegen::decl1(42);
20+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
21
2+
42

tests/ui/eii/codegen_single_crate.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//@ run-pass
2+
//@ check-run-results
3+
#![feature(eii)]
4+
5+
#[eii]
6+
fn hello(x: u64);
7+
8+
#[hello]
9+
fn hello_impl(x: u64) {
10+
println!("{x:?}")
11+
}
12+
13+
// what you would write:
14+
fn main() {
15+
// directly
16+
hello_impl(21);
17+
// through the alias
18+
hello(42);
19+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
21
2+
42

tests/ui/eii/cross_crate_wrong_ty.stderr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LL | #[unsafe(cross_crate_eii_declaration::foo)]
66
LL | fn other() -> u64 {
77
| ^^^^^^^^^^^^^^^^^ expected 1 parameter, found 0
88
|
9-
::: $DIR/auxiliary/cross_crate_eii_declaration.rs:13:5
9+
::: $DIR/auxiliary/cross_crate_eii_declaration.rs:15:5
1010
|
1111
LL | pub safe fn bar(x: u64) -> u64;
1212
| ------------------------------- requires 1 parameter
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//@ no-prefer-dynamic
2+
#![crate_type = "rlib"]
3+
#![feature(eii)]
4+
5+
#[eii(eii1)]
6+
pub fn decl1(x: u64) {
7+
println!("default {x}");
8+
}
9+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: decl_with_default.rs
3+
#![crate_type = "rlib"]
4+
#![feature(eii)]
5+
6+
extern crate decl_with_default as decl;
7+
8+
9+
#[unsafe(decl::eii1)] //~ ERROR multiple implementations of `#[eii1]`
10+
fn other(x: u64) {
11+
println!("1{x}");
12+
}

tests/ui/eii/default/call_default.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: decl_with_default.rs
3+
//@ run-pass
4+
//@ check-run-results
5+
#![feature(eii)]
6+
7+
extern crate decl_with_default;
8+
9+
fn main() {
10+
decl_with_default::decl1(10);
11+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
default 10

tests/ui/eii/default/call_impl.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: decl_with_default.rs
3+
//@ aux-build: impl1.rs
4+
//@ run-pass
5+
//@ check-run-results
6+
#![feature(eii)]
7+
8+
extern crate decl_with_default;
9+
extern crate impl1;
10+
11+
fn main() {
12+
decl_with_default::decl1(10);
13+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
110

tests/ui/eii/default/local_crate.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ run-pass
2+
//@ check-run-results
3+
#![feature(eii)]
4+
5+
#[eii(eii1)]
6+
pub fn decl1(x: u64) {
7+
println!("default {x}");
8+
}
9+
10+
fn main() {
11+
decl1(4);
12+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
default 4
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//@ run-pass
2+
//@ check-run-results
3+
#![feature(eii)]
4+
5+
#[eii(eii1)]
6+
pub fn decl1(x: u64) {
7+
println!("default {x}");
8+
}
9+
10+
#[eii1]
11+
pub fn decl2(x: u64) {
12+
println!("explicit {x}");
13+
}
14+
15+
fn main() {
16+
decl1(4);
17+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
explicit 4
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//@ no-prefer-dynamic
2+
#![crate_type = "rlib"]
3+
#![feature(eii)]
4+
5+
#[eii(eii1)]
6+
fn decl1(x: u64);
7+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: decl.rs
3+
#![crate_type = "rlib"]
4+
#![feature(eii)]
5+
6+
extern crate decl;
7+
8+
9+
#[unsafe(decl::eii1)] //~ ERROR multiple implementations of `#[eii1]`
10+
fn other(x: u64) {
11+
println!("1{x}");
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: decl.rs
3+
#![crate_type = "rlib"]
4+
#![feature(eii)]
5+
6+
extern crate decl;
7+
8+
9+
#[unsafe(decl::eii1)]
10+
fn other(x: u64) {
11+
println!("2{x}");
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: decl.rs
3+
#![crate_type = "rlib"]
4+
#![feature(eii)]
5+
6+
extern crate decl;
7+
8+
9+
#[unsafe(decl::eii1)]
10+
fn other(x: u64) {
11+
println!("3{x}");
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: decl.rs
3+
#![crate_type = "rlib"]
4+
#![feature(eii)]
5+
6+
extern crate decl;
7+
8+
9+
#[unsafe(decl::eii1)]
10+
fn other(x: u64) {
11+
println!("4{x}");
12+
}

tests/ui/eii/duplicate/duplicate1.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: impl1.rs
3+
//@ aux-build: impl2.rs
4+
#![feature(eii)]
5+
6+
extern crate impl1;
7+
extern crate impl2;
8+
9+
fn main() {}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
error: multiple implementations of `#[eii1]`
2+
--> $DIR/auxiliary/impl1.rs:10:1
3+
|
4+
LL | fn other(x: u64) {
5+
| ^^^^^^^^^^^^^^^^ first implemented here in crate `impl1`
6+
|
7+
::: $DIR/auxiliary/impl2.rs:10:1
8+
|
9+
LL | fn other(x: u64) {
10+
| ---------------- also implemented here in crate `impl2`
11+
|
12+
= help: an "externally implementable item" can only have a single implementation in the final artifact. When multiple implementations are found, also in different crates, they conflict.
13+
14+
error: aborting due to 1 previous error
15+

tests/ui/eii/duplicate/duplicate2.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: impl1.rs
3+
//@ aux-build: impl2.rs
4+
//@ aux-build: impl3.rs
5+
#![feature(eii)]
6+
7+
extern crate impl1;
8+
extern crate impl2;
9+
extern crate impl3;
10+
11+
fn main() {}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
error: multiple implementations of `#[eii1]`
2+
--> $DIR/auxiliary/impl1.rs:10:1
3+
|
4+
LL | fn other(x: u64) {
5+
| ^^^^^^^^^^^^^^^^ first implemented here in crate `impl1`
6+
|
7+
::: $DIR/auxiliary/impl2.rs:10:1
8+
|
9+
LL | fn other(x: u64) {
10+
| ---------------- also implemented here in crate `impl2`
11+
|
12+
= note: in addition to these two, another implementation was found in crate `impl3`
13+
= help: an "externally implementable item" can only have a single implementation in the final artifact. When multiple implementations are found, also in different crates, they conflict.
14+
15+
error: aborting due to 1 previous error
16+

tests/ui/eii/duplicate/duplicate3.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//@ no-prefer-dynamic
2+
//@ aux-build: impl1.rs
3+
//@ aux-build: impl2.rs
4+
//@ aux-build: impl3.rs
5+
//@ aux-build: impl4.rs
6+
#![feature(eii)]
7+
8+
extern crate impl1;
9+
extern crate impl2;
10+
extern crate impl3;
11+
extern crate impl4;
12+
13+
fn main() {}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
error: multiple implementations of `#[eii1]`
2+
--> $DIR/auxiliary/impl1.rs:10:1
3+
|
4+
LL | fn other(x: u64) {
5+
| ^^^^^^^^^^^^^^^^ first implemented here in crate `impl1`
6+
|
7+
::: $DIR/auxiliary/impl2.rs:10:1
8+
|
9+
LL | fn other(x: u64) {
10+
| ---------------- also implemented here in crate `impl2`
11+
|
12+
= note: in addition to these two, more implementations were also found in the following crates: `impl3`, `impl4`
13+
= help: an "externally implementable item" can only have a single implementation in the final artifact. When multiple implementations are found, also in different crates, they conflict.
14+
15+
error: aborting due to 1 previous error
16+

tests/ui/eii/privacy1.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
//@ run-pass
2+
//@ check-run-results
3+
//@ aux-build: codegen1.rs
4+
#![feature(eii)]
5+
6+
extern crate codegen1 as codegen;
7+
8+
#[codegen::eii1]
9+
fn eii1_impl(x: u64) {
10+
println!("{x:?}")
11+
}
12+
13+
14+
#[codegen::eii3]
15+
fn eii3_impl(x: u64) {
16+
println!("{x:?}")
17+
}
18+
19+
// what you would write:
20+
fn main() {
21+
// directly
22+
eii1_impl(21);
23+
// through the alias
24+
codegen::local_call_decl1(42);
25+
26+
// directly
27+
eii3_impl(12);
28+
// through the alias
29+
codegen::decl3(24);
30+
}

tests/ui/eii/privacy1.run.stdout

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
21
2+
42
3+
12
4+
24

0 commit comments

Comments
 (0)