diff options
| author | bors <bors@rust-lang.org> | 2022-02-26 19:25:04 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-02-26 19:25:04 +0000 |
| commit | 10cc7a6d031fd607f594f4c7af113bfaa9a879e9 (patch) | |
| tree | 5a3944893475b628259ee0157f0e978445ede8da /src | |
| parent | 8604ef0878b42c1b89e87d42382319dceef5f01f (diff) | |
| parent | 5952d7159a0ea914ae3b2577c1e5be1ae870d9e2 (diff) | |
| download | rust-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.rs | 14 |
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() {} |
