about summary refs log tree commit diff
path: root/src/tools
diff options
context:
space:
mode:
authorTeodor Tanasoaia <28601907+teoxoy@users.noreply.github.com>2025-01-22 22:21:02 +0100
committerGitHub <noreply@github.com>2025-01-22 22:21:02 +0100
commit2eef052f04de27abf16e8acdd4f2fa9b144b8b00 (patch)
tree9491d21cc7106667e7ccf3c59e2f0328c7e5435c /src/tools
parentfa272edebbc769b71165a39dc95a585eb7a3e793 (diff)
downloadrust-2eef052f04de27abf16e8acdd4f2fa9b144b8b00.tar.gz
rust-2eef052f04de27abf16e8acdd4f2fa9b144b8b00.zip
increase `AUTODEREF_RECURSION_LIMIT` to 20
The limit was introduced in https://github.com/rust-lang/rust-analyzer/pull/1408#discussion_r294059044 to avoid infinite cycles but it effectively caps the number of derefs to 10. Types like `ID3D12Device14` from the `windows` crate run into this because it derefs to `ID3D12Device13`, 13 to 12 and so on. Increasing it to 20 is a quick fix; a better cycle detection method would be nicer long term.
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/rust-analyzer/crates/hir-ty/src/autoderef.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/autoderef.rs b/src/tools/rust-analyzer/crates/hir-ty/src/autoderef.rs
index 2b5342314a6..2c7076da11a 100644
--- a/src/tools/rust-analyzer/crates/hir-ty/src/autoderef.rs
+++ b/src/tools/rust-analyzer/crates/hir-ty/src/autoderef.rs
@@ -17,7 +17,7 @@ use crate::{
     TraitEnvironment, Ty, TyBuilder, TyKind,
 };
 
-static AUTODEREF_RECURSION_LIMIT: Limit = Limit::new(10);
+static AUTODEREF_RECURSION_LIMIT: Limit = Limit::new(20);
 
 #[derive(Debug)]
 pub(crate) enum AutoderefKind {
@@ -49,7 +49,7 @@ pub fn autoderef(
         // If the deref chain contains a cycle (e.g. `A` derefs to `B` and `B` derefs to `A`), we
         // would revisit some already visited types. Stop here to avoid duplication.
         //
-        // XXX: The recursion limit for `Autoderef` is currently 10, so `Vec::contains()` shouldn't
+        // XXX: The recursion limit for `Autoderef` is currently 20, so `Vec::contains()` shouldn't
         // be too expensive. Replace this duplicate check with `FxHashSet` if it proves to be more
         // performant.
         if v.contains(&resolved) {