@@ -1338,36 +1338,42 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1338
1338
1339
1339
if let Some ( ( did, field_ty) ) = private_candidate {
1340
1340
self . ban_private_field_access ( expr, expr_t, field, did) ;
1341
- field_ty
1342
- } else if field. name == kw:: Invalid {
1343
- self . tcx ( ) . types . err
1341
+ return field_ty;
1342
+ }
1343
+
1344
+ if field. name == kw:: Invalid {
1344
1345
} else if self . method_exists ( field, expr_t, expr. hir_id , true ) {
1345
1346
self . ban_take_value_of_method ( expr, expr_t, field) ;
1346
- self . tcx ( ) . types . err
1347
- } else {
1348
- if !expr_t. is_primitive_ty ( ) {
1349
- let mut err = self . no_such_field_err ( field. span , field, expr_t) ;
1347
+ } else if !expr_t. is_primitive_ty ( ) {
1348
+ let mut err = self . no_such_field_err ( field. span , field, expr_t) ;
1350
1349
1351
- match expr_t. sty {
1352
- ty:: Adt ( def, _) if !def. is_enum ( ) => {
1353
- self . suggest_fields_on_recordish ( & mut err, def, field) ;
1354
- }
1355
- ty:: Array ( _, len) => {
1356
- self . maybe_suggest_array_indexing ( & mut err, expr, base, field, len) ;
1357
- }
1358
- ty:: RawPtr ( ..) => {
1359
- self . suggest_first_deref_field ( & mut err, expr, base, field) ;
1360
- }
1361
- _ => { }
1350
+ match expr_t. sty {
1351
+ ty:: Adt ( def, _) if !def. is_enum ( ) => {
1352
+ self . suggest_fields_on_recordish ( & mut err, def, field) ;
1362
1353
}
1363
- err
1364
- } else {
1365
- type_error_struct ! ( self . tcx( ) . sess, field. span, expr_t, E0610 ,
1366
- "`{}` is a primitive type and therefore doesn't have fields" ,
1367
- expr_t)
1368
- } . emit ( ) ;
1369
- self . tcx ( ) . types . err
1354
+ ty:: Array ( _, len) => {
1355
+ self . maybe_suggest_array_indexing ( & mut err, expr, base, field, len) ;
1356
+ }
1357
+ ty:: RawPtr ( ..) => {
1358
+ self . suggest_first_deref_field ( & mut err, expr, base, field) ;
1359
+ }
1360
+ _ => { }
1361
+ }
1362
+
1363
+ err. emit ( ) ;
1364
+ } else {
1365
+ type_error_struct ! (
1366
+ self . tcx( ) . sess,
1367
+ field. span,
1368
+ expr_t,
1369
+ E0610 ,
1370
+ "`{}` is a primitive type and therefore doesn't have fields" ,
1371
+ expr_t
1372
+ )
1373
+ . emit ( ) ;
1370
1374
}
1375
+
1376
+ self . tcx ( ) . types . err
1371
1377
}
1372
1378
1373
1379
fn ban_private_field_access (
0 commit comments