]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/missing_const_for_fn/cant_be_const.rs
Fix missing_const_for_fn false positive
[rust.git] / tests / ui / missing_const_for_fn / cant_be_const.rs
index ede3724cc6b0dcaf471e1d1fb6ec4749b7ef7724..f367279906fda13f992c8bd3bb715f556da6e7d6 100644 (file)
@@ -39,10 +39,10 @@ fn get_y() -> u32 {
     //~^ ERROR E0013
 }
 
-// Also main should not be suggested to be made const
-fn main() {
-    // We should also be sure to not lint on closures
-    let add_one_v2 = |x: u32| -> u32 { x + 1 };
+// Don't lint entrypoint functions
+#[start]
+fn init(num: isize, something: *const *const u8) -> isize {
+    1
 }
 
 trait Foo {
@@ -56,8 +56,37 @@ fn g() -> u32 {
     }
 }
 
-// Don't lint custom entrypoints either
-#[start]
-fn init(num: isize, something: *const *const u8) -> isize {
-    1
+// Don't lint in external macros (derive)
+#[derive(PartialEq, Eq)]
+struct Point(isize, isize);
+
+impl std::ops::Add for Point {
+    type Output = Self;
+
+    // Don't lint in trait impls of derived methods
+    fn add(self, other: Self) -> Self {
+        Point(self.0 + other.0, self.1 + other.1)
+    }
+}
+
+mod with_drop {
+    pub struct A;
+    pub struct B;
+    impl Drop for A {
+        fn drop(&mut self) {}
+    }
+
+    impl A {
+        // This can not be const because the type implements `Drop`.
+        pub fn a(self) -> B {
+            B
+        }
+    }
+
+    impl B {
+        // This can not be const because `a` implements `Drop`.
+        pub fn a(self, a: A) -> B {
+            B
+        }
+    }
 }