about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2024-09-23 12:43:44 -0400
committerMichael Goulet <michael@errs.io>2024-09-23 12:43:44 -0400
commitde66639bbcbff44eda26ef8ba7a79a4f82dc8a9a (patch)
tree4c7412a6eacdb5e54875d9077028123f6d016683 /compiler
parent702987f75b74f789ba227ee04a3d7bb1680c2309 (diff)
downloadrust-de66639bbcbff44eda26ef8ba7a79a4f82dc8a9a.tar.gz
rust-de66639bbcbff44eda26ef8ba7a79a4f82dc8a9a.zip
Revert "Add recursion limit to FFI safety lint"
This reverts commit 716044751b7a36c634be709e37923e3dbdf53888.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_lint/messages.ftl2
-rw-r--r--compiler/rustc_lint/src/types.rs20
2 files changed, 3 insertions, 19 deletions
diff --git a/compiler/rustc_lint/messages.ftl b/compiler/rustc_lint/messages.ftl
index e71c5676ce4..0e3d34355a1 100644
--- a/compiler/rustc_lint/messages.ftl
+++ b/compiler/rustc_lint/messages.ftl
@@ -395,8 +395,6 @@ lint_improper_ctypes_opaque = opaque types have no C equivalent
 lint_improper_ctypes_pat_help = consider using the base type instead
 
 lint_improper_ctypes_pat_reason = pattern types have no C equivalent
-
-lint_improper_ctypes_recursion_limit_reached = type is infinitely recursive
 lint_improper_ctypes_slice_help = consider using a raw pointer instead
 
 lint_improper_ctypes_slice_reason = slices have no C equivalent
diff --git a/compiler/rustc_lint/src/types.rs b/compiler/rustc_lint/src/types.rs
index f5a24f9808d..15fe18adbfb 100644
--- a/compiler/rustc_lint/src/types.rs
+++ b/compiler/rustc_lint/src/types.rs
@@ -592,8 +592,6 @@ struct CTypesVisitorState<'tcx> {
     /// The original type being checked, before we recursed
     /// to any other types it contains.
     base_ty: Ty<'tcx>,
-    /// Number of times we recursed while checking the type
-    recursion_depth: usize,
 }
 
 enum FfiResult<'tcx> {
@@ -899,23 +897,12 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> {
 
         // Protect against infinite recursion, for example
         // `struct S(*mut S);`.
+        // FIXME: A recursion limit is necessary as well, for irregular
+        // recursive types.
         if !acc.cache.insert(ty) {
             return FfiSafe;
         }
 
-        // Additional recursion check for more complex types like
-        // `struct A<T> { v: *const A<A<T>>, ... }` for which the
-        // cache check above won't be enough (fixes #130310)
-        if !tcx.recursion_limit().value_within_limit(acc.recursion_depth) {
-            return FfiUnsafe {
-                ty: acc.base_ty,
-                reason: fluent::lint_improper_ctypes_recursion_limit_reached,
-                help: None,
-            };
-        }
-
-        acc.recursion_depth += 1;
-
         match *ty.kind() {
             ty::Adt(def, args) => {
                 if let Some(boxed) = ty.boxed_ty()
@@ -1261,8 +1248,7 @@ impl<'a, 'tcx> ImproperCTypesVisitor<'a, 'tcx> {
             return;
         }
 
-        let mut acc =
-            CTypesVisitorState { cache: FxHashSet::default(), base_ty: ty, recursion_depth: 0 };
+        let mut acc = CTypesVisitorState { cache: FxHashSet::default(), base_ty: ty };
         match self.check_type_for_ffi(&mut acc, ty) {
             FfiResult::FfiSafe => {}
             FfiResult::FfiPhantom(ty) => {