compiler: Directly use rustc_abi in hir_{analysis,typeck}
This commit is contained in:
parent
bbd18e29da
commit
89ec8c2cfe
19 changed files with 58 additions and 56 deletions
|
@ -37,7 +37,7 @@ use super::compare_impl_item::{check_type_bounds, compare_impl_method, compare_i
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::check::intrinsicck::InlineAsmCtxt;
|
use crate::check::intrinsicck::InlineAsmCtxt;
|
||||||
|
|
||||||
pub fn check_abi(tcx: TyCtxt<'_>, span: Span, abi: Abi) {
|
pub fn check_abi(tcx: TyCtxt<'_>, span: Span, abi: ExternAbi) {
|
||||||
if !tcx.sess.target.is_abi_supported(abi) {
|
if !tcx.sess.target.is_abi_supported(abi) {
|
||||||
struct_span_code_err!(
|
struct_span_code_err!(
|
||||||
tcx.dcx(),
|
tcx.dcx(),
|
||||||
|
@ -49,7 +49,7 @@ pub fn check_abi(tcx: TyCtxt<'_>, span: Span, abi: Abi) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn check_abi_fn_ptr(tcx: TyCtxt<'_>, hir_id: hir::HirId, span: Span, abi: Abi) {
|
pub fn check_abi_fn_ptr(tcx: TyCtxt<'_>, hir_id: hir::HirId, span: Span, abi: ExternAbi) {
|
||||||
if !tcx.sess.target.is_abi_supported(abi) {
|
if !tcx.sess.target.is_abi_supported(abi) {
|
||||||
tcx.node_span_lint(UNSUPPORTED_FN_PTR_CALLING_CONVENTIONS, hir_id, span, |lint| {
|
tcx.node_span_lint(UNSUPPORTED_FN_PTR_CALLING_CONVENTIONS, hir_id, span, |lint| {
|
||||||
lint.primary_message(format!(
|
lint.primary_message(format!(
|
||||||
|
@ -628,7 +628,7 @@ pub(crate) fn check_item_type(tcx: TyCtxt<'_>, def_id: LocalDefId) {
|
||||||
def_id,
|
def_id,
|
||||||
tcx.def_ident_span(def_id).unwrap(),
|
tcx.def_ident_span(def_id).unwrap(),
|
||||||
i.name,
|
i.name,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// Everything else is checked entirely within check_item_body
|
// Everything else is checked entirely within check_item_body
|
||||||
|
@ -699,7 +699,7 @@ pub(crate) fn check_item_type(tcx: TyCtxt<'_>, def_id: LocalDefId) {
|
||||||
check_abi(tcx, it.span, abi);
|
check_abi(tcx, it.span, abi);
|
||||||
|
|
||||||
match abi {
|
match abi {
|
||||||
Abi::RustIntrinsic => {
|
ExternAbi::RustIntrinsic => {
|
||||||
for item in items {
|
for item in items {
|
||||||
intrinsic::check_intrinsic_type(
|
intrinsic::check_intrinsic_type(
|
||||||
tcx,
|
tcx,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use std::ops::Not;
|
use std::ops::Not;
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::Node;
|
use rustc_hir::Node;
|
||||||
use rustc_infer::infer::TyCtxtInferExt;
|
use rustc_infer::infer::TyCtxtInferExt;
|
||||||
|
@ -9,7 +10,6 @@ use rustc_session::config::EntryFnType;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_span::def_id::{CRATE_DEF_ID, DefId, LocalDefId};
|
use rustc_span::def_id::{CRATE_DEF_ID, DefId, LocalDefId};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
||||||
use rustc_trait_selection::traits::{self, ObligationCause, ObligationCauseCode};
|
use rustc_trait_selection::traits::{self, ObligationCause, ObligationCauseCode};
|
||||||
|
|
||||||
|
@ -158,7 +158,7 @@ fn check_main_fn_ty(tcx: TyCtxt<'_>, main_def_id: DefId) {
|
||||||
expected_return_type,
|
expected_return_type,
|
||||||
false,
|
false,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
));
|
));
|
||||||
|
|
||||||
if check_function_signature(
|
if check_function_signature(
|
||||||
|
@ -254,7 +254,7 @@ fn check_start_fn_ty(tcx: TyCtxt<'_>, start_def_id: DefId) {
|
||||||
tcx.types.isize,
|
tcx.types.isize,
|
||||||
false,
|
false,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
));
|
));
|
||||||
|
|
||||||
let _ = check_function_signature(
|
let _ = check_function_signature(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
//! Type-checking for the rust-intrinsic and platform-intrinsic
|
//! Type-checking for the rust-intrinsic and platform-intrinsic
|
||||||
//! intrinsics that the compiler exposes.
|
//! intrinsics that the compiler exposes.
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
use rustc_errors::{DiagMessage, struct_span_code_err};
|
use rustc_errors::{DiagMessage, struct_span_code_err};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -10,7 +11,6 @@ use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::{Span, Symbol};
|
use rustc_span::{Span, Symbol};
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
|
|
||||||
use crate::check::check_function_signature;
|
use crate::check::check_function_signature;
|
||||||
use crate::errors::{
|
use crate::errors::{
|
||||||
|
@ -163,7 +163,7 @@ pub fn check_intrinsic_type(
|
||||||
intrinsic_id: LocalDefId,
|
intrinsic_id: LocalDefId,
|
||||||
span: Span,
|
span: Span,
|
||||||
intrinsic_name: Symbol,
|
intrinsic_name: Symbol,
|
||||||
abi: Abi,
|
abi: ExternAbi,
|
||||||
) {
|
) {
|
||||||
let generics = tcx.generics_of(intrinsic_id);
|
let generics = tcx.generics_of(intrinsic_id);
|
||||||
let param = |n| {
|
let param = |n| {
|
||||||
|
@ -533,14 +533,14 @@ pub fn check_intrinsic_type(
|
||||||
tcx.types.unit,
|
tcx.types.unit,
|
||||||
false,
|
false,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
));
|
));
|
||||||
let catch_fn_ty = ty::Binder::dummy(tcx.mk_fn_sig(
|
let catch_fn_ty = ty::Binder::dummy(tcx.mk_fn_sig(
|
||||||
[mut_u8, mut_u8],
|
[mut_u8, mut_u8],
|
||||||
tcx.types.unit,
|
tcx.types.unit,
|
||||||
false,
|
false,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
));
|
));
|
||||||
(
|
(
|
||||||
0,
|
0,
|
||||||
|
|
|
@ -74,7 +74,7 @@ pub mod wfcheck;
|
||||||
use std::num::NonZero;
|
use std::num::NonZero;
|
||||||
|
|
||||||
pub use check::{check_abi, check_abi_fn_ptr};
|
pub use check::{check_abi, check_abi_fn_ptr};
|
||||||
use rustc_abi::VariantIdx;
|
use rustc_abi::{ExternAbi, VariantIdx};
|
||||||
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
||||||
use rustc_errors::{Diag, ErrorGuaranteed, pluralize, struct_span_code_err};
|
use rustc_errors::{Diag, ErrorGuaranteed, pluralize, struct_span_code_err};
|
||||||
use rustc_hir::def_id::{DefId, LocalDefId};
|
use rustc_hir::def_id::{DefId, LocalDefId};
|
||||||
|
@ -91,7 +91,6 @@ use rustc_session::parse::feature_err;
|
||||||
use rustc_span::def_id::CRATE_DEF_ID;
|
use rustc_span::def_id::CRATE_DEF_ID;
|
||||||
use rustc_span::symbol::{Ident, kw, sym};
|
use rustc_span::symbol::{Ident, kw, sym};
|
||||||
use rustc_span::{BytePos, DUMMY_SP, Span, Symbol};
|
use rustc_span::{BytePos, DUMMY_SP, Span, Symbol};
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
||||||
use rustc_trait_selection::error_reporting::infer::ObligationCauseExt as _;
|
use rustc_trait_selection::error_reporting::infer::ObligationCauseExt as _;
|
||||||
use rustc_trait_selection::error_reporting::traits::suggestions::ReturnsVisitor;
|
use rustc_trait_selection::error_reporting::traits::suggestions::ReturnsVisitor;
|
||||||
|
@ -142,8 +141,8 @@ fn get_owner_return_paths(
|
||||||
/// Forbid defining intrinsics in Rust code,
|
/// Forbid defining intrinsics in Rust code,
|
||||||
/// as they must always be defined by the compiler.
|
/// as they must always be defined by the compiler.
|
||||||
// FIXME: Move this to a more appropriate place.
|
// FIXME: Move this to a more appropriate place.
|
||||||
pub fn forbid_intrinsic_abi(tcx: TyCtxt<'_>, sp: Span, abi: Abi) {
|
pub fn forbid_intrinsic_abi(tcx: TyCtxt<'_>, sp: Span, abi: ExternAbi) {
|
||||||
if let Abi::RustIntrinsic = abi {
|
if let ExternAbi::RustIntrinsic = abi {
|
||||||
tcx.dcx().span_err(sp, "intrinsic must be in `extern \"rust-intrinsic\" { ... }` block");
|
tcx.dcx().span_err(sp, "intrinsic must be in `extern \"rust-intrinsic\" { ... }` block");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ use std::cell::LazyCell;
|
||||||
use std::ops::{ControlFlow, Deref};
|
use std::ops::{ControlFlow, Deref};
|
||||||
|
|
||||||
use hir::intravisit::{self, Visitor};
|
use hir::intravisit::{self, Visitor};
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap, FxIndexSet};
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
use rustc_errors::{Applicability, ErrorGuaranteed, pluralize, struct_span_code_err};
|
use rustc_errors::{Applicability, ErrorGuaranteed, pluralize, struct_span_code_err};
|
||||||
|
@ -23,7 +24,6 @@ use rustc_middle::{bug, span_bug};
|
||||||
use rustc_session::parse::feature_err;
|
use rustc_session::parse::feature_err;
|
||||||
use rustc_span::symbol::{Ident, sym};
|
use rustc_span::symbol::{Ident, sym};
|
||||||
use rustc_span::{DUMMY_SP, Span};
|
use rustc_span::{DUMMY_SP, Span};
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
|
||||||
use rustc_trait_selection::regions::InferCtxtRegionExt;
|
use rustc_trait_selection::regions::InferCtxtRegionExt;
|
||||||
use rustc_trait_selection::traits::misc::{
|
use rustc_trait_selection::traits::misc::{
|
||||||
|
@ -1644,7 +1644,7 @@ fn check_fn_or_method<'tcx>(
|
||||||
|
|
||||||
check_where_clauses(wfcx, span, def_id);
|
check_where_clauses(wfcx, span, def_id);
|
||||||
|
|
||||||
if sig.abi == Abi::RustCall {
|
if sig.abi == ExternAbi::RustCall {
|
||||||
let span = tcx.def_span(def_id);
|
let span = tcx.def_span(def_id);
|
||||||
let has_implicit_self = hir_decl.implicit_self != hir::ImplicitSelfKind::None;
|
let has_implicit_self = hir_decl.implicit_self != hir::ImplicitSelfKind::None;
|
||||||
let mut inputs = sig.inputs().iter().skip(if has_implicit_self { 1 } else { 0 });
|
let mut inputs = sig.inputs().iter().skip(if has_implicit_self { 1 } else { 0 });
|
||||||
|
|
|
@ -18,6 +18,7 @@ use std::cell::Cell;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::ops::Bound;
|
use std::ops::Bound;
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_ast::Recovered;
|
use rustc_ast::Recovered;
|
||||||
use rustc_data_structures::captures::Captures;
|
use rustc_data_structures::captures::Captures;
|
||||||
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
|
||||||
|
@ -38,7 +39,6 @@ use rustc_middle::ty::{self, AdtKind, Const, IsSuggestable, Ty, TyCtxt, TypingMo
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_span::symbol::{Ident, Symbol, kw, sym};
|
use rustc_span::symbol::{Ident, Symbol, kw, sym};
|
||||||
use rustc_span::{DUMMY_SP, Span};
|
use rustc_span::{DUMMY_SP, Span};
|
||||||
use rustc_target::spec::abi;
|
|
||||||
use rustc_trait_selection::error_reporting::traits::suggestions::NextTypeParamName;
|
use rustc_trait_selection::error_reporting::traits::suggestions::NextTypeParamName;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::ObligationCtxt;
|
use rustc_trait_selection::traits::ObligationCtxt;
|
||||||
|
@ -1361,7 +1361,7 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: LocalDefId) -> ty::EarlyBinder<'_, ty::PolyFn
|
||||||
(Bound::Unbounded, Bound::Unbounded) => hir::Safety::Safe,
|
(Bound::Unbounded, Bound::Unbounded) => hir::Safety::Safe,
|
||||||
_ => hir::Safety::Unsafe,
|
_ => hir::Safety::Unsafe,
|
||||||
};
|
};
|
||||||
ty::Binder::dummy(tcx.mk_fn_sig(inputs, ty, false, safety, abi::Abi::Rust))
|
ty::Binder::dummy(tcx.mk_fn_sig(inputs, ty, false, safety, ExternAbi::Rust))
|
||||||
}
|
}
|
||||||
|
|
||||||
Expr(&hir::Expr { kind: hir::ExprKind::Closure { .. }, .. }) => {
|
Expr(&hir::Expr { kind: hir::ExprKind::Closure { .. }, .. }) => {
|
||||||
|
@ -1686,10 +1686,10 @@ fn compute_sig_of_foreign_fn_decl<'tcx>(
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
def_id: LocalDefId,
|
def_id: LocalDefId,
|
||||||
decl: &'tcx hir::FnDecl<'tcx>,
|
decl: &'tcx hir::FnDecl<'tcx>,
|
||||||
abi: abi::Abi,
|
abi: ExternAbi,
|
||||||
safety: hir::Safety,
|
safety: hir::Safety,
|
||||||
) -> ty::PolyFnSig<'tcx> {
|
) -> ty::PolyFnSig<'tcx> {
|
||||||
let safety = if abi == abi::Abi::RustIntrinsic {
|
let safety = if abi == ExternAbi::RustIntrinsic {
|
||||||
intrinsic_operation_unsafety(tcx, def_id)
|
intrinsic_operation_unsafety(tcx, def_id)
|
||||||
} else {
|
} else {
|
||||||
safety
|
safety
|
||||||
|
@ -1700,7 +1700,7 @@ fn compute_sig_of_foreign_fn_decl<'tcx>(
|
||||||
|
|
||||||
// Feature gate SIMD types in FFI, since I am not sure that the
|
// Feature gate SIMD types in FFI, since I am not sure that the
|
||||||
// ABIs are handled at all correctly. -huonw
|
// ABIs are handled at all correctly. -huonw
|
||||||
if abi != abi::Abi::RustIntrinsic && !tcx.features().simd_ffi() {
|
if abi != ExternAbi::RustIntrinsic && !tcx.features().simd_ffi() {
|
||||||
let check = |hir_ty: &hir::Ty<'_>, ty: Ty<'_>| {
|
let check = |hir_ty: &hir::Ty<'_>, ty: Ty<'_>| {
|
||||||
if ty.is_simd() {
|
if ty.is_simd() {
|
||||||
let snip = tcx
|
let snip = tcx
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_errors::{DiagCtxtHandle, E0781, struct_span_code_err};
|
use rustc_errors::{DiagCtxtHandle, E0781, struct_span_code_err};
|
||||||
use rustc_hir::{self as hir, HirId};
|
use rustc_hir::{self as hir, HirId};
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::ty::layout::LayoutError;
|
use rustc_middle::ty::layout::LayoutError;
|
||||||
use rustc_middle::ty::{self, ParamEnv, TyCtxt};
|
use rustc_middle::ty::{self, ParamEnv, TyCtxt};
|
||||||
use rustc_target::spec::abi;
|
|
||||||
|
|
||||||
use crate::errors;
|
use crate::errors;
|
||||||
|
|
||||||
|
@ -14,13 +14,13 @@ pub(crate) fn validate_cmse_abi<'tcx>(
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
dcx: DiagCtxtHandle<'_>,
|
dcx: DiagCtxtHandle<'_>,
|
||||||
hir_id: HirId,
|
hir_id: HirId,
|
||||||
abi: abi::Abi,
|
abi: ExternAbi,
|
||||||
fn_sig: ty::PolyFnSig<'tcx>,
|
fn_sig: ty::PolyFnSig<'tcx>,
|
||||||
) {
|
) {
|
||||||
let abi_name = abi.name();
|
let abi_name = abi.name();
|
||||||
|
|
||||||
match abi {
|
match abi {
|
||||||
abi::Abi::CCmseNonSecureCall => {
|
ExternAbi::CCmseNonSecureCall => {
|
||||||
let hir_node = tcx.hir_node(hir_id);
|
let hir_node = tcx.hir_node(hir_id);
|
||||||
let hir::Node::Ty(hir::Ty {
|
let hir::Node::Ty(hir::Ty {
|
||||||
span: bare_fn_span,
|
span: bare_fn_span,
|
||||||
|
@ -78,7 +78,7 @@ pub(crate) fn validate_cmse_abi<'tcx>(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
abi::Abi::CCmseNonSecureEntry => {
|
ExternAbi::CCmseNonSecureEntry => {
|
||||||
let hir_node = tcx.hir_node(hir_id);
|
let hir_node = tcx.hir_node(hir_id);
|
||||||
let Some(hir::FnSig { decl, span: fn_sig_span, .. }) = hir_node.fn_sig() else {
|
let Some(hir::FnSig { decl, span: fn_sig_span, .. }) = hir_node.fn_sig() else {
|
||||||
// might happen when this ABI is used incorrectly. That will be handled elsewhere
|
// might happen when this ABI is used incorrectly. That will be handled elsewhere
|
||||||
|
@ -195,17 +195,17 @@ fn is_valid_cmse_output<'tcx>(
|
||||||
Ok(ret_ty == tcx.types.i64 || ret_ty == tcx.types.u64 || ret_ty == tcx.types.f64)
|
Ok(ret_ty == tcx.types.i64 || ret_ty == tcx.types.u64 || ret_ty == tcx.types.f64)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn should_emit_generic_error<'tcx>(abi: abi::Abi, layout_err: &'tcx LayoutError<'tcx>) -> bool {
|
fn should_emit_generic_error<'tcx>(abi: ExternAbi, layout_err: &'tcx LayoutError<'tcx>) -> bool {
|
||||||
use LayoutError::*;
|
use LayoutError::*;
|
||||||
|
|
||||||
match layout_err {
|
match layout_err {
|
||||||
Unknown(ty) => {
|
Unknown(ty) => {
|
||||||
match abi {
|
match abi {
|
||||||
abi::Abi::CCmseNonSecureCall => {
|
ExternAbi::CCmseNonSecureCall => {
|
||||||
// prevent double reporting of this error
|
// prevent double reporting of this error
|
||||||
!ty.is_impl_trait()
|
!ty.is_impl_trait()
|
||||||
}
|
}
|
||||||
abi::Abi::CCmseNonSecureEntry => true,
|
ExternAbi::CCmseNonSecureEntry => true,
|
||||||
_ => bug!("invalid ABI: {abi}"),
|
_ => bug!("invalid ABI: {abi}"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,6 @@ use rustc_session::lint::builtin::AMBIGUOUS_ASSOCIATED_ITEMS;
|
||||||
use rustc_span::edit_distance::find_best_match_for_name;
|
use rustc_span::edit_distance::find_best_match_for_name;
|
||||||
use rustc_span::symbol::{Ident, Symbol, kw};
|
use rustc_span::symbol::{Ident, Symbol, kw};
|
||||||
use rustc_span::{DUMMY_SP, Span};
|
use rustc_span::{DUMMY_SP, Span};
|
||||||
use rustc_target::spec::abi;
|
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::wf::object_region_bounds;
|
use rustc_trait_selection::traits::wf::object_region_bounds;
|
||||||
use rustc_trait_selection::traits::{self, ObligationCtxt};
|
use rustc_trait_selection::traits::{self, ObligationCtxt};
|
||||||
|
@ -2353,7 +2352,7 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
|
||||||
&self,
|
&self,
|
||||||
hir_id: HirId,
|
hir_id: HirId,
|
||||||
safety: hir::Safety,
|
safety: hir::Safety,
|
||||||
abi: abi::Abi,
|
abi: rustc_abi::ExternAbi,
|
||||||
decl: &hir::FnDecl<'tcx>,
|
decl: &hir::FnDecl<'tcx>,
|
||||||
generics: Option<&hir::Generics<'_>>,
|
generics: Option<&hir::Generics<'_>>,
|
||||||
hir_ty: Option<&hir::Ty<'_>>,
|
hir_ty: Option<&hir::Ty<'_>>,
|
||||||
|
|
|
@ -91,6 +91,7 @@ mod impl_wf_check;
|
||||||
mod outlives;
|
mod outlives;
|
||||||
mod variance;
|
mod variance;
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::DefKind;
|
use rustc_hir::def::DefKind;
|
||||||
use rustc_middle::middle;
|
use rustc_middle::middle;
|
||||||
|
@ -100,19 +101,23 @@ use rustc_middle::ty::{self, Ty, TyCtxt};
|
||||||
use rustc_session::parse::feature_err;
|
use rustc_session::parse::feature_err;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
|
|
||||||
rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
|
rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
|
||||||
|
|
||||||
fn require_c_abi_if_c_variadic(tcx: TyCtxt<'_>, decl: &hir::FnDecl<'_>, abi: Abi, span: Span) {
|
fn require_c_abi_if_c_variadic(
|
||||||
|
tcx: TyCtxt<'_>,
|
||||||
|
decl: &hir::FnDecl<'_>,
|
||||||
|
abi: ExternAbi,
|
||||||
|
span: Span,
|
||||||
|
) {
|
||||||
const CONVENTIONS_UNSTABLE: &str =
|
const CONVENTIONS_UNSTABLE: &str =
|
||||||
"`C`, `cdecl`, `system`, `aapcs`, `win64`, `sysv64` or `efiapi`";
|
"`C`, `cdecl`, `system`, `aapcs`, `win64`, `sysv64` or `efiapi`";
|
||||||
const CONVENTIONS_STABLE: &str = "`C` or `cdecl`";
|
const CONVENTIONS_STABLE: &str = "`C` or `cdecl`";
|
||||||
const UNSTABLE_EXPLAIN: &str =
|
const UNSTABLE_EXPLAIN: &str =
|
||||||
"using calling conventions other than `C` or `cdecl` for varargs functions is unstable";
|
"using calling conventions other than `C` or `cdecl` for varargs functions is unstable";
|
||||||
|
|
||||||
if !decl.c_variadic || matches!(abi, Abi::C { .. } | Abi::Cdecl { .. }) {
|
if !decl.c_variadic || matches!(abi, ExternAbi::C { .. } | ExternAbi::Cdecl { .. }) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,6 @@ use rustc_middle::{bug, span_bug};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::symbol::{Ident, sym};
|
use rustc_span::symbol::{Ident, sym};
|
||||||
use rustc_target::spec::abi;
|
|
||||||
use rustc_trait_selection::error_reporting::traits::DefIdOrName;
|
use rustc_trait_selection::error_reporting::traits::DefIdOrName;
|
||||||
use rustc_trait_selection::infer::InferCtxtExt as _;
|
use rustc_trait_selection::infer::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt as _;
|
||||||
|
@ -509,7 +508,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
def_id,
|
def_id,
|
||||||
);
|
);
|
||||||
|
|
||||||
if fn_sig.abi == abi::Abi::RustCall {
|
if fn_sig.abi == rustc_abi::ExternAbi::RustCall {
|
||||||
let sp = arg_exprs.last().map_or(call_expr.span, |expr| expr.span);
|
let sp = arg_exprs.last().map_or(call_expr.span, |expr| expr.span);
|
||||||
if let Some(ty) = fn_sig.inputs().last().copied() {
|
if let Some(ty) = fn_sig.inputs().last().copied() {
|
||||||
self.register_bound(
|
self.register_bound(
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::DefKind;
|
use rustc_hir::def::DefKind;
|
||||||
use rustc_hir::intravisit::Visitor;
|
use rustc_hir::intravisit::Visitor;
|
||||||
|
@ -10,7 +11,6 @@ use rustc_infer::traits::WellFormedLoc;
|
||||||
use rustc_middle::ty::{self, Binder, Ty, TyCtxt};
|
use rustc_middle::ty::{self, Binder, Ty, TyCtxt};
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::traits::{ObligationCause, ObligationCauseCode};
|
use rustc_trait_selection::traits::{ObligationCause, ObligationCauseCode};
|
||||||
use tracing::{debug, instrument};
|
use tracing::{debug, instrument};
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ fn check_panic_info_fn(tcx: TyCtxt<'_>, fn_id: LocalDefId, fn_sig: ty::FnSig<'_>
|
||||||
ty::BoundVariableKind::Region(ty::BrAnon),
|
ty::BoundVariableKind::Region(ty::BrAnon),
|
||||||
]);
|
]);
|
||||||
let expected_sig = ty::Binder::bind_with_vars(
|
let expected_sig = ty::Binder::bind_with_vars(
|
||||||
tcx.mk_fn_sig([panic_info_ref_ty], tcx.types.never, false, fn_sig.safety, Abi::Rust),
|
tcx.mk_fn_sig([panic_info_ref_ty], tcx.types.never, false, fn_sig.safety, ExternAbi::Rust),
|
||||||
bounds,
|
bounds,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ fn check_lang_start_fn<'tcx>(tcx: TyCtxt<'tcx>, fn_sig: ty::FnSig<'tcx>, def_id:
|
||||||
let generic_ty = Ty::new_param(tcx, fn_generic.index, fn_generic.name);
|
let generic_ty = Ty::new_param(tcx, fn_generic.index, fn_generic.name);
|
||||||
let main_fn_ty = Ty::new_fn_ptr(
|
let main_fn_ty = Ty::new_fn_ptr(
|
||||||
tcx,
|
tcx,
|
||||||
Binder::dummy(tcx.mk_fn_sig([], generic_ty, false, hir::Safety::Safe, Abi::Rust)),
|
Binder::dummy(tcx.mk_fn_sig([], generic_ty, false, hir::Safety::Safe, ExternAbi::Rust)),
|
||||||
);
|
);
|
||||||
|
|
||||||
let expected_sig = ty::Binder::dummy(tcx.mk_fn_sig(
|
let expected_sig = ty::Binder::dummy(tcx.mk_fn_sig(
|
||||||
|
@ -247,7 +247,7 @@ fn check_lang_start_fn<'tcx>(tcx: TyCtxt<'tcx>, fn_sig: ty::FnSig<'tcx>, def_id:
|
||||||
tcx.types.isize,
|
tcx.types.isize,
|
||||||
false,
|
false,
|
||||||
fn_sig.safety,
|
fn_sig.safety,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
));
|
));
|
||||||
|
|
||||||
let _ = check_function_signature(
|
let _ = check_function_signature(
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::lang_items::LangItem;
|
use rustc_hir::lang_items::LangItem;
|
||||||
|
@ -15,7 +16,6 @@ use rustc_middle::ty::visit::{TypeVisitable, TypeVisitableExt};
|
||||||
use rustc_middle::ty::{self, GenericArgs, Ty, TyCtxt, TypeSuperVisitable, TypeVisitor};
|
use rustc_middle::ty::{self, GenericArgs, Ty, TyCtxt, TypeSuperVisitable, TypeVisitor};
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::{DUMMY_SP, Span};
|
use rustc_span::{DUMMY_SP, Span};
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::error_reporting::traits::ArgKind;
|
use rustc_trait_selection::error_reporting::traits::ArgKind;
|
||||||
use rustc_trait_selection::traits;
|
use rustc_trait_selection::traits;
|
||||||
use rustc_type_ir::ClosureKind;
|
use rustc_type_ir::ClosureKind;
|
||||||
|
@ -508,7 +508,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
ret_param_ty,
|
ret_param_ty,
|
||||||
false,
|
false,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
));
|
));
|
||||||
|
|
||||||
Some(ExpectedSig { cause_span, sig })
|
Some(ExpectedSig { cause_span, sig })
|
||||||
|
@ -594,7 +594,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
return_ty,
|
return_ty,
|
||||||
false,
|
false,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::Rust,
|
ExternAbi::Rust,
|
||||||
));
|
));
|
||||||
|
|
||||||
Some(ExpectedSig { cause_span, sig })
|
Some(ExpectedSig { cause_span, sig })
|
||||||
|
@ -706,7 +706,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
sig.output(),
|
sig.output(),
|
||||||
sig.c_variadic,
|
sig.c_variadic,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::RustCall,
|
ExternAbi::RustCall,
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -845,7 +845,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
supplied_output_ty,
|
supplied_output_ty,
|
||||||
expected_sigs.liberated_sig.c_variadic,
|
expected_sigs.liberated_sig.c_variadic,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::RustCall,
|
ExternAbi::RustCall,
|
||||||
);
|
);
|
||||||
|
|
||||||
Ok(InferOk { value: expected_sigs, obligations: all_obligations })
|
Ok(InferOk { value: expected_sigs, obligations: all_obligations })
|
||||||
|
@ -922,7 +922,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
supplied_return,
|
supplied_return,
|
||||||
decl.c_variadic,
|
decl.c_variadic,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::RustCall,
|
ExternAbi::RustCall,
|
||||||
),
|
),
|
||||||
bound_vars,
|
bound_vars,
|
||||||
);
|
);
|
||||||
|
@ -1086,7 +1086,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
err_ty,
|
err_ty,
|
||||||
decl.c_variadic,
|
decl.c_variadic,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
Abi::RustCall,
|
ExternAbi::RustCall,
|
||||||
));
|
));
|
||||||
|
|
||||||
debug!("supplied_sig_of_closure: result={:?}", result);
|
debug!("supplied_sig_of_closure: result={:?}", result);
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
|
use rustc_abi::ExternAbi;
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
use rustc_errors::{Applicability, Diag, struct_span_code_err};
|
use rustc_errors::{Applicability, Diag, struct_span_code_err};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -60,7 +61,6 @@ use rustc_middle::ty::{self, GenericArgsRef, Ty, TyCtxt};
|
||||||
use rustc_session::parse::feature_err;
|
use rustc_session::parse::feature_err;
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
use rustc_span::{BytePos, DUMMY_SP, DesugaringKind, Span};
|
use rustc_span::{BytePos, DUMMY_SP, DesugaringKind, Span};
|
||||||
use rustc_target::spec::abi::Abi;
|
|
||||||
use rustc_trait_selection::infer::InferCtxtExt as _;
|
use rustc_trait_selection::infer::InferCtxtExt as _;
|
||||||
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt;
|
use rustc_trait_selection::traits::query::evaluate_obligation::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
|
@ -1244,7 +1244,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
};
|
};
|
||||||
if let (Some(a_sig), Some(b_sig)) = (a_sig, b_sig) {
|
if let (Some(a_sig), Some(b_sig)) = (a_sig, b_sig) {
|
||||||
// Intrinsics are not coercible to function pointers.
|
// Intrinsics are not coercible to function pointers.
|
||||||
if a_sig.abi() == Abi::RustIntrinsic || b_sig.abi() == Abi::RustIntrinsic {
|
if a_sig.abi() == ExternAbi::RustIntrinsic || b_sig.abi() == ExternAbi::RustIntrinsic {
|
||||||
return Err(TypeError::IntrinsicCast);
|
return Err(TypeError::IntrinsicCast);
|
||||||
}
|
}
|
||||||
// The signature must match.
|
// The signature must match.
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
//!
|
//!
|
||||||
//! See [`rustc_hir_analysis::check`] for more context on type checking in general.
|
//! See [`rustc_hir_analysis::check`] for more context on type checking in general.
|
||||||
|
|
||||||
|
use rustc_abi::{FIRST_VARIANT, FieldIdx};
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||||
use rustc_data_structures::unord::UnordMap;
|
use rustc_data_structures::unord::UnordMap;
|
||||||
|
@ -34,7 +35,6 @@ use rustc_span::edit_distance::find_best_match_for_name;
|
||||||
use rustc_span::hygiene::DesugaringKind;
|
use rustc_span::hygiene::DesugaringKind;
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::symbol::{Ident, Symbol, kw, sym};
|
use rustc_span::symbol::{Ident, Symbol, kw, sym};
|
||||||
use rustc_target::abi::{FIRST_VARIANT, FieldIdx};
|
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::{self, ObligationCauseCode, ObligationCtxt};
|
use rustc_trait_selection::traits::{self, ObligationCauseCode, ObligationCtxt};
|
||||||
use tracing::{debug, instrument, trace};
|
use tracing::{debug, instrument, trace};
|
||||||
|
|
|
@ -9,6 +9,7 @@ use std::slice::from_ref;
|
||||||
use hir::Expr;
|
use hir::Expr;
|
||||||
use hir::def::DefKind;
|
use hir::def::DefKind;
|
||||||
use hir::pat_util::EnumerateAndAdjustIterator as _;
|
use hir::pat_util::EnumerateAndAdjustIterator as _;
|
||||||
|
use rustc_abi::{FIRST_VARIANT, FieldIdx, VariantIdx};
|
||||||
use rustc_data_structures::fx::FxIndexMap;
|
use rustc_data_structures::fx::FxIndexMap;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_hir::def::{CtorOf, Res};
|
use rustc_hir::def::{CtorOf, Res};
|
||||||
|
@ -24,7 +25,6 @@ use rustc_middle::ty::{
|
||||||
};
|
};
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_span::{ErrorGuaranteed, Span};
|
use rustc_span::{ErrorGuaranteed, Span};
|
||||||
use rustc_target::abi::{FIRST_VARIANT, FieldIdx, VariantIdx};
|
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use tracing::{debug, trace};
|
use tracing::{debug, trace};
|
||||||
use ty::BorrowKind::ImmBorrow;
|
use ty::BorrowKind::ImmBorrow;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::collections::hash_map::Entry;
|
use std::collections::hash_map::Entry;
|
||||||
use std::slice;
|
use std::slice;
|
||||||
|
|
||||||
|
use rustc_abi::FieldIdx;
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_errors::{Applicability, Diag, ErrorGuaranteed, MultiSpan, StashKey};
|
use rustc_errors::{Applicability, Diag, ErrorGuaranteed, MultiSpan, StashKey};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -32,7 +33,6 @@ use rustc_span::Span;
|
||||||
use rustc_span::def_id::LocalDefId;
|
use rustc_span::def_id::LocalDefId;
|
||||||
use rustc_span::hygiene::DesugaringKind;
|
use rustc_span::hygiene::DesugaringKind;
|
||||||
use rustc_span::symbol::kw;
|
use rustc_span::symbol::kw;
|
||||||
use rustc_target::abi::FieldIdx;
|
|
||||||
use rustc_trait_selection::error_reporting::infer::need_type_info::TypeAnnotationNeeded;
|
use rustc_trait_selection::error_reporting::infer::need_type_info::TypeAnnotationNeeded;
|
||||||
use rustc_trait_selection::traits::{
|
use rustc_trait_selection::traits::{
|
||||||
self, NormalizeExt, ObligationCauseCode, StructurallyNormalizeExt,
|
self, NormalizeExt, ObligationCauseCode, StructurallyNormalizeExt,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
use hir::HirId;
|
use hir::HirId;
|
||||||
use rustc_abi::Primitive::Pointer;
|
use rustc_abi::Primitive::Pointer;
|
||||||
|
use rustc_abi::VariantIdx;
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
use rustc_errors::struct_span_code_err;
|
use rustc_errors::struct_span_code_err;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -7,7 +8,6 @@ use rustc_index::Idx;
|
||||||
use rustc_middle::bug;
|
use rustc_middle::bug;
|
||||||
use rustc_middle::ty::layout::{LayoutError, SizeSkeleton};
|
use rustc_middle::ty::layout::{LayoutError, SizeSkeleton};
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitableExt};
|
||||||
use rustc_target::abi::VariantIdx;
|
|
||||||
use tracing::trace;
|
use tracing::trace;
|
||||||
|
|
||||||
use super::FnCtxt;
|
use super::FnCtxt;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
use std::collections::hash_map::Entry::{Occupied, Vacant};
|
use std::collections::hash_map::Entry::{Occupied, Vacant};
|
||||||
|
|
||||||
|
use rustc_abi::FieldIdx;
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_errors::codes::*;
|
use rustc_errors::codes::*;
|
||||||
|
@ -20,7 +21,6 @@ use rustc_span::hygiene::DesugaringKind;
|
||||||
use rustc_span::source_map::Spanned;
|
use rustc_span::source_map::Spanned;
|
||||||
use rustc_span::symbol::{Ident, kw, sym};
|
use rustc_span::symbol::{Ident, kw, sym};
|
||||||
use rustc_span::{BytePos, DUMMY_SP, Span};
|
use rustc_span::{BytePos, DUMMY_SP, Span};
|
||||||
use rustc_target::abi::FieldIdx;
|
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use rustc_trait_selection::traits::{ObligationCause, ObligationCauseCode};
|
use rustc_trait_selection::traits::{ObligationCause, ObligationCauseCode};
|
||||||
use tracing::{debug, instrument, trace};
|
use tracing::{debug, instrument, trace};
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
|
use rustc_abi::FIRST_VARIANT;
|
||||||
use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
|
use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
|
||||||
use rustc_data_structures::unord::{ExtendUnord, UnordSet};
|
use rustc_data_structures::unord::{ExtendUnord, UnordSet};
|
||||||
use rustc_errors::{Applicability, MultiSpan};
|
use rustc_errors::{Applicability, MultiSpan};
|
||||||
|
@ -49,7 +50,6 @@ use rustc_middle::ty::{
|
||||||
use rustc_middle::{bug, span_bug};
|
use rustc_middle::{bug, span_bug};
|
||||||
use rustc_session::lint;
|
use rustc_session::lint;
|
||||||
use rustc_span::{BytePos, Pos, Span, Symbol, sym};
|
use rustc_span::{BytePos, Pos, Span, Symbol, sym};
|
||||||
use rustc_target::abi::FIRST_VARIANT;
|
|
||||||
use rustc_trait_selection::infer::InferCtxtExt;
|
use rustc_trait_selection::infer::InferCtxtExt;
|
||||||
use tracing::{debug, instrument};
|
use tracing::{debug, instrument};
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
tupled_upvars_ty_for_borrow,
|
tupled_upvars_ty_for_borrow,
|
||||||
false,
|
false,
|
||||||
hir::Safety::Safe,
|
hir::Safety::Safe,
|
||||||
rustc_target::spec::abi::Abi::Rust,
|
rustc_abi::ExternAbi::Rust,
|
||||||
),
|
),
|
||||||
self.tcx.mk_bound_variable_kinds(&[ty::BoundVariableKind::Region(
|
self.tcx.mk_bound_variable_kinds(&[ty::BoundVariableKind::Region(
|
||||||
ty::BoundRegionKind::BrEnv,
|
ty::BoundRegionKind::BrEnv,
|
||||||
|
|
Loading…
Add table
Reference in a new issue