mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-02 14:51:48 +00:00
Remove hack
This commit is contained in:
parent
78977cd86c
commit
7556f74b16
2 changed files with 10 additions and 44 deletions
|
@ -1488,7 +1488,6 @@ fn regression_11688_4() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn gat_crash_1() {
|
fn gat_crash_1() {
|
||||||
cov_mark::check!(ignore_gats);
|
|
||||||
check_no_mismatches(
|
check_no_mismatches(
|
||||||
r#"
|
r#"
|
||||||
trait ATrait {}
|
trait ATrait {}
|
||||||
|
@ -1527,30 +1526,22 @@ unsafe impl Storage for InlineStorage {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn gat_crash_3() {
|
fn gat_crash_3() {
|
||||||
// FIXME: This test currently crashes rust analyzer in a debug build but not in a
|
check_no_mismatches(
|
||||||
// release build (i.e. for the user). With the assumption that tests will always be run
|
r#"
|
||||||
// in debug mode, we catch the unwind and expect that it panicked. See the
|
|
||||||
// [`crate::utils::generics`] function for more information.
|
|
||||||
cov_mark::check!(ignore_gats);
|
|
||||||
std::panic::catch_unwind(|| {
|
|
||||||
check_no_mismatches(
|
|
||||||
r#"
|
|
||||||
trait Collection {
|
trait Collection {
|
||||||
type Item;
|
type Item;
|
||||||
type Member<T>: Collection<Item = T>;
|
type Member<T>: Collection<Item = T>;
|
||||||
fn add(&mut self, value: Self::Item) -> Result<(), Self::Error>;
|
fn add(&mut self, value: Self::Item) -> Result<(), Self::Error>;
|
||||||
}
|
}
|
||||||
struct ConstGen<T, const N: usize> {
|
struct ConstGen<T, const N: usize> {
|
||||||
data: [T; N],
|
data: [T; N],
|
||||||
}
|
}
|
||||||
impl<T, const N: usize> Collection for ConstGen<T, N> {
|
impl<T, const N: usize> Collection for ConstGen<T, N> {
|
||||||
type Item = T;
|
type Item = T;
|
||||||
type Member<U> = ConstGen<U, N>;
|
type Member<U> = ConstGen<U, N>;
|
||||||
}
|
}
|
||||||
"#,
|
"#,
|
||||||
);
|
);
|
||||||
})
|
|
||||||
.expect_err("must panic");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -173,31 +173,6 @@ pub(super) fn associated_type_by_name_including_super_traits(
|
||||||
|
|
||||||
pub(crate) fn generics(db: &dyn DefDatabase, def: GenericDefId) -> Generics {
|
pub(crate) fn generics(db: &dyn DefDatabase, def: GenericDefId) -> Generics {
|
||||||
let parent_generics = parent_generic_def(db, def).map(|def| Box::new(generics(db, def)));
|
let parent_generics = parent_generic_def(db, def).map(|def| Box::new(generics(db, def)));
|
||||||
if parent_generics.is_some() && matches!(def, GenericDefId::TypeAliasId(_)) {
|
|
||||||
let params = db.generic_params(def);
|
|
||||||
let parent_params = &parent_generics.as_ref().unwrap().params;
|
|
||||||
let has_consts =
|
|
||||||
params.iter().any(|(_, x)| matches!(x, TypeOrConstParamData::ConstParamData(_)));
|
|
||||||
let parent_has_consts =
|
|
||||||
parent_params.iter().any(|(_, x)| matches!(x, TypeOrConstParamData::ConstParamData(_)));
|
|
||||||
return if has_consts || parent_has_consts {
|
|
||||||
// XXX: treat const generic associated types as not existing to avoid crashes
|
|
||||||
// (#11769)
|
|
||||||
//
|
|
||||||
// Note: Also crashes when the parent has const generics (also even if the GAT
|
|
||||||
// doesn't use them), see `tests::regression::gat_crash_3` for an example.
|
|
||||||
// Avoids that by disabling GATs when the parent (i.e. `impl` block) has
|
|
||||||
// const generics (#12193).
|
|
||||||
//
|
|
||||||
// Chalk expects the inner associated type's parameters to come
|
|
||||||
// *before*, not after the trait's generics as we've always done it.
|
|
||||||
// Adapting to this requires a larger refactoring
|
|
||||||
cov_mark::hit!(ignore_gats);
|
|
||||||
Generics { def, params: Interned::new(Default::default()), parent_generics }
|
|
||||||
} else {
|
|
||||||
Generics { def, params, parent_generics }
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Generics { def, params: db.generic_params(def), parent_generics }
|
Generics { def, params: db.generic_params(def), parent_generics }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue