Skip to content

Commit 98295f7

Browse files
authored
Rollup merge of #69956 - matthewjasper:fix-region-flags, r=nikomatsakis
Ensure HAS_FREE_LOCAL_NAMES is set for ReFree This fixes a bug introduced by #69469. I don't have any ideas on how to reate a regression test for this.
2 parents 7a7ca82 + f4eb6ed commit 98295f7

File tree

2 files changed

+29
-26
lines changed

2 files changed

+29
-26
lines changed

src/librustc/ty/mod.rs

+15-12
Original file line numberDiff line numberDiff line change
@@ -554,24 +554,26 @@ bitflags! {
554554
/// Does this have [ConstKind::Placeholder]?
555555
const HAS_CT_PLACEHOLDER = 1 << 8;
556556

557+
/// `true` if there are "names" of regions and so forth
558+
/// that are local to a particular fn/inferctxt
559+
const HAS_FREE_LOCAL_REGIONS = 1 << 9;
560+
557561
/// `true` if there are "names" of types and regions and so forth
558562
/// that are local to a particular fn
559563
const HAS_FREE_LOCAL_NAMES = TypeFlags::HAS_TY_PARAM.bits
560-
| TypeFlags::HAS_RE_PARAM.bits
561564
| TypeFlags::HAS_CT_PARAM.bits
562565
| TypeFlags::HAS_TY_INFER.bits
563-
| TypeFlags::HAS_RE_INFER.bits
564566
| TypeFlags::HAS_CT_INFER.bits
565567
| TypeFlags::HAS_TY_PLACEHOLDER.bits
566-
| TypeFlags::HAS_RE_PLACEHOLDER.bits
567-
| TypeFlags::HAS_CT_PLACEHOLDER.bits;
568+
| TypeFlags::HAS_CT_PLACEHOLDER.bits
569+
| TypeFlags::HAS_FREE_LOCAL_REGIONS.bits;
568570

569571
/// Does this have [Projection] or [UnnormalizedProjection]?
570-
const HAS_TY_PROJECTION = 1 << 9;
572+
const HAS_TY_PROJECTION = 1 << 10;
571573
/// Does this have [Opaque]?
572-
const HAS_TY_OPAQUE = 1 << 10;
574+
const HAS_TY_OPAQUE = 1 << 11;
573575
/// Does this have [ConstKind::Unevaluated]?
574-
const HAS_CT_PROJECTION = 1 << 11;
576+
const HAS_CT_PROJECTION = 1 << 12;
575577

576578
/// Could this type be normalized further?
577579
const HAS_PROJECTION = TypeFlags::HAS_TY_PROJECTION.bits
@@ -580,21 +582,21 @@ bitflags! {
580582

581583
/// Present if the type belongs in a local type context.
582584
/// Set for placeholders and inference variables that are not "Fresh".
583-
const KEEP_IN_LOCAL_TCX = 1 << 12;
585+
const KEEP_IN_LOCAL_TCX = 1 << 13;
584586

585587
/// Is an error type reachable?
586-
const HAS_TY_ERR = 1 << 13;
588+
const HAS_TY_ERR = 1 << 14;
587589

588590
/// Does this have any region that "appears free" in the type?
589591
/// Basically anything but [ReLateBound] and [ReErased].
590-
const HAS_FREE_REGIONS = 1 << 14;
592+
const HAS_FREE_REGIONS = 1 << 15;
591593

592594
/// Does this have any [ReLateBound] regions? Used to check
593595
/// if a global bound is safe to evaluate.
594-
const HAS_RE_LATE_BOUND = 1 << 15;
596+
const HAS_RE_LATE_BOUND = 1 << 16;
595597

596598
/// Does this have any [ReErased] regions?
597-
const HAS_RE_ERASED = 1 << 16;
599+
const HAS_RE_ERASED = 1 << 17;
598600

599601
/// Flags representing the nominal content of a type,
600602
/// computed by FlagsComputation. If you add a new nominal
@@ -608,6 +610,7 @@ bitflags! {
608610
| TypeFlags::HAS_TY_PLACEHOLDER.bits
609611
| TypeFlags::HAS_RE_PLACEHOLDER.bits
610612
| TypeFlags::HAS_CT_PLACEHOLDER.bits
613+
| TypeFlags::HAS_FREE_LOCAL_REGIONS.bits
611614
| TypeFlags::HAS_TY_PROJECTION.bits
612615
| TypeFlags::HAS_TY_OPAQUE.bits
613616
| TypeFlags::HAS_CT_PROJECTION.bits

src/librustc/ty/sty.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -1743,42 +1743,42 @@ impl RegionKind {
17431743
}
17441744
}
17451745

1746-
pub fn keep_in_local_tcx(&self) -> bool {
1747-
if let ty::ReVar(..) = self { true } else { false }
1748-
}
1749-
17501746
pub fn type_flags(&self) -> TypeFlags {
17511747
let mut flags = TypeFlags::empty();
17521748

1753-
if self.keep_in_local_tcx() {
1754-
flags = flags | TypeFlags::KEEP_IN_LOCAL_TCX;
1755-
}
1756-
17571749
match *self {
17581750
ty::ReVar(..) => {
17591751
flags = flags | TypeFlags::HAS_FREE_REGIONS;
1752+
flags = flags | TypeFlags::HAS_FREE_LOCAL_REGIONS;
17601753
flags = flags | TypeFlags::HAS_RE_INFER;
1754+
flags = flags | TypeFlags::KEEP_IN_LOCAL_TCX;
17611755
}
17621756
ty::RePlaceholder(..) => {
17631757
flags = flags | TypeFlags::HAS_FREE_REGIONS;
1758+
flags = flags | TypeFlags::HAS_FREE_LOCAL_REGIONS;
17641759
flags = flags | TypeFlags::HAS_RE_PLACEHOLDER;
17651760
}
1766-
ty::ReLateBound(..) => {
1767-
flags = flags | TypeFlags::HAS_RE_LATE_BOUND;
1768-
}
17691761
ty::ReEarlyBound(..) => {
17701762
flags = flags | TypeFlags::HAS_FREE_REGIONS;
1763+
flags = flags | TypeFlags::HAS_FREE_LOCAL_REGIONS;
17711764
flags = flags | TypeFlags::HAS_RE_PARAM;
17721765
}
1773-
ty::ReEmpty(_) | ty::ReStatic | ty::ReFree { .. } | ty::ReScope { .. } => {
1766+
ty::ReFree { .. } | ty::ReScope { .. } => {
17741767
flags = flags | TypeFlags::HAS_FREE_REGIONS;
1768+
flags = flags | TypeFlags::HAS_FREE_LOCAL_REGIONS;
17751769
}
1776-
ty::ReErased => {
1777-
flags = flags | TypeFlags::HAS_RE_ERASED;
1770+
ty::ReEmpty(_) | ty::ReStatic => {
1771+
flags = flags | TypeFlags::HAS_FREE_REGIONS;
17781772
}
17791773
ty::ReClosureBound(..) => {
17801774
flags = flags | TypeFlags::HAS_FREE_REGIONS;
17811775
}
1776+
ty::ReLateBound(..) => {
1777+
flags = flags | TypeFlags::HAS_RE_LATE_BOUND;
1778+
}
1779+
ty::ReErased => {
1780+
flags = flags | TypeFlags::HAS_RE_ERASED;
1781+
}
17821782
}
17831783

17841784
debug!("type_flags({:?}) = {:?}", self, flags);

0 commit comments

Comments
 (0)