//! This implements a single query, `check_mono_fn`, that gets fired for each
//! monomorphization of all functions. This lets us implement monomorphization-time
//! checks in a way that is friendly to incremental compilation.

use rustc_middle::query::Providers;
use rustc_middle::ty::{Instance, TyCtxt};

mod abi_check;
mod move_check;

fn check_mono_item<'tcx>(tcx: TyCtxt<'tcx>, instance: Instance<'tcx>) {
    let body = tcx.instance_mir(instance.def);
    abi_check::check_feature_dependent_abi(tcx, instance, body);
    move_check::check_moves(tcx, instance, body);
}

pub(super) fn provide(providers: &mut Providers) {
    *providers = Providers { check_mono_item, ..*providers }
}
