about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/test/ui/generics/generic-no-mangle.fixed27
-rw-r--r--src/test/ui/generics/generic-no-mangle.rs27
-rw-r--r--src/test/ui/generics/generic-no-mangle.stderr6
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