diff options
| author | bors <bors@rust-lang.org> | 2025-08-27 09:25:46 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-08-27 09:25:46 +0000 |
| commit | b2dd217dd0a099fb87601657ec480bf3e92b30a6 (patch) | |
| tree | f40c304ad5fe71130a420c2d0454ddf49224be55 /compiler/rustc_middle | |
| parent | 4f808ba6bf9f1c8dde30d009e73386d984491587 (diff) | |
| parent | ae622bb6af818d8592a143d391d4a7eacfee8f24 (diff) | |
| download | rust-b2dd217dd0a099fb87601657ec480bf3e92b30a6.tar.gz rust-b2dd217dd0a099fb87601657ec480bf3e92b30a6.zip | |
Auto merge of #140737 - amandasystems:revised-constraint-search, r=lcnr
Region inference: Use outlives-static constraints in constraint search Revise the extra `r: 'static` constraints added upon universe issues to add an explanation, and use that explanation during constraint blame search. This greatly simplifies the region inference logic, which now does not need to reverse-engineer the event that caused a region to outlive `'static`. This cosmetically changes the output of two UI tests. I blessed them i separate commits with separate motivations, but that can of course be squashed as desired. We probably want that. The PR was extracted out of rust-lang/rust#130227 and consists of one-third of its functional payload. r? lcnr
Diffstat (limited to 'compiler/rustc_middle')
| -rw-r--r-- | compiler/rustc_middle/src/mir/query.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/compiler/rustc_middle/src/mir/query.rs b/compiler/rustc_middle/src/mir/query.rs index a8a95c699d8..466b9c7a3c2 100644 --- a/compiler/rustc_middle/src/mir/query.rs +++ b/compiler/rustc_middle/src/mir/query.rs @@ -149,8 +149,15 @@ pub enum ConstraintCategory<'tcx> { /// A constraint that doesn't correspond to anything the user sees. Internal, - /// An internal constraint derived from an illegal universe relation. - IllegalUniverse, + /// An internal constraint added when a region outlives a placeholder + /// it cannot name and therefore has to outlive `'static`. The argument + /// is the unnameable placeholder and the constraint is always between + /// an SCC representative and `'static`. + OutlivesUnnameablePlaceholder( + #[type_foldable(identity)] + #[type_visitable(ignore)] + ty::RegionVid, + ), } #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)] |
