Stop using track_errors for some forever unstable rustc_attr analyses
This commit is contained in:
parent
16f4b02dd8
commit
4db93c5750
4 changed files with 21 additions and 18 deletions
|
@ -5,20 +5,22 @@ use rustc_hir::intravisit::{self, Visitor};
|
||||||
use rustc_hir::{self as hir, def, Expr, ImplItem, Item, Node, TraitItem};
|
use rustc_hir::{self as hir, def, Expr, ImplItem, Item, Node, TraitItem};
|
||||||
use rustc_middle::hir::nested_filter;
|
use rustc_middle::hir::nested_filter;
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_span::{sym, DUMMY_SP};
|
use rustc_span::{sym, ErrorGuaranteed, DUMMY_SP};
|
||||||
|
|
||||||
use crate::errors::{TaitForwardCompat, TypeOf, UnconstrainedOpaqueType};
|
use crate::errors::{TaitForwardCompat, TypeOf, UnconstrainedOpaqueType};
|
||||||
|
|
||||||
pub fn test_opaque_hidden_types(tcx: TyCtxt<'_>) {
|
pub fn test_opaque_hidden_types(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
||||||
|
let mut res = Ok(());
|
||||||
if tcx.has_attr(CRATE_DEF_ID, sym::rustc_hidden_type_of_opaques) {
|
if tcx.has_attr(CRATE_DEF_ID, sym::rustc_hidden_type_of_opaques) {
|
||||||
for id in tcx.hir().items() {
|
for id in tcx.hir().items() {
|
||||||
if matches!(tcx.def_kind(id.owner_id), DefKind::OpaqueTy) {
|
if matches!(tcx.def_kind(id.owner_id), DefKind::OpaqueTy) {
|
||||||
let type_of = tcx.type_of(id.owner_id).instantiate_identity();
|
let type_of = tcx.type_of(id.owner_id).instantiate_identity();
|
||||||
|
|
||||||
tcx.dcx().emit_err(TypeOf { span: tcx.def_span(id.owner_id), type_of });
|
res = Err(tcx.dcx().emit_err(TypeOf { span: tcx.def_span(id.owner_id), type_of }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
res
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks "defining uses" of opaque `impl Trait` types to ensure that they meet the restrictions
|
/// Checks "defining uses" of opaque `impl Trait` types to ensure that they meet the restrictions
|
||||||
|
|
|
@ -169,9 +169,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
||||||
// FIXME(matthewjasper) We shouldn't need to use `track_errors` anywhere in this function
|
// FIXME(matthewjasper) We shouldn't need to use `track_errors` anywhere in this function
|
||||||
// or the compiler in general.
|
// or the compiler in general.
|
||||||
if tcx.features().rustc_attrs {
|
if tcx.features().rustc_attrs {
|
||||||
tcx.sess.track_errors(|| {
|
tcx.sess.time("outlives_testing", || outlives::test::test_inferred_outlives(tcx))?;
|
||||||
tcx.sess.time("outlives_testing", || outlives::test::test_inferred_outlives(tcx));
|
|
||||||
})?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tcx.sess.track_errors(|| {
|
tcx.sess.track_errors(|| {
|
||||||
|
@ -190,9 +188,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
if tcx.features().rustc_attrs {
|
if tcx.features().rustc_attrs {
|
||||||
tcx.sess.track_errors(|| {
|
tcx.sess.time("variance_testing", || variance::test::test_variance(tcx))?;
|
||||||
tcx.sess.time("variance_testing", || variance::test::test_variance(tcx));
|
|
||||||
})?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tcx.sess.time("wf_checking", || {
|
tcx.sess.time("wf_checking", || {
|
||||||
|
@ -200,7 +196,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
if tcx.features().rustc_attrs {
|
if tcx.features().rustc_attrs {
|
||||||
tcx.sess.track_errors(|| collect::test_opaque_hidden_types(tcx))?;
|
collect::test_opaque_hidden_types(tcx)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Freeze definitions as we don't add new ones at this point. This improves performance by
|
// Freeze definitions as we don't add new ones at this point. This improves performance by
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
use rustc_middle::ty::{self, TyCtxt};
|
use rustc_middle::ty::{self, TyCtxt};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::{symbol::sym, ErrorGuaranteed};
|
||||||
|
|
||||||
pub fn test_inferred_outlives(tcx: TyCtxt<'_>) {
|
pub fn test_inferred_outlives(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
||||||
|
let mut res = Ok(());
|
||||||
for id in tcx.hir().items() {
|
for id in tcx.hir().items() {
|
||||||
// For unit testing: check for a special "rustc_outlives"
|
// For unit testing: check for a special "rustc_outlives"
|
||||||
// attribute and report an error with various results if found.
|
// attribute and report an error with various results if found.
|
||||||
|
@ -22,7 +23,8 @@ pub fn test_inferred_outlives(tcx: TyCtxt<'_>) {
|
||||||
for p in pred {
|
for p in pred {
|
||||||
err.note(p);
|
err.note(p);
|
||||||
}
|
}
|
||||||
err.emit();
|
res = Err(err.emit());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
res
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,19 +2,21 @@ use rustc_hir::def::DefKind;
|
||||||
use rustc_hir::def_id::CRATE_DEF_ID;
|
use rustc_hir::def_id::CRATE_DEF_ID;
|
||||||
use rustc_middle::ty::TyCtxt;
|
use rustc_middle::ty::TyCtxt;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
|
use rustc_span::ErrorGuaranteed;
|
||||||
|
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
|
|
||||||
pub fn test_variance(tcx: TyCtxt<'_>) {
|
pub fn test_variance(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
||||||
|
let mut res = Ok(());
|
||||||
if tcx.has_attr(CRATE_DEF_ID, sym::rustc_variance_of_opaques) {
|
if tcx.has_attr(CRATE_DEF_ID, sym::rustc_variance_of_opaques) {
|
||||||
for id in tcx.hir().items() {
|
for id in tcx.hir().items() {
|
||||||
if matches!(tcx.def_kind(id.owner_id), DefKind::OpaqueTy) {
|
if matches!(tcx.def_kind(id.owner_id), DefKind::OpaqueTy) {
|
||||||
let variances_of = tcx.variances_of(id.owner_id);
|
let variances_of = tcx.variances_of(id.owner_id);
|
||||||
|
|
||||||
tcx.dcx().emit_err(errors::VariancesOf {
|
res = Err(tcx.dcx().emit_err(errors::VariancesOf {
|
||||||
span: tcx.def_span(id.owner_id),
|
span: tcx.def_span(id.owner_id),
|
||||||
variances_of: format!("{variances_of:?}"),
|
variances_of: format!("{variances_of:?}"),
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,10 +27,11 @@ pub fn test_variance(tcx: TyCtxt<'_>) {
|
||||||
if tcx.has_attr(id.owner_id, sym::rustc_variance) {
|
if tcx.has_attr(id.owner_id, sym::rustc_variance) {
|
||||||
let variances_of = tcx.variances_of(id.owner_id);
|
let variances_of = tcx.variances_of(id.owner_id);
|
||||||
|
|
||||||
tcx.dcx().emit_err(errors::VariancesOf {
|
res = Err(tcx.dcx().emit_err(errors::VariancesOf {
|
||||||
span: tcx.def_span(id.owner_id),
|
span: tcx.def_span(id.owner_id),
|
||||||
variances_of: format!("{variances_of:?}"),
|
variances_of: format!("{variances_of:?}"),
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
res
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue