rename stable_mir to rustc_public, and rustc_smir to rustc_public_bridge

This commit is contained in:
Makai 2025-07-12 15:28:50 +00:00
parent ad635e5d06
commit 6598c61725
70 changed files with 277 additions and 267 deletions

View file

@ -3271,8 +3271,8 @@ dependencies = [
"rustc_codegen_ssa",
"rustc_driver",
"rustc_driver_impl",
"rustc_smir",
"stable_mir",
"rustc_public",
"rustc_public_bridge",
"tikv-jemalloc-sys",
]
@ -3709,6 +3709,7 @@ dependencies = [
"rustc_passes",
"rustc_pattern_analysis",
"rustc_privacy",
"rustc_public",
"rustc_query_system",
"rustc_resolve",
"rustc_session",
@ -3718,7 +3719,6 @@ dependencies = [
"rustc_ty_utils",
"serde_json",
"shlex",
"stable_mir",
"tracing",
"windows 0.61.3",
]
@ -4415,6 +4415,36 @@ dependencies = [
"rustc-literal-escaper",
]
[[package]]
name = "rustc_public"
version = "0.1.0-preview"
dependencies = [
"rustc_abi",
"rustc_hir",
"rustc_middle",
"rustc_public_bridge",
"rustc_session",
"rustc_span",
"rustc_target",
"scoped-tls",
"serde",
"tracing",
]
[[package]]
name = "rustc_public_bridge"
version = "0.0.0"
dependencies = [
"rustc_abi",
"rustc_data_structures",
"rustc_hir",
"rustc_hir_pretty",
"rustc_middle",
"rustc_session",
"rustc_span",
"rustc_target",
]
[[package]]
name = "rustc_query_impl"
version = "0.0.0"
@ -4542,20 +4572,6 @@ dependencies = [
"windows 0.61.3",
]
[[package]]
name = "rustc_smir"
version = "0.0.0"
dependencies = [
"rustc_abi",
"rustc_data_structures",
"rustc_hir",
"rustc_hir_pretty",
"rustc_middle",
"rustc_session",
"rustc_span",
"rustc_target",
]
[[package]]
name = "rustc_span"
version = "0.0.0"
@ -5103,22 +5119,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "stable_mir"
version = "0.1.0-preview"
dependencies = [
"rustc_abi",
"rustc_hir",
"rustc_middle",
"rustc_session",
"rustc_smir",
"rustc_span",
"rustc_target",
"scoped-tls",
"serde",
"tracing",
]
[[package]]
name = "stacker"
version = "0.1.21"

View file

@ -13,11 +13,11 @@ rustc_codegen_ssa = { path = "../rustc_codegen_ssa" }
rustc_driver = { path = "../rustc_driver" }
rustc_driver_impl = { path = "../rustc_driver_impl" }
# Make sure rustc_smir ends up in the sysroot, because this
# crate is intended to be used by stable MIR consumers, which are not in-tree.
rustc_smir = { path = "../rustc_smir" }
rustc_public = { path = "../rustc_public" }
stable_mir = { path = "../stable_mir" }
# Make sure rustc_public_bridge ends up in the sysroot, because this
# crate is intended to be used by stable MIR consumers, which are not in-tree.
rustc_public_bridge = { path = "../rustc_public_bridge" }
# tidy-alphabetical-end
[dependencies.tikv-jemalloc-sys]

View file

@ -41,6 +41,7 @@ rustc_parse = { path = "../rustc_parse" }
rustc_passes = { path = "../rustc_passes" }
rustc_pattern_analysis = { path = "../rustc_pattern_analysis" }
rustc_privacy = { path = "../rustc_privacy" }
rustc_public = { path = "../rustc_public", features = ["rustc_internal"] }
rustc_query_system = { path = "../rustc_query_system" }
rustc_resolve = { path = "../rustc_resolve" }
rustc_session = { path = "../rustc_session" }
@ -50,7 +51,6 @@ rustc_trait_selection = { path = "../rustc_trait_selection" }
rustc_ty_utils = { path = "../rustc_ty_utils" }
serde_json = "1.0.59"
shlex = "1.0"
stable_mir = { path = "../stable_mir", features = ["rustc_internal"] }
tracing = { version = "0.1.35" }
# tidy-alphabetical-end

View file

@ -8,10 +8,10 @@ use rustc_middle::bug;
use rustc_middle::mir::{write_mir_graphviz, write_mir_pretty};
use rustc_middle::ty::{self, TyCtxt};
use rustc_mir_build::thir::print::{thir_flat, thir_tree};
use rustc_public::rustc_internal::pretty::write_smir_pretty;
use rustc_session::Session;
use rustc_session::config::{OutFileName, PpHirMode, PpMode, PpSourceMode};
use rustc_span::{FileName, Ident};
use stable_mir::rustc_internal::pretty::write_smir_pretty;
use tracing::debug;
use {rustc_ast as ast, rustc_hir_pretty as pprust_hir};

View file

@ -1,5 +1,5 @@
[package]
name = "stable_mir"
name = "rustc_public"
version = "0.1.0-preview"
edition = "2024"
@ -8,8 +8,8 @@ edition = "2024"
rustc_abi = { path = "../rustc_abi" }
rustc_hir = { path = "../rustc_hir" }
rustc_middle = { path = "../rustc_middle" }
rustc_public_bridge = { path = "../rustc_public_bridge" }
rustc_session = { path = "../rustc_session" }
rustc_smir = { path = "../rustc_smir" }
rustc_span = { path = "../rustc_span" }
rustc_target = { path = "../rustc_target" }
scoped-tls = "1.0"

View file

@ -2,14 +2,14 @@
//!
//! This module is responsible for constructing stable components.
//! All operations requiring rustc queries must be delegated
//! to `rustc_smir::alloc` to maintain stability guarantees.
//! to `rustc_public_bridge::alloc` to maintain stability guarantees.
use rustc_abi::Align;
use rustc_middle::mir::ConstValue;
use rustc_middle::mir::interpret::AllocRange;
use rustc_smir::bridge::SmirError;
use rustc_smir::context::SmirCtxt;
use rustc_smir::{Tables, alloc};
use rustc_public_bridge::bridge::SmirError;
use rustc_public_bridge::context::SmirCtxt;
use rustc_public_bridge::{Tables, alloc};
use super::Error;
use super::compiler_interface::BridgeTys;
@ -59,7 +59,7 @@ pub(crate) fn try_new_allocation<'tcx>(
}
ConstValue::Indirect { alloc_id, offset } => {
let alloc = alloc::try_new_indirect(alloc_id, cx);
use rustc_smir::context::SmirAllocRange;
use rustc_public_bridge::context::SmirAllocRange;
Ok(allocation_filter(&alloc.0, cx.alloc_range(offset, layout.size), tables, cx))
}
}

View file

