@@ -9,26 +9,31 @@ impl super::Check<'_> {
9
9
pub ( super ) fn check_adt ( & self , adt : & Adt ) -> Fallible < ( ) > {
10
10
let Adt { id : _, binder } = adt;
11
11
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
-
21
12
// names is used to check that there are no name conflicts
22
13
let mut names = HashSet :: new ( ) ;
23
- for Variant { name, fields } in & variants {
14
+ for Variant { name, fields } in & adt . binder . open ( ) . 1 . variants {
24
15
if !names. insert ( ( name, None ) ) {
25
16
bail ! ( "variant \" {name:?}\" defined multiple times" ) ;
26
17
}
27
18
let vname = name;
28
- for Field { name, ty } in fields {
19
+ for Field { name, ty : _ } in fields {
29
20
if !names. insert ( ( vname, Some ( name) ) ) {
30
21
bail ! ( "field \" {name:?}\" of variant \" {vname:?}\" defined multiple times" ) ;
31
22
}
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 {
32
37
self . prove_goal ( & env, & where_clauses, ty. well_formed ( ) ) ?;
33
38
}
34
39
}
0 commit comments