1
Fork 0

Auto merge of #97239 - jhpratt:remove-crate-vis, r=joshtriplett

Remove `crate` visibility modifier

FCP to remove this syntax is just about complete in #53120. Once it completes, this should be merged ASAP to avoid merge conflicts.

The first two commits remove usage of the feature in this repository, while the last removes the feature itself.
This commit is contained in:
bors 2022-05-21 06:38:49 +00:00
commit 4f372b14de
271 changed files with 1924 additions and 2074 deletions

View file

@ -340,7 +340,7 @@ pub fn mk_nested_word_item(ident: Ident) -> NestedMetaItem {
NestedMetaItem::MetaItem(mk_word_item(ident)) NestedMetaItem::MetaItem(mk_word_item(ident))
} }
crate fn mk_attr_id() -> AttrId { pub(crate) fn mk_attr_id() -> AttrId {
use std::sync::atomic::AtomicU32; use std::sync::atomic::AtomicU32;
use std::sync::atomic::Ordering; use std::sync::atomic::Ordering;

View file

@ -12,7 +12,6 @@
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(const_default_impls)] #![feature(const_default_impls)]
#![feature(const_trait_impl)] #![feature(const_trait_impl)]
#![feature(crate_visibility_modifier)]
#![feature(if_let_guard)] #![feature(if_let_guard)]
#![feature(label_break_value)] #![feature(label_break_value)]
#![feature(let_chains)] #![feature(let_chains)]

View file

@ -134,7 +134,7 @@ impl LitKind {
} }
} }
crate fn may_have_suffix(self) -> bool { pub(crate) fn may_have_suffix(self) -> bool {
matches!(self, Integer | Float | Err) matches!(self, Integer | Float | Err)
} }
} }

View file

@ -17,7 +17,11 @@ use std::collections::hash_map::Entry;
use std::fmt::Write; use std::fmt::Write;
impl<'a, 'hir> LoweringContext<'a, 'hir> { impl<'a, 'hir> LoweringContext<'a, 'hir> {
crate fn lower_inline_asm(&mut self, sp: Span, asm: &InlineAsm) -> &'hir hir::InlineAsm<'hir> { pub(crate) fn lower_inline_asm(
&mut self,
sp: Span,
asm: &InlineAsm,
) -> &'hir hir::InlineAsm<'hir> {
// Rustdoc needs to support asm! from foreign architectures: don't try // Rustdoc needs to support asm! from foreign architectures: don't try
// lowering the register constraints in this case. // lowering the register constraints in this case.
let asm_arch = if self.sess.opts.actually_rustdoc { None } else { self.sess.asm_arch }; let asm_arch = if self.sess.opts.actually_rustdoc { None } else { self.sess.asm_arch };

View file

@ -848,7 +848,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
} }
/// Construct `ExprKind::Err` for the given `span`. /// Construct `ExprKind::Err` for the given `span`.
crate fn expr_err(&mut self, span: Span) -> hir::Expr<'hir> { pub(crate) fn expr_err(&mut self, span: Span) -> hir::Expr<'hir> {
self.expr(span, hir::ExprKind::Err, AttrVec::new()) self.expr(span, hir::ExprKind::Err, AttrVec::new())
} }

View file

@ -30,7 +30,6 @@
//! get confused if the spans from leaf AST nodes occur in multiple places //! get confused if the spans from leaf AST nodes occur in multiple places
//! in the HIR, especially for multiple identifiers. //! in the HIR, especially for multiple identifiers.
#![feature(crate_visibility_modifier)]
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(let_chains)] #![feature(let_chains)]
#![feature(let_else)] #![feature(let_else)]

View file

