about summary refs log tree commit diff
path: root/tests/ui
diff options
context:
space:
mode:
authorAlex Macleod <alex@macleod.io>2024-04-17 14:40:00 +0000
committerAlex Macleod <alex@macleod.io>2024-04-17 14:40:00 +0000
commit66362efb09bfaa8ee85a97b350d6c97174c0ad93 (patch)
tree18d567e829d6b855867e96752456959ac2c4faae /tests/ui
parentcdd6336386a0cdd164f912bab1038e02871e1ee4 (diff)
downloadrust-66362efb09bfaa8ee85a97b350d6c97174c0ad93.tar.gz
rust-66362efb09bfaa8ee85a97b350d6c97174c0ad93.zip
Don't suggest `Box::default()` in functions with differing generics
Diffstat (limited to 'tests/ui')
-rw-r--r--tests/ui/box_default.fixed12
-rw-r--r--tests/ui/box_default.rs12
-rw-r--r--tests/ui/box_default.stderr8
3 files changed, 31 insertions, 1 deletions
diff --git a/tests/ui/box_default.fixed b/tests/ui/box_default.fixed
index 6c2896b3aa0..1f2f57c2507 100644
--- a/tests/ui/box_default.fixed
+++ b/tests/ui/box_default.fixed
@@ -65,6 +65,8 @@ fn main() {
     // Would have a suggestion after https://github.com/rust-lang/rust/blob/fdd030127cc68afec44a8d3f6341525dd34e50ae/compiler/rustc_middle/src/ty/diagnostics.rs#L554-L563
     let mut unnameable = Box::new(Option::default());
     let _ = unnameable.insert(|| {});
+
+    let _ = Box::into_raw(Box::new(String::default()));
 }
 
 fn ret_ty_fn() -> Box<bool> {
@@ -75,6 +77,16 @@ fn call_ty_fn(_b: Box<u8>) {
     issue_9621_dyn_trait();
 }
 
+struct X<T>(T);
+
+impl<T: Default> X<T> {
+    fn x(_: Box<T>) {}
+
+    fn same_generic_param() {
+        Self::x(Box::default());
+    }
+}
+
 use std::io::{Read, Result};
 
 impl Read for ImplementsDefault {
diff --git a/tests/ui/box_default.rs b/tests/ui/box_default.rs
index e19a62a9022..addfebc24f5 100644
--- a/tests/ui/box_default.rs
+++ b/tests/ui/box_default.rs
@@ -65,6 +65,8 @@ fn main() {
     // Would have a suggestion after https://github.com/rust-lang/rust/blob/fdd030127cc68afec44a8d3f6341525dd34e50ae/compiler/rustc_middle/src/ty/diagnostics.rs#L554-L563
     let mut unnameable = Box::new(Option::default());
     let _ = unnameable.insert(|| {});
+
+    let _ = Box::into_raw(Box::new(String::default()));
 }
 
 fn ret_ty_fn() -> Box<bool> {
@@ -75,6 +77,16 @@ fn call_ty_fn(_b: Box<u8>) {
     issue_9621_dyn_trait();
 }
 
+struct X<T>(T);
+
+impl<T: Default> X<T> {
+    fn x(_: Box<T>) {}
+
+    fn same_generic_param() {
+        Self::x(Box::new(T::default()));
+    }
+}
+
 use std::io::{Read, Result};
 
 impl Read for ImplementsDefault {
diff --git a/tests/ui/box_default.stderr b/tests/ui/box_default.stderr
index f172a875dce..39fd0d29bbf 100644
--- a/tests/ui/box_default.stderr
+++ b/tests/ui/box_default.stderr
@@ -55,5 +55,11 @@ error: `Box::new(_)` of default value
 LL |     call_ty_fn(Box::new(u8::default()));
    |                ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `Box::default()`
 
-error: aborting due to 9 previous errors
+error: `Box::new(_)` of default value
+  --> tests/ui/box_default.rs:86:17
+   |
+LL |         Self::x(Box::new(T::default()));
+   |                 ^^^^^^^^^^^^^^^^^^^^^^ help: try: `Box::default()`
+
+error: aborting due to 10 previous errors