@ -6,8 +6,8 @@
use std::cell::Cell;
use rustc_hir::def::DefKind;
use rustc_smir::context::SmirCtxt;
use rustc_smir::{Bridge, SmirContainer};
use rustc_public_bridge::context::SmirCtxt;
use rustc_public_bridge::{Bridge, SmirContainer};
use tracing::debug;
use crate::abi::{FnAbi, Layout, LayoutShape, ReprOptions};
@ -68,7 +68,7 @@ impl Bridge for BridgeTys {
/// Stable public API for querying compiler information.
///
/// All queries are delegated to [`rustc_smir::context::SmirCtxt`] that provides
/// All queries are delegated to [`rustc_public_bridge::context::SmirCtxt`] that provides
/// similar APIs but based on internal rustc constructs.
///
/// Do not use this directly. This is currently used in the macro expansion.
@ -567,7 +567,7 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
DefKind::Fn => ForeignItemKind::Fn(tables.fn_def(def_id)),
DefKind::Static { .. } => ForeignItemKind::Static(tables.static_def(def_id)),
DefKind::ForeignTy => {
use rustc_smir::context::SmirTy;
use rustc_public_bridge::context::SmirTy;
ForeignItemKind::Type(tables.intern_ty(cx.new_foreign(def_id)))
}
def_kind => unreachable!("Unexpected kind for a foreign item: {:?}", def_kind),

View file

@ -7,7 +7,7 @@
use std::fmt::{Debug, Display, Formatter};
use std::{fmt, io};
use rustc_smir::bridge::SmirError;
use rustc_public_bridge::bridge::SmirError;
macro_rules! error {
($fmt: literal $(,)?) => { Error(format!($fmt)) };

View file

@ -1,4 +1,4 @@
//! The WIP stable interface to rustc internals.
//! The WIP public interface to rustc internals.
//!
//! For more information see <https://github.com/rust-lang/project-stable-mir>
//!
@ -22,9 +22,9 @@
use std::fmt::Debug;
use std::{fmt, io};
pub(crate) use rustc_smir::IndexedVal;
use rustc_smir::Tables;
use rustc_smir::context::SmirCtxt;
pub(crate) use rustc_public_bridge::IndexedVal;
use rustc_public_bridge::Tables;
use rustc_public_bridge::context::SmirCtxt;
/// Export the rustc_internal APIs. Note that this module has no stability
/// guarantees and it is not taken into account for semver.
#[cfg(feature = "rustc_internal")]
@ -244,7 +244,7 @@ pub fn opaque<T: Debug>(value: &T) -> Opaque {
macro_rules! bridge_impl {
($name: ident, $ty: ty) => {
impl rustc_smir::bridge::$name<compiler_interface::BridgeTys> for $ty {
impl rustc_public_bridge::bridge::$name<compiler_interface::BridgeTys> for $ty {
fn new(def: crate::DefId) -> Self {
Self(def)
}
@ -273,13 +273,15 @@ bridge_impl!(AssocDef, crate::ty::AssocDef);
bridge_impl!(OpaqueDef, crate::ty::OpaqueDef);
bridge_impl!(StaticDef, crate::mir::mono::StaticDef);
impl rustc_smir::bridge::Prov<compiler_interface::BridgeTys> for crate::ty::Prov {
impl rustc_public_bridge::bridge::Prov<compiler_interface::BridgeTys> for crate::ty::Prov {
fn new(aid: crate::mir::alloc::AllocId) -> Self {
Self(aid)
}
}
impl rustc_smir::bridge::Allocation<compiler_interface::BridgeTys> for crate::ty::Allocation {
impl rustc_public_bridge::bridge::Allocation<compiler_interface::BridgeTys>
for crate::ty::Allocation
{
fn new<'tcx>(
bytes: Vec<Option<u8>>,
ptrs: Vec<(usize, rustc_middle::mir::interpret::AllocId)>,

View file

@ -674,7 +674,7 @@ pub enum AggregateKind {
Tuple,
Adt(AdtDef, VariantIdx, GenericArgs, Option<UserTypeAnnotationIndex>, Option<FieldIdx>),
Closure(ClosureDef, GenericArgs),
// FIXME(stable_mir): Movability here is redundant
// FIXME(rustc_public): Movability here is redundant
Coroutine(CoroutineDef, GenericArgs, Movability),
CoroutineClosure(CoroutineClosureDef, GenericArgs),
RawPtr(Ty, Mutability),

View file

@ -1,7 +1,7 @@
use std::fmt::{Debug, Formatter};
use std::io;
use rustc_smir::bridge::SmirError;
use rustc_public_bridge::bridge::SmirError;
use serde::Serialize;
use crate::abi::FnAbi;

View file

@ -6,8 +6,8 @@
use std::cell::{Cell, RefCell};
use rustc_middle::ty::TyCtxt;
use rustc_smir::context::SmirCtxt;
use rustc_smir::{Bridge, SmirContainer, Tables};
use rustc_public_bridge::context::SmirCtxt;
use rustc_public_bridge::{Bridge, SmirContainer, Tables};
use rustc_span::def_id::CrateNum;
use scoped_tls::scoped_thread_local;
@ -105,11 +105,11 @@ where
/// # extern crate rustc_interface;
/// # extern crate rustc_middle;
/// # #[macro_use]
/// # extern crate stable_mir;
/// # extern crate rustc_public;
/// #
/// # fn main() {
/// # use std::ops::ControlFlow;
/// # use stable_mir::CompilerError;
/// # use rustc_public::CompilerError;
/// fn analyze_code() -> ControlFlow<(), ()> {
/// // Your code goes in here.
/// # ControlFlow::Continue(())
@ -125,11 +125,11 @@ where
/// # extern crate rustc_interface;
/// # extern crate rustc_middle;
/// # #[macro_use]
/// # extern crate stable_mir;
/// # extern crate rustc_public;
/// #
/// # fn main() {
/// # use std::ops::ControlFlow;
/// # use stable_mir::CompilerError;
/// # use rustc_public::CompilerError;
/// fn analyze_code(extra_args: Vec<String>) -> ControlFlow<(), ()> {
/// # let _ = extra_args;
/// // Your code goes in here.
@ -187,8 +187,8 @@ macro_rules! run_driver {
use rustc_driver::{Callbacks, Compilation, run_compiler};
use rustc_middle::ty::TyCtxt;
use rustc_interface::interface;
use stable_mir::rustc_internal;
use stable_mir::CompilerError;
use rustc_public::rustc_internal;
use rustc_public::CompilerError;
use std::ops::ControlFlow;
pub struct StableMir<B = (), C = (), F = fn($(optional!($with_tcx TyCtxt))?) -> ControlFlow<B, C>>

View file

@ -560,7 +560,7 @@ pub enum RigidTy {
FnDef(FnDef, GenericArgs),
FnPtr(PolyFnSig),
Closure(ClosureDef, GenericArgs),
// FIXME(stable_mir): Movability here is redundant
// FIXME(rustc_public): Movability here is redundant
Coroutine(CoroutineDef, GenericArgs, Movability),
CoroutineClosure(CoroutineClosureDef, GenericArgs),
Dynamic(Vec<Binder<ExistentialPredicate>>, Region, DynKind),

View file

@ -3,10 +3,10 @@
//! This module will only include a few constructs to allow users to invoke internal rustc APIs
//! due to incomplete stable coverage.
// Prefer importing stable_mir over internal rustc constructs to make this file more readable.
// Prefer importing rustc_public over internal rustc constructs to make this file more readable.
use rustc_middle::ty::{self as rustc_ty, Const as InternalConst, Ty as InternalTy};
use rustc_smir::Tables;
use rustc_public_bridge::Tables;
use crate::abi::Layout;
use crate::compiler_interface::BridgeTys;

View file

@ -1,15 +1,15 @@
//! This module holds the logic to convert rustc internal ADTs into stable mir ADTs.
//!
//! The conversion from stable to internal is not meant to be complete,
//! and it should be added as when needed to be passed as input to rustc_smir functions.
//! and it should be added as when needed to be passed as input to rustc_public_bridge functions.
//!
//! For contributors, please make sure to avoid calling rustc's internal functions and queries.
//! These should be done via `rustc_smir` APIs, but it's possible to access ADT fields directly.
//! These should be done via `rustc_public_bridge` APIs, but it's possible to access ADT fields directly.
use std::ops::RangeInclusive;
use rustc_smir::Tables;
use rustc_smir::context::SmirCtxt;
use rustc_public_bridge::Tables;
use rustc_public_bridge::context::SmirCtxt;
use super::Stable;
use crate::compiler_interface::BridgeTys;

View file

@ -4,8 +4,8 @@
use rustc_abi::{ArmCall, CanonAbi, InterruptKind, X86Call};
use rustc_middle::ty;
use rustc_smir::Tables;
use rustc_smir::context::SmirCtxt;
use rustc_public_bridge::Tables;
use rustc_public_bridge::context::SmirCtxt;
use rustc_target::callconv;
use crate::abi::{

View file

@ -2,9 +2,9 @@
use rustc_middle::mir::mono::MonoItem;
use rustc_middle::{bug, mir};
use rustc_smir::Tables;
use rustc_smir::bridge::SmirError;
use rustc_smir::context::SmirCtxt;
use rustc_public_bridge::Tables;
use rustc_public_bridge::bridge::SmirError;
use rustc_public_bridge::context::SmirCtxt;
use crate::compiler_interface::BridgeTys;
use crate::mir::alloc::GlobalAlloc;
@ -821,7 +821,7 @@ impl<'tcx> Stable<'tcx> for mir::interpret::Allocation {
tables: &mut Tables<'cx, BridgeTys>,
cx: &SmirCtxt<'cx, BridgeTys>,
) -> Self::T {
use rustc_smir::context::SmirAllocRange;
use rustc_public_bridge::context::SmirAllocRange;
alloc::allocation_filter(
self,
cx.alloc_range(rustc_abi::Size::ZERO, self.size()),

View file

@ -1,8 +1,8 @@
//! Conversion of internal Rust compiler items to stable ones.
use rustc_abi::FieldIdx;
use rustc_smir::Tables;
use rustc_smir::context::SmirCtxt;
use rustc_public_bridge::Tables;
use rustc_public_bridge::context::SmirCtxt;
use super::Stable;
use crate::compiler_interface::BridgeTys;

View file

@ -2,8 +2,8 @@
use rustc_middle::ty::Ty;
use rustc_middle::{bug, mir, ty};
use rustc_smir::Tables;
use rustc_smir::context::SmirCtxt;
use rustc_public_bridge::Tables;
use rustc_public_bridge::context::SmirCtxt;
use crate::alloc;
use crate::compiler_interface::BridgeTys;

View file

@ -9,8 +9,8 @@ use std::marker::PointeeSized;
use rustc_hir::def::DefKind;
use rustc_middle::ty::{List, Ty, TyCtxt};
use rustc_middle::{mir, ty};
use rustc_smir::Tables;
use rustc_smir::context::SmirCtxt;
use rustc_public_bridge::Tables;
use rustc_public_bridge::context::SmirCtxt;
use super::compiler_interface::BridgeTys;
use crate::{CtorKind, ItemKind};
@ -21,7 +21,7 @@ mod internal_cx;
/// Trait that defines the methods that are fine to call from [`RustcInternal`].
///
/// This trait is only for [`RustcInternal`]. Any other other access to rustc's internals
/// should go through [`rustc_smir::context::SmirCtxt`].
/// should go through [`rustc_public_bridge::context::SmirCtxt`].
pub trait InternalCx<'tcx>: Copy + Clone {
fn tcx(self) -> TyCtxt<'tcx>;

View file

@ -1,5 +1,5 @@
[package]
name = "rustc_smir"
name = "rustc_public_bridge"
version = "0.0.0"
edition = "2024"

View file

@ -1,7 +1,7 @@
//! Internal memory allocator implementation for StableMIR.
//!
//! This module handles all direct interactions with rustc queries and performs
//! the actual memory allocations. The stable interface in `stable_mir::alloc`
//! the actual memory allocations. The stable interface in `rustc_public::alloc`
//! delegates all query-related operations to this implementation.
use rustc_abi::{Size, TyAndLayout};

View file

@ -1,8 +1,8 @@
//! Defines a set of traits that is used for abstracting
//! stable_mir's components that are needed in rustc_smir.
//! rustc_public's components that are needed in rustc_public_bridge.
//!
//! These traits are really useful when programming
//! in stable_mir-agnostic settings.
//! in rustc_public-agnostic settings.
use std::fmt::Debug;

View file

@ -3,7 +3,7 @@
//! This crate is responsible for building Stable MIR components from internal components.
//!
//! This crate is not intended to be invoked directly by users.
//! This crate is the public API of rustc that will be invoked by the `stable_mir` crate.
//! This crate is the public API of rustc that will be invoked by the `rustc_public` crate.
//!
//! For more information see <https://github.com/rust-lang/project-stable-mir>
//!
@ -42,7 +42,7 @@ pub mod bridge;
mod builder;
pub mod context;
#[deprecated(note = "please use `stable_mir::rustc_internal` instead")]
#[deprecated(note = "please use `rustc_public::rustc_internal` instead")]
pub mod rustc_internal {}
/// A container which is used for TLS.
@ -211,7 +211,7 @@ impl<'tcx, B: Bridge> Tables<'tcx, B> {
}
/// A trait defining types that are used to emulate StableMIR components, which is really
/// useful when programming in stable_mir-agnostic settings.
/// useful when programming in rustc_public-agnostic settings.
pub trait Bridge: Sized {
type DefId: Copy + Debug + PartialEq + IndexedVal;
type AllocId: Copy + Debug + PartialEq + IndexedVal;

View file

@ -2400,10 +2400,10 @@ pub fn run_cargo(
keep = true;
} else if rlib_only_metadata {
if filename.contains("jemalloc_sys")
|| filename.contains("rustc_smir")
|| filename.contains("stable_mir")
|| filename.contains("rustc_public_bridge")
|| filename.contains("rustc_public")
{
// jemalloc_sys and rustc_smir are not linked into librustc_driver.so,
// jemalloc_sys and rustc_public_bridge are not linked into librustc_driver.so,
// so we need to distribute them as rlib to be able to use them.
keep |= filename.ends_with(".rlib");
} else {

View file

@ -14,17 +14,17 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::abi::{
use rustc_public::abi::{
ArgAbi, CallConvention, FieldsShape, IntegerLength, PassMode, Primitive, Scalar, ValueAbi,
VariantsShape,
};
use stable_mir::mir::MirVisitor;
use stable_mir::mir::mono::Instance;
use stable_mir::target::MachineInfo;
use stable_mir::ty::{AdtDef, RigidTy, Ty, TyKind};
use stable_mir::{CrateDef, CrateItem, CrateItems, ItemKind};
use rustc_public::mir::MirVisitor;
use rustc_public::mir::mono::Instance;
use rustc_public::target::MachineInfo;
use rustc_public::ty::{AdtDef, RigidTy, Ty, TyKind};
use rustc_public::{CrateDef, CrateItem, CrateItems, ItemKind};
use std::assert_matches::assert_matches;
use std::collections::HashSet;
use std::convert::TryFrom;
@ -36,7 +36,7 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
// Find items in the local crate.
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
// Test fn_abi
let target_fn = *get_item(&items, (ItemKind::Fn, "fn_abi")).unwrap();
@ -69,7 +69,7 @@ fn test_stable_mir() -> ControlFlow<()> {
assert!(ptr_variadic_fn_abi.c_variadic);
assert_eq!(ptr_variadic_fn_abi.args.len(), 1);
let entry = stable_mir::entry_fn().unwrap();
let entry = rustc_public::entry_fn().unwrap();
let main_fn = Instance::try_from(entry).unwrap();
let mut visitor = AdtDefVisitor::default();
visitor.visit_body(&main_fn.body().unwrap());
@ -147,7 +147,7 @@ fn check_niche(abi: &ArgAbi) {
fn get_item<'a>(
items: &'a CrateItems,
item: (ItemKind, &str),
) -> Option<&'a stable_mir::CrateItem> {
) -> Option<&'a rustc_public::CrateItem> {
items.iter().find(|crate_item| (item.0 == crate_item.kind()) && crate_item.name() == item.1)
}
@ -157,7 +157,7 @@ struct AdtDefVisitor {
}
impl MirVisitor for AdtDefVisitor {
fn visit_ty(&mut self, ty: &Ty, _location: stable_mir::mir::visit::Location) {
fn visit_ty(&mut self, ty: &Ty, _location: rustc_public::mir::visit::Location) {
if let TyKind::RigidTy(RigidTy::Adt(adt, _)) = ty.kind() {
self.adt_defs.insert(adt);
}

View file

@ -17,7 +17,7 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use std::ascii::Char;
use std::assert_matches::assert_matches;
@ -27,19 +27,19 @@ use std::ffi::CStr;
use std::io::Write;
use std::ops::ControlFlow;
use stable_mir::crate_def::CrateDef;
use stable_mir::mir::Body;
use stable_mir::mir::alloc::GlobalAlloc;
use stable_mir::mir::mono::{Instance, StaticDef};
use stable_mir::ty::{Allocation, ConstantKind};
use stable_mir::{CrateItem, CrateItems, ItemKind};
use rustc_public::crate_def::CrateDef;
use rustc_public::mir::Body;
use rustc_public::mir::alloc::GlobalAlloc;
use rustc_public::mir::mono::{Instance, StaticDef};
use rustc_public::ty::{Allocation, ConstantKind};
use rustc_public::{CrateItem, CrateItems, ItemKind};
const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
// Find items in the local crate.
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
check_foo(*get_item(&items, (ItemKind::Static, "FOO")).unwrap());
check_bar(*get_item(&items, (ItemKind::Static, "BAR")).unwrap());
check_len(*get_item(&items, (ItemKind::Static, "LEN")).unwrap());
@ -164,7 +164,7 @@ fn check_other_consts(item: CrateItem) {
}
let bool_id = bool_id.unwrap();
let char_id = char_id.unwrap();
// FIXME(stable_mir): add `read_ptr` to `Allocation`
// FIXME(rustc_public): add `read_ptr` to `Allocation`
assert_ne!(bool_id, char_id);
}
@ -196,7 +196,7 @@ fn check_len(item: CrateItem) {
fn get_item<'a>(
items: &'a CrateItems,
item: (ItemKind, &str),
) -> Option<&'a stable_mir::CrateItem> {
) -> Option<&'a rustc_public::CrateItem> {
items.iter().find(|crate_item| (item.0 == crate_item.kind()) && crate_item.name() == item.1)
}

View file

@ -14,20 +14,20 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate stable_mir;
extern crate rustc_public;
use std::collections::HashSet;
use std::io::Write;
use std::ops::ControlFlow;
use stable_mir::ty::*;
use stable_mir::{CrateDef, *};
use rustc_public::ty::*;
use rustc_public::{CrateDef, *};
const CRATE_NAME: &str = "crate_assoc_items";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_assoc_items() -> ControlFlow<()> {
let local_crate = stable_mir::local_crate();
let local_crate = rustc_public::local_crate();
check_items(
&local_crate.fn_defs(),
&[

View file

@ -13,9 +13,9 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::{CrateDef, CrateItems};
use rustc_public::{CrateDef, CrateItems};
use std::io::Write;
use std::ops::ControlFlow;
@ -24,7 +24,7 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
// Find items in the local crate.
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
test_tool(&items);
@ -46,7 +46,7 @@ fn test_tool(items: &CrateItems) {
fn get_item<'a>(
items: &'a CrateItems,
name: &str,
) -> Option<&'a stable_mir::CrateItem> {
) -> Option<&'a rustc_public::CrateItem> {
items.iter().find(|crate_item| crate_item.name() == name)
}

View file

@ -13,12 +13,12 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::mir::mono::Instance;
use stable_mir::mir::visit::{Location, MirVisitor};
use stable_mir::mir::{LocalDecl, Rvalue, Statement, StatementKind, Terminator, TerminatorKind};
use stable_mir::ty::{RigidTy, TyKind};
use rustc_public::mir::mono::Instance;
use rustc_public::mir::visit::{Location, MirVisitor};
use rustc_public::mir::{LocalDecl, Rvalue, Statement, StatementKind, Terminator, TerminatorKind};
use rustc_public::ty::{RigidTy, TyKind};
use std::collections::HashSet;
use std::convert::TryFrom;
use std::io::Write;
@ -27,7 +27,7 @@ use std::ops::ControlFlow;
/// This function tests that we can correctly get type information from binary operations.
fn test_binops() -> ControlFlow<()> {
// Find items in the local crate.
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
let mut instances =
items.into_iter().map(|item| Instance::try_from(item).unwrap()).collect::<Vec<_>>();
while let Some(instance) = instances.pop() {

View file

@ -14,18 +14,18 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use std::io::Write;
use std::ops::ControlFlow;
use stable_mir::mir::Body;
use stable_mir::ty::{RigidTy, TyKind};
use rustc_public::mir::Body;
use rustc_public::ty::{RigidTy, TyKind};
const CRATE_NAME: &str = "crate_coroutine_body";
fn test_coroutine_body() -> ControlFlow<()> {
let crate_items = stable_mir::all_local_items();
let crate_items = rustc_public::all_local_items();
if let Some(body) = crate_items.iter().find_map(|item| {
let item_ty = item.ty();
if let TyKind::RigidTy(RigidTy::Coroutine(def, ..)) = &item_ty.kind() {

View file

@ -14,9 +14,9 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::CrateDef;
use rustc_public::CrateDef;
use std::collections::HashSet;
use std::io::Write;
use std::ops::ControlFlow;
@ -26,7 +26,7 @@ const CRATE_NAME: &str = "crate_defs";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
// Find items in the local crate.
let local = stable_mir::local_crate();
let local = rustc_public::local_crate();
check_items(&local.statics(), &["PRIVATE_STATIC", "dummy::PUBLIC_STATIC"]);
check_items(
&local.fn_defs(),
@ -44,7 +44,7 @@ fn test_stable_mir() -> ControlFlow<()> {
// Find items inside core crate.
// FIXME: We are currently missing primitive type methods and trait implementations for external
// crates.
let core = stable_mir::find_crates("core").pop().expect("Cannot find `core` crate");
let core = rustc_public::find_crates("core").pop().expect("Cannot find `core` crate");
contains(
&core.fn_defs(),
&[

View file

@ -14,10 +14,10 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::ty::{Ty, ForeignItemKind};
use stable_mir::*;
use rustc_public::ty::{Ty, ForeignItemKind};
use rustc_public::*;
use std::io::Write;
use std::ops::ControlFlow;
@ -25,7 +25,7 @@ const CRATE_NAME: &str = "crate_def_ty";
/// Test if we can retrieve type information from different definitions.
fn test_def_tys() -> ControlFlow<()> {
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
for item in &items {
// Type from crate items.
let ty = item.ty();
@ -37,7 +37,7 @@ fn test_def_tys() -> ControlFlow<()> {
}
}
let foreign_items = stable_mir::local_crate().foreign_modules();
let foreign_items = rustc_public::local_crate().foreign_modules();
for item in foreign_items[0].module().items() {
// Type from foreign items.
let ty = item.ty();

View file

@ -13,13 +13,13 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate stable_mir;
extern crate rustc_public;
use std::assert_matches::assert_matches;
use mir::{mono::Instance, TerminatorKind::*};
use stable_mir::mir::mono::InstanceKind;
use stable_mir::ty::{RigidTy, TyKind, Ty, UintTy};
use stable_mir::*;
use rustc_public::mir::mono::InstanceKind;
use rustc_public::ty::{RigidTy, TyKind, Ty, UintTy};
use rustc_public::*;
use std::io::Write;
use std::ops::ControlFlow;
@ -27,7 +27,7 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
let entry = stable_mir::entry_fn().unwrap();
let entry = rustc_public::entry_fn().unwrap();
let main_fn = Instance::try_from(entry).unwrap();
assert_eq!(main_fn.name(), "main");
assert_eq!(main_fn.trimmed_name(), "main");

View file

@ -14,9 +14,9 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate rustc_span;
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::{
use rustc_public::{
ty::{Abi, ForeignItemKind},
*,
};

View file

@ -13,21 +13,21 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate stable_mir;
extern crate rustc_public;
use std::io::Write;
use std::ops::ControlFlow;
use mir::mono::Instance;
use mir::TerminatorKind::*;
use stable_mir::ty::{RigidTy, TyKind};
use stable_mir::*;
use rustc_public::ty::{RigidTy, TyKind};
use rustc_public::*;
const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
// Get all items and split generic vs monomorphic items.
let (generic, mono): (Vec<_>, Vec<_>) =

View file

@ -18,12 +18,12 @@ extern crate rustc_hir;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::mir::mono::{Instance, InstanceKind};
use stable_mir::mir::visit::{Location, MirVisitor};
use stable_mir::mir::{LocalDecl, Terminator, TerminatorKind};
use stable_mir::ty::{FnDef, GenericArgs, RigidTy, TyKind};
use rustc_public::mir::mono::{Instance, InstanceKind};
use rustc_public::mir::visit::{Location, MirVisitor};
use rustc_public::mir::{LocalDecl, Terminator, TerminatorKind};
use rustc_public::ty::{FnDef, GenericArgs, RigidTy, TyKind};
use std::assert_matches::assert_matches;
use std::convert::TryFrom;
use std::io::Write;
@ -32,7 +32,7 @@ use std::ops::ControlFlow;
/// This function tests that we can correctly get type information from binary operations.
fn test_intrinsics() -> ControlFlow<()> {
// Find items in the local crate.
let main_def = stable_mir::all_local_items()[0];
let main_def = rustc_public::all_local_items()[0];
let main_instance = Instance::try_from(main_def).unwrap();
let main_body = main_instance.body().unwrap();
let mut visitor = CallsVisitor { locals: main_body.locals(), calls: Default::default() };

View file

@ -13,9 +13,9 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::*;
use rustc_public::*;
use std::io::Write;
use std::ops::ControlFlow;
@ -23,7 +23,7 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_item_kind() -> ControlFlow<()> {
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
assert_eq!(items.len(), 4);
// Constructor item.
for item in items {

View file

@ -12,11 +12,11 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate stable_mir;
extern crate rustc_public;
use mir::mono::Instance;
use ty::{Ty, TyKind, RigidTy};
use stable_mir::*;
use rustc_public::*;
use std::io::Write;
use std::ops::ControlFlow;
@ -24,7 +24,7 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
// Get all items and split generic vs monomorphic items.
let instances: Vec<_> =

View file

@ -14,9 +14,9 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::CrateDef;
use rustc_public::CrateDef;
use std::collections::HashSet;
use std::io::Write;
use std::ops::ControlFlow;
@ -25,7 +25,7 @@ const CRATE_NAME: &str = "trait_test";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_traits() -> ControlFlow<()> {
let local_crate = stable_mir::local_crate();
let local_crate = rustc_public::local_crate();
let local_traits = local_crate.trait_decls();
assert_eq!(local_traits.len(), 1, "Expected `Max` trait, but found {:?}", local_traits);
assert_eq!(&local_traits[0].name(), "Max");
@ -42,14 +42,14 @@ fn test_traits() -> ControlFlow<()> {
assert_impl(&impl_names, "<u64 as Max>");
assert_impl(&impl_names, "<impl std::convert::From<Positive> for u64>");
let all_traits = stable_mir::all_trait_decls();
let all_traits = rustc_public::all_trait_decls();
assert!(all_traits.len() > local_traits.len());
assert!(
local_traits.iter().all(|t| all_traits.contains(t)),
"Local: {local_traits:#?}, All: {all_traits:#?}"
);
let all_impls = stable_mir::all_trait_impls();
let all_impls = rustc_public::all_trait_impls();
assert!(all_impls.len() > local_impls.len());
assert!(
local_impls.iter().all(|t| all_impls.contains(t)),

View file

@ -15,13 +15,13 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::mir::alloc::GlobalAlloc;
use stable_mir::mir::mono::Instance;
use stable_mir::mir::{Body, ConstOperand, Operand, Rvalue, StatementKind, TerminatorKind};
use stable_mir::ty::{ConstantKind, MirConst};
use stable_mir::{CrateDef, CrateItems, ItemKind};
use rustc_public::mir::alloc::GlobalAlloc;
use rustc_public::mir::mono::Instance;
use rustc_public::mir::{Body, ConstOperand, Operand, Rvalue, StatementKind, TerminatorKind};
use rustc_public::ty::{ConstantKind, MirConst};
use rustc_public::{CrateDef, CrateItems, ItemKind};
use std::convert::TryFrom;
use std::io::Write;
use std::ops::ControlFlow;
@ -31,7 +31,7 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to transform the MIR.
fn test_transform() -> ControlFlow<()> {
// Find items in the local crate.
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
// Test fn_abi
let target_fn = *get_item(&items, (ItemKind::Fn, "dummy")).unwrap();
@ -109,7 +109,7 @@ fn change_panic_msg(mut body: Body, new_msg: &str) -> Body {
fn get_item<'a>(
items: &'a CrateItems,
item: (ItemKind, &str),
) -> Option<&'a stable_mir::CrateItem> {
) -> Option<&'a rustc_public::CrateItem> {
items.iter().find(|crate_item| (item.0 == crate_item.kind()) && crate_item.name() == item.1)
}

View file

@ -15,13 +15,13 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::mir::{
use rustc_public::mir::{
Body, FieldIdx, MirVisitor, Place, ProjectionElem,
visit::{Location, PlaceContext},
};
use stable_mir::ty::{RigidTy, Ty, TyKind};
use rustc_public::ty::{RigidTy, Ty, TyKind};
use std::io::Write;
use std::ops::ControlFlow;
@ -29,7 +29,7 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
let main_fn = stable_mir::entry_fn();
let main_fn = rustc_public::entry_fn();
let body = main_fn.unwrap().expect_body();
let mut visitor = PlaceVisitor { body: &body, tested: false };
visitor.visit_body(&body);

View file

@ -15,15 +15,15 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use std::io::Write;
use std::ops::ControlFlow;
use stable_mir::CrateItem;
use stable_mir::crate_def::CrateDef;
use stable_mir::mir::{AggregateKind, Rvalue, Statement, StatementKind};
use stable_mir::ty::{IntTy, RigidTy, Ty};
use rustc_public::CrateItem;
use rustc_public::crate_def::CrateDef;
use rustc_public::mir::{AggregateKind, Rvalue, Statement, StatementKind};
use rustc_public::ty::{IntTy, RigidTy, Ty};
const CRATE_NAME: &str = "crate_variant_ty";
@ -97,7 +97,7 @@ fn check_adt_poly2() {
}
fn get_fn(name: &str) -> CrateItem {
stable_mir::all_local_items().into_iter().find(|it| it.name().eq(name)).unwrap()
rustc_public::all_local_items().into_iter().find(|it| it.name().eq(name)).unwrap()
}
fn check_statement_is_aggregate_assign(

View file

@ -14,18 +14,18 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use std::io::Write;
use std::ops::ControlFlow;
use stable_mir::mir::{Body, ConstOperand, Operand, TerminatorKind};
use stable_mir::ty::{FnDef, RigidTy, TyKind};
use rustc_public::mir::{Body, ConstOperand, Operand, TerminatorKind};
use rustc_public::ty::{FnDef, RigidTy, TyKind};
const CRATE_NAME: &str = "crate_closure_body";
fn test_closure_body() -> ControlFlow<()> {
let crate_items = stable_mir::all_local_items();
let crate_items = rustc_public::all_local_items();
for item in crate_items {
let item_ty = item.ty();
match &item_ty.kind() {

View file

@ -14,18 +14,18 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use std::io::Write;
use std::ops::ControlFlow;
use stable_mir::mir::{Body, ConstOperand, Operand, TerminatorKind};
use stable_mir::ty::{FnDef, RigidTy, TyKind};
use rustc_public::mir::{Body, ConstOperand, Operand, TerminatorKind};
use rustc_public::ty::{FnDef, RigidTy, TyKind};
const CRATE_NAME: &str = "crate_closure_body";
fn test_closure_body() -> ControlFlow<()> {
let crate_items = stable_mir::all_local_items();
let crate_items = rustc_public::all_local_items();
for item in crate_items {
let item_ty = item.ty();
match &item_ty.kind() {

View file

@ -14,7 +14,7 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use std::io::Write;
@ -40,7 +40,7 @@ fn test_continue(args: &[String]) {
fn test_break(args: &[String]) {
let result = run!(args, || ControlFlow::Break::<bool, i32>(false));
assert_eq!(result, Err(stable_mir::CompilerError::Interrupted(false)));
assert_eq!(result, Err(rustc_public::CompilerError::Interrupted(false)));
}
#[allow(unreachable_code)]
@ -48,7 +48,7 @@ fn test_skipped(args: &[String]) {
let mut args = args.to_vec();
args.push("--version".to_string());
let result = run!(&args, || unreachable!() as ControlFlow<()>);
assert_eq!(result, Err(stable_mir::CompilerError::Skipped));
assert_eq!(result, Err(rustc_public::CompilerError::Skipped));
}
#[allow(unreachable_code)]
@ -56,7 +56,7 @@ fn test_failed(args: &[String]) {
let mut args = args.to_vec();
args.push("--cfg=broken".to_string());
let result = run!(&args, || unreachable!() as ControlFlow<()>);
assert_eq!(result, Err(stable_mir::CompilerError::Failed));
assert_eq!(result, Err(rustc_public::CompilerError::Failed));
}
/// Test that we are able to pass a closure and set the return according to the captured value.

View file

@ -15,13 +15,13 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use rustc_hir::def::DefKind;
use stable_mir::ItemKind;
use stable_mir::crate_def::CrateDef;
use stable_mir::mir::mono::Instance;
use stable_mir::ty::{RigidTy, TyKind};
use rustc_public::ItemKind;
use rustc_public::crate_def::CrateDef;
use rustc_public::mir::mono::Instance;
use rustc_public::ty::{RigidTy, TyKind};
use std::assert_matches::assert_matches;
use std::io::Write;
use std::ops::ControlFlow;
@ -30,18 +30,18 @@ const CRATE_NAME: &str = "input";
/// This function uses the Stable MIR APIs to get information about the test crate.
fn test_stable_mir() -> ControlFlow<()> {
// Get the local crate using stable_mir API.
let local = stable_mir::local_crate();
// Get the local crate using rustc_public API.
let local = rustc_public::local_crate();
assert_eq!(&local.name, CRATE_NAME);
assert_eq!(stable_mir::entry_fn(), None);
assert_eq!(rustc_public::entry_fn(), None);
// Find items in the local crate.
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
assert!(get_item(&items, (DefKind::Fn, "foo::bar")).is_some());
// Find the `std` crate and assert that there is only one of it.
assert!(stable_mir::find_crates("std").len() == 1);
assert!(rustc_public::find_crates("std").len() == 1);
let bar = get_item(&items, (DefKind::Fn, "bar")).unwrap();
let body = bar.expect_body();
@ -50,11 +50,11 @@ fn test_stable_mir() -> ControlFlow<()> {
let block = &body.blocks[0];
assert_eq!(block.statements.len(), 1);
match &block.statements[0].kind {
stable_mir::mir::StatementKind::Assign(..) => {}
rustc_public::mir::StatementKind::Assign(..) => {}
other => panic!("{other:?}"),
}
match &block.terminator.kind {
stable_mir::mir::TerminatorKind::Return => {}
rustc_public::mir::TerminatorKind::Return => {}
other => panic!("{other:?}"),
}
@ -64,7 +64,7 @@ fn test_stable_mir() -> ControlFlow<()> {
assert_eq!(body.blocks.len(), 4);
let block = &body.blocks[0];
match &block.terminator.kind {
stable_mir::mir::TerminatorKind::Call { .. } => {}
rustc_public::mir::TerminatorKind::Call { .. } => {}
other => panic!("{other:?}"),
}
@ -73,28 +73,32 @@ fn test_stable_mir() -> ControlFlow<()> {
assert_eq!(body.locals().len(), 6);
assert_matches!(
body.locals()[0].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
rustc_public::ty::TyKind::RigidTy(rustc_public::ty::RigidTy::Bool)
);
assert_matches!(
body.locals()[1].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
rustc_public::ty::TyKind::RigidTy(rustc_public::ty::RigidTy::Bool)
);
assert_matches!(
body.locals()[2].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Char)
rustc_public::ty::TyKind::RigidTy(rustc_public::ty::RigidTy::Char)
);
assert_matches!(
body.locals()[3].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Int(stable_mir::ty::IntTy::I32))
rustc_public::ty::TyKind::RigidTy(
rustc_public::ty::RigidTy::Int(rustc_public::ty::IntTy::I32)
)
);
assert_matches!(
body.locals()[4].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Uint(stable_mir::ty::UintTy::U64))
rustc_public::ty::TyKind::RigidTy(
rustc_public::ty::RigidTy::Uint(rustc_public::ty::UintTy::U64)
)
);
assert_matches!(
body.locals()[5].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Float(
stable_mir::ty::FloatTy::F64
rustc_public::ty::TyKind::RigidTy(rustc_public::ty::RigidTy::Float(
rustc_public::ty::FloatTy::F64
))
);
@ -103,7 +107,7 @@ fn test_stable_mir() -> ControlFlow<()> {
assert_eq!(body.blocks.len(), 2);
let block = &body.blocks[0];
match &block.terminator.kind {
stable_mir::mir::TerminatorKind::Drop { .. } => {}
rustc_public::mir::TerminatorKind::Drop { .. } => {}
other => panic!("{other:?}"),
}
@ -112,7 +116,7 @@ fn test_stable_mir() -> ControlFlow<()> {
assert_eq!(body.blocks.len(), 2);
let block = &body.blocks[0];
match &block.terminator.kind {
stable_mir::mir::TerminatorKind::Assert { .. } => {}
rustc_public::mir::TerminatorKind::Assert { .. } => {}
other => panic!("{other:?}"),
}
@ -120,7 +124,7 @@ fn test_stable_mir() -> ControlFlow<()> {
let instance = Instance::try_from(monomorphic.clone()).unwrap();
for block in instance.body().unwrap().blocks {
match &block.terminator.kind {
stable_mir::mir::TerminatorKind::Call { func, .. } => {
rustc_public::mir::TerminatorKind::Call { func, .. } => {
let TyKind::RigidTy(ty) = func.ty(&body.locals()).unwrap().kind() else {
unreachable!()
};
@ -131,7 +135,7 @@ fn test_stable_mir() -> ControlFlow<()> {
other => panic!("{other:?}"),
}
}
stable_mir::mir::TerminatorKind::Return => {}
rustc_public::mir::TerminatorKind::Return => {}
other => panic!("{other:?}"),
}
}
@ -145,22 +149,26 @@ fn test_stable_mir() -> ControlFlow<()> {
assert_eq!(body.locals().len(), 4);
assert_matches!(
body.ret_local().ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Char)
rustc_public::ty::TyKind::RigidTy(rustc_public::ty::RigidTy::Char)
);
assert_eq!(body.arg_locals().len(), 2);
assert_matches!(
body.arg_locals()[0].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Int(stable_mir::ty::IntTy::I32))
rustc_public::ty::TyKind::RigidTy(
rustc_public::ty::RigidTy::Int(rustc_public::ty::IntTy::I32)
)
);
assert_matches!(
body.arg_locals()[1].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Uint(stable_mir::ty::UintTy::U64))
rustc_public::ty::TyKind::RigidTy(
rustc_public::ty::RigidTy::Uint(rustc_public::ty::UintTy::U64)
)
);
assert_eq!(body.inner_locals().len(), 1);
// If conditions have an extra inner local to hold their results
assert_matches!(
body.inner_locals()[0].ty.kind(),
stable_mir::ty::TyKind::RigidTy(stable_mir::ty::RigidTy::Bool)
rustc_public::ty::TyKind::RigidTy(rustc_public::ty::RigidTy::Bool)
);
ControlFlow::Continue(())
@ -168,9 +176,9 @@ fn test_stable_mir() -> ControlFlow<()> {
// Use internal API to find a function in a crate.
fn get_item<'a>(
items: &'a stable_mir::CrateItems,
items: &'a rustc_public::CrateItems,
item: (DefKind, &str),
) -> Option<&'a stable_mir::CrateItem> {
) -> Option<&'a rustc_public::CrateItem> {
items.iter().find(|crate_item| {
matches!(
(item.0, crate_item.kind()),

View file

@ -15,12 +15,12 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::ItemKind;
use stable_mir::crate_def::CrateDef;
use stable_mir::mir::{ProjectionElem, Rvalue, StatementKind};
use stable_mir::ty::{RigidTy, TyKind, UintTy};
use rustc_public::ItemKind;
use rustc_public::crate_def::CrateDef;
use rustc_public::mir::{ProjectionElem, Rvalue, StatementKind};
use rustc_public::ty::{RigidTy, TyKind, UintTy};
use std::assert_matches::assert_matches;
use std::io::Write;
use std::ops::ControlFlow;
@ -29,15 +29,15 @@ const CRATE_NAME: &str = "input";
/// Tests projections within Place objects
fn test_place_projections() -> ControlFlow<()> {
let items = stable_mir::all_local_items();
let items = rustc_public::all_local_items();
let body = get_item(&items, (ItemKind::Fn, "projections")).unwrap().expect_body();
assert_eq!(body.blocks.len(), 4);
// The first statement assigns `&s.c` to a local. The projections include a deref for `s`, since
// `s` is passed as a reference argument, and a field access for field `c`.
match &body.blocks[0].statements[0].kind {
StatementKind::Assign(
place @ stable_mir::mir::Place { local: _, projection: local_proj },
Rvalue::Ref(_, _, stable_mir::mir::Place { local: _, projection: r_proj }),
place @ rustc_public::mir::Place { local: _, projection: local_proj },
Rvalue::Ref(_, _, rustc_public::mir::Place { local: _, projection: r_proj }),
) => {
// We can't match on vecs, only on slices. Comparing statements for equality wouldn't be
// any easier since we'd then have to add in the expected local and region values
@ -48,7 +48,7 @@ fn test_place_projections() -> ControlFlow<()> {
[ProjectionElem::Deref, ProjectionElem::Field(2, ty)] => {
assert_matches!(
ty.kind(),
TyKind::RigidTy(RigidTy::Uint(stable_mir::ty::UintTy::U8))
TyKind::RigidTy(RigidTy::Uint(rustc_public::ty::UintTy::U8))
);
let ty = place.ty(body.locals()).unwrap();
assert_matches!(ty.kind().rigid(), Some(RigidTy::Ref(..)));
@ -70,8 +70,8 @@ fn test_place_projections() -> ControlFlow<()> {
// since `slice` is a reference, and an index.
match &body.blocks[2].statements[0].kind {
StatementKind::Assign(
place @ stable_mir::mir::Place { local: _, projection: local_proj },
Rvalue::Use(stable_mir::mir::Operand::Copy(stable_mir::mir::Place {
place @ rustc_public::mir::Place { local: _, projection: local_proj },
Rvalue::Use(rustc_public::mir::Operand::Copy(rustc_public::mir::Place {
local: _,
projection: r_proj,
})),
@ -93,18 +93,18 @@ fn test_place_projections() -> ControlFlow<()> {
// The first terminator gets a slice of an array via the Index operation. Specifically it
// performs `&vals[1..3]`. There are no projections in this case, the arguments are just locals.
match &body.blocks[0].terminator.kind {
stable_mir::mir::TerminatorKind::Call { args, .. } =>
rustc_public::mir::TerminatorKind::Call { args, .. } =>
// We can't match on vecs, only on slices. Comparing for equality wouldn't be any easier
// since we'd then have to add in the expected local values instead of matching on
// wildcards.
{
match &args[..] {
[
stable_mir::mir::Operand::Move(stable_mir::mir::Place {
rustc_public::mir::Operand::Move(rustc_public::mir::Place {
local: _,
projection: arg1_proj,
}),
stable_mir::mir::Operand::Move(stable_mir::mir::Place {
rustc_public::mir::Operand::Move(rustc_public::mir::Place {
local: _,
projection: arg2_proj,
}),
@ -133,9 +133,9 @@ fn test_place_projections() -> ControlFlow<()> {
// Use internal API to find a function in a crate.
fn get_item<'a>(
items: &'a stable_mir::CrateItems,
items: &'a rustc_public::CrateItems,
item: (ItemKind, &str),
) -> Option<&'a stable_mir::CrateItem> {
) -> Option<&'a rustc_public::CrateItem> {
items.iter().find(|crate_item| crate_item.kind() == item.0 && crate_item.name() == item.1)
}

View file

@ -14,17 +14,17 @@ extern crate rustc_driver;
extern crate rustc_interface;
extern crate rustc_middle;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use rustc_middle::ty::TyCtxt;
use stable_mir::rustc_internal;
use rustc_public::rustc_internal;
use std::io::Write;
use std::ops::ControlFlow;
const CRATE_NAME: &str = "input";
fn test_translation(tcx: TyCtxt<'_>) -> ControlFlow<()> {
let main_fn = stable_mir::entry_fn().unwrap();
let main_fn = rustc_public::entry_fn().unwrap();
let body = main_fn.expect_body();
let orig_ty = body.locals()[0].ty;
let rustc_ty = rustc_internal::internal(tcx, &orig_ty);

View file

@ -16,11 +16,11 @@ extern crate rustc_middle;
extern crate serde;
extern crate serde_json;
#[macro_use]
extern crate stable_mir;
extern crate rustc_public;
use rustc_middle::ty::TyCtxt;
use serde_json::to_string;
use stable_mir::mir::Body;
use rustc_public::mir::Body;
use std::io::{BufWriter, Write};
use std::ops::ControlFlow;
@ -29,9 +29,9 @@ const CRATE_NAME: &str = "input";
fn serialize_to_json(_tcx: TyCtxt<'_>) -> ControlFlow<()> {
let path = "output.json";
let mut writer = BufWriter::new(std::fs::File::create(path).expect("Failed to create path"));
let local_crate = stable_mir::local_crate();
let local_crate = rustc_public::local_crate();
let items: Vec<Body> =
stable_mir::all_local_items().iter().map(|item| item.expect_body()).collect();
rustc_public::all_local_items().iter().map(|item| item.expect_body()).collect();
let crate_data = (local_crate.name, items);
writer
.write_all(to_string(&crate_data).expect("serde_json failed").as_bytes())

View file

@ -13,11 +13,11 @@ extern crate rustc_middle;
extern crate rustc_driver;
extern crate rustc_interface;
extern crate stable_mir;
extern crate rustc_public;
use stable_mir::mir::MirVisitor;
use stable_mir::mir::MutMirVisitor;
use stable_mir::*;
use rustc_public::mir::MirVisitor;
use rustc_public::mir::MutMirVisitor;
use rustc_public::*;
use std::collections::HashSet;
use std::io::Write;
use std::ops::ControlFlow;
@ -25,7 +25,7 @@ use std::ops::ControlFlow;
const CRATE_NAME: &str = "input";
fn test_visitor() -> ControlFlow<()> {
let main_fn = stable_mir::entry_fn();
let main_fn = rustc_public::entry_fn();
let main_body = main_fn.unwrap().expect_body();
let main_visitor = TestVisitor::collect(&main_body);
assert!(main_visitor.ret_val.is_some());
@ -99,7 +99,7 @@ impl<'a> mir::MirVisitor for TestVisitor<'a> {
}
fn test_mut_visitor() -> ControlFlow<()> {
let main_fn = stable_mir::entry_fn();
let main_fn = rustc_public::entry_fn();
let mut main_body = main_fn.unwrap().expect_body();
let locals = main_body.locals().to_vec();
let mut main_visitor = TestMutVisitor::collect(locals);

View file

@ -1050,8 +1050,8 @@ cc = ["@davidtwco", "@compiler-errors", "@TaKO8Ki"]
message = "`rustc_macros::diagnostics` was changed"
cc = ["@davidtwco", "@compiler-errors", "@TaKO8Ki"]
[mentions."compiler/stable_mir"]
message = "This PR changes Stable MIR"
[mentions."compiler/rustc_public"]
message = "This PR changes rustc_public"
cc = ["@oli-obk", "@celinval", "@ouz-a"]
[mentions."compiler/rustc_target/src/spec"]
@ -1445,7 +1445,7 @@ dep-bumps = [
"/compiler/rustc_const_eval/src/interpret" = ["compiler", "mir"]
"/compiler/rustc_mir_build/src/builder" = ["compiler", "mir"]
"/compiler/rustc_mir_transform" = ["compiler", "mir", "mir-opt"]
"/compiler/rustc_smir" = ["project-stable-mir"]
"/compiler/rustc_public_bridge" = ["project-stable-mir"]
"/compiler/rustc_parse" = ["compiler", "parser"]
"/compiler/rustc_parse/src/lexer" = ["compiler", "lexer"]
"/compiler/rustc_query_impl" = ["compiler", "query-system"]
@ -1455,7 +1455,7 @@ dep-bumps = [
"/compiler/rustc_trait_selection" = ["compiler", "types"]
"/compiler/rustc_traits" = ["compiler", "types"]
"/compiler/rustc_type_ir" = ["compiler", "types"]
"/compiler/stable_mir" = ["project-stable-mir"]
"/compiler/rustc_public" = ["project-stable-mir"]
"/library/alloc" = ["libs"]
"/library/core" = ["libs", "@scottmcm"]
"/library/panic_abort" = ["libs"]