Skip to content

Commit 87873d9

Browse files
committed
check fields before trait solving
1 parent f183c89 commit 87873d9

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

crates/formality-check/src/adts.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,31 @@ impl super::Check<'_> {
99
pub(super) fn check_adt(&self, adt: &Adt) -> Fallible<()> {
1010
let Adt { id: _, binder } = adt;
1111

12-
let mut env = Env::default();
13-
14-
let AdtBoundData {
15-
where_clauses,
16-
variants,
17-
} = env.instantiate_universally(binder);
18-
19-
self.prove_where_clauses_well_formed(&env, &where_clauses, &where_clauses)?;
20-
2112
// names is used to check that there are no name conflicts
2213
let mut names = HashSet::new();
23-
for Variant { name, fields } in &variants {
14+
for Variant { name, fields } in &adt.binder.open().1.variants {
2415
if !names.insert((name, None)) {
2516
bail!("variant \"{name:?}\" defined multiple times");
2617
}
2718
let vname = name;
28-
for Field { name, ty } in fields {
19+
for Field { name, ty: _ } in fields {
2920
if !names.insert((vname, Some(name))) {
3021
bail!("field \"{name:?}\" of variant \"{vname:?}\" defined multiple times");
3122
}
23+
}
24+
}
25+
26+
let mut env = Env::default();
27+
28+
let AdtBoundData {
29+
where_clauses,
30+
variants,
31+
} = env.instantiate_universally(binder);
32+
33+
self.prove_where_clauses_well_formed(&env, &where_clauses, &where_clauses)?;
34+
35+
for Variant { name: _, fields } in &variants {
36+
for Field { name: _, ty } in fields {
3237
self.prove_goal(&env, &where_clauses, ty.well_formed())?;
3338
}
3439
}

0 commit comments

Comments
 (0)