@ -12,11 +12,11 @@ use rustc_span::symbol::Ident;
use rustc_span::{source_map::Spanned, Span}; use rustc_span::{source_map::Spanned, Span};
impl<'a, 'hir> LoweringContext<'a, 'hir> { impl<'a, 'hir> LoweringContext<'a, 'hir> {
crate fn lower_pat(&mut self, pattern: &Pat) -> &'hir hir::Pat<'hir> { pub(crate) fn lower_pat(&mut self, pattern: &Pat) -> &'hir hir::Pat<'hir> {
self.arena.alloc(self.lower_pat_mut(pattern)) self.arena.alloc(self.lower_pat_mut(pattern))
} }
crate fn lower_pat_mut(&mut self, mut pattern: &Pat) -> hir::Pat<'hir> { pub(crate) fn lower_pat_mut(&mut self, mut pattern: &Pat) -> hir::Pat<'hir> {
ensure_sufficient_stack(|| { ensure_sufficient_stack(|| {
// loop here to avoid recursion // loop here to avoid recursion
let node = loop { let node = loop {
@ -290,7 +290,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
} }
/// Emit a friendly error for extra `..` patterns in a tuple/tuple struct/slice pattern. /// Emit a friendly error for extra `..` patterns in a tuple/tuple struct/slice pattern.
crate fn ban_extra_rest_pat(&self, sp: Span, prev_sp: Span, ctx: &str) { pub(crate) fn ban_extra_rest_pat(&self, sp: Span, prev_sp: Span, ctx: &str) {
self.diagnostic() self.diagnostic()
.struct_span_err(sp, &format!("`..` can only be used once per {} pattern", ctx)) .struct_span_err(sp, &format!("`..` can only be used once per {} pattern", ctx))
.span_label(sp, &format!("can only be used once per {} pattern", ctx)) .span_label(sp, &format!("can only be used once per {} pattern", ctx))

View file

@ -15,7 +15,7 @@ use smallvec::smallvec;
use tracing::debug; use tracing::debug;
impl<'a, 'hir> LoweringContext<'a, 'hir> { impl<'a, 'hir> LoweringContext<'a, 'hir> {
crate fn lower_qpath( pub(crate) fn lower_qpath(
&mut self, &mut self,
id: NodeId, id: NodeId,
qself: &Option<QSelf>, qself: &Option<QSelf>,
@ -142,7 +142,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
); );
} }
crate fn lower_path_extra( pub(crate) fn lower_path_extra(
&mut self, &mut self,
res: Res, res: Res,
p: &Path, p: &Path,
@ -163,7 +163,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
}) })
} }
crate fn lower_path( pub(crate) fn lower_path(
&mut self, &mut self,
id: NodeId, id: NodeId,
p: &Path, p: &Path,
@ -174,7 +174,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
self.lower_path_extra(res, p, param_mode) self.lower_path_extra(res, p, param_mode)
} }
crate fn lower_path_segment( pub(crate) fn lower_path_segment(
&mut self, &mut self,
path_span: Span, path_span: Span,
segment: &PathSegment, segment: &PathSegment,
@ -381,7 +381,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
} }
/// An associated type binding `Output = $ty`. /// An associated type binding `Output = $ty`.
crate fn output_ty_binding( pub(crate) fn output_ty_binding(
&mut self, &mut self,
span: Span, span: Span,
ty: &'hir hir::Ty<'hir>, ty: &'hir hir::Ty<'hir>,

View file

@ -1,5 +1,4 @@
#![feature(associated_type_bounds)] #![feature(associated_type_bounds)]
#![feature(crate_visibility_modifier)]
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(with_negative_coherence)] #![feature(with_negative_coherence)]
#![recursion_limit = "256"] #![recursion_limit = "256"]

View file

@ -95,7 +95,7 @@ pub struct State<'a> {
ann: &'a (dyn PpAnn + 'a), ann: &'a (dyn PpAnn + 'a),
} }
crate const INDENT_UNIT: isize = 4; pub(crate) const INDENT_UNIT: isize = 4;
/// Requires you to pass an input filename and reader so that /// Requires you to pass an input filename and reader so that
/// it can scan the input text for comments to copy forward. /// it can scan the input text for comments to copy forward.
@ -955,8 +955,13 @@ impl<'a> State<'a> {
State { s: pp::Printer::new(), comments: None, ann: &NoAnn } State { s: pp::Printer::new(), comments: None, ann: &NoAnn }
} }
crate fn commasep_cmnt<T, F, G>(&mut self, b: Breaks, elts: &[T], mut op: F, mut get_span: G) pub(crate) fn commasep_cmnt<T, F, G>(
where &mut self,
b: Breaks,
elts: &[T],
mut op: F,
mut get_span: G,
) where
F: FnMut(&mut State<'_>, &T), F: FnMut(&mut State<'_>, &T),
G: FnMut(&T) -> rustc_span::Span, G: FnMut(&T) -> rustc_span::Span,
{ {
@ -976,7 +981,7 @@ impl<'a> State<'a> {
self.end(); self.end();
} }
crate fn commasep_exprs(&mut self, b: Breaks, exprs: &[P<ast::Expr>]) { pub(crate) fn commasep_exprs(&mut self, b: Breaks, exprs: &[P<ast::Expr>]) {
self.commasep_cmnt(b, exprs, |s, e| s.print_expr(e), |e| e.span) self.commasep_cmnt(b, exprs, |s, e| s.print_expr(e), |e| e.span)
} }
@ -1109,7 +1114,7 @@ impl<'a> State<'a> {
self.print_trait_ref(&t.trait_ref) self.print_trait_ref(&t.trait_ref)
} }
crate fn print_stmt(&mut self, st: &ast::Stmt) { pub(crate) fn print_stmt(&mut self, st: &ast::Stmt) {
self.maybe_print_comment(st.span.lo()); self.maybe_print_comment(st.span.lo());
match st.kind { match st.kind {
ast::StmtKind::Local(ref loc) => { ast::StmtKind::Local(ref loc) => {
@ -1164,19 +1169,19 @@ impl<'a> State<'a> {
self.maybe_print_trailing_comment(st.span, None) self.maybe_print_trailing_comment(st.span, None)
} }
crate fn print_block(&mut self, blk: &ast::Block) { pub(crate) fn print_block(&mut self, blk: &ast::Block) {
self.print_block_with_attrs(blk, &[]) self.print_block_with_attrs(blk, &[])
} }
crate fn print_block_unclosed_indent(&mut self, blk: &ast::Block) { pub(crate) fn print_block_unclosed_indent(&mut self, blk: &ast::Block) {
self.print_block_maybe_unclosed(blk, &[], false) self.print_block_maybe_unclosed(blk, &[], false)
} }
crate fn print_block_with_attrs(&mut self, blk: &ast::Block, attrs: &[ast::Attribute]) { pub(crate) fn print_block_with_attrs(&mut self, blk: &ast::Block, attrs: &[ast::Attribute]) {
self.print_block_maybe_unclosed(blk, attrs, true) self.print_block_maybe_unclosed(blk, attrs, true)
} }
crate fn print_block_maybe_unclosed( pub(crate) fn print_block_maybe_unclosed(
&mut self, &mut self,
blk: &ast::Block, blk: &ast::Block,
attrs: &[ast::Attribute], attrs: &[ast::Attribute],
@ -1210,7 +1215,7 @@ impl<'a> State<'a> {
} }
/// Print a `let pat = expr` expression. /// Print a `let pat = expr` expression.
crate fn print_let(&mut self, pat: &ast::Pat, expr: &ast::Expr) { pub(crate) fn print_let(&mut self, pat: &ast::Pat, expr: &ast::Expr) {
self.word("let "); self.word("let ");
self.print_pat(pat); self.print_pat(pat);
self.space(); self.space();
@ -1219,7 +1224,7 @@ impl<'a> State<'a> {
self.print_expr_cond_paren(expr, Self::cond_needs_par(expr) || npals()) self.print_expr_cond_paren(expr, Self::cond_needs_par(expr) || npals())
} }
crate fn print_mac(&mut self, m: &ast::MacCall) { pub(crate) fn print_mac(&mut self, m: &ast::MacCall) {
self.print_mac_common( self.print_mac_common(
Some(MacHeader::Path(&m.path)), Some(MacHeader::Path(&m.path)),
true, true,
@ -1360,7 +1365,7 @@ impl<'a> State<'a> {
self.pclose(); self.pclose();
} }
crate fn print_local_decl(&mut self, loc: &ast::Local) { pub(crate) fn print_local_decl(&mut self, loc: &ast::Local) {
self.print_pat(&loc.pat); self.print_pat(&loc.pat);
if let Some(ref ty) = loc.ty { if let Some(ref ty) = loc.ty {
self.word_space(":"); self.word_space(":");
@ -1368,7 +1373,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_name(&mut self, name: Symbol) { pub(crate) fn print_name(&mut self, name: Symbol) {
self.word(name.to_string()); self.word(name.to_string());
self.ann.post(self, AnnNode::Name(&name)) self.ann.post(self, AnnNode::Name(&name))
} }
@ -1392,7 +1397,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_pat(&mut self, pat: &ast::Pat) { pub(crate) fn print_pat(&mut self, pat: &ast::Pat) {
self.maybe_print_comment(pat.span.lo()); self.maybe_print_comment(pat.span.lo());
self.ann.pre(self, AnnNode::Pat(pat)); self.ann.pre(self, AnnNode::Pat(pat));
/* Pat isn't normalized, but the beauty of it /* Pat isn't normalized, but the beauty of it
@ -1551,7 +1556,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_asyncness(&mut self, asyncness: ast::Async) { pub(crate) fn print_asyncness(&mut self, asyncness: ast::Async) {
if asyncness.is_async() { if asyncness.is_async() {
self.word_nbsp("async"); self.word_nbsp("async");
} }
@ -1584,11 +1589,11 @@ impl<'a> State<'a> {
} }
} }
crate fn print_lifetime(&mut self, lifetime: ast::Lifetime) { pub(crate) fn print_lifetime(&mut self, lifetime: ast::Lifetime) {
self.print_name(lifetime.ident.name) self.print_name(lifetime.ident.name)
} }
crate fn print_lifetime_bounds( pub(crate) fn print_lifetime_bounds(
&mut self, &mut self,
lifetime: ast::Lifetime, lifetime: ast::Lifetime,
bounds: &ast::GenericBounds, bounds: &ast::GenericBounds,
@ -1608,7 +1613,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_generic_params(&mut self, generic_params: &[ast::GenericParam]) { pub(crate) fn print_generic_params(&mut self, generic_params: &[ast::GenericParam]) {
if generic_params.is_empty() { if generic_params.is_empty() {
return; return;
} }
@ -1662,12 +1667,12 @@ impl<'a> State<'a> {
} }
} }
crate fn print_mt(&mut self, mt: &ast::MutTy, print_const: bool) { pub(crate) fn print_mt(&mut self, mt: &ast::MutTy, print_const: bool) {
self.print_mutability(mt.mutbl, print_const); self.print_mutability(mt.mutbl, print_const);
self.print_type(&mt.ty) self.print_type(&mt.ty)
} }
crate fn print_param(&mut self, input: &ast::Param, is_closure: bool) { pub(crate) fn print_param(&mut self, input: &ast::Param, is_closure: bool) {
self.ibox(INDENT_UNIT); self.ibox(INDENT_UNIT);
self.print_outer_attributes_inline(&input.attrs); self.print_outer_attributes_inline(&input.attrs);
@ -1695,7 +1700,7 @@ impl<'a> State<'a> {
self.end(); self.end();
} }
crate fn print_fn_ret_ty(&mut self, fn_ret_ty: &ast::FnRetTy) { pub(crate) fn print_fn_ret_ty(&mut self, fn_ret_ty: &ast::FnRetTy) {
if let ast::FnRetTy::Ty(ty) = fn_ret_ty { if let ast::FnRetTy::Ty(ty) = fn_ret_ty {
self.space_if_not_bol(); self.space_if_not_bol();
self.ibox(INDENT_UNIT); self.ibox(INDENT_UNIT);
@ -1706,7 +1711,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_ty_fn( pub(crate) fn print_ty_fn(
&mut self, &mut self,
ext: ast::Extern, ext: ast::Extern,
unsafety: ast::Unsafe, unsafety: ast::Unsafe,
@ -1730,7 +1735,7 @@ impl<'a> State<'a> {
self.end(); self.end();
} }
crate fn print_fn_header_info(&mut self, header: ast::FnHeader) { pub(crate) fn print_fn_header_info(&mut self, header: ast::FnHeader) {
self.print_constness(header.constness); self.print_constness(header.constness);
self.print_asyncness(header.asyncness); self.print_asyncness(header.asyncness);
self.print_unsafety(header.unsafety); self.print_unsafety(header.unsafety);
@ -1750,21 +1755,21 @@ impl<'a> State<'a> {
self.word("fn") self.word("fn")
} }
crate fn print_unsafety(&mut self, s: ast::Unsafe) { pub(crate) fn print_unsafety(&mut self, s: ast::Unsafe) {
match s { match s {
ast::Unsafe::No => {} ast::Unsafe::No => {}
ast::Unsafe::Yes(_) => self.word_nbsp("unsafe"), ast::Unsafe::Yes(_) => self.word_nbsp("unsafe"),
} }
} }
crate fn print_constness(&mut self, s: ast::Const) { pub(crate) fn print_constness(&mut self, s: ast::Const) {
match s { match s {
ast::Const::No => {} ast::Const::No => {}
ast::Const::Yes(_) => self.word_nbsp("const"), ast::Const::Yes(_) => self.word_nbsp("const"),
} }
} }
crate fn print_is_auto(&mut self, s: ast::IsAuto) { pub(crate) fn print_is_auto(&mut self, s: ast::IsAuto) {
match s { match s {
ast::IsAuto::Yes => self.word_nbsp("auto"), ast::IsAuto::Yes => self.word_nbsp("auto"),
ast::IsAuto::No => {} ast::IsAuto::No => {}

View file

@ -19,7 +19,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_foreign_item(&mut self, item: &ast::ForeignItem) { pub(crate) fn print_foreign_item(&mut self, item: &ast::ForeignItem) {
let ast::Item { id, span, ident, ref attrs, ref kind, ref vis, tokens: _ } = *item; let ast::Item { id, span, ident, ref attrs, ref kind, ref vis, tokens: _ } = *item;
self.ann.pre(self, AnnNode::SubItem(id)); self.ann.pre(self, AnnNode::SubItem(id));
self.hardbreak_if_not_bol(); self.hardbreak_if_not_bol();
@ -128,7 +128,7 @@ impl<'a> State<'a> {
} }
/// Pretty-prints an item. /// Pretty-prints an item.
crate fn print_item(&mut self, item: &ast::Item) { pub(crate) fn print_item(&mut self, item: &ast::Item) {
self.hardbreak_if_not_bol(); self.hardbreak_if_not_bol();
self.maybe_print_comment(item.span.lo()); self.maybe_print_comment(item.span.lo());
self.print_outer_attributes(&item.attrs); self.print_outer_attributes(&item.attrs);
@ -400,7 +400,7 @@ impl<'a> State<'a> {
self.bclose(span, empty) self.bclose(span, empty)
} }
crate fn print_visibility(&mut self, vis: &ast::Visibility) { pub(crate) fn print_visibility(&mut self, vis: &ast::Visibility) {
match vis.kind { match vis.kind {
ast::VisibilityKind::Public => self.word_nbsp("pub"), ast::VisibilityKind::Public => self.word_nbsp("pub"),
ast::VisibilityKind::Crate(sugar) => match sugar { ast::VisibilityKind::Crate(sugar) => match sugar {
@ -484,7 +484,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_variant(&mut self, v: &ast::Variant) { pub(crate) fn print_variant(&mut self, v: &ast::Variant) {
self.head(""); self.head("");
self.print_visibility(&v.vis); self.print_visibility(&v.vis);
let generics = ast::Generics::default(); let generics = ast::Generics::default();
@ -496,7 +496,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_assoc_item(&mut self, item: &ast::AssocItem) { pub(crate) fn print_assoc_item(&mut self, item: &ast::AssocItem) {
let ast::Item { id, span, ident, ref attrs, ref kind, ref vis, tokens: _ } = *item; let ast::Item { id, span, ident, ref attrs, ref kind, ref vis, tokens: _ } = *item;
self.ann.pre(self, AnnNode::SubItem(id)); self.ann.pre(self, AnnNode::SubItem(id));
self.hardbreak_if_not_bol(); self.hardbreak_if_not_bol();
@ -562,7 +562,7 @@ impl<'a> State<'a> {
} }
} }
crate fn print_fn( pub(crate) fn print_fn(
&mut self, &mut self,
decl: &ast::FnDecl, decl: &ast::FnDecl,
header: ast::FnHeader, header: ast::FnHeader,
@ -579,7 +579,7 @@ impl<'a> State<'a> {
self.print_where_clause(&generics.where_clause) self.print_where_clause(&generics.where_clause)
} }
crate fn print_fn_params_and_ret(&mut self, decl: &ast::FnDecl, is_closure: bool) { pub(crate) fn print_fn_params_and_ret(&mut self, decl: &ast::FnDecl, is_closure: bool) {
let (open, close) = if is_closure { ("|", "|") } else { ("(", ")") }; let (open, close) = if is_closure { ("|", "|") } else { ("(", ")") };
self.word(open); self.word(open);
self.commasep(Inconsistent, &decl.inputs, |s, param| s.print_param(param, is_closure)); self.commasep(Inconsistent, &decl.inputs, |s, param| s.print_param(param, is_closure));
@ -591,7 +591,7 @@ impl<'a> State<'a> {
self.print_where_clause_parts(where_clause.has_where_token, &where_clause.predicates); self.print_where_clause_parts(where_clause.has_where_token, &where_clause.predicates);
} }
crate fn print_where_clause_parts( pub(crate) fn print_where_clause_parts(
&mut self, &mut self,
has_where_token: bool, has_where_token: bool,
predicates: &[ast::WherePredicate], predicates: &[ast::WherePredicate],

View file

@ -29,7 +29,7 @@ pub struct BorrowSet<'tcx> {
/// Map from local to all the borrows on that local. /// Map from local to all the borrows on that local.
pub local_map: FxHashMap<mir::Local, FxHashSet<BorrowIndex>>, pub local_map: FxHashMap<mir::Local, FxHashSet<BorrowIndex>>,
crate locals_state_at_exit: LocalsStateAtExit, pub(crate) locals_state_at_exit: LocalsStateAtExit,
} }
impl<'tcx> Index<BorrowIndex> for BorrowSet<'tcx> { impl<'tcx> Index<BorrowIndex> for BorrowSet<'tcx> {
@ -148,23 +148,23 @@ impl<'tcx> BorrowSet<'tcx> {
} }
} }
crate fn activations_at_location(&self, location: Location) -> &[BorrowIndex] { pub(crate) fn activations_at_location(&self, location: Location) -> &[BorrowIndex] {
self.activation_map.get(&location).map_or(&[], |activations| &activations[..]) self.activation_map.get(&location).map_or(&[], |activations| &activations[..])
} }
crate fn len(&self) -> usize { pub(crate) fn len(&self) -> usize {
self.location_map.len() self.location_map.len()
} }
crate fn indices(&self) -> impl Iterator<Item = BorrowIndex> { pub(crate) fn indices(&self) -> impl Iterator<Item = BorrowIndex> {
BorrowIndex::from_usize(0)..BorrowIndex::from_usize(self.len()) BorrowIndex::from_usize(0)..BorrowIndex::from_usize(self.len())
} }
crate fn iter_enumerated(&self) -> impl Iterator<Item = (BorrowIndex, &BorrowData<'tcx>)> { pub(crate) fn iter_enumerated(&self) -> impl Iterator<Item = (BorrowIndex, &BorrowData<'tcx>)> {
self.indices().zip(self.location_map.values()) self.indices().zip(self.location_map.values())
} }
crate fn get_index_of(&self, location: &Location) -> Option<BorrowIndex> { pub(crate) fn get_index_of(&self, location: &Location) -> Option<BorrowIndex> {
self.location_map.get_index_of(location).map(BorrowIndex::from) self.location_map.get_index_of(location).map(BorrowIndex::from)
} }
} }

View file

@ -3,7 +3,7 @@ use rustc_middle::ty::{self, Ty, TyCtxt};
use rustc_span::Span; use rustc_span::Span;
impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> { impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
crate fn cannot_move_when_borrowed( pub(crate) fn cannot_move_when_borrowed(
&self, &self,
span: Span, span: Span,
desc: &str, desc: &str,
@ -11,7 +11,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
struct_span_err!(self, span, E0505, "cannot move out of {} because it is borrowed", desc,) struct_span_err!(self, span, E0505, "cannot move out of {} because it is borrowed", desc,)
} }
crate fn cannot_use_when_mutably_borrowed( pub(crate) fn cannot_use_when_mutably_borrowed(
&self, &self,
span: Span, span: Span,
desc: &str, desc: &str,
@ -31,7 +31,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_act_on_uninitialized_variable( pub(crate) fn cannot_act_on_uninitialized_variable(
&self, &self,
span: Span, span: Span,
verb: &str, verb: &str,
@ -47,7 +47,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
) )
} }
crate fn cannot_mutably_borrow_multiply( pub(crate) fn cannot_mutably_borrow_multiply(
&self, &self,
new_loan_span: Span, new_loan_span: Span,
desc: &str, desc: &str,
@ -97,7 +97,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_uniquely_borrow_by_two_closures( pub(crate) fn cannot_uniquely_borrow_by_two_closures(
&self, &self,
new_loan_span: Span, new_loan_span: Span,
desc: &str, desc: &str,
@ -126,7 +126,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_uniquely_borrow_by_one_closure( pub(crate) fn cannot_uniquely_borrow_by_one_closure(
&self, &self,
new_loan_span: Span, new_loan_span: Span,
container_name: &str, container_name: &str,
@ -157,7 +157,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_reborrow_already_uniquely_borrowed( pub(crate) fn cannot_reborrow_already_uniquely_borrowed(
&self, &self,
new_loan_span: Span, new_loan_span: Span,
container_name: &str, container_name: &str,
@ -193,7 +193,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_reborrow_already_borrowed( pub(crate) fn cannot_reborrow_already_borrowed(
&self, &self,
span: Span, span: Span,
desc_new: &str, desc_new: &str,
@ -242,7 +242,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_assign_to_borrowed( pub(crate) fn cannot_assign_to_borrowed(
&self, &self,
span: Span, span: Span,
borrow_span: Span, borrow_span: Span,
@ -261,7 +261,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_reassign_immutable( pub(crate) fn cannot_reassign_immutable(
&self, &self,
span: Span, span: Span,
desc: &str, desc: &str,
@ -271,7 +271,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
struct_span_err!(self, span, E0384, "cannot assign {} {}", msg, desc) struct_span_err!(self, span, E0384, "cannot assign {} {}", msg, desc)
} }
crate fn cannot_assign( pub(crate) fn cannot_assign(
&self, &self,
span: Span, span: Span,
desc: &str, desc: &str,
@ -279,7 +279,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
struct_span_err!(self, span, E0594, "cannot assign to {}", desc) struct_span_err!(self, span, E0594, "cannot assign to {}", desc)
} }
crate fn cannot_move_out_of( pub(crate) fn cannot_move_out_of(
&self, &self,
move_from_span: Span, move_from_span: Span,
move_from_desc: &str, move_from_desc: &str,
@ -290,7 +290,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
/// Signal an error due to an attempt to move out of the interior /// Signal an error due to an attempt to move out of the interior
/// of an array or slice. `is_index` is None when error origin /// of an array or slice. `is_index` is None when error origin
/// didn't capture whether there was an indexing operation or not. /// didn't capture whether there was an indexing operation or not.
crate fn cannot_move_out_of_interior_noncopy( pub(crate) fn cannot_move_out_of_interior_noncopy(
&self, &self,
move_from_span: Span, move_from_span: Span,
ty: Ty<'_>, ty: Ty<'_>,
@ -313,7 +313,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_move_out_of_interior_of_drop( pub(crate) fn cannot_move_out_of_interior_of_drop(
&self, &self,
move_from_span: Span, move_from_span: Span,
container_ty: Ty<'_>, container_ty: Ty<'_>,
@ -329,7 +329,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_act_on_moved_value( pub(crate) fn cannot_act_on_moved_value(
&self, &self,
use_span: Span, use_span: Span,
verb: &str, verb: &str,
@ -349,7 +349,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
) )
} }
crate fn cannot_borrow_path_as_mutable_because( pub(crate) fn cannot_borrow_path_as_mutable_because(
&self, &self,
span: Span, span: Span,
path: &str, path: &str,
@ -358,7 +358,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
struct_span_err!(self, span, E0596, "cannot borrow {} as mutable{}", path, reason,) struct_span_err!(self, span, E0596, "cannot borrow {} as mutable{}", path, reason,)
} }
crate fn cannot_mutate_in_immutable_section( pub(crate) fn cannot_mutate_in_immutable_section(
&self, &self,
mutate_span: Span, mutate_span: Span,
immutable_span: Span, immutable_span: Span,
@ -380,7 +380,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_borrow_across_generator_yield( pub(crate) fn cannot_borrow_across_generator_yield(
&self, &self,
span: Span, span: Span,
yield_span: Span, yield_span: Span,
@ -395,7 +395,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_borrow_across_destructor( pub(crate) fn cannot_borrow_across_destructor(
&self, &self,
borrow_span: Span, borrow_span: Span,
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> { ) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
@ -407,7 +407,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
) )
} }
crate fn path_does_not_live_long_enough( pub(crate) fn path_does_not_live_long_enough(
&self, &self,
span: Span, span: Span,
path: &str, path: &str,
@ -415,7 +415,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
struct_span_err!(self, span, E0597, "{} does not live long enough", path,) struct_span_err!(self, span, E0597, "{} does not live long enough", path,)
} }
crate fn cannot_return_reference_to_local( pub(crate) fn cannot_return_reference_to_local(
&self, &self,
span: Span, span: Span,
return_kind: &str, return_kind: &str,
@ -440,7 +440,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn cannot_capture_in_long_lived_closure( pub(crate) fn cannot_capture_in_long_lived_closure(
&self, &self,
closure_span: Span, closure_span: Span,
closure_kind: &str, closure_kind: &str,
@ -462,14 +462,14 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
err err
} }
crate fn thread_local_value_does_not_live_long_enough( pub(crate) fn thread_local_value_does_not_live_long_enough(
&self, &self,
span: Span, span: Span,
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> { ) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
struct_span_err!(self, span, E0712, "thread-local variable borrowed past end of function",) struct_span_err!(self, span, E0712, "thread-local variable borrowed past end of function",)
} }
crate fn temporary_value_borrowed_for_too_long( pub(crate) fn temporary_value_borrowed_for_too_long(
&self, &self,
span: Span, span: Span,
) -> DiagnosticBuilder<'cx, ErrorGuaranteed> { ) -> DiagnosticBuilder<'cx, ErrorGuaranteed> {
@ -486,7 +486,7 @@ impl<'cx, 'tcx> crate::MirBorrowckCtxt<'cx, 'tcx> {
} }
} }
crate fn borrowed_data_escapes_closure<'tcx>( pub(crate) fn borrowed_data_escapes_closure<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
escape_span: Span, escape_span: Span,
escapes_from: &str, escapes_from: &str,

View file

@ -13,19 +13,19 @@ use crate::{
/// The construct graph organizes the constraints by their end-points. /// The construct graph organizes the constraints by their end-points.
/// It can be used to view a `R1: R2` constraint as either an edge `R1 /// It can be used to view a `R1: R2` constraint as either an edge `R1
/// -> R2` or `R2 -> R1` depending on the direction type `D`. /// -> R2` or `R2 -> R1` depending on the direction type `D`.
crate struct ConstraintGraph<D: ConstraintGraphDirecton> { pub(crate) struct ConstraintGraph<D: ConstraintGraphDirecton> {
_direction: D, _direction: D,
first_constraints: IndexVec<RegionVid, Option<OutlivesConstraintIndex>>, first_constraints: IndexVec<RegionVid, Option<OutlivesConstraintIndex>>,
next_constraints: IndexVec<OutlivesConstraintIndex, Option<OutlivesConstraintIndex>>, next_constraints: IndexVec<OutlivesConstraintIndex, Option<OutlivesConstraintIndex>>,
} }
crate type NormalConstraintGraph = ConstraintGraph<Normal>; pub(crate) type NormalConstraintGraph = ConstraintGraph<Normal>;
crate type ReverseConstraintGraph = ConstraintGraph<Reverse>; pub(crate) type ReverseConstraintGraph = ConstraintGraph<Reverse>;
/// Marker trait that controls whether a `R1: R2` constraint /// Marker trait that controls whether a `R1: R2` constraint
/// represents an edge `R1 -> R2` or `R2 -> R1`. /// represents an edge `R1 -> R2` or `R2 -> R1`.
crate trait ConstraintGraphDirecton: Copy + 'static { pub(crate) trait ConstraintGraphDirecton: Copy + 'static {
fn start_region(c: &OutlivesConstraint<'_>) -> RegionVid; fn start_region(c: &OutlivesConstraint<'_>) -> RegionVid;
fn end_region(c: &OutlivesConstraint<'_>) -> RegionVid; fn end_region(c: &OutlivesConstraint<'_>) -> RegionVid;
fn is_normal() -> bool; fn is_normal() -> bool;
@ -36,7 +36,7 @@ crate trait ConstraintGraphDirecton: Copy + 'static {
/// inference. This is because we compute the value of R1 by union'ing /// inference. This is because we compute the value of R1 by union'ing
/// all the things that it relies on. /// all the things that it relies on.
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
crate struct Normal; pub(crate) struct Normal;
impl ConstraintGraphDirecton for Normal { impl ConstraintGraphDirecton for Normal {
fn start_region(c: &OutlivesConstraint<'_>) -> RegionVid { fn start_region(c: &OutlivesConstraint<'_>) -> RegionVid {
@ -57,7 +57,7 @@ impl ConstraintGraphDirecton for Normal {
/// we wish to iterate from a region (e.g., R2) to all the regions /// we wish to iterate from a region (e.g., R2) to all the regions
/// that will outlive it (e.g., R1). /// that will outlive it (e.g., R1).
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
crate struct Reverse; pub(crate) struct Reverse;
impl ConstraintGraphDirecton for Reverse { impl ConstraintGraphDirecton for Reverse {
fn start_region(c: &OutlivesConstraint<'_>) -> RegionVid { fn start_region(c: &OutlivesConstraint<'_>) -> RegionVid {
@ -78,7 +78,11 @@ impl<D: ConstraintGraphDirecton> ConstraintGraph<D> {
/// R2` is treated as an edge `R1 -> R2`. We use this graph to /// R2` is treated as an edge `R1 -> R2`. We use this graph to
/// construct SCCs for region inference but also for error /// construct SCCs for region inference but also for error
/// reporting. /// reporting.
crate fn new(direction: D, set: &OutlivesConstraintSet<'_>, num_region_vars: usize) -> Self { pub(crate) fn new(
direction: D,
set: &OutlivesConstraintSet<'_>,
num_region_vars: usize,
) -> Self {
let mut first_constraints = IndexVec::from_elem_n(None, num_region_vars); let mut first_constraints = IndexVec::from_elem_n(None, num_region_vars);
let mut next_constraints = IndexVec::from_elem(None, &set.outlives); let mut next_constraints = IndexVec::from_elem(None, &set.outlives);
@ -96,7 +100,7 @@ impl<D: ConstraintGraphDirecton> ConstraintGraph<D> {
/// Given the constraint set from which this graph was built /// Given the constraint set from which this graph was built
/// creates a region graph so that you can iterate over *regions* /// creates a region graph so that you can iterate over *regions*
/// and not constraints. /// and not constraints.
crate fn region_graph<'rg, 'tcx>( pub(crate) fn region_graph<'rg, 'tcx>(
&'rg self, &'rg self,
set: &'rg OutlivesConstraintSet<'tcx>, set: &'rg OutlivesConstraintSet<'tcx>,
static_region: RegionVid, static_region: RegionVid,
@ -105,7 +109,7 @@ impl<D: ConstraintGraphDirecton> ConstraintGraph<D> {
} }
/// Given a region `R`, iterate over all constraints `R: R1`. /// Given a region `R`, iterate over all constraints `R: R1`.
crate fn outgoing_edges<'a, 'tcx>( pub(crate) fn outgoing_edges<'a, 'tcx>(
&'a self, &'a self,
region_sup: RegionVid, region_sup: RegionVid,
constraints: &'a OutlivesConstraintSet<'tcx>, constraints: &'a OutlivesConstraintSet<'tcx>,
@ -129,7 +133,7 @@ impl<D: ConstraintGraphDirecton> ConstraintGraph<D> {
} }
} }
crate struct Edges<'s, 'tcx, D: ConstraintGraphDirecton> { pub(crate) struct Edges<'s, 'tcx, D: ConstraintGraphDirecton> {
graph: &'s ConstraintGraph<D>, graph: &'s ConstraintGraph<D>,
constraints: &'s OutlivesConstraintSet<'tcx>, constraints: &'s OutlivesConstraintSet<'tcx>,
pointer: Option<OutlivesConstraintIndex>, pointer: Option<OutlivesConstraintIndex>,
@ -169,7 +173,7 @@ impl<'s, 'tcx, D: ConstraintGraphDirecton> Iterator for Edges<'s, 'tcx, D> {
/// This struct brings together a constraint set and a (normal, not /// This struct brings together a constraint set and a (normal, not
/// reverse) constraint graph. It implements the graph traits and is /// reverse) constraint graph. It implements the graph traits and is
/// usd for doing the SCC computation. /// usd for doing the SCC computation.
crate struct RegionGraph<'s, 'tcx, D: ConstraintGraphDirecton> { pub(crate) struct RegionGraph<'s, 'tcx, D: ConstraintGraphDirecton> {
set: &'s OutlivesConstraintSet<'tcx>, set: &'s OutlivesConstraintSet<'tcx>,
constraint_graph: &'s ConstraintGraph<D>, constraint_graph: &'s ConstraintGraph<D>,
static_region: RegionVid, static_region: RegionVid,
@ -180,7 +184,7 @@ impl<'s, 'tcx, D: ConstraintGraphDirecton> RegionGraph<'s, 'tcx, D> {
/// R2` is treated as an edge `R1 -> R2`. We use this graph to /// R2` is treated as an edge `R1 -> R2`. We use this graph to
/// construct SCCs for region inference but also for error /// construct SCCs for region inference but also for error
/// reporting. /// reporting.
crate fn new( pub(crate) fn new(
set: &'s OutlivesConstraintSet<'tcx>, set: &'s OutlivesConstraintSet<'tcx>,
constraint_graph: &'s ConstraintGraph<D>, constraint_graph: &'s ConstraintGraph<D>,
static_region: RegionVid, static_region: RegionVid,
@ -190,14 +194,14 @@ impl<'s, 'tcx, D: ConstraintGraphDirecton> RegionGraph<'s, 'tcx, D> {
/// Given a region `R`, iterate over all regions `R1` such that /// Given a region `R`, iterate over all regions `R1` such that
/// there exists a constraint `R: R1`. /// there exists a constraint `R: R1`.
crate fn outgoing_regions(&self, region_sup: RegionVid) -> Successors<'s, 'tcx, D> { pub(crate) fn outgoing_regions(&self, region_sup: RegionVid) -> Successors<'s, 'tcx, D> {
Successors { Successors {
edges: self.constraint_graph.outgoing_edges(region_sup, self.set, self.static_region), edges: self.constraint_graph.outgoing_edges(region_sup, self.set, self.static_region),
} }
} }
} }
crate struct Successors<'s, 'tcx, D: ConstraintGraphDirecton> { pub(crate) struct Successors<'s, 'tcx, D: ConstraintGraphDirecton> {
edges: Edges<'s, 'tcx, D>, edges: Edges<'s, 'tcx, D>,
} }

View file

@ -8,19 +8,19 @@ use std::ops::Index;
use crate::type_check::Locations; use crate::type_check::Locations;
crate mod graph; pub(crate) mod graph;
/// A set of NLL region constraints. These include "outlives" /// A set of NLL region constraints. These include "outlives"
/// constraints of the form `R1: R2`. Each constraint is identified by /// constraints of the form `R1: R2`. Each constraint is identified by
/// a unique `OutlivesConstraintIndex` and you can index into the set /// a unique `OutlivesConstraintIndex` and you can index into the set
/// (`constraint_set[i]`) to access the constraint details. /// (`constraint_set[i]`) to access the constraint details.
#[derive(Clone, Default)] #[derive(Clone, Default)]
crate struct OutlivesConstraintSet<'tcx> { pub(crate) struct OutlivesConstraintSet<'tcx> {
outlives: IndexVec<OutlivesConstraintIndex, OutlivesConstraint<'tcx>>, outlives: IndexVec<OutlivesConstraintIndex, OutlivesConstraint<'tcx>>,
} }
impl<'tcx> OutlivesConstraintSet<'tcx> { impl<'tcx> OutlivesConstraintSet<'tcx> {
crate fn push(&mut self, constraint: OutlivesConstraint<'tcx>) { pub(crate) fn push(&mut self, constraint: OutlivesConstraint<'tcx>) {
debug!( debug!(
"OutlivesConstraintSet::push({:?}: {:?} @ {:?}", "OutlivesConstraintSet::push({:?}: {:?} @ {:?}",
constraint.sup, constraint.sub, constraint.locations constraint.sup, constraint.sub, constraint.locations
@ -38,20 +38,20 @@ impl<'tcx> OutlivesConstraintSet<'tcx> {
/// N.B., this graph contains a "frozen" view of the current /// N.B., this graph contains a "frozen" view of the current
/// constraints. Any new constraints added to the `OutlivesConstraintSet` /// constraints. Any new constraints added to the `OutlivesConstraintSet`
/// after the graph is built will not be present in the graph. /// after the graph is built will not be present in the graph.
crate fn graph(&self, num_region_vars: usize) -> graph::NormalConstraintGraph { pub(crate) fn graph(&self, num_region_vars: usize) -> graph::NormalConstraintGraph {
graph::ConstraintGraph::new(graph::Normal, self, num_region_vars) graph::ConstraintGraph::new(graph::Normal, self, num_region_vars)
} }
/// Like `graph`, but constraints a reverse graph where `R1: R2` /// Like `graph`, but constraints a reverse graph where `R1: R2`
/// represents an edge `R2 -> R1`. /// represents an edge `R2 -> R1`.
crate fn reverse_graph(&self, num_region_vars: usize) -> graph::ReverseConstraintGraph { pub(crate) fn reverse_graph(&self, num_region_vars: usize) -> graph::ReverseConstraintGraph {
graph::ConstraintGraph::new(graph::Reverse, self, num_region_vars) graph::ConstraintGraph::new(graph::Reverse, self, num_region_vars)
} }
/// Computes cycles (SCCs) in the graph of regions. In particular, /// Computes cycles (SCCs) in the graph of regions. In particular,
/// find all regions R1, R2 such that R1: R2 and R2: R1 and group /// find all regions R1, R2 such that R1: R2 and R2: R1 and group
/// them into an SCC, and find the relationships between SCCs. /// them into an SCC, and find the relationships between SCCs.
crate fn compute_sccs( pub(crate) fn compute_sccs(
&self, &self,
constraint_graph: &graph::NormalConstraintGraph, constraint_graph: &graph::NormalConstraintGraph,
static_region: RegionVid, static_region: RegionVid,
@ -60,7 +60,7 @@ impl<'tcx> OutlivesConstraintSet<'tcx> {
Sccs::new(region_graph) Sccs::new(region_graph)
} }
crate fn outlives(&self) -> &IndexVec<OutlivesConstraintIndex, OutlivesConstraint<'tcx>> { pub(crate) fn outlives(&self) -> &IndexVec<OutlivesConstraintIndex, OutlivesConstraint<'tcx>> {
&self.outlives &self.outlives
} }
} }

View file

@ -233,7 +233,7 @@ impl<'tcx> OutOfScopePrecomputer<'_, 'tcx> {
} }
impl<'a, 'tcx> Borrows<'a, 'tcx> { impl<'a, 'tcx> Borrows<'a, 'tcx> {
crate fn new( pub(crate) fn new(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
body: &'a Body<'tcx>, body: &'a Body<'tcx>,
nonlexical_regioncx: &'a RegionInferenceContext<'tcx>, nonlexical_regioncx: &'a RegionInferenceContext<'tcx>,

View file

@ -22,7 +22,7 @@ use crate::region_infer::values::RegionElement;
use crate::MirBorrowckCtxt; use crate::MirBorrowckCtxt;
#[derive(Clone)] #[derive(Clone)]
crate struct UniverseInfo<'tcx>(UniverseInfoInner<'tcx>); pub(crate) struct UniverseInfo<'tcx>(UniverseInfoInner<'tcx>);
/// What operation a universe was created for. /// What operation a universe was created for.
#[derive(Clone)] #[derive(Clone)]
@ -36,15 +36,15 @@ enum UniverseInfoInner<'tcx> {
} }
impl<'tcx> UniverseInfo<'tcx> { impl<'tcx> UniverseInfo<'tcx> {
crate fn other() -> UniverseInfo<'tcx> { pub(crate) fn other() -> UniverseInfo<'tcx> {
UniverseInfo(UniverseInfoInner::Other) UniverseInfo(UniverseInfoInner::Other)
} }
crate fn relate(expected: Ty<'tcx>, found: Ty<'tcx>) -> UniverseInfo<'tcx> { pub(crate) fn relate(expected: Ty<'tcx>, found: Ty<'tcx>) -> UniverseInfo<'tcx> {
UniverseInfo(UniverseInfoInner::RelateTys { expected, found }) UniverseInfo(UniverseInfoInner::RelateTys { expected, found })
} }
crate fn report_error( pub(crate) fn report_error(
&self, &self,
mbcx: &mut MirBorrowckCtxt<'_, 'tcx>, mbcx: &mut MirBorrowckCtxt<'_, 'tcx>,
placeholder: ty::PlaceholderRegion, placeholder: ty::PlaceholderRegion,
@ -76,7 +76,7 @@ impl<'tcx> UniverseInfo<'tcx> {
} }
} }
crate trait ToUniverseInfo<'tcx> { pub(crate) trait ToUniverseInfo<'tcx> {
fn to_universe_info(self, base_universe: ty::UniverseIndex) -> UniverseInfo<'tcx>; fn to_universe_info(self, base_universe: ty::UniverseIndex) -> UniverseInfo<'tcx>;
} }

View file

@ -11,7 +11,7 @@ use rustc_middle::mir::visit::{MirVisitable, PlaceContext, Visitor};
use rustc_middle::mir::{Body, Local, Location}; use rustc_middle::mir::{Body, Local, Location};
use rustc_middle::ty::{RegionVid, TyCtxt}; use rustc_middle::ty::{RegionVid, TyCtxt};
crate fn find<'tcx>( pub(crate) fn find<'tcx>(
body: &Body<'tcx>, body: &Body<'tcx>,
regioncx: &Rc<RegionInferenceContext<'tcx>>, regioncx: &Rc<RegionInferenceContext<'tcx>>,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,

View file

@ -35,12 +35,12 @@ mod move_errors;
mod mutability_errors; mod mutability_errors;
mod region_errors; mod region_errors;
crate use bound_region_errors::{ToUniverseInfo, UniverseInfo}; pub(crate) use bound_region_errors::{ToUniverseInfo, UniverseInfo};
crate use mutability_errors::AccessKind; pub(crate) use mutability_errors::AccessKind;
crate use outlives_suggestion::OutlivesSuggestionBuilder; pub(crate) use outlives_suggestion::OutlivesSuggestionBuilder;
crate use region_errors::{ErrorConstraintInfo, RegionErrorKind, RegionErrors}; pub(crate) use region_errors::{ErrorConstraintInfo, RegionErrorKind, RegionErrors};
crate use region_name::{RegionName, RegionNameSource}; pub(crate) use region_name::{RegionName, RegionNameSource};
crate use rustc_const_eval::util::CallKind; pub(crate) use rustc_const_eval::util::CallKind;
use rustc_middle::mir::tcx::PlaceTy; use rustc_middle::mir::tcx::PlaceTy;
pub(super) struct IncludingDowncast(pub(super) bool); pub(super) struct IncludingDowncast(pub(super) bool);

View file

@ -149,7 +149,7 @@ impl OutlivesSuggestionBuilder {
} }
/// Add the outlives constraint `fr: outlived_fr` to the set of constraints we need to suggest. /// Add the outlives constraint `fr: outlived_fr` to the set of constraints we need to suggest.
crate fn collect_constraint(&mut self, fr: RegionVid, outlived_fr: RegionVid) { pub(crate) fn collect_constraint(&mut self, fr: RegionVid, outlived_fr: RegionVid) {
debug!("Collected {:?}: {:?}", fr, outlived_fr); debug!("Collected {:?}: {:?}", fr, outlived_fr);
// Add to set of constraints for final help note. // Add to set of constraints for final help note.
@ -158,7 +158,7 @@ impl OutlivesSuggestionBuilder {
/// Emit an intermediate note on the given `Diagnostic` if the involved regions are /// Emit an intermediate note on the given `Diagnostic` if the involved regions are
/// suggestable. /// suggestable.
crate fn intermediate_suggestion( pub(crate) fn intermediate_suggestion(
&mut self, &mut self,
mbcx: &MirBorrowckCtxt<'_, '_>, mbcx: &MirBorrowckCtxt<'_, '_>,
errci: &ErrorConstraintInfo, errci: &ErrorConstraintInfo,
@ -179,7 +179,7 @@ impl OutlivesSuggestionBuilder {
/// If there is a suggestion to emit, add a diagnostic to the buffer. This is the final /// If there is a suggestion to emit, add a diagnostic to the buffer. This is the final
/// suggestion including all collected constraints. /// suggestion including all collected constraints.
crate fn add_suggestion(&self, mbcx: &mut MirBorrowckCtxt<'_, '_>) { pub(crate) fn add_suggestion(&self, mbcx: &mut MirBorrowckCtxt<'_, '_>) {
// No constraints to add? Done. // No constraints to add? Done.
if self.constraints_to_add.is_empty() { if self.constraints_to_add.is_empty() {
debug!("No constraints to suggest."); debug!("No constraints to suggest.");

View file

@ -58,10 +58,10 @@ impl ConstraintDescription for ConstraintCategory {
/// ///
/// Usually we expect this to either be empty or contain a small number of items, so we can avoid /// Usually we expect this to either be empty or contain a small number of items, so we can avoid
/// allocation most of the time. /// allocation most of the time.
crate type RegionErrors<'tcx> = Vec<RegionErrorKind<'tcx>>; pub(crate) type RegionErrors<'tcx> = Vec<RegionErrorKind<'tcx>>;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
crate enum RegionErrorKind<'tcx> { pub(crate) enum RegionErrorKind<'tcx> {
/// A generic bound failure for a type test (`T: 'a`). /// A generic bound failure for a type test (`T: 'a`).
TypeTestError { type_test: TypeTest<'tcx> }, TypeTestError { type_test: TypeTest<'tcx> },

View file

@ -15,18 +15,18 @@ use crate::{nll::ToRegionVid, universal_regions::DefiningTy, MirBorrowckCtxt};
/// A name for a particular region used in emitting diagnostics. This name could be a generated /// A name for a particular region used in emitting diagnostics. This name could be a generated
/// name like `'1`, a name used by the user like `'a`, or a name like `'static`. /// name like `'1`, a name used by the user like `'a`, or a name like `'static`.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
crate struct RegionName { pub(crate) struct RegionName {
/// The name of the region (interned). /// The name of the region (interned).
crate name: Symbol, pub(crate) name: Symbol,
/// Where the region comes from. /// Where the region comes from.
crate source: RegionNameSource, pub(crate) source: RegionNameSource,
} }
/// Denotes the source of a region that is named by a `RegionName`. For example, a free region that /// Denotes the source of a region that is named by a `RegionName`. For example, a free region that
/// was named by the user would get `NamedFreeRegion` and `'static` lifetime would get `Static`. /// was named by the user would get `NamedFreeRegion` and `'static` lifetime would get `Static`.
/// This helps to print the right kinds of diagnostics. /// This helps to print the right kinds of diagnostics.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
crate enum RegionNameSource { pub(crate) enum RegionNameSource {
/// A bound (not free) region that was substituted at the def site (not an HRTB). /// A bound (not free) region that was substituted at the def site (not an HRTB).
NamedEarlyBoundRegion(Span), NamedEarlyBoundRegion(Span),
/// A free region that the user has a name (`'a`) for. /// A free region that the user has a name (`'a`) for.
@ -50,7 +50,7 @@ crate enum RegionNameSource {
/// Describes what to highlight to explain to the user that we're giving an anonymous region a /// Describes what to highlight to explain to the user that we're giving an anonymous region a
/// synthesized name, and how to highlight it. /// synthesized name, and how to highlight it.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
crate enum RegionNameHighlight { pub(crate) enum RegionNameHighlight {
/// The anonymous region corresponds to a reference that was found by traversing the type in the HIR. /// The anonymous region corresponds to a reference that was found by traversing the type in the HIR.
MatchedHirTy(Span), MatchedHirTy(Span),
/// The anonymous region corresponds to a `'_` in the generics list of a struct/enum/union. /// The anonymous region corresponds to a `'_` in the generics list of a struct/enum/union.
@ -65,7 +65,7 @@ crate enum RegionNameHighlight {
} }
impl RegionName { impl RegionName {
crate fn was_named(&self) -> bool { pub(crate) fn was_named(&self) -> bool {
match self.source { match self.source {
RegionNameSource::NamedEarlyBoundRegion(..) RegionNameSource::NamedEarlyBoundRegion(..)
| RegionNameSource::NamedFreeRegion(..) | RegionNameSource::NamedFreeRegion(..)
@ -79,7 +79,7 @@ impl RegionName {
} }
} }
crate fn span(&self) -> Option<Span> { pub(crate) fn span(&self) -> Option<Span> {
match self.source { match self.source {
RegionNameSource::Static => None, RegionNameSource::Static => None,
RegionNameSource::NamedEarlyBoundRegion(span) RegionNameSource::NamedEarlyBoundRegion(span)
@ -98,7 +98,7 @@ impl RegionName {
} }
} }
crate fn highlight_region_name(&self, diag: &mut Diagnostic) { pub(crate) fn highlight_region_name(&self, diag: &mut Diagnostic) {
match &self.source { match &self.source {
RegionNameSource::NamedFreeRegion(span) RegionNameSource::NamedFreeRegion(span)
| RegionNameSource::NamedEarlyBoundRegion(span) => { | RegionNameSource::NamedEarlyBoundRegion(span) => {
@ -178,11 +178,11 @@ impl Display for RegionName {
} }
impl<'tcx> MirBorrowckCtxt<'_, 'tcx> { impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
crate fn mir_def_id(&self) -> hir::def_id::LocalDefId { pub(crate) fn mir_def_id(&self) -> hir::def_id::LocalDefId {
self.body.source.def_id().as_local().unwrap() self.body.source.def_id().as_local().unwrap()
} }
crate fn mir_hir_id(&self) -> hir::HirId { pub(crate) fn mir_hir_id(&self) -> hir::HirId {
self.infcx.tcx.hir().local_def_id_to_hir_id(self.mir_def_id()) self.infcx.tcx.hir().local_def_id_to_hir_id(self.mir_def_id())
} }
@ -222,7 +222,7 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
/// ``` /// ```
/// ///
/// and then return the name `'1` for us to use. /// and then return the name `'1` for us to use.
crate fn give_region_a_name(&self, fr: RegionVid) -> Option<RegionName> { pub(crate) fn give_region_a_name(&self, fr: RegionVid) -> Option<RegionName> {
debug!( debug!(
"give_region_a_name(fr={:?}, counter={:?})", "give_region_a_name(fr={:?}, counter={:?})",
fr, fr,

View file

@ -7,7 +7,7 @@ use rustc_span::source_map::Span;
use rustc_span::symbol::Symbol; use rustc_span::symbol::Symbol;
impl<'tcx> RegionInferenceContext<'tcx> { impl<'tcx> RegionInferenceContext<'tcx> {
crate fn get_var_name_and_span_for_region( pub(crate) fn get_var_name_and_span_for_region(
&self, &self,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
body: &Body<'tcx>, body: &Body<'tcx>,
@ -34,7 +34,11 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} }
/// Search the upvars (if any) to find one that references fr. Return its index. /// Search the upvars (if any) to find one that references fr. Return its index.
crate fn get_upvar_index_for_region(&self, tcx: TyCtxt<'tcx>, fr: RegionVid) -> Option<usize> { pub(crate) fn get_upvar_index_for_region(
&self,
tcx: TyCtxt<'tcx>,
fr: RegionVid,
) -> Option<usize> {
let upvar_index = let upvar_index =
self.universal_regions().defining_ty.upvar_tys().position(|upvar_ty| { self.universal_regions().defining_ty.upvar_tys().position(|upvar_ty| {
debug!("get_upvar_index_for_region: upvar_ty={:?}", upvar_ty); debug!("get_upvar_index_for_region: upvar_ty={:?}", upvar_ty);
@ -57,7 +61,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// Given the index of an upvar, finds its name and the span from where it was /// Given the index of an upvar, finds its name and the span from where it was
/// declared. /// declared.
crate fn get_upvar_name_and_span_for_region( pub(crate) fn get_upvar_name_and_span_for_region(
&self, &self,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
upvars: &[Upvar<'tcx>], upvars: &[Upvar<'tcx>],
@ -81,7 +85,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// ///
/// N.B., in the case of a closure, the index is indexing into the signature as seen by the /// N.B., in the case of a closure, the index is indexing into the signature as seen by the
/// user - in particular, index 0 is not the implicit self parameter. /// user - in particular, index 0 is not the implicit self parameter.
crate fn get_argument_index_for_region( pub(crate) fn get_argument_index_for_region(
&self, &self,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
fr: RegionVid, fr: RegionVid,
@ -107,7 +111,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// Given the index of an argument, finds its name (if any) and the span from where it was /// Given the index of an argument, finds its name (if any) and the span from where it was
/// declared. /// declared.
crate fn get_argument_name_and_span_for_region( pub(crate) fn get_argument_name_and_span_for_region(
&self, &self,
body: &Body<'tcx>, body: &Body<'tcx>,
local_names: &IndexVec<Local, Option<Symbol>>, local_names: &IndexVec<Local, Option<Symbol>>,

View file

@ -25,7 +25,7 @@ impl polonius_engine::FactTypes for RustcFacts {
pub type AllFacts = PoloniusFacts<RustcFacts>; pub type AllFacts = PoloniusFacts<RustcFacts>;
crate trait AllFactsExt { pub(crate) trait AllFactsExt {
/// Returns `true` if there is a need to gather `AllFacts` given the /// Returns `true` if there is a need to gather `AllFacts` given the
/// current `-Z` flags. /// current `-Z` flags.
fn enabled(tcx: TyCtxt<'_>) -> bool; fn enabled(tcx: TyCtxt<'_>) -> bool;

View file

@ -2,7 +2,6 @@
#![allow(rustc::potential_query_instability)] #![allow(rustc::potential_query_instability)]
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(crate_visibility_modifier)]
#![feature(let_chains)] #![feature(let_chains)]
#![feature(let_else)] #![feature(let_else)]
#![feature(min_specialization)] #![feature(min_specialization)]

View file

@ -30,7 +30,7 @@ pub enum RichLocation {
} }
impl LocationTable { impl LocationTable {
crate fn new(body: &Body<'_>) -> Self { pub(crate) fn new(body: &Body<'_>) -> Self {
let mut num_points = 0; let mut num_points = 0;
let statements_before_block = body let statements_before_block = body
.basic_blocks() .basic_blocks()

View file

@ -8,7 +8,7 @@ use std::ops::Index;
/// Compactly stores a set of `R0 member of [R1...Rn]` constraints, /// Compactly stores a set of `R0 member of [R1...Rn]` constraints,
/// indexed by the region `R0`. /// indexed by the region `R0`.
crate struct MemberConstraintSet<'tcx, R> pub(crate) struct MemberConstraintSet<'tcx, R>
where where
R: Copy + Eq, R: Copy + Eq,
{ {
@ -28,17 +28,17 @@ where
} }
/// Represents a `R0 member of [R1..Rn]` constraint /// Represents a `R0 member of [R1..Rn]` constraint
crate struct NllMemberConstraint<'tcx> { pub(crate) struct NllMemberConstraint<'tcx> {
next_constraint: Option<NllMemberConstraintIndex>, next_constraint: Option<NllMemberConstraintIndex>,
/// The span where the hidden type was instantiated. /// The span where the hidden type was instantiated.
crate definition_span: Span, pub(crate) definition_span: Span,
/// The hidden type in which `R0` appears. (Used in error reporting.) /// The hidden type in which `R0` appears. (Used in error reporting.)
crate hidden_ty: Ty<'tcx>, pub(crate) hidden_ty: Ty<'tcx>,
/// The region `R0`. /// The region `R0`.
crate member_region_vid: ty::RegionVid, pub(crate) member_region_vid: ty::RegionVid,
/// Index of `R1` in `choice_regions` vector from `MemberConstraintSet`. /// Index of `R1` in `choice_regions` vector from `MemberConstraintSet`.
start_index: usize, start_index: usize,
@ -48,7 +48,7 @@ crate struct NllMemberConstraint<'tcx> {
} }
rustc_index::newtype_index! { rustc_index::newtype_index! {
crate struct NllMemberConstraintIndex { pub(crate) struct NllMemberConstraintIndex {
DEBUG_FORMAT = "MemberConstraintIndex({})" DEBUG_FORMAT = "MemberConstraintIndex({})"
} }
} }
@ -73,7 +73,7 @@ impl<'tcx> MemberConstraintSet<'tcx, ty::RegionVid> {
/// within into `RegionVid` format -- it typically consults the /// within into `RegionVid` format -- it typically consults the
/// `UniversalRegions` data structure that is known to the caller /// `UniversalRegions` data structure that is known to the caller
/// (but which this code is unaware of). /// (but which this code is unaware of).
crate fn push_constraint( pub(crate) fn push_constraint(
&mut self, &mut self,
m_c: &MemberConstraint<'tcx>, m_c: &MemberConstraint<'tcx>,
mut to_region_vid: impl FnMut(ty::Region<'tcx>) -> ty::RegionVid, mut to_region_vid: impl FnMut(ty::Region<'tcx>) -> ty::RegionVid,
@ -106,7 +106,7 @@ where
/// the original `RegionVid` to an scc index. In some cases, we /// the original `RegionVid` to an scc index. In some cases, we
/// may have multiple `R1` values mapping to the same `R2` key -- that /// may have multiple `R1` values mapping to the same `R2` key -- that
/// is ok, the two sets will be merged. /// is ok, the two sets will be merged.
crate fn into_mapped<R2>( pub(crate) fn into_mapped<R2>(
self, self,
mut map_fn: impl FnMut(R1) -> R2, mut map_fn: impl FnMut(R1) -> R2,
) -> MemberConstraintSet<'tcx, R2> ) -> MemberConstraintSet<'tcx, R2>
@ -144,14 +144,14 @@ impl<R> MemberConstraintSet<'_, R>
where where
R: Copy + Hash + Eq, R: Copy + Hash + Eq,
{ {
crate fn all_indices(&self) -> impl Iterator<Item = NllMemberConstraintIndex> + '_ { pub(crate) fn all_indices(&self) -> impl Iterator<Item = NllMemberConstraintIndex> + '_ {
self.constraints.indices() self.constraints.indices()
} }
/// Iterate down the constraint indices associated with a given /// Iterate down the constraint indices associated with a given
/// peek-region. You can then use `choice_regions` and other /// peek-region. You can then use `choice_regions` and other
/// methods to access data. /// methods to access data.
crate fn indices( pub(crate) fn indices(
&self, &self,
member_region_vid: R, member_region_vid: R,
) -> impl Iterator<Item = NllMemberConstraintIndex> + '_ { ) -> impl Iterator<Item = NllMemberConstraintIndex> + '_ {
@ -172,7 +172,7 @@ where
/// ```text /// ```text
/// R0 member of [R1..Rn] /// R0 member of [R1..Rn]
/// ``` /// ```
crate fn choice_regions(&self, pci: NllMemberConstraintIndex) -> &[ty::RegionVid] { pub(crate) fn choice_regions(&self, pci: NllMemberConstraintIndex) -> &[ty::RegionVid] {
let NllMemberConstraint { start_index, end_index, .. } = &self.constraints[pci]; let NllMemberConstraint { start_index, end_index, .. } = &self.constraints[pci];
&self.choice_regions[*start_index..*end_index] &self.choice_regions[*start_index..*end_index]
} }

View file

@ -42,7 +42,7 @@ pub type PoloniusOutput = Output<RustcFacts>;
/// The output of `nll::compute_regions`. This includes the computed `RegionInferenceContext`, any /// The output of `nll::compute_regions`. This includes the computed `RegionInferenceContext`, any
/// closure requirements to propagate, and any generated errors. /// closure requirements to propagate, and any generated errors.
crate struct NllOutput<'tcx> { pub(crate) struct NllOutput<'tcx> {
pub regioncx: RegionInferenceContext<'tcx>, pub regioncx: RegionInferenceContext<'tcx>,
pub opaque_type_values: VecMap<DefId, OpaqueHiddenType<'tcx>>, pub opaque_type_values: VecMap<DefId, OpaqueHiddenType<'tcx>>,
pub polonius_input: Option<Box<AllFacts>>, pub polonius_input: Option<Box<AllFacts>>,
@ -457,6 +457,6 @@ impl ToRegionVid for RegionVid {
} }
} }
crate trait ConstraintDescription { pub(crate) trait ConstraintDescription {
fn description(&self) -> &'static str; fn description(&self) -> &'static str;
} }

View file

@ -5,7 +5,7 @@ use rustc_middle::mir::{Body, Mutability, Place};
use rustc_middle::ty::{self, TyCtxt}; use rustc_middle::ty::{self, TyCtxt};
/// Extension methods for the `Place` type. /// Extension methods for the `Place` type.
crate trait PlaceExt<'tcx> { pub(crate) trait PlaceExt<'tcx> {
/// Returns `true` if we can safely ignore borrows of this place. /// Returns `true` if we can safely ignore borrows of this place.
/// This is true whenever there is no action that the user can do /// This is true whenever there is no action that the user can do
/// to the place `self` that would invalidate the borrow. This is true /// to the place `self` that would invalidate the borrow. This is true

View file

@ -14,7 +14,7 @@ use std::iter;
/// being run in the calling context, the conservative choice is to assume the compared indices /// being run in the calling context, the conservative choice is to assume the compared indices
/// are disjoint (and therefore, do not overlap). /// are disjoint (and therefore, do not overlap).
#[derive(Copy, Clone, Debug, Eq, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
crate enum PlaceConflictBias { pub(crate) enum PlaceConflictBias {
Overlap, Overlap,
NoOverlap, NoOverlap,
} }
@ -22,7 +22,7 @@ crate enum PlaceConflictBias {
/// Helper function for checking if places conflict with a mutable borrow and deep access depth. /// Helper function for checking if places conflict with a mutable borrow and deep access depth.
/// This is used to check for places conflicting outside of the borrow checking code (such as in /// This is used to check for places conflicting outside of the borrow checking code (such as in
/// dataflow). /// dataflow).
crate fn places_conflict<'tcx>( pub(crate) fn places_conflict<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
body: &Body<'tcx>, body: &Body<'tcx>,
borrow_place: Place<'tcx>, borrow_place: Place<'tcx>,

View file

@ -11,12 +11,12 @@ use rustc_graphviz as dot;
impl<'tcx> RegionInferenceContext<'tcx> { impl<'tcx> RegionInferenceContext<'tcx> {
/// Write out the region constraint graph. /// Write out the region constraint graph.
crate fn dump_graphviz_raw_constraints(&self, mut w: &mut dyn Write) -> io::Result<()> { pub(crate) fn dump_graphviz_raw_constraints(&self, mut w: &mut dyn Write) -> io::Result<()> {
dot::render(&RawConstraints { regioncx: self }, &mut w) dot::render(&RawConstraints { regioncx: self }, &mut w)
} }
/// Write out the region constraint graph. /// Write out the region constraint graph.
crate fn dump_graphviz_scc_constraints(&self, mut w: &mut dyn Write) -> io::Result<()> { pub(crate) fn dump_graphviz_scc_constraints(&self, mut w: &mut dyn Write) -> io::Result<()> {
let mut nodes_per_scc: IndexVec<ConstraintSccIndex, _> = let mut nodes_per_scc: IndexVec<ConstraintSccIndex, _> =
self.constraint_sccs.all_sccs().map(|_| Vec::new()).collect(); self.constraint_sccs.all_sccs().map(|_| Vec::new()).collect();

View file

@ -513,26 +513,26 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} }
/// Adds annotations for `#[rustc_regions]`; see `UniversalRegions::annotate`. /// Adds annotations for `#[rustc_regions]`; see `UniversalRegions::annotate`.
crate fn annotate(&self, tcx: TyCtxt<'tcx>, err: &mut Diagnostic) { pub(crate) fn annotate(&self, tcx: TyCtxt<'tcx>, err: &mut Diagnostic) {
self.universal_regions.annotate(tcx, err) self.universal_regions.annotate(tcx, err)
} }
/// Returns `true` if the region `r` contains the point `p`. /// Returns `true` if the region `r` contains the point `p`.
/// ///
/// Panics if called before `solve()` executes, /// Panics if called before `solve()` executes,
crate fn region_contains(&self, r: impl ToRegionVid, p: impl ToElementIndex) -> bool { pub(crate) fn region_contains(&self, r: impl ToRegionVid, p: impl ToElementIndex) -> bool {
let scc = self.constraint_sccs.scc(r.to_region_vid()); let scc = self.constraint_sccs.scc(r.to_region_vid());
self.scc_values.contains(scc, p) self.scc_values.contains(scc, p)
} }
/// Returns access to the value of `r` for debugging purposes. /// Returns access to the value of `r` for debugging purposes.
crate fn region_value_str(&self, r: RegionVid) -> String { pub(crate) fn region_value_str(&self, r: RegionVid) -> String {
let scc = self.constraint_sccs.scc(r.to_region_vid()); let scc = self.constraint_sccs.scc(r.to_region_vid());
self.scc_values.region_value_str(scc) self.scc_values.region_value_str(scc)
} }
/// Returns access to the value of `r` for debugging purposes. /// Returns access to the value of `r` for debugging purposes.
crate fn region_universe(&self, r: RegionVid) -> ty::UniverseIndex { pub(crate) fn region_universe(&self, r: RegionVid) -> ty::UniverseIndex {
let scc = self.constraint_sccs.scc(r.to_region_vid()); let scc = self.constraint_sccs.scc(r.to_region_vid());
self.scc_universes[scc] self.scc_universes[scc]
} }
@ -1693,7 +1693,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// that cannot be named by `fr1`; in that case, we will require /// that cannot be named by `fr1`; in that case, we will require
/// that `fr1: 'static` because it is the only way to `fr1: r` to /// that `fr1: 'static` because it is the only way to `fr1: r` to
/// be satisfied. (See `add_incompatible_universe`.) /// be satisfied. (See `add_incompatible_universe`.)
crate fn provides_universal_region( pub(crate) fn provides_universal_region(
&self, &self,
r: RegionVid, r: RegionVid,
fr1: RegionVid, fr1: RegionVid,
@ -1712,7 +1712,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// If `r2` represents a placeholder region, then this returns /// If `r2` represents a placeholder region, then this returns
/// `true` if `r1` cannot name that placeholder in its /// `true` if `r1` cannot name that placeholder in its
/// value; otherwise, returns `false`. /// value; otherwise, returns `false`.
crate fn cannot_name_placeholder(&self, r1: RegionVid, r2: RegionVid) -> bool { pub(crate) fn cannot_name_placeholder(&self, r1: RegionVid, r2: RegionVid) -> bool {
debug!("cannot_name_value_of(r1={:?}, r2={:?})", r1, r2); debug!("cannot_name_value_of(r1={:?}, r2={:?})", r1, r2);
match self.definitions[r2].origin { match self.definitions[r2].origin {
@ -1731,7 +1731,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} }
} }
crate fn retrieve_closure_constraint_info( pub(crate) fn retrieve_closure_constraint_info(
&self, &self,
_body: &Body<'tcx>, _body: &Body<'tcx>,
constraint: &OutlivesConstraint<'tcx>, constraint: &OutlivesConstraint<'tcx>,
@ -1766,7 +1766,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} }
/// Finds a good `ObligationCause` to blame for the fact that `fr1` outlives `fr2`. /// Finds a good `ObligationCause` to blame for the fact that `fr1` outlives `fr2`.
crate fn find_outlives_blame_span( pub(crate) fn find_outlives_blame_span(
&self, &self,
body: &Body<'tcx>, body: &Body<'tcx>,
fr1: RegionVid, fr1: RegionVid,
@ -1788,7 +1788,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// ///
/// Returns: a series of constraints as well as the region `R` /// Returns: a series of constraints as well as the region `R`
/// that passed the target test. /// that passed the target test.
crate fn find_constraint_paths_between_regions( pub(crate) fn find_constraint_paths_between_regions(
&self, &self,
from_region: RegionVid, from_region: RegionVid,
target_test: impl Fn(RegionVid) -> bool, target_test: impl Fn(RegionVid) -> bool,
@ -1882,7 +1882,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// Finds some region R such that `fr1: R` and `R` is live at `elem`. /// Finds some region R such that `fr1: R` and `R` is live at `elem`.
#[instrument(skip(self), level = "trace")] #[instrument(skip(self), level = "trace")]
crate fn find_sub_region_live_at(&self, fr1: RegionVid, elem: Location) -> RegionVid { pub(crate) fn find_sub_region_live_at(&self, fr1: RegionVid, elem: Location) -> RegionVid {
trace!(scc = ?self.constraint_sccs.scc(fr1)); trace!(scc = ?self.constraint_sccs.scc(fr1));
trace!(universe = ?self.scc_universes[self.constraint_sccs.scc(fr1)]); trace!(universe = ?self.scc_universes[self.constraint_sccs.scc(fr1)]);
self.find_constraint_paths_between_regions(fr1, |r| { self.find_constraint_paths_between_regions(fr1, |r| {
@ -1919,7 +1919,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} }
/// Get the region outlived by `longer_fr` and live at `element`. /// Get the region outlived by `longer_fr` and live at `element`.
crate fn region_from_element( pub(crate) fn region_from_element(
&self, &self,
longer_fr: RegionVid, longer_fr: RegionVid,
element: &RegionElement, element: &RegionElement,
@ -1939,17 +1939,17 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} }
/// Get the region definition of `r`. /// Get the region definition of `r`.
crate fn region_definition(&self, r: RegionVid) -> &RegionDefinition<'tcx> { pub(crate) fn region_definition(&self, r: RegionVid) -> &RegionDefinition<'tcx> {
&self.definitions[r] &self.definitions[r]
} }
/// Check if the SCC of `r` contains `upper`. /// Check if the SCC of `r` contains `upper`.
crate fn upper_bound_in_region_scc(&self, r: RegionVid, upper: RegionVid) -> bool { pub(crate) fn upper_bound_in_region_scc(&self, r: RegionVid, upper: RegionVid) -> bool {
let r_scc = self.constraint_sccs.scc(r); let r_scc = self.constraint_sccs.scc(r);
self.scc_values.contains(r_scc, upper) self.scc_values.contains(r_scc, upper)
} }
crate fn universal_regions(&self) -> &UniversalRegions<'tcx> { pub(crate) fn universal_regions(&self) -> &UniversalRegions<'tcx> {
self.universal_regions.as_ref() self.universal_regions.as_ref()
} }
@ -1959,7 +1959,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
/// creating a constraint path that forces `R` to outlive /// creating a constraint path that forces `R` to outlive
/// `from_region`, and then finding the best choices within that /// `from_region`, and then finding the best choices within that
/// path to blame. /// path to blame.
crate fn best_blame_constraint( pub(crate) fn best_blame_constraint(
&self, &self,
body: &Body<'tcx>, body: &Body<'tcx>,
from_region: RegionVid, from_region: RegionVid,
@ -2171,7 +2171,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
categorized_path.remove(0) categorized_path.remove(0)
} }
crate fn universe_info(&self, universe: ty::UniverseIndex) -> UniverseInfo<'tcx> { pub(crate) fn universe_info(&self, universe: ty::UniverseIndex) -> UniverseInfo<'tcx> {
self.universe_causes[&universe].clone() self.universe_causes[&universe].clone()
} }
} }

View file

@ -8,7 +8,7 @@ use rustc_middle::ty::RegionVid;
use std::ops::Range; use std::ops::Range;
use std::rc::Rc; use std::rc::Rc;
crate struct ReverseSccGraph { pub(crate) struct ReverseSccGraph {
graph: VecGraph<ConstraintSccIndex>, graph: VecGraph<ConstraintSccIndex>,
/// For each SCC, the range of `universal_regions` that use that SCC as /// For each SCC, the range of `universal_regions` that use that SCC as
/// their value. /// their value.

View file

@ -10,7 +10,7 @@ use std::fmt::Debug;
use std::rc::Rc; use std::rc::Rc;
/// Maps between a `Location` and a `PointIndex` (and vice versa). /// Maps between a `Location` and a `PointIndex` (and vice versa).
crate struct RegionValueElements { pub(crate) struct RegionValueElements {
/// For each basic block, how many points are contained within? /// For each basic block, how many points are contained within?
statements_before_block: IndexVec<BasicBlock, usize>, statements_before_block: IndexVec<BasicBlock, usize>,
@ -22,7 +22,7 @@ crate struct RegionValueElements {
} }
impl RegionValueElements { impl RegionValueElements {
crate fn new(body: &Body<'_>) -> Self { pub(crate) fn new(body: &Body<'_>) -> Self {
let mut num_points = 0; let mut num_points = 0;
let statements_before_block: IndexVec<BasicBlock, usize> = body let statements_before_block: IndexVec<BasicBlock, usize> = body
.basic_blocks() .basic_blocks()
@ -45,30 +45,30 @@ impl RegionValueElements {
} }
/// Total number of point indices /// Total number of point indices
crate fn num_points(&self) -> usize { pub(crate) fn num_points(&self) -> usize {
self.num_points self.num_points
} }
/// Converts a `Location` into a `PointIndex`. O(1). /// Converts a `Location` into a `PointIndex`. O(1).
crate fn point_from_location(&self, location: Location) -> PointIndex { pub(crate) fn point_from_location(&self, location: Location) -> PointIndex {
let Location { block, statement_index } = location; let Location { block, statement_index } = location;
let start_index = self.statements_before_block[block]; let start_index = self.statements_before_block[block];
PointIndex::new(start_index + statement_index) PointIndex::new(start_index + statement_index)
} }
/// Converts a `Location` into a `PointIndex`. O(1). /// Converts a `Location` into a `PointIndex`. O(1).
crate fn entry_point(&self, block: BasicBlock) -> PointIndex { pub(crate) fn entry_point(&self, block: BasicBlock) -> PointIndex {
let start_index = self.statements_before_block[block]; let start_index = self.statements_before_block[block];
PointIndex::new(start_index) PointIndex::new(start_index)
} }
/// Return the PointIndex for the block start of this index. /// Return the PointIndex for the block start of this index.
crate fn to_block_start(&self, index: PointIndex) -> PointIndex { pub(crate) fn to_block_start(&self, index: PointIndex) -> PointIndex {
PointIndex::new(self.statements_before_block[self.basic_blocks[index]]) PointIndex::new(self.statements_before_block[self.basic_blocks[index]])
} }
/// Converts a `PointIndex` back to a location. O(1). /// Converts a `PointIndex` back to a location. O(1).
crate fn to_location(&self, index: PointIndex) -> Location { pub(crate) fn to_location(&self, index: PointIndex) -> Location {
assert!(index.index() < self.num_points); assert!(index.index() < self.num_points);
let block = self.basic_blocks[index]; let block = self.basic_blocks[index];
let start_index = self.statements_before_block[block]; let start_index = self.statements_before_block[block];
@ -80,7 +80,7 @@ impl RegionValueElements {
/// out of range (because they round up to the nearest 2^N number /// out of range (because they round up to the nearest 2^N number
/// of bits). Use this function to filter such points out if you /// of bits). Use this function to filter such points out if you
/// like. /// like.
crate fn point_in_range(&self, index: PointIndex) -> bool { pub(crate) fn point_in_range(&self, index: PointIndex) -> bool {
index.index() < self.num_points index.index() < self.num_points
} }
} }
@ -99,7 +99,7 @@ rustc_index::newtype_index! {
/// An individual element in a region value -- the value of a /// An individual element in a region value -- the value of a
/// particular region variable consists of a set of these elements. /// particular region variable consists of a set of these elements.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
crate enum RegionElement { pub(crate) enum RegionElement {
/// A point in the control-flow graph. /// A point in the control-flow graph.
Location(Location), Location(Location),
@ -114,7 +114,7 @@ crate enum RegionElement {
/// When we initially compute liveness, we use an interval matrix storing /// When we initially compute liveness, we use an interval matrix storing
/// liveness ranges for each region-vid. /// liveness ranges for each region-vid.
crate struct LivenessValues<N: Idx> { pub(crate) struct LivenessValues<N: Idx> {
elements: Rc<RegionValueElements>, elements: Rc<RegionValueElements>,
points: SparseIntervalMatrix<N, PointIndex>, points: SparseIntervalMatrix<N, PointIndex>,
} }
@ -123,18 +123,18 @@ impl<N: Idx> LivenessValues<N> {
/// Creates a new set of "region values" that tracks causal information. /// Creates a new set of "region values" that tracks causal information.
/// Each of the regions in num_region_variables will be initialized with an /// Each of the regions in num_region_variables will be initialized with an
/// empty set of points and no causal information. /// empty set of points and no causal information.
crate fn new(elements: Rc<RegionValueElements>) -> Self { pub(crate) fn new(elements: Rc<RegionValueElements>) -> Self {
Self { points: SparseIntervalMatrix::new(elements.num_points), elements } Self { points: SparseIntervalMatrix::new(elements.num_points), elements }
} }
/// Iterate through each region that has a value in this set. /// Iterate through each region that has a value in this set.
crate fn rows(&self) -> impl Iterator<Item = N> { pub(crate) fn rows(&self) -> impl Iterator<Item = N> {
self.points.rows() self.points.rows()
} }
/// Adds the given element to the value for the given region. Returns whether /// Adds the given element to the value for the given region. Returns whether
/// the element is newly added (i.e., was not already present). /// the element is newly added (i.e., was not already present).
crate fn add_element(&mut self, row: N, location: Location) -> bool { pub(crate) fn add_element(&mut self, row: N, location: Location) -> bool {
debug!("LivenessValues::add(r={:?}, location={:?})", row, location); debug!("LivenessValues::add(r={:?}, location={:?})", row, location);
let index = self.elements.point_from_location(location); let index = self.elements.point_from_location(location);
self.points.insert(row, index) self.points.insert(row, index)
@ -142,24 +142,24 @@ impl<N: Idx> LivenessValues<N> {
/// Adds all the elements in the given bit array into the given /// Adds all the elements in the given bit array into the given
/// region. Returns whether any of them are newly added. /// region. Returns whether any of them are newly added.
crate fn add_elements(&mut self, row: N, locations: &IntervalSet<PointIndex>) -> bool { pub(crate) fn add_elements(&mut self, row: N, locations: &IntervalSet<PointIndex>) -> bool {
debug!("LivenessValues::add_elements(row={:?}, locations={:?})", row, locations); debug!("LivenessValues::add_elements(row={:?}, locations={:?})", row, locations);
self.points.union_row(row, locations) self.points.union_row(row, locations)
} }
/// Adds all the control-flow points to the values for `r`. /// Adds all the control-flow points to the values for `r`.
crate fn add_all_points(&mut self, row: N) { pub(crate) fn add_all_points(&mut self, row: N) {
self.points.insert_all_into_row(row); self.points.insert_all_into_row(row);
} }
/// Returns `true` if the region `r` contains the given element. /// Returns `true` if the region `r` contains the given element.
crate fn contains(&self, row: N, location: Location) -> bool { pub(crate) fn contains(&self, row: N, location: Location) -> bool {
let index = self.elements.point_from_location(location); let index = self.elements.point_from_location(location);
self.points.row(row).map_or(false, |r| r.contains(index)) self.points.row(row).map_or(false, |r| r.contains(index))
} }
/// Returns an iterator of all the elements contained by the region `r` /// Returns an iterator of all the elements contained by the region `r`
crate fn get_elements(&self, row: N) -> impl Iterator<Item = Location> + '_ { pub(crate) fn get_elements(&self, row: N) -> impl Iterator<Item = Location> + '_ {
self.points self.points
.row(row) .row(row)
.into_iter() .into_iter()
@ -169,7 +169,7 @@ impl<N: Idx> LivenessValues<N> {
} }
/// Returns a "pretty" string value of the region. Meant for debugging. /// Returns a "pretty" string value of the region. Meant for debugging.
crate fn region_value_str(&self, r: N) -> String { pub(crate) fn region_value_str(&self, r: N) -> String {
region_value_str(self.get_elements(r).map(RegionElement::Location)) region_value_str(self.get_elements(r).map(RegionElement::Location))
} }
} }
@ -178,25 +178,28 @@ impl<N: Idx> LivenessValues<N> {
/// rustc to the internal `PlaceholderIndex` values that are used in /// rustc to the internal `PlaceholderIndex` values that are used in
/// NLL. /// NLL.
#[derive(Default)] #[derive(Default)]
crate struct PlaceholderIndices { pub(crate) struct PlaceholderIndices {
indices: FxIndexSet<ty::PlaceholderRegion>, indices: FxIndexSet<ty::PlaceholderRegion>,
} }
impl PlaceholderIndices { impl PlaceholderIndices {
crate fn insert(&mut self, placeholder: ty::PlaceholderRegion) -> PlaceholderIndex { pub(crate) fn insert(&mut self, placeholder: ty::PlaceholderRegion) -> PlaceholderIndex {
let (index, _) = self.indices.insert_full(placeholder); let (index, _) = self.indices.insert_full(placeholder);
index.into() index.into()
} }
crate fn lookup_index(&self, placeholder: ty::PlaceholderRegion) -> PlaceholderIndex { pub(crate) fn lookup_index(&self, placeholder: ty::PlaceholderRegion) -> PlaceholderIndex {
self.indices.get_index_of(&placeholder).unwrap().into() self.indices.get_index_of(&placeholder).unwrap().into()
} }
crate fn lookup_placeholder(&self, placeholder: PlaceholderIndex) -> ty::PlaceholderRegion { pub(crate) fn lookup_placeholder(
&self,
placeholder: PlaceholderIndex,
) -> ty::PlaceholderRegion {
self.indices[placeholder.index()] self.indices[placeholder.index()]
} }
crate fn len(&self) -> usize { pub(crate) fn len(&self) -> usize {
self.indices.len() self.indices.len()
} }
} }
@ -220,7 +223,7 @@ impl PlaceholderIndices {
/// because (since it is returned) it must live for at least `'a`. But /// because (since it is returned) it must live for at least `'a`. But
/// it would also contain various points from within the function. /// it would also contain various points from within the function.
#[derive(Clone)] #[derive(Clone)]
crate struct RegionValues<N: Idx> { pub(crate) struct RegionValues<N: Idx> {
elements: Rc<RegionValueElements>, elements: Rc<RegionValueElements>,
placeholder_indices: Rc<PlaceholderIndices>, placeholder_indices: Rc<PlaceholderIndices>,
points: SparseIntervalMatrix<N, PointIndex>, points: SparseIntervalMatrix<N, PointIndex>,
@ -235,7 +238,7 @@ impl<N: Idx> RegionValues<N> {
/// Creates a new set of "region values" that tracks causal information. /// Creates a new set of "region values" that tracks causal information.
/// Each of the regions in num_region_variables will be initialized with an /// Each of the regions in num_region_variables will be initialized with an
/// empty set of points and no causal information. /// empty set of points and no causal information.
crate fn new( pub(crate) fn new(
elements: &Rc<RegionValueElements>, elements: &Rc<RegionValueElements>,
num_universal_regions: usize, num_universal_regions: usize,
placeholder_indices: &Rc<PlaceholderIndices>, placeholder_indices: &Rc<PlaceholderIndices>,
@ -252,33 +255,33 @@ impl<N: Idx> RegionValues<N> {
/// Adds the given element to the value for the given region. Returns whether /// Adds the given element to the value for the given region. Returns whether
/// the element is newly added (i.e., was not already present). /// the element is newly added (i.e., was not already present).
crate fn add_element(&mut self, r: N, elem: impl ToElementIndex) -> bool { pub(crate) fn add_element(&mut self, r: N, elem: impl ToElementIndex) -> bool {
debug!("add(r={:?}, elem={:?})", r, elem); debug!("add(r={:?}, elem={:?})", r, elem);
elem.add_to_row(self, r) elem.add_to_row(self, r)
} }
/// Adds all the control-flow points to the values for `r`. /// Adds all the control-flow points to the values for `r`.
crate fn add_all_points(&mut self, r: N) { pub(crate) fn add_all_points(&mut self, r: N) {
self.points.insert_all_into_row(r); self.points.insert_all_into_row(r);
} }
/// Adds all elements in `r_from` to `r_to` (because e.g., `r_to: /// Adds all elements in `r_from` to `r_to` (because e.g., `r_to:
/// r_from`). /// r_from`).
crate fn add_region(&mut self, r_to: N, r_from: N) -> bool { pub(crate) fn add_region(&mut self, r_to: N, r_from: N) -> bool {
self.points.union_rows(r_from, r_to) self.points.union_rows(r_from, r_to)
| self.free_regions.union_rows(r_from, r_to) | self.free_regions.union_rows(r_from, r_to)
| self.placeholders.union_rows(r_from, r_to) | self.placeholders.union_rows(r_from, r_to)
} }
/// Returns `true` if the region `r` contains the given element. /// Returns `true` if the region `r` contains the given element.
crate fn contains(&self, r: N, elem: impl ToElementIndex) -> bool { pub(crate) fn contains(&self, r: N, elem: impl ToElementIndex) -> bool {
elem.contained_in_row(self, r) elem.contained_in_row(self, r)
} }
/// `self[to] |= values[from]`, essentially: that is, take all the /// `self[to] |= values[from]`, essentially: that is, take all the
/// elements for the region `from` from `values` and add them to /// elements for the region `from` from `values` and add them to
/// the region `to` in `self`. /// the region `to` in `self`.
crate fn merge_liveness<M: Idx>(&mut self, to: N, from: M, values: &LivenessValues<M>) { pub(crate) fn merge_liveness<M: Idx>(&mut self, to: N, from: M, values: &LivenessValues<M>) {
if let Some(set) = values.points.row(from) { if let Some(set) = values.points.row(from) {
self.points.union_row(to, set); self.points.union_row(to, set);
} }
@ -286,7 +289,7 @@ impl<N: Idx> RegionValues<N> {
/// Returns `true` if `sup_region` contains all the CFG points that /// Returns `true` if `sup_region` contains all the CFG points that
/// `sub_region` contains. Ignores universal regions. /// `sub_region` contains. Ignores universal regions.
crate fn contains_points(&self, sup_region: N, sub_region: N) -> bool { pub(crate) fn contains_points(&self, sup_region: N, sub_region: N) -> bool {
if let Some(sub_row) = self.points.row(sub_region) { if let Some(sub_row) = self.points.row(sub_region) {
if let Some(sup_row) = self.points.row(sup_region) { if let Some(sup_row) = self.points.row(sup_region) {
sup_row.superset(sub_row) sup_row.superset(sub_row)
@ -301,7 +304,7 @@ impl<N: Idx> RegionValues<N> {
} }
/// Returns the locations contained within a given region `r`. /// Returns the locations contained within a given region `r`.
crate fn locations_outlived_by<'a>(&'a self, r: N) -> impl Iterator<Item = Location> + 'a { pub(crate) fn locations_outlived_by<'a>(&'a self, r: N) -> impl Iterator<Item = Location> + 'a {
self.points.row(r).into_iter().flat_map(move |set| { self.points.row(r).into_iter().flat_map(move |set| {
set.iter() set.iter()
.take_while(move |&p| self.elements.point_in_range(p)) .take_while(move |&p| self.elements.point_in_range(p))
@ -310,7 +313,7 @@ impl<N: Idx> RegionValues<N> {
} }
/// Returns just the universal regions that are contained in a given region's value. /// Returns just the universal regions that are contained in a given region's value.
crate fn universal_regions_outlived_by<'a>( pub(crate) fn universal_regions_outlived_by<'a>(
&'a self, &'a self,
r: N, r: N,
) -> impl Iterator<Item = RegionVid> + 'a { ) -> impl Iterator<Item = RegionVid> + 'a {
@ -318,7 +321,7 @@ impl<N: Idx> RegionValues<N> {
} }
/// Returns all the elements contained in a given region's value. /// Returns all the elements contained in a given region's value.
crate fn placeholders_contained_in<'a>( pub(crate) fn placeholders_contained_in<'a>(
&'a self, &'a self,
r: N, r: N,
) -> impl Iterator<Item = ty::PlaceholderRegion> + 'a { ) -> impl Iterator<Item = ty::PlaceholderRegion> + 'a {
@ -330,7 +333,10 @@ impl<N: Idx> RegionValues<N> {
} }
/// Returns all the elements contained in a given region's value. /// Returns all the elements contained in a given region's value.
crate fn elements_contained_in<'a>(&'a self, r: N) -> impl Iterator<Item = RegionElement> + 'a { pub(crate) fn elements_contained_in<'a>(
&'a self,
r: N,
) -> impl Iterator<Item = RegionElement> + 'a {
let points_iter = self.locations_outlived_by(r).map(RegionElement::Location); let points_iter = self.locations_outlived_by(r).map(RegionElement::Location);
let free_regions_iter = let free_regions_iter =
@ -343,12 +349,12 @@ impl<N: Idx> RegionValues<N> {
} }
/// Returns a "pretty" string value of the region. Meant for debugging. /// Returns a "pretty" string value of the region. Meant for debugging.
crate fn region_value_str(&self, r: N) -> String { pub(crate) fn region_value_str(&self, r: N) -> String {
region_value_str(self.elements_contained_in(r)) region_value_str(self.elements_contained_in(r))
} }
} }
crate trait ToElementIndex: Debug + Copy { pub(crate) trait ToElementIndex: Debug + Copy {
fn add_to_row<N: Idx>(self, values: &mut RegionValues<N>, row: N) -> bool; fn add_to_row<N: Idx>(self, values: &mut RegionValues<N>, row: N) -> bool;
fn contained_in_row<N: Idx>(self, values: &RegionValues<N>, row: N) -> bool; fn contained_in_row<N: Idx>(self, values: &RegionValues<N>, row: N) -> bool;
@ -388,7 +394,7 @@ impl ToElementIndex for ty::PlaceholderRegion {
} }
} }
crate fn location_set_str( pub(crate) fn location_set_str(
elements: &RegionValueElements, elements: &RegionValueElements,
points: impl IntoIterator<Item = PointIndex>, points: impl IntoIterator<Item = PointIndex>,
) -> String { ) -> String {

View file

@ -18,7 +18,7 @@ use crate::{
universal_regions::UniversalRegions, universal_regions::UniversalRegions,
}; };
crate struct ConstraintConversion<'a, 'tcx> { pub(crate) struct ConstraintConversion<'a, 'tcx> {
infcx: &'a InferCtxt<'a, 'tcx>, infcx: &'a InferCtxt<'a, 'tcx>,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
universal_regions: &'a UniversalRegions<'tcx>, universal_regions: &'a UniversalRegions<'tcx>,
@ -32,7 +32,7 @@ crate struct ConstraintConversion<'a, 'tcx> {
} }
impl<'a, 'tcx> ConstraintConversion<'a, 'tcx> { impl<'a, 'tcx> ConstraintConversion<'a, 'tcx> {
crate fn new( pub(crate) fn new(
infcx: &'a InferCtxt<'a, 'tcx>, infcx: &'a InferCtxt<'a, 'tcx>,
universal_regions: &'a UniversalRegions<'tcx>, universal_regions: &'a UniversalRegions<'tcx>,
region_bound_pairs: &'a RegionBoundPairs<'tcx>, region_bound_pairs: &'a RegionBoundPairs<'tcx>,

View file

@ -19,7 +19,7 @@ use crate::{
}; };
#[derive(Debug)] #[derive(Debug)]
crate struct UniversalRegionRelations<'tcx> { pub(crate) struct UniversalRegionRelations<'tcx> {
universal_regions: Rc<UniversalRegions<'tcx>>, universal_regions: Rc<UniversalRegions<'tcx>>,
/// Stores the outlives relations that are known to hold from the /// Stores the outlives relations that are known to hold from the
@ -52,13 +52,13 @@ type RegionBoundPairs<'tcx> = Vec<(ty::Region<'tcx>, GenericKind<'tcx>)>;
/// then the output type as the last element. /// then the output type as the last element.
type NormalizedInputsAndOutput<'tcx> = Vec<Ty<'tcx>>; type NormalizedInputsAndOutput<'tcx> = Vec<Ty<'tcx>>;
crate struct CreateResult<'tcx> { pub(crate) struct CreateResult<'tcx> {
crate universal_region_relations: Frozen<UniversalRegionRelations<'tcx>>, pub(crate) universal_region_relations: Frozen<UniversalRegionRelations<'tcx>>,
crate region_bound_pairs: RegionBoundPairs<'tcx>, pub(crate) region_bound_pairs: RegionBoundPairs<'tcx>,
crate normalized_inputs_and_output: NormalizedInputsAndOutput<'tcx>, pub(crate) normalized_inputs_and_output: NormalizedInputsAndOutput<'tcx>,
} }
crate fn create<'tcx>( pub(crate) fn create<'tcx>(
infcx: &InferCtxt<'_, 'tcx>, infcx: &InferCtxt<'_, 'tcx>,
param_env: ty::ParamEnv<'tcx>, param_env: ty::ParamEnv<'tcx>,
implicit_region_bound: Option<ty::Region<'tcx>>, implicit_region_bound: Option<ty::Region<'tcx>>,
@ -96,7 +96,7 @@ impl UniversalRegionRelations<'_> {
/// ///
/// (See `TransitiveRelation::postdom_upper_bound` for details on /// (See `TransitiveRelation::postdom_upper_bound` for details on
/// the postdominating upper bound in general.) /// the postdominating upper bound in general.)
crate fn postdom_upper_bound(&self, fr1: RegionVid, fr2: RegionVid) -> RegionVid { pub(crate) fn postdom_upper_bound(&self, fr1: RegionVid, fr2: RegionVid) -> RegionVid {
assert!(self.universal_regions.is_universal_region(fr1)); assert!(self.universal_regions.is_universal_region(fr1));
assert!(self.universal_regions.is_universal_region(fr2)); assert!(self.universal_regions.is_universal_region(fr2));
self.inverse_outlives self.inverse_outlives
@ -109,7 +109,7 @@ impl UniversalRegionRelations<'_> {
/// outlives `fr` and (b) is not local. /// outlives `fr` and (b) is not local.
/// ///
/// (*) If there are multiple competing choices, we return all of them. /// (*) If there are multiple competing choices, we return all of them.
crate fn non_local_upper_bounds<'a>(&'a self, fr: RegionVid) -> Vec<RegionVid> { pub(crate) fn non_local_upper_bounds<'a>(&'a self, fr: RegionVid) -> Vec<RegionVid> {
debug!("non_local_upper_bound(fr={:?})", fr); debug!("non_local_upper_bound(fr={:?})", fr);
let res = self.non_local_bounds(&self.inverse_outlives, fr); let res = self.non_local_bounds(&self.inverse_outlives, fr);
assert!(!res.is_empty(), "can't find an upper bound!?"); assert!(!res.is_empty(), "can't find an upper bound!?");
@ -118,7 +118,7 @@ impl UniversalRegionRelations<'_> {
/// Returns the "postdominating" bound of the set of /// Returns the "postdominating" bound of the set of
/// `non_local_upper_bounds` for the given region. /// `non_local_upper_bounds` for the given region.
crate fn non_local_upper_bound(&self, fr: RegionVid) -> RegionVid { pub(crate) fn non_local_upper_bound(&self, fr: RegionVid) -> RegionVid {
let upper_bounds = self.non_local_upper_bounds(fr); let upper_bounds = self.non_local_upper_bounds(fr);
// In case we find more than one, reduce to one for // In case we find more than one, reduce to one for
@ -147,7 +147,7 @@ impl UniversalRegionRelations<'_> {
/// ///
/// (*) If there are multiple competing choices, we pick the "postdominating" /// (*) If there are multiple competing choices, we pick the "postdominating"
/// one. See `TransitiveRelation::postdom_upper_bound` for details. /// one. See `TransitiveRelation::postdom_upper_bound` for details.
crate fn non_local_lower_bound(&self, fr: RegionVid) -> Option<RegionVid> { pub(crate) fn non_local_lower_bound(&self, fr: RegionVid) -> Option<RegionVid> {
debug!("non_local_lower_bound(fr={:?})", fr); debug!("non_local_lower_bound(fr={:?})", fr);
let lower_bounds = self.non_local_bounds(&self.outlives, fr); let lower_bounds = self.non_local_bounds(&self.outlives, fr);
@ -203,18 +203,18 @@ impl UniversalRegionRelations<'_> {
/// Returns `true` if fr1 is known to outlive fr2. /// Returns `true` if fr1 is known to outlive fr2.
/// ///
/// This will only ever be true for universally quantified regions. /// This will only ever be true for universally quantified regions.
crate fn outlives(&self, fr1: RegionVid, fr2: RegionVid) -> bool { pub(crate) fn outlives(&self, fr1: RegionVid, fr2: RegionVid) -> bool {
self.outlives.contains(fr1, fr2) self.outlives.contains(fr1, fr2)
} }
/// Returns a vector of free regions `x` such that `fr1: x` is /// Returns a vector of free regions `x` such that `fr1: x` is
/// known to hold. /// known to hold.
crate fn regions_outlived_by(&self, fr1: RegionVid) -> Vec<RegionVid> { pub(crate) fn regions_outlived_by(&self, fr1: RegionVid) -> Vec<RegionVid> {
self.outlives.reachable_from(fr1) self.outlives.reachable_from(fr1)
} }
/// Returns the _non-transitive_ set of known `outlives` constraints between free regions. /// Returns the _non-transitive_ set of known `outlives` constraints between free regions.
crate fn known_outlives(&self) -> impl Iterator<Item = (RegionVid, RegionVid)> + '_ { pub(crate) fn known_outlives(&self) -> impl Iterator<Item = (RegionVid, RegionVid)> + '_ {
self.outlives.base_edges() self.outlives.base_edges()
} }
} }
@ -232,7 +232,7 @@ struct UniversalRegionRelationsBuilder<'this, 'tcx> {
} }
impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> { impl<'tcx> UniversalRegionRelationsBuilder<'_, 'tcx> {
crate fn create(mut self) -> CreateResult<'tcx> { pub(crate) fn create(mut self) -> CreateResult<'tcx> {
let unnormalized_input_output_tys = self let unnormalized_input_output_tys = self
.universal_regions .universal_regions
.unnormalized_input_tys .unnormalized_input_tys

View file

@ -18,7 +18,7 @@ use crate::region_infer::values::{PointIndex, RegionValueElements};
/// (and code simplicity) was favored. The rationale is that we only keep /// (and code simplicity) was favored. The rationale is that we only keep
/// a small number of `IndexVec`s throughout the entire analysis while, in /// a small number of `IndexVec`s throughout the entire analysis while, in
/// contrast, we're accessing each `Local` *many* times. /// contrast, we're accessing each `Local` *many* times.
crate struct LocalUseMap { pub(crate) struct LocalUseMap {
/// Head of a linked list of **definitions** of each variable -- /// Head of a linked list of **definitions** of each variable --
/// definition in this context means assignment, e.g., `x` is /// definition in this context means assignment, e.g., `x` is
/// defined in `x = y` but not `y`; that first def is the head of /// defined in `x = y` but not `y`; that first def is the head of
@ -58,7 +58,11 @@ impl vll::LinkElem for Appearance {
} }
impl LocalUseMap { impl LocalUseMap {
crate fn build(live_locals: &[Local], elements: &RegionValueElements, body: &Body<'_>) -> Self { pub(crate) fn build(
live_locals: &[Local],
elements: &RegionValueElements,
body: &Body<'_>,
) -> Self {
let nones = IndexVec::from_elem_n(None, body.local_decls.len()); let nones = IndexVec::from_elem_n(None, body.local_decls.len());
let mut local_use_map = LocalUseMap { let mut local_use_map = LocalUseMap {
first_def_at: nones.clone(), first_def_at: nones.clone(),
@ -81,17 +85,17 @@ impl LocalUseMap {
local_use_map local_use_map
} }
crate fn defs(&self, local: Local) -> impl Iterator<Item = PointIndex> + '_ { pub(crate) fn defs(&self, local: Local) -> impl Iterator<Item = PointIndex> + '_ {
vll::iter(self.first_def_at[local], &self.appearances) vll::iter(self.first_def_at[local], &self.appearances)
.map(move |aa| self.appearances[aa].point_index) .map(move |aa| self.appearances[aa].point_index)
} }
crate fn uses(&self, local: Local) -> impl Iterator<Item = PointIndex> + '_ { pub(crate) fn uses(&self, local: Local) -> impl Iterator<Item = PointIndex> + '_ {
vll::iter(self.first_use_at[local], &self.appearances) vll::iter(self.first_use_at[local], &self.appearances)
.map(move |aa| self.appearances[aa].point_index) .map(move |aa| self.appearances[aa].point_index)
} }
crate fn drops(&self, local: Local) -> impl Iterator<Item = PointIndex> + '_ { pub(crate) fn drops(&self, local: Local) -> impl Iterator<Item = PointIndex> + '_ {
vll::iter(self.first_drop_at[local], &self.appearances) vll::iter(self.first_drop_at[local], &self.appearances)
.map(move |aa| self.appearances[aa].point_index) .map(move |aa| self.appearances[aa].point_index)
} }

View file

@ -94,7 +94,7 @@ mod canonical;
mod constraint_conversion; mod constraint_conversion;
pub mod free_region_relations; pub mod free_region_relations;
mod input_output; mod input_output;
crate mod liveness; pub(crate) mod liveness;
mod relate_tys; mod relate_tys;
/// Type checks the given `mir` in the context of the inference /// Type checks the given `mir` in the context of the inference
@ -897,28 +897,29 @@ struct BorrowCheckContext<'a, 'tcx> {
upvars: &'a [Upvar<'tcx>], upvars: &'a [Upvar<'tcx>],
} }
crate struct MirTypeckResults<'tcx> { pub(crate) struct MirTypeckResults<'tcx> {
crate constraints: MirTypeckRegionConstraints<'tcx>, pub(crate) constraints: MirTypeckRegionConstraints<'tcx>,
crate universal_region_relations: Frozen<UniversalRegionRelations<'tcx>>, pub(crate) universal_region_relations: Frozen<UniversalRegionRelations<'tcx>>,
crate opaque_type_values: VecMap<OpaqueTypeKey<'tcx>, (OpaqueHiddenType<'tcx>, OpaqueTyOrigin)>, pub(crate) opaque_type_values:
VecMap<OpaqueTypeKey<'tcx>, (OpaqueHiddenType<'tcx>, OpaqueTyOrigin)>,
} }
/// A collection of region constraints that must be satisfied for the /// A collection of region constraints that must be satisfied for the
/// program to be considered well-typed. /// program to be considered well-typed.
crate struct MirTypeckRegionConstraints<'tcx> { pub(crate) struct MirTypeckRegionConstraints<'tcx> {
/// Maps from a `ty::Placeholder` to the corresponding /// Maps from a `ty::Placeholder` to the corresponding
/// `PlaceholderIndex` bit that we will use for it. /// `PlaceholderIndex` bit that we will use for it.
/// ///
/// To keep everything in sync, do not insert this set /// To keep everything in sync, do not insert this set
/// directly. Instead, use the `placeholder_region` helper. /// directly. Instead, use the `placeholder_region` helper.
crate placeholder_indices: PlaceholderIndices, pub(crate) placeholder_indices: PlaceholderIndices,
/// Each time we add a placeholder to `placeholder_indices`, we /// Each time we add a placeholder to `placeholder_indices`, we
/// also create a corresponding "representative" region vid for /// also create a corresponding "representative" region vid for
/// that wraps it. This vector tracks those. This way, when we /// that wraps it. This vector tracks those. This way, when we
/// convert the same `ty::RePlaceholder(p)` twice, we can map to /// convert the same `ty::RePlaceholder(p)` twice, we can map to
/// the same underlying `RegionVid`. /// the same underlying `RegionVid`.
crate placeholder_index_to_region: IndexVec<PlaceholderIndex, ty::Region<'tcx>>, pub(crate) placeholder_index_to_region: IndexVec<PlaceholderIndex, ty::Region<'tcx>>,
/// In general, the type-checker is not responsible for enforcing /// In general, the type-checker is not responsible for enforcing
/// liveness constraints; this job falls to the region inferencer, /// liveness constraints; this job falls to the region inferencer,
@ -927,18 +928,18 @@ crate struct MirTypeckRegionConstraints<'tcx> {
/// not otherwise appear in the MIR -- in particular, the /// not otherwise appear in the MIR -- in particular, the
/// late-bound regions that it instantiates at call-sites -- and /// late-bound regions that it instantiates at call-sites -- and
/// hence it must report on their liveness constraints. /// hence it must report on their liveness constraints.
crate liveness_constraints: LivenessValues<RegionVid>, pub(crate) liveness_constraints: LivenessValues<RegionVid>,
crate outlives_constraints: OutlivesConstraintSet<'tcx>, pub(crate) outlives_constraints: OutlivesConstraintSet<'tcx>,
crate member_constraints: MemberConstraintSet<'tcx, RegionVid>, pub(crate) member_constraints: MemberConstraintSet<'tcx, RegionVid>,
crate closure_bounds_mapping: pub(crate) closure_bounds_mapping:
FxHashMap<Location, FxHashMap<(RegionVid, RegionVid), (ConstraintCategory, Span)>>, FxHashMap<Location, FxHashMap<(RegionVid, RegionVid), (ConstraintCategory, Span)>>,
crate universe_causes: FxHashMap<ty::UniverseIndex, UniverseInfo<'tcx>>, pub(crate) universe_causes: FxHashMap<ty::UniverseIndex, UniverseInfo<'tcx>>,
crate type_tests: Vec<TypeTest<'tcx>>, pub(crate) type_tests: Vec<TypeTest<'tcx>>,
} }
impl<'tcx> MirTypeckRegionConstraints<'tcx> { impl<'tcx> MirTypeckRegionConstraints<'tcx> {

View file

@ -336,7 +336,7 @@ impl<'tcx> UniversalRegions<'tcx> {
/// that this region imposes on others. The methods in this file /// that this region imposes on others. The methods in this file
/// handle the part about dumping the inference context internal /// handle the part about dumping the inference context internal
/// state. /// state.
crate fn annotate(&self, tcx: TyCtxt<'tcx>, err: &mut Diagnostic) { pub(crate) fn annotate(&self, tcx: TyCtxt<'tcx>, err: &mut Diagnostic) {
match self.defining_ty { match self.defining_ty {
DefiningTy::Closure(def_id, substs) => { DefiningTy::Closure(def_id, substs) => {
err.note(&format!( err.note(&format!(

View file

@ -22,7 +22,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
/// been assigned to - this set is used as a proxy for locals that were not initialized due to /// been assigned to - this set is used as a proxy for locals that were not initialized due to
/// unreachable code. These locals are then considered "used" to silence the lint for them. /// unreachable code. These locals are then considered "used" to silence the lint for them.
/// See #55344 for context. /// See #55344 for context.
crate fn gather_used_muts( pub(crate) fn gather_used_muts(
&mut self, &mut self,
temporary_used_locals: FxHashSet<Local>, temporary_used_locals: FxHashSet<Local>,
mut never_initialized_mut_locals: FxHashSet<Local>, mut never_initialized_mut_locals: FxHashSet<Local>,

View file

@ -7,7 +7,7 @@ use rustc_parse::validate_attr;
use rustc_span::symbol::sym; use rustc_span::symbol::sym;
use rustc_span::Span; use rustc_span::Span;
crate struct Expander; pub(crate) struct Expander;
fn validate_input<'a>(ecx: &mut ExtCtxt<'_>, mi: &'a ast::MetaItem) -> Option<&'a ast::Path> { fn validate_input<'a>(ecx: &mut ExtCtxt<'_>, mi: &'a ast::MetaItem) -> Option<&'a ast::Path> {
match mi.meta_item_list() { match mi.meta_item_list() {

View file

@ -19,7 +19,7 @@ use rustc_span::symbol::sym;
use rustc_span::Span; use rustc_span::Span;
use smallvec::SmallVec; use smallvec::SmallVec;
crate fn expand( pub(crate) fn expand(
ecx: &mut ExtCtxt<'_>, ecx: &mut ExtCtxt<'_>,
_span: Span, _span: Span,
meta_item: &ast::MetaItem, meta_item: &ast::MetaItem,
@ -30,7 +30,7 @@ crate fn expand(
vec![cfg_eval(ecx.sess, ecx.ecfg.features, annotatable, ecx.current_expansion.lint_node_id)] vec![cfg_eval(ecx.sess, ecx.ecfg.features, annotatable, ecx.current_expansion.lint_node_id)]
} }
crate fn cfg_eval( pub(crate) fn cfg_eval(
sess: &Session, sess: &Session,
features: Option<&Features>, features: Option<&Features>,
annotatable: Annotatable, annotatable: Annotatable,

View file

@ -10,7 +10,7 @@ use rustc_session::Session;
use rustc_span::symbol::{sym, Ident}; use rustc_span::symbol::{sym, Ident};
use rustc_span::Span; use rustc_span::Span;
crate struct Expander; pub(crate) struct Expander;
impl MultiItemModifier for Expander { impl MultiItemModifier for Expander {
fn expand( fn expand(

View file

@ -38,8 +38,8 @@ pub mod partial_ord;
pub mod generic; pub mod generic;
crate struct BuiltinDerive( pub(crate) struct BuiltinDerive(
crate fn(&mut ExtCtxt<'_>, Span, &MetaItem, &Annotatable, &mut dyn FnMut(Annotatable)), pub(crate) fn(&mut ExtCtxt<'_>, Span, &MetaItem, &Annotatable, &mut dyn FnMut(Annotatable)),
); );
impl MultiItemModifier for BuiltinDerive { impl MultiItemModifier for BuiltinDerive {

View file

@ -4,7 +4,6 @@
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![feature(array_windows)] #![feature(array_windows)]
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(crate_visibility_modifier)]
#![feature(decl_macro)] #![feature(decl_macro)]
#![feature(is_sorted)] #![feature(is_sorted)]
#![feature(nll)] #![feature(nll)]

View file

@ -354,14 +354,14 @@ fn fat_lto(
Ok(LtoModuleCodegen::Fat { module, _serialized_bitcode: serialized_bitcode }) Ok(LtoModuleCodegen::Fat { module, _serialized_bitcode: serialized_bitcode })
} }
crate struct Linker<'a>(&'a mut llvm::Linker<'a>); pub(crate) struct Linker<'a>(&'a mut llvm::Linker<'a>);
impl<'a> Linker<'a> { impl<'a> Linker<'a> {
crate fn new(llmod: &'a llvm::Module) -> Self { pub(crate) fn new(llmod: &'a llvm::Module) -> Self {
unsafe { Linker(llvm::LLVMRustLinkerNew(llmod)) } unsafe { Linker(llvm::LLVMRustLinkerNew(llmod)) }
} }
crate fn add(&mut self, bytecode: &[u8]) -> Result<(), ()> { pub(crate) fn add(&mut self, bytecode: &[u8]) -> Result<(), ()> {
unsafe { unsafe {
if llvm::LLVMRustLinkerAdd( if llvm::LLVMRustLinkerAdd(
self.0, self.0,

View file

@ -1412,7 +1412,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
unsafe { llvm::LLVMBuildVAArg(self.llbuilder, list, ty, UNNAMED) } unsafe { llvm::LLVMBuildVAArg(self.llbuilder, list, ty, UNNAMED) }
} }
crate fn call_intrinsic(&mut self, intrinsic: &str, args: &[&'ll Value]) -> &'ll Value { pub(crate) fn call_intrinsic(&mut self, intrinsic: &str, args: &[&'ll Value]) -> &'ll Value {
let (ty, f) = self.cx.get_intrinsic(intrinsic); let (ty, f) = self.cx.get_intrinsic(intrinsic);
self.call(ty, f, args, None) self.call(ty, f, args, None)
} }

View file

@ -212,11 +212,11 @@ pub fn ptrcast<'ll>(val: &'ll Value, ty: &'ll Type) -> &'ll Value {
} }
impl<'ll> CodegenCx<'ll, '_> { impl<'ll> CodegenCx<'ll, '_> {
crate fn const_bitcast(&self, val: &'ll Value, ty: &'ll Type) -> &'ll Value { pub(crate) fn const_bitcast(&self, val: &'ll Value, ty: &'ll Type) -> &'ll Value {
unsafe { llvm::LLVMConstBitCast(val, ty) } unsafe { llvm::LLVMConstBitCast(val, ty) }
} }
crate fn static_addr_of_mut( pub(crate) fn static_addr_of_mut(
&self, &self,
cv: &'ll Value, cv: &'ll Value,
align: Align, align: Align,
@ -241,7 +241,7 @@ impl<'ll> CodegenCx<'ll, '_> {
} }
} }
crate fn get_static(&self, def_id: DefId) -> &'ll Value { pub(crate) fn get_static(&self, def_id: DefId) -> &'ll Value {
let instance = Instance::mono(self.tcx, def_id); let instance = Instance::mono(self.tcx, def_id);
if let Some(&g) = self.instances.borrow().get(&instance) { if let Some(&g) = self.instances.borrow().get(&instance) {
return g; return g;

View file

@ -330,7 +330,7 @@ pub unsafe fn create_module<'ll>(
} }
impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> { impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
crate fn new( pub(crate) fn new(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
codegen_unit: &'tcx CodegenUnit<'tcx>, codegen_unit: &'tcx CodegenUnit<'tcx>,
llvm_module: &'ll crate::ModuleLlvm, llvm_module: &'ll crate::ModuleLlvm,
@ -447,7 +447,7 @@ impl<'ll, 'tcx> CodegenCx<'ll, 'tcx> {
} }
} }
crate fn statics_to_rauw(&self) -> &RefCell<Vec<(&'ll Value, &'ll Value)>> { pub(crate) fn statics_to_rauw(&self) -> &RefCell<Vec<(&'ll Value, &'ll Value)>> {
&self.statics_to_rauw &self.statics_to_rauw
} }
@ -599,7 +599,7 @@ impl<'ll, 'tcx> MiscMethods<'tcx> for CodegenCx<'ll, 'tcx> {
} }
impl<'ll> CodegenCx<'ll, '_> { impl<'ll> CodegenCx<'ll, '_> {
crate fn get_intrinsic(&self, key: &str) -> (&'ll Type, &'ll Value) { pub(crate) fn get_intrinsic(&self, key: &str) -> (&'ll Type, &'ll Value) {
if let Some(v) = self.intrinsics.borrow().get(key).cloned() { if let Some(v) = self.intrinsics.borrow().get(key).cloned() {
return v; return v;
} }
@ -890,7 +890,7 @@ impl<'ll> CodegenCx<'ll, '_> {
None None
} }
crate fn eh_catch_typeinfo(&self) -> &'ll Value { pub(crate) fn eh_catch_typeinfo(&self) -> &'ll Value {
if let Some(eh_catch_typeinfo) = self.eh_catch_typeinfo.get() { if let Some(eh_catch_typeinfo) = self.eh_catch_typeinfo.get() {
return eh_catch_typeinfo; return eh_catch_typeinfo;
} }

View file

@ -5,7 +5,6 @@
//! This API is completely unstable and subject to change. //! This API is completely unstable and subject to change.
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![feature(crate_visibility_modifier)]
#![feature(let_chains)] #![feature(let_chains)]
#![feature(let_else)] #![feature(let_else)]
#![feature(extern_types)] #![feature(extern_types)]

View file

@ -775,7 +775,7 @@ pub mod coverageinfo {
} }
impl CounterMappingRegion { impl CounterMappingRegion {
crate fn code_region( pub(crate) fn code_region(
counter: coverage_map::Counter, counter: coverage_map::Counter,
file_id: u32, file_id: u32,
start_line: u32, start_line: u32,
@ -799,7 +799,7 @@ pub mod coverageinfo {
// This function might be used in the future; the LLVM API is still evolving, as is coverage // This function might be used in the future; the LLVM API is still evolving, as is coverage
// support. // support.
#[allow(dead_code)] #[allow(dead_code)]
crate fn branch_region( pub(crate) fn branch_region(
counter: coverage_map::Counter, counter: coverage_map::Counter,
false_counter: coverage_map::Counter, false_counter: coverage_map::Counter,
file_id: u32, file_id: u32,
@ -824,7 +824,7 @@ pub mod coverageinfo {
// This function might be used in the future; the LLVM API is still evolving, as is coverage // This function might be used in the future; the LLVM API is still evolving, as is coverage
// support. // support.
#[allow(dead_code)] #[allow(dead_code)]
crate fn expansion_region( pub(crate) fn expansion_region(
file_id: u32, file_id: u32,
expanded_file_id: u32, expanded_file_id: u32,
start_line: u32, start_line: u32,
@ -848,7 +848,7 @@ pub mod coverageinfo {
// This function might be used in the future; the LLVM API is still evolving, as is coverage // This function might be used in the future; the LLVM API is still evolving, as is coverage
// support. // support.
#[allow(dead_code)] #[allow(dead_code)]
crate fn skipped_region( pub(crate) fn skipped_region(
file_id: u32, file_id: u32,
start_line: u32, start_line: u32,
start_col: u32, start_col: u32,
@ -871,7 +871,7 @@ pub mod coverageinfo {
// This function might be used in the future; the LLVM API is still evolving, as is coverage // This function might be used in the future; the LLVM API is still evolving, as is coverage
// support. // support.
#[allow(dead_code)] #[allow(dead_code)]
crate fn gap_region( pub(crate) fn gap_region(
counter: coverage_map::Counter, counter: coverage_map::Counter,
file_id: u32, file_id: u32,
start_line: u32, start_line: u32,

View file

@ -39,33 +39,33 @@ impl fmt::Debug for Type {
} }
impl<'ll> CodegenCx<'ll, '_> { impl<'ll> CodegenCx<'ll, '_> {
crate fn type_named_struct(&self, name: &str) -> &'ll Type { pub(crate) fn type_named_struct(&self, name: &str) -> &'ll Type {
let name = SmallCStr::new(name); let name = SmallCStr::new(name);
unsafe { llvm::LLVMStructCreateNamed(self.llcx, name.as_ptr()) } unsafe { llvm::LLVMStructCreateNamed(self.llcx, name.as_ptr()) }
} }
crate fn set_struct_body(&self, ty: &'ll Type, els: &[&'ll Type], packed: bool) { pub(crate) fn set_struct_body(&self, ty: &'ll Type, els: &[&'ll Type], packed: bool) {
unsafe { llvm::LLVMStructSetBody(ty, els.as_ptr(), els.len() as c_uint, packed as Bool) } unsafe { llvm::LLVMStructSetBody(ty, els.as_ptr(), els.len() as c_uint, packed as Bool) }
} }
crate fn type_void(&self) -> &'ll Type { pub(crate) fn type_void(&self) -> &'ll Type {
unsafe { llvm::LLVMVoidTypeInContext(self.llcx) } unsafe { llvm::LLVMVoidTypeInContext(self.llcx) }
} }
crate fn type_metadata(&self) -> &'ll Type { pub(crate) fn type_metadata(&self) -> &'ll Type {
unsafe { llvm::LLVMRustMetadataTypeInContext(self.llcx) } unsafe { llvm::LLVMRustMetadataTypeInContext(self.llcx) }
} }
///x Creates an integer type with the given number of bits, e.g., i24 ///x Creates an integer type with the given number of bits, e.g., i24
crate fn type_ix(&self, num_bits: u64) -> &'ll Type { pub(crate) fn type_ix(&self, num_bits: u64) -> &'ll Type {
unsafe { llvm::LLVMIntTypeInContext(self.llcx, num_bits as c_uint) } unsafe { llvm::LLVMIntTypeInContext(self.llcx, num_bits as c_uint) }
} }
crate fn type_vector(&self, ty: &'ll Type, len: u64) -> &'ll Type { pub(crate) fn type_vector(&self, ty: &'ll Type, len: u64) -> &'ll Type {
unsafe { llvm::LLVMVectorType(ty, len as c_uint) } unsafe { llvm::LLVMVectorType(ty, len as c_uint) }
} }
crate fn func_params_types(&self, ty: &'ll Type) -> Vec<&'ll Type> { pub(crate) fn func_params_types(&self, ty: &'ll Type) -> Vec<&'ll Type> {
unsafe { unsafe {
let n_args = llvm::LLVMCountParamTypes(ty) as usize; let n_args = llvm::LLVMCountParamTypes(ty) as usize;
let mut args = Vec::with_capacity(n_args); let mut args = Vec::with_capacity(n_args);
@ -75,11 +75,11 @@ impl<'ll> CodegenCx<'ll, '_> {
} }
} }
crate fn type_bool(&self) -> &'ll Type { pub(crate) fn type_bool(&self) -> &'ll Type {
self.type_i8() self.type_i8()
} }
crate fn type_int_from_ty(&self, t: ty::IntTy) -> &'ll Type { pub(crate) fn type_int_from_ty(&self, t: ty::IntTy) -> &'ll Type {
match t { match t {
ty::IntTy::Isize => self.type_isize(), ty::IntTy::Isize => self.type_isize(),
ty::IntTy::I8 => self.type_i8(), ty::IntTy::I8 => self.type_i8(),
@ -90,7 +90,7 @@ impl<'ll> CodegenCx<'ll, '_> {
} }
} }
crate fn type_uint_from_ty(&self, t: ty::UintTy) -> &'ll Type { pub(crate) fn type_uint_from_ty(&self, t: ty::UintTy) -> &'ll Type {
match t { match t {
ty::UintTy::Usize => self.type_isize(), ty::UintTy::Usize => self.type_isize(),
ty::UintTy::U8 => self.type_i8(), ty::UintTy::U8 => self.type_i8(),
@ -101,14 +101,14 @@ impl<'ll> CodegenCx<'ll, '_> {
} }
} }
crate fn type_float_from_ty(&self, t: ty::FloatTy) -> &'ll Type { pub(crate) fn type_float_from_ty(&self, t: ty::FloatTy) -> &'ll Type {
match t { match t {
ty::FloatTy::F32 => self.type_f32(), ty::FloatTy::F32 => self.type_f32(),
ty::FloatTy::F64 => self.type_f64(), ty::FloatTy::F64 => self.type_f64(),
} }
} }
crate fn type_pointee_for_align(&self, align: Align) -> &'ll Type { pub(crate) fn type_pointee_for_align(&self, align: Align) -> &'ll Type {
// FIXME(eddyb) We could find a better approximation if ity.align < align. // FIXME(eddyb) We could find a better approximation if ity.align < align.
let ity = Integer::approximate_align(self, align); let ity = Integer::approximate_align(self, align);
self.type_from_integer(ity) self.type_from_integer(ity)
@ -116,7 +116,7 @@ impl<'ll> CodegenCx<'ll, '_> {
/// Return a LLVM type that has at most the required alignment, /// Return a LLVM type that has at most the required alignment,
/// and exactly the required size, as a best-effort padding array. /// and exactly the required size, as a best-effort padding array.
crate fn type_padding_filler(&self, size: Size, align: Align) -> &'ll Type { pub(crate) fn type_padding_filler(&self, size: Size, align: Align) -> &'ll Type {
let unit = Integer::approximate_align(self, align); let unit = Integer::approximate_align(self, align);
let size = size.bytes(); let size = size.bytes();
let unit_size = unit.size().bytes(); let unit_size = unit.size().bytes();
@ -124,11 +124,11 @@ impl<'ll> CodegenCx<'ll, '_> {
self.type_array(self.type_from_integer(unit), size / unit_size) self.type_array(self.type_from_integer(unit), size / unit_size)
} }
crate fn type_variadic_func(&self, args: &[&'ll Type], ret: &'ll Type) -> &'ll Type { pub(crate) fn type_variadic_func(&self, args: &[&'ll Type], ret: &'ll Type) -> &'ll Type {
unsafe { llvm::LLVMFunctionType(ret, args.as_ptr(), args.len() as c_uint, True) } unsafe { llvm::LLVMFunctionType(ret, args.as_ptr(), args.len() as c_uint, True) }
} }
crate fn type_array(&self, ty: &'ll Type, len: u64) -> &'ll Type { pub(crate) fn type_array(&self, ty: &'ll Type, len: u64) -> &'ll Type {
unsafe { llvm::LLVMRustArrayType(ty, len) } unsafe { llvm::LLVMRustArrayType(ty, len) }
} }
} }

View file

@ -163,7 +163,7 @@ impl<K: Hash + Eq, V> interpret::AllocMap<K, V> for FxHashMap<K, V> {
} }
} }
crate type CompileTimeEvalContext<'mir, 'tcx> = pub(crate) type CompileTimeEvalContext<'mir, 'tcx> =
InterpCx<'mir, 'tcx, CompileTimeInterpreter<'mir, 'tcx>>; InterpCx<'mir, 'tcx, CompileTimeInterpreter<'mir, 'tcx>>;
#[derive(Debug, PartialEq, Eq, Copy, Clone)] #[derive(Debug, PartialEq, Eq, Copy, Clone)]

View file

@ -44,7 +44,7 @@ fn numeric_intrinsic<Tag>(name: Symbol, bits: u128, kind: Primitive) -> Scalar<T
/// The logic for all nullary intrinsics is implemented here. These intrinsics don't get evaluated /// The logic for all nullary intrinsics is implemented here. These intrinsics don't get evaluated
/// inside an `InterpCx` and instead have their value computed directly from rustc internal info. /// inside an `InterpCx` and instead have their value computed directly from rustc internal info.
crate fn eval_nullary_intrinsic<'tcx>( pub(crate) fn eval_nullary_intrinsic<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
param_env: ty::ParamEnv<'tcx>, param_env: ty::ParamEnv<'tcx>,
def_id: DefId, def_id: DefId,

View file

@ -15,7 +15,7 @@ use crate::interpret::{
impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
/// Walks up the callstack from the intrinsic's callsite, searching for the first callsite in a /// Walks up the callstack from the intrinsic's callsite, searching for the first callsite in a
/// frame which is not `#[track_caller]`. /// frame which is not `#[track_caller]`.
crate fn find_closest_untracked_caller_location(&self) -> Span { pub(crate) fn find_closest_untracked_caller_location(&self) -> Span {
for frame in self.stack().iter().rev() { for frame in self.stack().iter().rev() {
debug!("find_closest_untracked_caller_location: checking frame {:?}", frame.instance); debug!("find_closest_untracked_caller_location: checking frame {:?}", frame.instance);
@ -74,7 +74,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
} }
/// Allocate a `const core::panic::Location` with the provided filename and line/column numbers. /// Allocate a `const core::panic::Location` with the provided filename and line/column numbers.
crate fn alloc_caller_location( pub(crate) fn alloc_caller_location(
&mut self, &mut self,
filename: Symbol, filename: Symbol,
line: u32, line: u32,
@ -113,7 +113,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
location location
} }
crate fn location_triple_for_span(&self, span: Span) -> (Symbol, u32, u32) { pub(crate) fn location_triple_for_span(&self, span: Span) -> (Symbol, u32, u32) {
let topmost = span.ctxt().outer_expn().expansion_cause().unwrap_or(span); let topmost = span.ctxt().outer_expn().expansion_cause().unwrap_or(span);
let caller = self.tcx.sess.source_map().lookup_char_pos(topmost.lo()); let caller = self.tcx.sess.source_map().lookup_char_pos(topmost.lo());
( (

View file

@ -189,7 +189,7 @@ impl Write for AbsolutePathPrinter<'_> {
} }
/// Directly returns an `Allocation` containing an absolute path representation of the given type. /// Directly returns an `Allocation` containing an absolute path representation of the given type.
crate fn alloc_type_name<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> ConstAllocation<'tcx> { pub(crate) fn alloc_type_name<'tcx>(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> ConstAllocation<'tcx> {
let path = AbsolutePathPrinter { tcx, path: String::new() }.print_type(ty).unwrap().path; let path = AbsolutePathPrinter { tcx, path: String::new() }.print_type(ty).unwrap().path;
let alloc = Allocation::from_bytes_byte_aligned_immutable(path.into_bytes()); let alloc = Allocation::from_bytes_byte_aligned_immutable(path.into_bytes());
tcx.intern_const_alloc(alloc) tcx.intern_const_alloc(alloc)

View file

@ -29,5 +29,5 @@ pub use self::place::{MPlaceTy, MemPlace, MemPlaceMeta, Place, PlaceTy};
pub use self::validity::{CtfeValidationMode, RefTracking}; pub use self::validity::{CtfeValidationMode, RefTracking};
pub use self::visitor::{MutValueVisitor, Value, ValueVisitor}; pub use self::visitor::{MutValueVisitor, Value, ValueVisitor};
crate use self::intrinsics::eval_nullary_intrinsic; pub(crate) use self::intrinsics::eval_nullary_intrinsic;
use eval_context::{from_known_layout, mir_assign_valid_types}; use eval_context::{from_known_layout, mir_assign_valid_types};

View file

@ -643,7 +643,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
} }
} }
crate fn const_val_to_op( pub(crate) fn const_val_to_op(
&self, &self,
val_val: ConstValue<'tcx>, val_val: ConstValue<'tcx>,
ty: Ty<'tcx>, ty: Ty<'tcx>,

View file

@ -8,7 +8,7 @@ use std::ops::ControlFlow;
/// In case it does, returns a `TooGeneric` const eval error. Note that due to polymorphization /// In case it does, returns a `TooGeneric` const eval error. Note that due to polymorphization
/// types may be "concrete enough" even though they still contain generic parameters in /// types may be "concrete enough" even though they still contain generic parameters in
/// case these parameters are unused. /// case these parameters are unused.
crate fn ensure_monomorphic_enough<'tcx, T>(tcx: TyCtxt<'tcx>, ty: T) -> InterpResult<'tcx> pub(crate) fn ensure_monomorphic_enough<'tcx, T>(tcx: TyCtxt<'tcx>, ty: T) -> InterpResult<'tcx>
where where
T: TypeFoldable<'tcx>, T: TypeFoldable<'tcx>,
{ {

View file

@ -7,7 +7,6 @@ Rust MIR: a lowered representation of Rust.
#![feature(assert_matches)] #![feature(assert_matches)]
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(control_flow_enum)] #![feature(control_flow_enum)]
#![feature(crate_visibility_modifier)]
#![feature(decl_macro)] #![feature(decl_macro)]
#![feature(exact_size_is_empty)] #![feature(exact_size_is_empty)]
#![feature(let_else)] #![feature(let_else)]

View file

@ -90,7 +90,7 @@ pub trait AddSubdiagnostic {
pub struct Diagnostic { pub struct Diagnostic {
// NOTE(eddyb) this is private to disallow arbitrary after-the-fact changes, // NOTE(eddyb) this is private to disallow arbitrary after-the-fact changes,
// outside of what methods in this crate themselves allow. // outside of what methods in this crate themselves allow.
crate level: Level, pub(crate) level: Level,
pub message: Vec<(DiagnosticMessage, Style)>, pub message: Vec<(DiagnosticMessage, Style)>,
pub code: Option<DiagnosticId>, pub code: Option<DiagnosticId>,

View file

@ -88,7 +88,7 @@ mod sealed_level_is_error {
use crate::Level; use crate::Level;
/// Sealed helper trait for statically checking that a `Level` is an error. /// Sealed helper trait for statically checking that a `Level` is an error.
crate trait IsError<const L: Level> {} pub(crate) trait IsError<const L: Level> {}
impl IsError<{ Level::Bug }> for () {} impl IsError<{ Level::Bug }> for () {}
impl IsError<{ Level::DelayedBug }> for () {} impl IsError<{ Level::DelayedBug }> for () {}
@ -101,7 +101,7 @@ mod sealed_level_is_error {
impl<'a> DiagnosticBuilder<'a, ErrorGuaranteed> { impl<'a> DiagnosticBuilder<'a, ErrorGuaranteed> {
/// Convenience function for internal use, clients should use one of the /// Convenience function for internal use, clients should use one of the
/// `struct_*` methods on [`Handler`]. /// `struct_*` methods on [`Handler`].
crate fn new_guaranteeing_error<M: Into<DiagnosticMessage>, const L: Level>( pub(crate) fn new_guaranteeing_error<M: Into<DiagnosticMessage>, const L: Level>(
handler: &'a Handler, handler: &'a Handler,
message: M, message: M,
) -> Self ) -> Self
@ -168,7 +168,7 @@ impl EmissionGuarantee for ErrorGuaranteed {
impl<'a> DiagnosticBuilder<'a, ()> { impl<'a> DiagnosticBuilder<'a, ()> {
/// Convenience function for internal use, clients should use one of the /// Convenience function for internal use, clients should use one of the
/// `struct_*` methods on [`Handler`]. /// `struct_*` methods on [`Handler`].
crate fn new<M: Into<DiagnosticMessage>>( pub(crate) fn new<M: Into<DiagnosticMessage>>(
handler: &'a Handler, handler: &'a Handler,
level: Level, level: Level,
message: M, message: M,
@ -179,7 +179,7 @@ impl<'a> DiagnosticBuilder<'a, ()> {
/// Creates a new `DiagnosticBuilder` with an already constructed /// Creates a new `DiagnosticBuilder` with an already constructed
/// diagnostic. /// diagnostic.
crate fn new_diagnostic(handler: &'a Handler, diagnostic: Diagnostic) -> Self { pub(crate) fn new_diagnostic(handler: &'a Handler, diagnostic: Diagnostic) -> Self {
debug!("Created new diagnostic"); debug!("Created new diagnostic");
Self { Self {
inner: DiagnosticBuilderInner { inner: DiagnosticBuilderInner {
@ -210,14 +210,14 @@ impl EmissionGuarantee for () {
impl<'a> DiagnosticBuilder<'a, !> { impl<'a> DiagnosticBuilder<'a, !> {
/// Convenience function for internal use, clients should use one of the /// Convenience function for internal use, clients should use one of the
/// `struct_*` methods on [`Handler`]. /// `struct_*` methods on [`Handler`].
crate fn new_fatal(handler: &'a Handler, message: impl Into<DiagnosticMessage>) -> Self { pub(crate) fn new_fatal(handler: &'a Handler, message: impl Into<DiagnosticMessage>) -> Self {
let diagnostic = Diagnostic::new_with_code(Level::Fatal, None, message); let diagnostic = Diagnostic::new_with_code(Level::Fatal, None, message);
Self::new_diagnostic_fatal(handler, diagnostic) Self::new_diagnostic_fatal(handler, diagnostic)
} }
/// Creates a new `DiagnosticBuilder` with an already constructed /// Creates a new `DiagnosticBuilder` with an already constructed
/// diagnostic. /// diagnostic.
crate fn new_diagnostic_fatal(handler: &'a Handler, diagnostic: Diagnostic) -> Self { pub(crate) fn new_diagnostic_fatal(handler: &'a Handler, diagnostic: Diagnostic) -> Self {
debug!("Created new diagnostic"); debug!("Created new diagnostic");
Self { Self {
inner: DiagnosticBuilderInner { inner: DiagnosticBuilderInner {

View file

@ -3,7 +3,6 @@
//! This module contains the code for creating and emitting diagnostics. //! This module contains the code for creating and emitting diagnostics.
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![feature(crate_visibility_modifier)]
#![feature(drain_filter)] #![feature(drain_filter)]
#![feature(backtrace)] #![feature(backtrace)]
#![feature(if_let_guard)] #![feature(if_let_guard)]

View file

@ -28,7 +28,7 @@ use std::iter;
use std::path::PathBuf; use std::path::PathBuf;
use std::rc::Rc; use std::rc::Rc;
crate use rustc_span::hygiene::MacroKind; pub(crate) use rustc_span::hygiene::MacroKind;
// When adding new variants, make sure to // When adding new variants, make sure to
// adjust the `visit_*` / `flat_map_*` calls in `InvocationCollector` // adjust the `visit_*` / `flat_map_*` calls in `InvocationCollector`

View file

@ -347,7 +347,7 @@ impl<'a> StripUnconfigured<'a> {
/// Gives a compiler warning when the `cfg_attr` contains no attributes and /// Gives a compiler warning when the `cfg_attr` contains no attributes and
/// is in the original source file. Gives a compiler error if the syntax of /// is in the original source file. Gives a compiler error if the syntax of
/// the attribute is incorrect. /// the attribute is incorrect.
crate fn expand_cfg_attr(&self, attr: Attribute, recursive: bool) -> Vec<Attribute> { pub(crate) fn expand_cfg_attr(&self, attr: Attribute, recursive: bool) -> Vec<Attribute> {
let Some((cfg_predicate, expanded_attrs)) = let Some((cfg_predicate, expanded_attrs)) =
rustc_parse::parse_cfg_attr(&attr, &self.sess.parse_sess) else { rustc_parse::parse_cfg_attr(&attr, &self.sess.parse_sess) else {
return vec![]; return vec![];
@ -451,7 +451,7 @@ impl<'a> StripUnconfigured<'a> {
attrs.iter().all(|attr| !is_cfg(attr) || self.cfg_true(attr)) attrs.iter().all(|attr| !is_cfg(attr) || self.cfg_true(attr))
} }
crate fn cfg_true(&self, attr: &Attribute) -> bool { pub(crate) fn cfg_true(&self, attr: &Attribute) -> bool {
let meta_item = match validate_attr::parse_meta(&self.sess.parse_sess, attr) { let meta_item = match validate_attr::parse_meta(&self.sess.parse_sess, attr) {
Ok(meta_item) => meta_item, Ok(meta_item) => meta_item,
Err(mut err) => { Err(mut err) => {
@ -465,7 +465,7 @@ impl<'a> StripUnconfigured<'a> {
} }
/// If attributes are not allowed on expressions, emit an error for `attr` /// If attributes are not allowed on expressions, emit an error for `attr`
crate fn maybe_emit_expr_attr_err(&self, attr: &Attribute) { pub(crate) fn maybe_emit_expr_attr_err(&self, attr: &Attribute) {
if !self.features.map_or(true, |features| features.stmt_expr_attributes) { if !self.features.map_or(true, |features| features.stmt_expr_attributes) {
let mut err = feature_err( let mut err = feature_err(
&self.sess.parse_sess, &self.sess.parse_sess,

View file

@ -214,7 +214,7 @@ pub enum SupportsMacroExpansion {
} }
impl AstFragmentKind { impl AstFragmentKind {
crate fn dummy(self, span: Span) -> AstFragment { pub(crate) fn dummy(self, span: Span) -> AstFragment {
self.make_from(DummyResult::any(span)).expect("couldn't create a dummy AST fragment") self.make_from(DummyResult::any(span)).expect("couldn't create a dummy AST fragment")
} }

View file

@ -1,7 +1,6 @@
#![allow(rustc::potential_query_instability)] #![allow(rustc::potential_query_instability)]
#![feature(associated_type_bounds)] #![feature(associated_type_bounds)]
#![feature(associated_type_defaults)] #![feature(associated_type_defaults)]
#![feature(crate_visibility_modifier)]
#![feature(if_let_guard)] #![feature(if_let_guard)]
#![feature(let_chains)] #![feature(let_chains)]
#![feature(let_else)] #![feature(let_else)]
@ -21,7 +20,7 @@ mod placeholders;
mod proc_macro_server; mod proc_macro_server;
pub use mbe::macro_rules::compile_declarative_macro; pub use mbe::macro_rules::compile_declarative_macro;
crate use rustc_span::hygiene; pub(crate) use rustc_span::hygiene;
pub mod base; pub mod base;
pub mod build; pub mod build;
#[macro_use] #[macro_use]
@ -30,7 +29,7 @@ pub mod expand;
pub mod module; pub mod module;
pub mod proc_macro; pub mod proc_macro;
crate mod mbe; pub(crate) mod mbe;
// HACK(Centril, #64197): These shouldn't really be here. // HACK(Centril, #64197): These shouldn't really be here.
// Rather, they should be with their respective modules which are defined in other crates. // Rather, they should be with their respective modules which are defined in other crates.

View file

@ -3,12 +3,12 @@
//! why we call this module `mbe`. For external documentation, prefer the //! why we call this module `mbe`. For external documentation, prefer the
//! official terminology: "declarative macros". //! official terminology: "declarative macros".
crate mod macro_check; pub(crate) mod macro_check;
crate mod macro_parser; pub(crate) mod macro_parser;
crate mod macro_rules; pub(crate) mod macro_rules;
crate mod metavar_expr; pub(crate) mod metavar_expr;
crate mod quoted; pub(crate) mod quoted;
crate mod transcribe; pub(crate) mod transcribe;
use metavar_expr::MetaVarExpr; use metavar_expr::MetaVarExpr;
use rustc_ast::token::{Delimiter, NonterminalKind, Token, TokenKind}; use rustc_ast::token::{Delimiter, NonterminalKind, Token, TokenKind};

View file

@ -70,8 +70,8 @@
//! eof: [a $( a )* a b ·] //! eof: [a $( a )* a b ·]
//! ``` //! ```
crate use NamedMatch::*; pub(crate) use NamedMatch::*;
crate use ParseResult::*; pub(crate) use ParseResult::*;
use crate::mbe::{KleeneOp, TokenTree}; use crate::mbe::{KleeneOp, TokenTree};
@ -262,7 +262,7 @@ enum EofMatcherPositions {
} }
/// Represents the possible results of an attempted parse. /// Represents the possible results of an attempted parse.
crate enum ParseResult<T> { pub(crate) enum ParseResult<T> {
/// Parsed successfully. /// Parsed successfully.
Success(T), Success(T),
/// Arm failed to match. If the second parameter is `token::Eof`, it indicates an unexpected /// Arm failed to match. If the second parameter is `token::Eof`, it indicates an unexpected
@ -276,7 +276,7 @@ crate enum ParseResult<T> {
/// A `ParseResult` where the `Success` variant contains a mapping of /// A `ParseResult` where the `Success` variant contains a mapping of
/// `MacroRulesNormalizedIdent`s to `NamedMatch`es. This represents the mapping /// `MacroRulesNormalizedIdent`s to `NamedMatch`es. This represents the mapping
/// of metavars to the token trees they bind to. /// of metavars to the token trees they bind to.
crate type NamedParseResult = ParseResult<FxHashMap<MacroRulesNormalizedIdent, NamedMatch>>; pub(crate) type NamedParseResult = ParseResult<FxHashMap<MacroRulesNormalizedIdent, NamedMatch>>;
/// Count how many metavars declarations are in `matcher`. /// Count how many metavars declarations are in `matcher`.
pub(super) fn count_metavar_decls(matcher: &[TokenTree]) -> usize { pub(super) fn count_metavar_decls(matcher: &[TokenTree]) -> usize {
@ -340,7 +340,7 @@ pub(super) fn count_metavar_decls(matcher: &[TokenTree]) -> usize {
/// ]) /// ])
/// ``` /// ```
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
crate enum NamedMatch { pub(crate) enum NamedMatch {
MatchedSeq(Vec<NamedMatch>), MatchedSeq(Vec<NamedMatch>),
// A metavar match of type `tt`. // A metavar match of type `tt`.

View file

@ -33,7 +33,7 @@ use std::collections::hash_map::Entry;
use std::{mem, slice}; use std::{mem, slice};
use tracing::debug; use tracing::debug;
crate struct ParserAnyMacro<'a> { pub(crate) struct ParserAnyMacro<'a> {
parser: Parser<'a>, parser: Parser<'a>,
/// Span of the expansion site of the macro this parser is for /// Span of the expansion site of the macro this parser is for
@ -47,7 +47,7 @@ crate struct ParserAnyMacro<'a> {
is_local: bool, is_local: bool,
} }
crate fn annotate_err_with_kind(err: &mut Diagnostic, kind: AstFragmentKind, span: Span) { pub(crate) fn annotate_err_with_kind(err: &mut Diagnostic, kind: AstFragmentKind, span: Span) {
match kind { match kind {
AstFragmentKind::Ty => { AstFragmentKind::Ty => {
err.span_label(span, "this macro call doesn't expand to a type"); err.span_label(span, "this macro call doesn't expand to a type");
@ -113,7 +113,7 @@ fn emit_frag_parse_err(
} }
impl<'a> ParserAnyMacro<'a> { impl<'a> ParserAnyMacro<'a> {
crate fn make(mut self: Box<ParserAnyMacro<'a>>, kind: AstFragmentKind) -> AstFragment { pub(crate) fn make(mut self: Box<ParserAnyMacro<'a>>, kind: AstFragmentKind) -> AstFragment {
let ParserAnyMacro { let ParserAnyMacro {
site_span, site_span,
macro_ident, macro_ident,

View file

@ -9,7 +9,7 @@ use rustc_span::Span;
/// A meta-variable expression, for expansions based on properties of meta-variables. /// A meta-variable expression, for expansions based on properties of meta-variables.
#[derive(Debug, Clone, PartialEq, Encodable, Decodable)] #[derive(Debug, Clone, PartialEq, Encodable, Decodable)]
crate enum MetaVarExpr { pub(crate) enum MetaVarExpr {
/// The number of repetitions of an identifier, optionally limited to a number /// The number of repetitions of an identifier, optionally limited to a number
/// of outer-most repetition depths. If the depth limit is `None` then the depth is unlimited. /// of outer-most repetition depths. If the depth limit is `None` then the depth is unlimited.
Count(Ident, Option<usize>), Count(Ident, Option<usize>),
@ -28,7 +28,7 @@ crate enum MetaVarExpr {
impl MetaVarExpr { impl MetaVarExpr {
/// Attempt to parse a meta-variable expression from a token stream. /// Attempt to parse a meta-variable expression from a token stream.
crate fn parse<'sess>( pub(crate) fn parse<'sess>(
input: &TokenStream, input: &TokenStream,
outer_span: Span, outer_span: Span,
sess: &'sess ParseSess, sess: &'sess ParseSess,
@ -62,7 +62,7 @@ impl MetaVarExpr {
Ok(rslt) Ok(rslt)
} }
crate fn ident(&self) -> Option<Ident> { pub(crate) fn ident(&self) -> Option<Ident> {
match *self { match *self {
MetaVarExpr::Count(ident, _) | MetaVarExpr::Ignore(ident) => Some(ident), MetaVarExpr::Count(ident, _) | MetaVarExpr::Ignore(ident) => Some(ident),
MetaVarExpr::Index(..) | MetaVarExpr::Length(..) => None, MetaVarExpr::Index(..) | MetaVarExpr::Length(..) => None,

View file

@ -26,7 +26,7 @@ pub struct ModulePathSuccess {
pub dir_ownership: DirOwnership, pub dir_ownership: DirOwnership,
} }
crate struct ParsedExternalMod { pub(crate) struct ParsedExternalMod {
pub items: Vec<P<Item>>, pub items: Vec<P<Item>>,
pub spans: ModSpans, pub spans: ModSpans,
pub file_path: PathBuf, pub file_path: PathBuf,
@ -42,7 +42,7 @@ pub enum ModError<'a> {
ParserError(DiagnosticBuilder<'a, ErrorGuaranteed>), ParserError(DiagnosticBuilder<'a, ErrorGuaranteed>),
} }
crate fn parse_external_mod( pub(crate) fn parse_external_mod(
sess: &Session, sess: &Session,
ident: Ident, ident: Ident,
span: Span, // The span to blame on errors. span: Span, // The span to blame on errors.
@ -78,7 +78,7 @@ crate fn parse_external_mod(
ParsedExternalMod { items, spans, file_path, dir_path, dir_ownership } ParsedExternalMod { items, spans, file_path, dir_path, dir_ownership }
} }
crate fn mod_dir_path( pub(crate) fn mod_dir_path(
sess: &Session, sess: &Session,
ident: Ident, ident: Ident,
attrs: &[Attribute], attrs: &[Attribute],

View file

@ -22,7 +22,7 @@ fn string_to_parser(ps: &ParseSess, source_str: String) -> Parser<'_> {
new_parser_from_source_str(ps, PathBuf::from("bogofile").into(), source_str) new_parser_from_source_str(ps, PathBuf::from("bogofile").into(), source_str)
} }
crate fn with_error_checking_parse<'a, T, F>(s: String, ps: &'a ParseSess, f: F) -> T pub(crate) fn with_error_checking_parse<'a, T, F>(s: String, ps: &'a ParseSess, f: F) -> T
where where
F: FnOnce(&mut Parser<'a>) -> PResult<'a, T>, F: FnOnce(&mut Parser<'a>) -> PResult<'a, T>,
{ {
@ -33,7 +33,7 @@ where
} }
/// Maps a string to tts, using a made-up filename. /// Maps a string to tts, using a made-up filename.
crate fn string_to_stream(source_str: String) -> TokenStream { pub(crate) fn string_to_stream(source_str: String) -> TokenStream {
let ps = ParseSess::new(FilePathMapping::empty()); let ps = ParseSess::new(FilePathMapping::empty());
source_file_to_stream( source_file_to_stream(
&ps, &ps,
@ -44,7 +44,7 @@ crate fn string_to_stream(source_str: String) -> TokenStream {
} }
/// Parses a string, returns a crate. /// Parses a string, returns a crate.
crate fn string_to_crate(source_str: String) -> ast::Crate { pub(crate) fn string_to_crate(source_str: String) -> ast::Crate {
let ps = ParseSess::new(FilePathMapping::empty()); let ps = ParseSess::new(FilePathMapping::empty());
with_error_checking_parse(source_str, &ps, |p| p.parse_crate_mod()) with_error_checking_parse(source_str, &ps, |p| p.parse_crate_mod())
} }
@ -53,7 +53,7 @@ crate fn string_to_crate(source_str: String) -> ast::Crate {
/// may be deleted or replaced with other whitespace to match the pattern. /// may be deleted or replaced with other whitespace to match the pattern.
/// This function is relatively Unicode-ignorant; fortunately, the careful design /// This function is relatively Unicode-ignorant; fortunately, the careful design
/// of UTF-8 mitigates this ignorance. It doesn't do NKF-normalization(?). /// of UTF-8 mitigates this ignorance. It doesn't do NKF-normalization(?).
crate fn matches_codepattern(a: &str, b: &str) -> bool { pub(crate) fn matches_codepattern(a: &str, b: &str) -> bool {
let mut a_iter = a.chars().peekable(); let mut a_iter = a.chars().peekable();
let mut b_iter = b.chars().peekable(); let mut b_iter = b.chars().peekable();
@ -109,7 +109,7 @@ struct SpanLabel {
label: &'static str, label: &'static str,
} }
crate struct Shared<T: Write> { pub(crate) struct Shared<T: Write> {
pub data: Arc<Mutex<T>>, pub data: Arc<Mutex<T>>,
} }

View file

@ -1,6 +1,6 @@
use crate::def::{CtorKind, DefKind, Res}; use crate::def::{CtorKind, DefKind, Res};
use crate::def_id::DefId; use crate::def_id::DefId;
crate use crate::hir_id::{HirId, ItemLocalId}; pub(crate) use crate::hir_id::{HirId, ItemLocalId};
use crate::intravisit::FnKind; use crate::intravisit::FnKind;
use crate::LangItem; use crate::LangItem;

View file

@ -4,7 +4,6 @@
#![feature(associated_type_defaults)] #![feature(associated_type_defaults)]
#![feature(const_btree_new)] #![feature(const_btree_new)]
#![feature(crate_visibility_modifier)]
#![feature(let_else)] #![feature(let_else)]
#![feature(once_cell)] #![feature(once_cell)]
#![feature(min_specialization)] #![feature(min_specialization)]

View file

@ -2705,7 +2705,7 @@ impl SymbolName {
} }
impl ClashingExternDeclarations { impl ClashingExternDeclarations {
crate fn new() -> Self { pub(crate) fn new() -> Self {
ClashingExternDeclarations { seen_decls: FxHashMap::default() } ClashingExternDeclarations { seen_decls: FxHashMap::default() }
} }
/// Insert a new foreign item into the seen set. If a symbol with the same name already exists /// Insert a new foreign item into the seen set. If a symbol with the same name already exists

View file

@ -34,7 +34,7 @@ use tracing::debug;
/// Extract the `LintStore` from the query context. /// Extract the `LintStore` from the query context.
/// This function exists because we've erased `LintStore` as `dyn Any` in the context. /// This function exists because we've erased `LintStore` as `dyn Any` in the context.
crate fn unerased_lint_store(tcx: TyCtxt<'_>) -> &LintStore { pub(crate) fn unerased_lint_store(tcx: TyCtxt<'_>) -> &LintStore {
let store: &dyn Any = &*tcx.lint_store; let store: &dyn Any = &*tcx.lint_store;
store.downcast_ref().unwrap() store.downcast_ref().unwrap()
} }

View file

@ -30,7 +30,6 @@
#![feature(array_windows)] #![feature(array_windows)]
#![feature(box_patterns)] #![feature(box_patterns)]
#![feature(control_flow_enum)] #![feature(control_flow_enum)]
#![feature(crate_visibility_modifier)]
#![feature(if_let_guard)] #![feature(if_let_guard)]
#![feature(iter_intersperse)] #![feature(iter_intersperse)]
#![feature(iter_order_by)] #![feature(iter_order_by)]

View file

@ -651,7 +651,7 @@ declare_lint! {
declare_lint_pass!(ImproperCTypesDefinitions => [IMPROPER_CTYPES_DEFINITIONS]); declare_lint_pass!(ImproperCTypesDefinitions => [IMPROPER_CTYPES_DEFINITIONS]);
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
crate enum CItemKind { pub(crate) enum CItemKind {
Declaration, Declaration,
Definition, Definition,
} }
@ -667,7 +667,10 @@ enum FfiResult<'tcx> {
FfiUnsafe { ty: Ty<'tcx>, reason: String, help: Option<String> }, FfiUnsafe { ty: Ty<'tcx>, reason: String, help: Option<String> },
} }
crate fn nonnull_optimization_guaranteed<'tcx>(tcx: TyCtxt<'tcx>, def: ty::AdtDef<'tcx>) -> bool { pub(crate) fn nonnull_optimization_guaranteed<'tcx>(
tcx: TyCtxt<'tcx>,
def: ty::AdtDef<'tcx>,
) -> bool {
tcx.has_attr(def.did(), sym::rustc_nonnull_optimization_guaranteed) tcx.has_attr(def.did(), sym::rustc_nonnull_optimization_guaranteed)
} }
@ -766,7 +769,7 @@ fn get_nullable_type<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> Option<Ty<'t
/// Currently restricted to function pointers, boxes, references, `core::num::NonZero*`, /// Currently restricted to function pointers, boxes, references, `core::num::NonZero*`,
/// `core::ptr::NonNull`, and `#[repr(transparent)]` newtypes. /// `core::ptr::NonNull`, and `#[repr(transparent)]` newtypes.
/// FIXME: This duplicates code in codegen. /// FIXME: This duplicates code in codegen.
crate fn repr_nullable_ptr<'tcx>( pub(crate) fn repr_nullable_ptr<'tcx>(
cx: &LateContext<'tcx>, cx: &LateContext<'tcx>,
ty: Ty<'tcx>, ty: Ty<'tcx>,
ckind: CItemKind, ckind: CItemKind,

View file

@ -70,7 +70,7 @@ pub enum LoadedMacro {
ProcMacro(SyntaxExtension), ProcMacro(SyntaxExtension),
} }
crate struct Library { pub(crate) struct Library {
pub source: CrateSource, pub source: CrateSource,
pub metadata: MetadataBlob, pub metadata: MetadataBlob,
} }
@ -82,7 +82,7 @@ enum LoadResult {
/// A reference to `CrateMetadata` that can also give access to whole crate store when necessary. /// A reference to `CrateMetadata` that can also give access to whole crate store when necessary.
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
crate struct CrateMetadataRef<'a> { pub(crate) struct CrateMetadataRef<'a> {
pub cdata: &'a CrateMetadata, pub cdata: &'a CrateMetadata,
pub cstore: &'a CStore, pub cstore: &'a CStore,
} }
@ -133,7 +133,7 @@ impl CStore {
CrateNum::new(self.metas.len() - 1) CrateNum::new(self.metas.len() - 1)
} }
crate fn get_crate_data(&self, cnum: CrateNum) -> CrateMetadataRef<'_> { pub(crate) fn get_crate_data(&self, cnum: CrateNum) -> CrateMetadataRef<'_> {
let cdata = self.metas[cnum] let cdata = self.metas[cnum]
.as_ref() .as_ref()
.unwrap_or_else(|| panic!("Failed to get crate data for {:?}", cnum)); .unwrap_or_else(|| panic!("Failed to get crate data for {:?}", cnum));
@ -145,7 +145,7 @@ impl CStore {
self.metas[cnum] = Some(Lrc::new(data)); self.metas[cnum] = Some(Lrc::new(data));
} }
crate fn iter_crate_data(&self) -> impl Iterator<Item = (CrateNum, &CrateMetadata)> { pub(crate) fn iter_crate_data(&self) -> impl Iterator<Item = (CrateNum, &CrateMetadata)> {
self.metas self.metas
.iter_enumerated() .iter_enumerated()
.filter_map(|(cnum, data)| data.as_ref().map(|data| (cnum, &**data))) .filter_map(|(cnum, data)| data.as_ref().map(|data| (cnum, &**data)))
@ -164,7 +164,7 @@ impl CStore {
} }
} }
crate fn crate_dependencies_in_postorder(&self, cnum: CrateNum) -> Vec<CrateNum> { pub(crate) fn crate_dependencies_in_postorder(&self, cnum: CrateNum) -> Vec<CrateNum> {
let mut deps = Vec::new(); let mut deps = Vec::new();
if cnum == LOCAL_CRATE { if cnum == LOCAL_CRATE {
for (cnum, _) in self.iter_crate_data() { for (cnum, _) in self.iter_crate_data() {
@ -182,15 +182,15 @@ impl CStore {
deps deps
} }
crate fn injected_panic_runtime(&self) -> Option<CrateNum> { pub(crate) fn injected_panic_runtime(&self) -> Option<CrateNum> {
self.injected_panic_runtime self.injected_panic_runtime
} }
crate fn allocator_kind(&self) -> Option<AllocatorKind> { pub(crate) fn allocator_kind(&self) -> Option<AllocatorKind> {
self.allocator_kind self.allocator_kind
} }
crate fn has_global_allocator(&self) -> bool { pub(crate) fn has_global_allocator(&self) -> bool {
self.has_global_allocator self.has_global_allocator
} }

View file

@ -62,7 +62,7 @@ use rustc_session::cstore::CrateDepKind;
use rustc_session::cstore::LinkagePreference::{self, RequireDynamic, RequireStatic}; use rustc_session::cstore::LinkagePreference::{self, RequireDynamic, RequireStatic};
use rustc_target::spec::PanicStrategy; use rustc_target::spec::PanicStrategy;
crate fn calculate(tcx: TyCtxt<'_>) -> Dependencies { pub(crate) fn calculate(tcx: TyCtxt<'_>) -> Dependencies {
tcx.sess tcx.sess
.crate_types() .crate_types()
.iter() .iter()

View file

@ -3,7 +3,7 @@ use rustc_hir::def::DefKind;
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
use rustc_session::cstore::ForeignModule; use rustc_session::cstore::ForeignModule;
crate fn collect(tcx: TyCtxt<'_>) -> Vec<ForeignModule> { pub(crate) fn collect(tcx: TyCtxt<'_>) -> Vec<ForeignModule> {
let mut modules = Vec::new(); let mut modules = Vec::new();
for id in tcx.hir().items() { for id in tcx.hir().items() {
if !matches!(tcx.def_kind(id.def_id), DefKind::ForeignMod) { if !matches!(tcx.def_kind(id.def_id), DefKind::ForeignMod) {

View file

@ -1,5 +1,4 @@
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![feature(crate_visibility_modifier)]
#![feature(decl_macro)] #![feature(decl_macro)]
#![feature(drain_filter)] #![feature(drain_filter)]
#![feature(generators)] #![feature(generators)]

View file

@ -239,7 +239,7 @@ use std::{cmp, fmt, fs};
use tracing::{debug, info}; use tracing::{debug, info};
#[derive(Clone)] #[derive(Clone)]
crate struct CrateLocator<'a> { pub(crate) struct CrateLocator<'a> {
// Immutable per-session configuration. // Immutable per-session configuration.
only_needs_metadata: bool, only_needs_metadata: bool,
sysroot: &'a Path, sysroot: &'a Path,
@ -260,19 +260,19 @@ crate struct CrateLocator<'a> {
} }
#[derive(Clone)] #[derive(Clone)]
crate struct CratePaths { pub(crate) struct CratePaths {
name: Symbol, name: Symbol,
source: CrateSource, source: CrateSource,
} }
impl CratePaths { impl CratePaths {
crate fn new(name: Symbol, source: CrateSource) -> CratePaths { pub(crate) fn new(name: Symbol, source: CrateSource) -> CratePaths {
CratePaths { name, source } CratePaths { name, source }
} }
} }
#[derive(Copy, Clone, PartialEq)] #[derive(Copy, Clone, PartialEq)]
crate enum CrateFlavor { pub(crate) enum CrateFlavor {
Rlib, Rlib,
Rmeta, Rmeta,
Dylib, Dylib,
@ -289,7 +289,7 @@ impl fmt::Display for CrateFlavor {
} }
impl<'a> CrateLocator<'a> { impl<'a> CrateLocator<'a> {
crate fn new( pub(crate) fn new(
sess: &'a Session, sess: &'a Session,
metadata_loader: &'a dyn MetadataLoader, metadata_loader: &'a dyn MetadataLoader,
crate_name: Symbol, crate_name: Symbol,
@ -344,7 +344,7 @@ impl<'a> CrateLocator<'a> {
} }
} }
crate fn reset(&mut self) { pub(crate) fn reset(&mut self) {
self.crate_rejections.via_hash.clear(); self.crate_rejections.via_hash.clear();
self.crate_rejections.via_triple.clear(); self.crate_rejections.via_triple.clear();
self.crate_rejections.via_kind.clear(); self.crate_rejections.via_kind.clear();
@ -353,7 +353,7 @@ impl<'a> CrateLocator<'a> {
self.crate_rejections.via_invalid.clear(); self.crate_rejections.via_invalid.clear();
} }
crate fn maybe_load_library_crate(&mut self) -> Result<Option<Library>, CrateError> { pub(crate) fn maybe_load_library_crate(&mut self) -> Result<Option<Library>, CrateError> {
if !self.exact_paths.is_empty() { if !self.exact_paths.is_empty() {
return self.find_commandline_library(); return self.find_commandline_library();
} }
@ -728,7 +728,7 @@ impl<'a> CrateLocator<'a> {
Ok(self.extract_lib(rlibs, rmetas, dylibs)?.map(|(_, lib)| lib)) Ok(self.extract_lib(rlibs, rmetas, dylibs)?.map(|(_, lib)| lib))
} }
crate fn into_error(self, root: Option<CratePaths>) -> CrateError { pub(crate) fn into_error(self, root: Option<CratePaths>) -> CrateError {
CrateError::LocatorCombined(CombinedLocatorError { CrateError::LocatorCombined(CombinedLocatorError {
crate_name: self.crate_name, crate_name: self.crate_name,
root, root,
@ -894,7 +894,7 @@ struct CrateRejections {
/// Candidate rejection reasons collected during crate search. /// Candidate rejection reasons collected during crate search.
/// If no candidate is accepted, then these reasons are presented to the user, /// If no candidate is accepted, then these reasons are presented to the user,
/// otherwise they are ignored. /// otherwise they are ignored.
crate struct CombinedLocatorError { pub(crate) struct CombinedLocatorError {
crate_name: Symbol, crate_name: Symbol,
root: Option<CratePaths>, root: Option<CratePaths>,
triple: TargetTriple, triple: TargetTriple,
@ -903,7 +903,7 @@ crate struct CombinedLocatorError {
crate_rejections: CrateRejections, crate_rejections: CrateRejections,
} }
crate enum CrateError { pub(crate) enum CrateError {
NonAsciiName(Symbol), NonAsciiName(Symbol),
ExternLocationNotExist(Symbol, PathBuf), ExternLocationNotExist(Symbol, PathBuf),
ExternLocationNotFile(Symbol, PathBuf), ExternLocationNotFile(Symbol, PathBuf),
@ -937,7 +937,7 @@ impl fmt::Display for MetadataError<'_> {
} }
impl CrateError { impl CrateError {
crate fn report(self, sess: &Session, span: Span, missing_core: bool) { pub(crate) fn report(self, sess: &Session, span: Span, missing_core: bool) {
let mut diag = match self { let mut diag = match self {
CrateError::NonAsciiName(crate_name) => sess.struct_span_err( CrateError::NonAsciiName(crate_name) => sess.struct_span_err(
span, span,

View file

@ -12,7 +12,7 @@ use rustc_session::Session;
use rustc_span::symbol::{sym, Symbol}; use rustc_span::symbol::{sym, Symbol};
use rustc_target::spec::abi::Abi; use rustc_target::spec::abi::Abi;
crate fn collect(tcx: TyCtxt<'_>) -> Vec<NativeLib> { pub(crate) fn collect(tcx: TyCtxt<'_>) -> Vec<NativeLib> {
let mut collector = Collector { tcx, libs: Vec::new() }; let mut collector = Collector { tcx, libs: Vec::new() };
for id in tcx.hir().items() { for id in tcx.hir().items() {
collector.process_item(id); collector.process_item(id);
@ -21,7 +21,7 @@ crate fn collect(tcx: TyCtxt<'_>) -> Vec<NativeLib> {
collector.libs collector.libs
} }
crate fn relevant_lib(sess: &Session, lib: &NativeLib) -> bool { pub(crate) fn relevant_lib(sess: &Session, lib: &NativeLib) -> bool {
match lib.cfg { match lib.cfg {
Some(ref cfg) => attr::cfg_matches(cfg, &sess.parse_sess, CRATE_NODE_ID, None), Some(ref cfg) => attr::cfg_matches(cfg, &sess.parse_sess, CRATE_NODE_ID, None),
None => true, None => true,

View file

@ -57,7 +57,7 @@ mod cstore_impl;
/// A `MetadataBlob` internally is just a reference counted pointer to /// A `MetadataBlob` internally is just a reference counted pointer to
/// the actual data, so cloning it is cheap. /// the actual data, so cloning it is cheap.
#[derive(Clone)] #[derive(Clone)]
crate struct MetadataBlob(Lrc<MetadataRef>); pub(crate) struct MetadataBlob(Lrc<MetadataRef>);
// This is needed so we can create an OwningRef into the blob. // This is needed so we can create an OwningRef into the blob.
// The data behind a `MetadataBlob` has a stable address because it is // The data behind a `MetadataBlob` has a stable address because it is
@ -78,9 +78,9 @@ impl std::ops::Deref for MetadataBlob {
// local crate numbers (as generated during this session). Each external // local crate numbers (as generated during this session). Each external
// crate may refer to types in other external crates, and each has their // crate may refer to types in other external crates, and each has their
// own crate numbers. // own crate numbers.
crate type CrateNumMap = IndexVec<CrateNum, CrateNum>; pub(crate) type CrateNumMap = IndexVec<CrateNum, CrateNum>;
crate struct CrateMetadata { pub(crate) struct CrateMetadata {
/// The primary crate data - binary metadata blob. /// The primary crate data - binary metadata blob.
blob: MetadataBlob, blob: MetadataBlob,
@ -744,20 +744,20 @@ where
implement_ty_decoder!(DecodeContext<'a, 'tcx>); implement_ty_decoder!(DecodeContext<'a, 'tcx>);
impl<'tcx> MetadataBlob { impl<'tcx> MetadataBlob {
crate fn new(metadata_ref: MetadataRef) -> MetadataBlob { pub(crate) fn new(metadata_ref: MetadataRef) -> MetadataBlob {
MetadataBlob(Lrc::new(metadata_ref)) MetadataBlob(Lrc::new(metadata_ref))
} }
crate fn is_compatible(&self) -> bool { pub(crate) fn is_compatible(&self) -> bool {
self.blob().starts_with(METADATA_HEADER) self.blob().starts_with(METADATA_HEADER)
} }
crate fn get_rustc_version(&self) -> String { pub(crate) fn get_rustc_version(&self) -> String {
Lazy::<String>::from_position(NonZeroUsize::new(METADATA_HEADER.len() + 4).unwrap()) Lazy::<String>::from_position(NonZeroUsize::new(METADATA_HEADER.len() + 4).unwrap())
.decode(self) .decode(self)
} }
crate fn get_root(&self) -> CrateRoot<'tcx> { pub(crate) fn get_root(&self) -> CrateRoot<'tcx> {
let slice = &self.blob()[..]; let slice = &self.blob()[..];
let offset = METADATA_HEADER.len(); let offset = METADATA_HEADER.len();
let pos = (((slice[offset + 0] as u32) << 24) let pos = (((slice[offset + 0] as u32) << 24)
@ -767,7 +767,7 @@ impl<'tcx> MetadataBlob {
Lazy::<CrateRoot<'tcx>>::from_position(NonZeroUsize::new(pos).unwrap()).decode(self) Lazy::<CrateRoot<'tcx>>::from_position(NonZeroUsize::new(pos).unwrap()).decode(self)
} }
crate fn list_crate_metadata(&self, out: &mut dyn io::Write) -> io::Result<()> { pub(crate) fn list_crate_metadata(&self, out: &mut dyn io::Write) -> io::Result<()> {
let root = self.get_root(); let root = self.get_root();
writeln!(out, "Crate info:")?; writeln!(out, "Crate info:")?;
writeln!(out, "name {}{}", root.name, root.extra_filename)?; writeln!(out, "name {}{}", root.name, root.extra_filename)?;
@ -792,27 +792,27 @@ impl<'tcx> MetadataBlob {
} }
impl CrateRoot<'_> { impl CrateRoot<'_> {
crate fn is_proc_macro_crate(&self) -> bool { pub(crate) fn is_proc_macro_crate(&self) -> bool {
self.proc_macro_data.is_some() self.proc_macro_data.is_some()
} }
crate fn name(&self) -> Symbol { pub(crate) fn name(&self) -> Symbol {
self.name self.name
} }
crate fn hash(&self) -> Svh { pub(crate) fn hash(&self) -> Svh {
self.hash self.hash
} }
crate fn stable_crate_id(&self) -> StableCrateId { pub(crate) fn stable_crate_id(&self) -> StableCrateId {
self.stable_crate_id self.stable_crate_id
} }
crate fn triple(&self) -> &TargetTriple { pub(crate) fn triple(&self) -> &TargetTriple {
&self.triple &self.triple
} }
crate fn decode_crate_deps<'a>( pub(crate) fn decode_crate_deps<'a>(
&self, &self,
metadata: &'a MetadataBlob, metadata: &'a MetadataBlob,
) -> impl ExactSizeIterator<Item = CrateDep> + Captures<'a> { ) -> impl ExactSizeIterator<Item = CrateDep> + Captures<'a> {
@ -1759,7 +1759,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
} }
impl CrateMetadata { impl CrateMetadata {
crate fn new( pub(crate) fn new(
sess: &Session, sess: &Session,
cstore: &CStore, cstore: &CStore,
blob: MetadataBlob, blob: MetadataBlob,
@ -1819,15 +1819,15 @@ impl CrateMetadata {
cdata cdata
} }
crate fn dependencies(&self) -> LockGuard<'_, Vec<CrateNum>> { pub(crate) fn dependencies(&self) -> LockGuard<'_, Vec<CrateNum>> {
self.dependencies.borrow() self.dependencies.borrow()
} }
crate fn add_dependency(&self, cnum: CrateNum) { pub(crate) fn add_dependency(&self, cnum: CrateNum) {
self.dependencies.borrow_mut().push(cnum); self.dependencies.borrow_mut().push(cnum);
} }
crate fn update_extern_crate(&self, new_extern_crate: ExternCrate) -> bool { pub(crate) fn update_extern_crate(&self, new_extern_crate: ExternCrate) -> bool {
let mut extern_crate = self.extern_crate.borrow_mut(); let mut extern_crate = self.extern_crate.borrow_mut();
let update = Some(new_extern_crate.rank()) > extern_crate.as_ref().map(ExternCrate::rank); let update = Some(new_extern_crate.rank()) > extern_crate.as_ref().map(ExternCrate::rank);
if update { if update {
@ -1836,59 +1836,59 @@ impl CrateMetadata {
update update
} }
crate fn source(&self) -> &CrateSource { pub(crate) fn source(&self) -> &CrateSource {
&*self.source &*self.source
} }
crate fn dep_kind(&self) -> CrateDepKind { pub(crate) fn dep_kind(&self) -> CrateDepKind {
*self.dep_kind.lock() *self.dep_kind.lock()
} }
crate fn update_dep_kind(&self, f: impl FnOnce(CrateDepKind) -> CrateDepKind) { pub(crate) fn update_dep_kind(&self, f: impl FnOnce(CrateDepKind) -> CrateDepKind) {
self.dep_kind.with_lock(|dep_kind| *dep_kind = f(*dep_kind)) self.dep_kind.with_lock(|dep_kind| *dep_kind = f(*dep_kind))
} }
crate fn panic_strategy(&self) -> PanicStrategy { pub(crate) fn panic_strategy(&self) -> PanicStrategy {
self.root.panic_strategy self.root.panic_strategy
} }
crate fn needs_panic_runtime(&self) -> bool { pub(crate) fn needs_panic_runtime(&self) -> bool {
self.root.needs_panic_runtime self.root.needs_panic_runtime
} }
crate fn is_panic_runtime(&self) -> bool { pub(crate) fn is_panic_runtime(&self) -> bool {
self.root.panic_runtime self.root.panic_runtime
} }
crate fn is_profiler_runtime(&self) -> bool { pub(crate) fn is_profiler_runtime(&self) -> bool {
self.root.profiler_runtime self.root.profiler_runtime
} }
crate fn needs_allocator(&self) -> bool { pub(crate) fn needs_allocator(&self) -> bool {
self.root.needs_allocator self.root.needs_allocator
} }
crate fn has_global_allocator(&self) -> bool { pub(crate) fn has_global_allocator(&self) -> bool {
self.root.has_global_allocator self.root.has_global_allocator
} }
crate fn has_default_lib_allocator(&self) -> bool { pub(crate) fn has_default_lib_allocator(&self) -> bool {
self.root.has_default_lib_allocator self.root.has_default_lib_allocator
} }
crate fn is_proc_macro_crate(&self) -> bool { pub(crate) fn is_proc_macro_crate(&self) -> bool {
self.root.is_proc_macro_crate() self.root.is_proc_macro_crate()
} }
crate fn name(&self) -> Symbol { pub(crate) fn name(&self) -> Symbol {
self.root.name self.root.name
} }
crate fn stable_crate_id(&self) -> StableCrateId { pub(crate) fn stable_crate_id(&self) -> StableCrateId {
self.root.stable_crate_id self.root.stable_crate_id
} }
crate fn hash(&self) -> Svh { pub(crate) fn hash(&self) -> Svh {
self.root.hash self.root.hash
} }

View file

@ -6,7 +6,7 @@ use rustc_hir::def_path_hash_map::{Config as HashMapConfig, DefPathHashMap};
use rustc_serialize::{opaque, Decodable, Decoder, Encodable, Encoder}; use rustc_serialize::{opaque, Decodable, Decoder, Encodable, Encoder};
use rustc_span::def_id::{DefIndex, DefPathHash}; use rustc_span::def_id::{DefIndex, DefPathHash};
crate enum DefPathHashMapRef<'tcx> { pub(crate) enum DefPathHashMapRef<'tcx> {
OwnedFromMetadata(odht::HashTable<HashMapConfig, OwningRef<MetadataBlob, [u8]>>), OwnedFromMetadata(odht::HashTable<HashMapConfig, OwningRef<MetadataBlob, [u8]>>),
BorrowedFromTcx(&'tcx DefPathHashMap), BorrowedFromTcx(&'tcx DefPathHashMap),
} }

View file

@ -36,7 +36,7 @@ use std::num::NonZeroUsize;
pub use decoder::provide_extern; pub use decoder::provide_extern;
use decoder::DecodeContext; use decoder::DecodeContext;
crate use decoder::{CrateMetadata, CrateNumMap, MetadataBlob}; pub(crate) use decoder::{CrateMetadata, CrateNumMap, MetadataBlob};
use encoder::EncodeContext; use encoder::EncodeContext;
pub use encoder::{encode_metadata, EncodedMetadata}; pub use encoder::{encode_metadata, EncodedMetadata};
use rustc_span::hygiene::SyntaxContextData; use rustc_span::hygiene::SyntaxContextData;
@ -46,7 +46,7 @@ mod def_path_hash_map;
mod encoder; mod encoder;
mod table; mod table;
crate fn rustc_version() -> String { pub(crate) fn rustc_version() -> String {
format!("rustc {}", option_env!("CFG_VERSION").unwrap_or("unknown version")) format!("rustc {}", option_env!("CFG_VERSION").unwrap_or("unknown version"))
} }
@ -169,7 +169,7 @@ type ExpnDataTable = Lazy<Table<ExpnIndex, Lazy<ExpnData>>>;
type ExpnHashTable = Lazy<Table<ExpnIndex, Lazy<ExpnHash>>>; type ExpnHashTable = Lazy<Table<ExpnIndex, Lazy<ExpnHash>>>;
#[derive(MetadataEncodable, MetadataDecodable)] #[derive(MetadataEncodable, MetadataDecodable)]
crate struct ProcMacroData { pub(crate) struct ProcMacroData {
proc_macro_decls_static: DefIndex, proc_macro_decls_static: DefIndex,
stability: Option<attr::Stability>, stability: Option<attr::Stability>,
macros: Lazy<[DefIndex]>, macros: Lazy<[DefIndex]>,
@ -192,7 +192,7 @@ crate struct ProcMacroData {
/// a normal crate, much of what we serialized would be unusable in addition /// a normal crate, much of what we serialized would be unusable in addition
/// to being unused. /// to being unused.
#[derive(MetadataEncodable, MetadataDecodable)] #[derive(MetadataEncodable, MetadataDecodable)]
crate struct CrateRoot<'tcx> { pub(crate) struct CrateRoot<'tcx> {
name: Symbol, name: Symbol,
triple: TargetTriple, triple: TargetTriple,
extra_filename: String, extra_filename: String,
@ -245,7 +245,7 @@ crate struct CrateRoot<'tcx> {
/// This creates a type-safe way to enforce that we remap the CrateNum between the on-disk /// This creates a type-safe way to enforce that we remap the CrateNum between the on-disk
/// representation and the compilation session. /// representation and the compilation session.
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
crate struct RawDefId { pub(crate) struct RawDefId {
krate: u32, krate: u32,
index: u32, index: u32,
} }
@ -265,7 +265,7 @@ impl RawDefId {
} }
#[derive(Encodable, Decodable)] #[derive(Encodable, Decodable)]
crate struct CrateDep { pub(crate) struct CrateDep {
pub name: Symbol, pub name: Symbol,
pub hash: Svh, pub hash: Svh,
pub host_hash: Option<Svh>, pub host_hash: Option<Svh>,
@ -274,13 +274,13 @@ crate struct CrateDep {
} }
#[derive(MetadataEncodable, MetadataDecodable)] #[derive(MetadataEncodable, MetadataDecodable)]
crate struct TraitImpls { pub(crate) struct TraitImpls {
trait_id: (u32, DefIndex), trait_id: (u32, DefIndex),
impls: Lazy<[(DefIndex, Option<SimplifiedType>)]>, impls: Lazy<[(DefIndex, Option<SimplifiedType>)]>,
} }
#[derive(MetadataEncodable, MetadataDecodable)] #[derive(MetadataEncodable, MetadataDecodable)]
crate struct IncoherentImpls { pub(crate) struct IncoherentImpls {
self_ty: SimplifiedType, self_ty: SimplifiedType,
impls: Lazy<[DefIndex]>, impls: Lazy<[DefIndex]>,
} }
@ -289,7 +289,7 @@ crate struct IncoherentImpls {
macro_rules! define_tables { macro_rules! define_tables {
($($name:ident: Table<$IDX:ty, $T:ty>),+ $(,)?) => { ($($name:ident: Table<$IDX:ty, $T:ty>),+ $(,)?) => {
#[derive(MetadataEncodable, MetadataDecodable)] #[derive(MetadataEncodable, MetadataDecodable)]
crate struct LazyTables<'tcx> { pub(crate) struct LazyTables<'tcx> {
$($name: Lazy!(Table<$IDX, $T>)),+ $($name: Lazy!(Table<$IDX, $T>)),+
} }

View file

@ -195,13 +195,16 @@ rustc_dep_node_append!([define_dep_nodes!][ <'tcx>
// WARNING: `construct` is generic and does not know that `CompileCodegenUnit` takes `Symbol`s as keys. // WARNING: `construct` is generic and does not know that `CompileCodegenUnit` takes `Symbol`s as keys.
// Be very careful changing this type signature! // Be very careful changing this type signature!
crate fn make_compile_codegen_unit(tcx: TyCtxt<'_>, name: Symbol) -> DepNode { pub(crate) fn make_compile_codegen_unit(tcx: TyCtxt<'_>, name: Symbol) -> DepNode {
DepNode::construct(tcx, DepKind::CompileCodegenUnit, &name) DepNode::construct(tcx, DepKind::CompileCodegenUnit, &name)
} }
// WARNING: `construct` is generic and does not know that `CompileMonoItem` takes `MonoItem`s as keys. // WARNING: `construct` is generic and does not know that `CompileMonoItem` takes `MonoItem`s as keys.
// Be very careful changing this type signature! // Be very careful changing this type signature!
crate fn make_compile_mono_item<'tcx>(tcx: TyCtxt<'tcx>, mono_item: &MonoItem<'tcx>) -> DepNode { pub(crate) fn make_compile_mono_item<'tcx>(
tcx: TyCtxt<'tcx>,
mono_item: &MonoItem<'tcx>,
) -> DepNode {
DepNode::construct(tcx, DepKind::CompileMonoItem, mono_item) DepNode::construct(tcx, DepKind::CompileMonoItem, mono_item)
} }

View file

@ -12,7 +12,7 @@ pub use rustc_query_system::dep_graph::{
}; };
pub use dep_node::{label_strs, DepKind, DepKindStruct, DepNode, DepNodeExt}; pub use dep_node::{label_strs, DepKind, DepKindStruct, DepNode, DepNodeExt};
crate use dep_node::{make_compile_codegen_unit, make_compile_mono_item}; pub(crate) use dep_node::{make_compile_codegen_unit, make_compile_mono_item};
pub type DepGraph = rustc_query_system::dep_graph::DepGraph<DepKind>; pub type DepGraph = rustc_query_system::dep_graph::DepGraph<DepKind>;
pub type TaskDeps = rustc_query_system::dep_graph::TaskDeps<DepKind>; pub type TaskDeps = rustc_query_system::dep_graph::TaskDeps<DepKind>;

View file

@ -46,7 +46,6 @@
#![feature(min_specialization)] #![feature(min_specialization)]
#![feature(trusted_len)] #![feature(trusted_len)]
#![feature(type_alias_impl_trait)] #![feature(type_alias_impl_trait)]
#![feature(crate_visibility_modifier)]
#![feature(associated_type_bounds)] #![feature(associated_type_bounds)]
#![feature(rustc_attrs)] #![feature(rustc_attrs)]
#![feature(half_open_range_patterns)] #![feature(half_open_range_patterns)]

View file

@ -414,7 +414,7 @@ impl<'tcx> GlobalAlloc<'tcx> {
} }
} }
crate struct AllocMap<'tcx> { pub(crate) struct AllocMap<'tcx> {
/// Maps `AllocId`s to their corresponding allocations. /// Maps `AllocId`s to their corresponding allocations.
alloc_map: FxHashMap<AllocId, GlobalAlloc<'tcx>>, alloc_map: FxHashMap<AllocId, GlobalAlloc<'tcx>>,
@ -430,7 +430,7 @@ crate struct AllocMap<'tcx> {
} }
impl<'tcx> AllocMap<'tcx> { impl<'tcx> AllocMap<'tcx> {
crate fn new() -> Self { pub(crate) fn new() -> Self {
AllocMap { AllocMap {
alloc_map: Default::default(), alloc_map: Default::default(),
dedup: Default::default(), dedup: Default::default(),

View file

@ -1230,7 +1230,7 @@ impl<'tcx> TyCtxt<'tcx> {
} }
} }
crate fn query_kind(self, k: DepKind) -> &'tcx DepKindStruct { pub(crate) fn query_kind(self, k: DepKind) -> &'tcx DepKindStruct {
&self.query_kinds[k as usize] &self.query_kinds[k as usize]
} }

View file

@ -409,7 +409,7 @@ pub struct CReaderCacheKey {
/// of the relevant methods. /// of the relevant methods.
#[derive(PartialEq, Eq, PartialOrd, Ord)] #[derive(PartialEq, Eq, PartialOrd, Ord)]
#[allow(rustc::usage_of_ty_tykind)] #[allow(rustc::usage_of_ty_tykind)]
crate struct TyS<'tcx> { pub(crate) struct TyS<'tcx> {
/// This field shouldn't be used directly and may be removed in the future. /// This field shouldn't be used directly and may be removed in the future.
/// Use `Ty::kind()` instead. /// Use `Ty::kind()` instead.
kind: TyKind<'tcx>, kind: TyKind<'tcx>,
@ -500,7 +500,7 @@ impl ty::EarlyBoundRegion {
/// See comments on `TyS`, which apply here too (albeit for /// See comments on `TyS`, which apply here too (albeit for
/// `PredicateS`/`Predicate` rather than `TyS`/`Ty`). /// `PredicateS`/`Predicate` rather than `TyS`/`Ty`).
#[derive(Debug)] #[derive(Debug)]
crate struct PredicateS<'tcx> { pub(crate) struct PredicateS<'tcx> {
kind: Binder<'tcx, PredicateKind<'tcx>>, kind: Binder<'tcx, PredicateKind<'tcx>>,
flags: TypeFlags, flags: TypeFlags,
/// See the comment for the corresponding field of [TyS]. /// See the comment for the corresponding field of [TyS].

View file

@ -6,7 +6,7 @@ use rustc_middle::{mir::*, ty};
use rustc_span::Span; use rustc_span::Span;
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
crate fn ast_block( pub(crate) fn ast_block(
&mut self, &mut self,
destination: Place<'tcx>, destination: Place<'tcx>,
block: BasicBlock, block: BasicBlock,

View file

@ -5,33 +5,33 @@ use rustc_middle::mir::*;
use rustc_middle::ty::TyCtxt; use rustc_middle::ty::TyCtxt;
impl<'tcx> CFG<'tcx> { impl<'tcx> CFG<'tcx> {
crate fn block_data(&self, blk: BasicBlock) -> &BasicBlockData<'tcx> { pub(crate) fn block_data(&self, blk: BasicBlock) -> &BasicBlockData<'tcx> {
&self.basic_blocks[blk] &self.basic_blocks[blk]
} }
crate fn block_data_mut(&mut self, blk: BasicBlock) -> &mut BasicBlockData<'tcx> { pub(crate) fn block_data_mut(&mut self, blk: BasicBlock) -> &mut BasicBlockData<'tcx> {
&mut self.basic_blocks[blk] &mut self.basic_blocks[blk]
} }
// llvm.org/PR32488 makes this function use an excess of stack space. Mark // llvm.org/PR32488 makes this function use an excess of stack space. Mark
// it as #[inline(never)] to keep rustc's stack use in check. // it as #[inline(never)] to keep rustc's stack use in check.
#[inline(never)] #[inline(never)]
crate fn start_new_block(&mut self) -> BasicBlock { pub(crate) fn start_new_block(&mut self) -> BasicBlock {
self.basic_blocks.push(BasicBlockData::new(None)) self.basic_blocks.push(BasicBlockData::new(None))
} }
crate fn start_new_cleanup_block(&mut self) -> BasicBlock { pub(crate) fn start_new_cleanup_block(&mut self) -> BasicBlock {
let bb = self.start_new_block(); let bb = self.start_new_block();
self.block_data_mut(bb).is_cleanup = true; self.block_data_mut(bb).is_cleanup = true;
bb bb
} }
crate fn push(&mut self, block: BasicBlock, statement: Statement<'tcx>) { pub(crate) fn push(&mut self, block: BasicBlock, statement: Statement<'tcx>) {
debug!("push({:?}, {:?})", block, statement); debug!("push({:?}, {:?})", block, statement);
self.block_data_mut(block).statements.push(statement); self.block_data_mut(block).statements.push(statement);
} }
crate fn push_assign( pub(crate) fn push_assign(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
source_info: SourceInfo, source_info: SourceInfo,
@ -44,7 +44,7 @@ impl<'tcx> CFG<'tcx> {
); );
} }
crate fn push_assign_constant( pub(crate) fn push_assign_constant(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
source_info: SourceInfo, source_info: SourceInfo,
@ -59,7 +59,7 @@ impl<'tcx> CFG<'tcx> {
); );
} }
crate fn push_assign_unit( pub(crate) fn push_assign_unit(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
source_info: SourceInfo, source_info: SourceInfo,
@ -78,7 +78,7 @@ impl<'tcx> CFG<'tcx> {
); );
} }
crate fn push_fake_read( pub(crate) fn push_fake_read(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
source_info: SourceInfo, source_info: SourceInfo,
@ -90,7 +90,7 @@ impl<'tcx> CFG<'tcx> {
self.push(block, stmt); self.push(block, stmt);
} }
crate fn terminate( pub(crate) fn terminate(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
source_info: SourceInfo, source_info: SourceInfo,
@ -107,7 +107,7 @@ impl<'tcx> CFG<'tcx> {
} }
/// In the `origin` block, push a `goto -> target` terminator. /// In the `origin` block, push a `goto -> target` terminator.
crate fn goto(&mut self, origin: BasicBlock, source_info: SourceInfo, target: BasicBlock) { pub(crate) fn goto(&mut self, origin: BasicBlock, source_info: SourceInfo, target: BasicBlock) {
self.terminate(origin, source_info, TerminatorKind::Goto { target }) self.terminate(origin, source_info, TerminatorKind::Goto { target })
} }
} }

View file

@ -11,7 +11,7 @@ use rustc_middle::ty::{self, CanonicalUserTypeAnnotation, Ty, TyCtxt};
impl<'a, 'tcx> Builder<'a, 'tcx> { impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Compile `expr`, yielding a compile-time constant. Assumes that /// Compile `expr`, yielding a compile-time constant. Assumes that
/// `expr` is a valid compile-time constant! /// `expr` is a valid compile-time constant!
crate fn as_constant(&mut self, expr: &Expr<'tcx>) -> Constant<'tcx> { pub(crate) fn as_constant(&mut self, expr: &Expr<'tcx>) -> Constant<'tcx> {
let create_uneval_from_def_id = let create_uneval_from_def_id =
|tcx: TyCtxt<'tcx>, def_id: DefId, ty: Ty<'tcx>, substs: SubstsRef<'tcx>| { |tcx: TyCtxt<'tcx>, def_id: DefId, ty: Ty<'tcx>, substs: SubstsRef<'tcx>| {
let uneval = ty::Unevaluated::new(ty::WithOptConstParam::unknown(def_id), substs); let uneval = ty::Unevaluated::new(ty::WithOptConstParam::unknown(def_id), substs);

View file

@ -14,7 +14,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// after the current enclosing `ExprKind::Scope` has ended, so /// after the current enclosing `ExprKind::Scope` has ended, so
/// please do *not* return it from functions to avoid bad /// please do *not* return it from functions to avoid bad
/// miscompiles. /// miscompiles.
crate fn as_local_operand( pub(crate) fn as_local_operand(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
expr: &Expr<'tcx>, expr: &Expr<'tcx>,
@ -73,7 +73,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// value to the stack. /// value to the stack.
/// ///
/// See #68034 for more details. /// See #68034 for more details.
crate fn as_local_call_operand( pub(crate) fn as_local_call_operand(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
expr: &Expr<'tcx>, expr: &Expr<'tcx>,
@ -97,7 +97,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Like `as_local_call_operand`, except that the argument will /// Like `as_local_call_operand`, except that the argument will
/// not be valid once `scope` ends. /// not be valid once `scope` ends.
#[instrument(level = "debug", skip(self, scope))] #[instrument(level = "debug", skip(self, scope))]
crate fn as_operand( pub(crate) fn as_operand(
&mut self, &mut self,
mut block: BasicBlock, mut block: BasicBlock,
scope: Option<region::Scope>, scope: Option<region::Scope>,
@ -132,7 +132,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
} }
} }
crate fn as_call_operand( pub(crate) fn as_call_operand(
&mut self, &mut self,
mut block: BasicBlock, mut block: BasicBlock,
scope: Option<region::Scope>, scope: Option<region::Scope>,

View file

@ -21,7 +21,7 @@ use std::iter;
/// The "outermost" place that holds this value. /// The "outermost" place that holds this value.
#[derive(Copy, Clone, Debug, PartialEq)] #[derive(Copy, Clone, Debug, PartialEq)]
crate enum PlaceBase { pub(crate) enum PlaceBase {
/// Denotes the start of a `Place`. /// Denotes the start of a `Place`.
Local(Local), Local(Local),
@ -71,7 +71,7 @@ crate enum PlaceBase {
/// This is used internally when building a place for an expression like `a.b.c`. The fields `b` /// This is used internally when building a place for an expression like `a.b.c`. The fields `b`
/// and `c` can be progressively pushed onto the place builder that is created when converting `a`. /// and `c` can be progressively pushed onto the place builder that is created when converting `a`.
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq)]
crate struct PlaceBuilder<'tcx> { pub(crate) struct PlaceBuilder<'tcx> {
base: PlaceBase, base: PlaceBase,
projection: Vec<PlaceElem<'tcx>>, projection: Vec<PlaceElem<'tcx>>,
} }
@ -283,7 +283,7 @@ fn to_upvars_resolved_place_builder<'a, 'tcx>(
} }
impl<'tcx> PlaceBuilder<'tcx> { impl<'tcx> PlaceBuilder<'tcx> {
crate fn into_place<'a>( pub(crate) fn into_place<'a>(
self, self,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
typeck_results: &'a ty::TypeckResults<'tcx>, typeck_results: &'a ty::TypeckResults<'tcx>,
@ -314,7 +314,7 @@ impl<'tcx> PlaceBuilder<'tcx> {
/// not captured. This can happen because the final mir that will be /// not captured. This can happen because the final mir that will be
/// generated doesn't require a read for this place. Failures will only /// generated doesn't require a read for this place. Failures will only
/// happen inside closures. /// happen inside closures.
crate fn try_upvars_resolved<'a>( pub(crate) fn try_upvars_resolved<'a>(
self, self,
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
typeck_results: &'a ty::TypeckResults<'tcx>, typeck_results: &'a ty::TypeckResults<'tcx>,
@ -322,19 +322,19 @@ impl<'tcx> PlaceBuilder<'tcx> {
to_upvars_resolved_place_builder(self, tcx, typeck_results) to_upvars_resolved_place_builder(self, tcx, typeck_results)
} }
crate fn base(&self) -> PlaceBase { pub(crate) fn base(&self) -> PlaceBase {
self.base self.base
} }
crate fn field(self, f: Field, ty: Ty<'tcx>) -> Self { pub(crate) fn field(self, f: Field, ty: Ty<'tcx>) -> Self {
self.project(PlaceElem::Field(f, ty)) self.project(PlaceElem::Field(f, ty))
} }
crate fn deref(self) -> Self { pub(crate) fn deref(self) -> Self {
self.project(PlaceElem::Deref) self.project(PlaceElem::Deref)
} }
crate fn downcast(self, adt_def: AdtDef<'tcx>, variant_index: VariantIdx) -> Self { pub(crate) fn downcast(self, adt_def: AdtDef<'tcx>, variant_index: VariantIdx) -> Self {
self.project(PlaceElem::Downcast(Some(adt_def.variant(variant_index).name), variant_index)) self.project(PlaceElem::Downcast(Some(adt_def.variant(variant_index).name), variant_index))
} }
@ -342,7 +342,7 @@ impl<'tcx> PlaceBuilder<'tcx> {
self.project(PlaceElem::Index(index)) self.project(PlaceElem::Index(index))
} }
crate fn project(mut self, elem: PlaceElem<'tcx>) -> Self { pub(crate) fn project(mut self, elem: PlaceElem<'tcx>) -> Self {
self.projection.push(elem); self.projection.push(elem);
self self
} }
@ -373,7 +373,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// Extra care is needed if any user code is allowed to run between calling /// Extra care is needed if any user code is allowed to run between calling
/// this method and using it, as is the case for `match` and index /// this method and using it, as is the case for `match` and index
/// expressions. /// expressions.
crate fn as_place( pub(crate) fn as_place(
&mut self, &mut self,
mut block: BasicBlock, mut block: BasicBlock,
expr: &Expr<'tcx>, expr: &Expr<'tcx>,
@ -384,7 +384,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// This is used when constructing a compound `Place`, so that we can avoid creating /// This is used when constructing a compound `Place`, so that we can avoid creating
/// intermediate `Place` values until we know the full set of projections. /// intermediate `Place` values until we know the full set of projections.
crate fn as_place_builder( pub(crate) fn as_place_builder(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
expr: &Expr<'tcx>, expr: &Expr<'tcx>,
@ -397,7 +397,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// place. The place itself may or may not be mutable: /// place. The place itself may or may not be mutable:
/// * If this expr is a place expr like a.b, then we will return that place. /// * If this expr is a place expr like a.b, then we will return that place.
/// * Otherwise, a temporary is created: in that event, it will be an immutable temporary. /// * Otherwise, a temporary is created: in that event, it will be an immutable temporary.
crate fn as_read_only_place( pub(crate) fn as_read_only_place(
&mut self, &mut self,
mut block: BasicBlock, mut block: BasicBlock,
expr: &Expr<'tcx>, expr: &Expr<'tcx>,

View file

@ -21,7 +21,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
/// The operand returned from this function will *not be valid* after /// The operand returned from this function will *not be valid* after
/// an ExprKind::Scope is passed, so please do *not* return it from /// an ExprKind::Scope is passed, so please do *not* return it from
/// functions to avoid bad miscompiles. /// functions to avoid bad miscompiles.
crate fn as_local_rvalue( pub(crate) fn as_local_rvalue(
&mut self, &mut self,
block: BasicBlock, block: BasicBlock,
expr: &Expr<'tcx>, expr: &Expr<'tcx>,
@ -31,7 +31,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
} }
/// Compile `expr`, yielding an rvalue. /// Compile `expr`, yielding an rvalue.
crate fn as_rvalue( pub(crate) fn as_rvalue(
&mut self, &mut self,
mut block: BasicBlock, mut block: BasicBlock,
scope: Option<region::Scope>, scope: Option<region::Scope>,
@ -416,7 +416,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
} }
} }
crate fn build_binary_op( pub(crate) fn build_binary_op(
&mut self, &mut self,
mut block: BasicBlock, mut block: BasicBlock,
op: BinOp, op: BinOp,

Some files were not shown because too many files have changed in this diff Show more