diff options
| author | hyd-dev <yd-huang@outlook.com> | 2021-08-13 00:11:44 +0800 |
|---|---|---|
| committer | hyd-dev <yd-huang@outlook.com> | 2021-08-13 00:15:58 +0800 |
| commit | 9315a0cd4c3b9568e66cf613fecad1bfac214f53 (patch) | |
| tree | d2ee44f61c513e2dbbd5596637e5bbf1f7ec2b74 /src/test | |
| parent | db138485b1caa7cc8be5ba7827c1889ab4ccf532 (diff) | |
| download | rust-9315a0cd4c3b9568e66cf613fecad1bfac214f53.tar.gz rust-9315a0cd4c3b9568e66cf613fecad1bfac214f53.zip | |
Add tests for `#[no_mangle]` in `impl` blocks that looks like generic `impl` blocks but are actually not
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/generics/generic-no-mangle.fixed | 27 | ||||
| -rw-r--r-- | src/test/ui/generics/generic-no-mangle.rs | 27 | ||||
| -rw-r--r-- | src/test/ui/generics/generic-no-mangle.stderr | 6 |
3 files changed, 57 insertions, 3 deletions
diff --git a/src/test/ui/generics/generic-no-mangle.fixed b/src/test/ui/generics/generic-no-mangle.fixed index 4523cac2c28..9126ac167cf 100644 --- a/src/test/ui/generics/generic-no-mangle.fixed +++ b/src/test/ui/generics/generic-no-mangle.fixed @@ -89,6 +89,11 @@ impl<T> Bar<T> { pub fn baz<U>() {} //~ ERROR functions generic over types or consts must be mangled } +impl Bar<i32> { + #[no_mangle] + pub fn qux() {} +} + trait Trait3 { fn foo(); extern "C" fn bar(); @@ -121,6 +126,14 @@ trait Trait4 { fn bar<'a>(x: &'a i32) -> &i32; } +impl Trait4 for Bar<i32> { + #[no_mangle] + fn foo() {} + + #[no_mangle] + fn bar<'b>(x: &'b i32) -> &i32 { x } +} + impl<'a> Trait4 for Baz<'a> { #[no_mangle] fn foo() {} @@ -129,4 +142,18 @@ impl<'a> Trait4 for Baz<'a> { fn bar<'b>(x: &'b i32) -> &i32 { x } } +trait Trait5<T> { + fn foo(); +} + +impl Trait5<i32> for Foo { + #[no_mangle] + fn foo() {} +} + +impl Trait5<i32> for Bar<i32> { + #[no_mangle] + fn foo() {} +} + fn main() {} diff --git a/src/test/ui/generics/generic-no-mangle.rs b/src/test/ui/generics/generic-no-mangle.rs index 83fd4564e91..e283cf4bfe5 100644 --- a/src/test/ui/generics/generic-no-mangle.rs +++ b/src/test/ui/generics/generic-no-mangle.rs @@ -89,6 +89,11 @@ impl<T> Bar<T> { pub fn baz<U>() {} //~ ERROR functions generic over types or consts must be mangled } +impl Bar<i32> { + #[no_mangle] + pub fn qux() {} +} + trait Trait3 { fn foo(); extern "C" fn bar(); @@ -121,6 +126,14 @@ trait Trait4 { fn bar<'a>(x: &'a i32) -> &i32; } +impl Trait4 for Bar<i32> { + #[no_mangle] + fn foo() {} + + #[no_mangle] + fn bar<'b>(x: &'b i32) -> &i32 { x } +} + impl<'a> Trait4 for Baz<'a> { #[no_mangle] fn foo() {} @@ -129,4 +142,18 @@ impl<'a> Trait4 for Baz<'a> { fn bar<'b>(x: &'b i32) -> &i32 { x } } +trait Trait5<T> { + fn foo(); +} + +impl Trait5<i32> for Foo { + #[no_mangle] + fn foo() {} +} + +impl Trait5<i32> for Bar<i32> { + #[no_mangle] + fn foo() {} +} + fn main() {} diff --git a/src/test/ui/generics/generic-no-mangle.stderr b/src/test/ui/generics/generic-no-mangle.stderr index 0786081f732..adfddbe9ca7 100644 --- a/src/test/ui/generics/generic-no-mangle.stderr +++ b/src/test/ui/generics/generic-no-mangle.stderr @@ -117,7 +117,7 @@ LL | pub fn baz<U>() {} | ^^^^^^^^^^^^^^^^^^ error: functions generic over types or consts must be mangled - --> $DIR/generic-no-mangle.rs:100:5 + --> $DIR/generic-no-mangle.rs:105:5 | LL | #[no_mangle] | ------------ help: remove this attribute @@ -125,7 +125,7 @@ LL | fn foo() {} | ^^^^^^^^^^^ error: functions generic over types or consts must be mangled - --> $DIR/generic-no-mangle.rs:103:5 + --> $DIR/generic-no-mangle.rs:108:5 | LL | #[no_mangle] | ------------ help: remove this attribute @@ -133,7 +133,7 @@ LL | extern "C" fn bar() {} | ^^^^^^^^^^^^^^^^^^^^^^ error: functions generic over types or consts must be mangled - --> $DIR/generic-no-mangle.rs:106:5 + --> $DIR/generic-no-mangle.rs:111:5 | LL | #[no_mangle] | ------------ help: remove this attribute |
