blob: 38fc7ad78a2872ff87611c6328241d5c8bdfc1d4 [file] [log] [blame]
use test_fixture::WithFixture;
use crate::{db::HirDatabase, setup_tracing, test_db::TestDB};
fn lower_mir(#[rust_analyzer::rust_fixture] ra_fixture: &str) {
let _tracing = setup_tracing();
let (db, file_ids) = TestDB::with_many_files(ra_fixture);
crate::attach_db(&db, || {
let file_id = *file_ids.last().unwrap();
let module_id = db.module_for_file(file_id.file_id(&db));
let def_map = module_id.def_map(&db);
let scope = &def_map[module_id.local_id].scope;
let funcs = scope.declarations().filter_map(|x| match x {
hir_def::ModuleDefId::FunctionId(it) => Some(it),
_ => None,
});
for func in funcs {
_ = db.mir_body(func.into());
}
})
}
#[test]
fn dyn_projection_with_auto_traits_regression_next_solver() {
lower_mir(
r#"
//- minicore: sized, send
pub trait Deserializer {}
pub trait Strictest {
type Object: ?Sized;
}
impl Strictest for dyn CustomValue {
type Object = dyn CustomValue + Send;
}
pub trait CustomValue: Send {}
impl CustomValue for () {}
struct Box<T: ?Sized>;
type DeserializeFn<T> = fn(&mut dyn Deserializer) -> Box<T>;
fn foo() {
(|deserializer| Box::new(())) as DeserializeFn<<dyn CustomValue as Strictest>::Object>;
}
"#,
);
}