about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniele D'Orazio <d.dorazio96@gmail.com>2018-10-07 12:39:54 +0200
committerDaniele D'Orazio <d.dorazio96@gmail.com>2018-10-07 12:39:54 +0200
commit59c4ff77f10deab8ff216f5019acf5a60ad77447 (patch)
treee9e2ee1ed729ce599b22c0e537cf69dca3aed0a7
parent4511f4edf4f3d6c73506b03ccf2ff7d7894c6ff6 (diff)
downloadrust-59c4ff77f10deab8ff216f5019acf5a60ad77447.tar.gz
rust-59c4ff77f10deab8ff216f5019acf5a60ad77447.zip
new_without_default should not warn about unsafe new
-rw-r--r--clippy_lints/src/new_without_default.rs4
-rw-r--r--tests/ui/new_without_default.rs6
2 files changed, 10 insertions, 0 deletions
diff --git a/clippy_lints/src/new_without_default.rs b/clippy_lints/src/new_without_default.rs
index 9f2d29a1b63..865b1c987c8 100644
--- a/clippy_lints/src/new_without_default.rs
+++ b/clippy_lints/src/new_without_default.rs
@@ -116,6 +116,10 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for NewWithoutDefault {
                             // can't be implemented by default
                             return;
                         }
+                        if sig.header.unsafety == hir::Unsafety::Unsafe {
+                            // can't be implemented for unsafe new
+                            return;
+                        }
                         if impl_item.generics.params.iter().any(|gen| match gen.kind {
                             hir::GenericParamKind::Type { .. } => true,
                             _ => false
diff --git a/tests/ui/new_without_default.rs b/tests/ui/new_without_default.rs
index 46d2bc45f68..7fa369354b3 100644
--- a/tests/ui/new_without_default.rs
+++ b/tests/ui/new_without_default.rs
@@ -101,4 +101,10 @@ pub trait TraitWithNew: Sized {
     }
 }
 
+pub struct IgnoreUnsafeNew;
+
+impl IgnoreUnsafeNew {
+    pub unsafe fn new() -> Self { IgnoreUnsafeNew }
+}
+
 fn main() {}