about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2022-02-26 19:25:04 +0000
committerbors <bors@rust-lang.org>2022-02-26 19:25:04 +0000
commit10cc7a6d031fd607f594f4c7af113bfaa9a879e9 (patch)
tree5a3944893475b628259ee0157f0e978445ede8da /src
parent8604ef0878b42c1b89e87d42382319dceef5f01f (diff)
parent5952d7159a0ea914ae3b2577c1e5be1ae870d9e2 (diff)
downloadrust-10cc7a6d031fd607f594f4c7af113bfaa9a879e9.tar.gz
rust-10cc7a6d031fd607f594f4c7af113bfaa9a879e9.zip
Auto merge of #93449 - JakobDegen:restrict-hasdrop-optimization, r=cjgillot
Restrict query recursion in `needs_significant_drop`

Overly aggressive use of the query system to improve caching lead to query cycles and consequently ICEs. This patch fixes this by restricting the use of the query system as a cache to those cases where it is definitely correct.

Closes #92725 .

This is essentially a revert of #90845 for the significant drop case only. The general `needs_drop` still does the same thing. The hope is that this is enough to preserve the performance improvements of that PR while fixing the ICE. Should get a perf run to verify that this is the case.

cc `@cjgillot`
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/closures/2229_closure_analysis/issue-92724-needsdrop-query-cycle.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/test/ui/closures/2229_closure_analysis/issue-92724-needsdrop-query-cycle.rs b/src/test/ui/closures/2229_closure_analysis/issue-92724-needsdrop-query-cycle.rs
new file mode 100644
index 00000000000..a3b17755fac
--- /dev/null
+++ b/src/test/ui/closures/2229_closure_analysis/issue-92724-needsdrop-query-cycle.rs
@@ -0,0 +1,14 @@
+// ICEs if checking if there is a significant destructor causes a query cycle
+// check-pass
+
+#![warn(rust_2021_incompatible_closure_captures)]
+pub struct Foo(Bar);
+pub struct Bar(Baz);
+pub struct Baz(Vec<Foo>);
+
+impl Foo {
+    pub fn baz(self, v: Baz) -> Baz {
+        (|| v)()
+    }
+}
+fn main() {}