Skip to content

Commit 5c08c39

Browse files
authored
Rollup merge of #92806 - compiler-errors:better-impl-trait-deny, r=estebank
Add more information to `impl Trait` error Fixes #92458 Let me know if I went overboard here, or if the suggestions could use some refinement. r? `@estebank` Feel free to reassign to someone else
2 parents 0bb72a2 + 207fb5f commit 5c08c39

36 files changed

+366
-216
lines changed

compiler/rustc_ast_lowering/src/block.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
9797
let ty = l
9898
.ty
9999
.as_ref()
100-
.map(|t| self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::Binding)));
100+
.map(|t| self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::Variable)));
101101
let init = l.kind.init().map(|init| self.lower_expr(init));
102102
let hir_id = self.lower_node_id(l.id);
103103
let pat = self.lower_pat(&l.pat);
@@ -127,7 +127,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
127127
let ty = local
128128
.ty
129129
.as_ref()
130-
.map(|t| self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::Binding)));
130+
.map(|t| self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::Variable)));
131131
let span = self.lower_span(local.span);
132132
let span = self.mark_span_with_reason(DesugaringKind::LetElse, span, None);
133133
let init = self.lower_expr(init);

compiler/rustc_ast_lowering/src/expr.rs

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use crate::{FnDeclKind, ImplTraitPosition};
2+
13
use super::{ImplTraitContext, LoweringContext, ParamMode, ParenthesizedGenericArgs};
24

35
use rustc_ast::attr;
@@ -53,7 +55,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
5355
ParamMode::Optional,
5456
0,
5557
ParenthesizedGenericArgs::Err,
56-
ImplTraitContext::disallowed(),
58+
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
5759
));
5860
let args = self.lower_exprs(args);
5961
hir::ExprKind::MethodCall(hir_seg, args, self.lower_span(span))
@@ -74,12 +76,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
7476
}
7577
ExprKind::Cast(ref expr, ref ty) => {
7678
let expr = self.lower_expr(expr);
77-
let ty = self.lower_ty(ty, ImplTraitContext::disallowed());
79+
let ty =
80+
self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
7881
hir::ExprKind::Cast(expr, ty)
7982
}
8083
ExprKind::Type(ref expr, ref ty) => {
8184
let expr = self.lower_expr(expr);
82-
let ty = self.lower_ty(ty, ImplTraitContext::disallowed());
85+
let ty =
86+
self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Type));
8387
hir::ExprKind::Type(expr, ty)
8488
}
8589
ExprKind::AddrOf(k, m, ref ohs) => {
@@ -203,7 +207,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
203207
qself,
204208
path,
205209
ParamMode::Optional,
206-
ImplTraitContext::disallowed(),
210+
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
207211
);
208212
hir::ExprKind::Path(qpath)
209213
}
@@ -239,7 +243,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
239243
&se.qself,
240244
&se.path,
241245
ParamMode::Optional,
242-
ImplTraitContext::disallowed(),
246+
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
243247
)),
244248
self.arena
245249
.alloc_from_iter(se.fields.iter().map(|x| self.lower_expr_field(x))),
@@ -538,7 +542,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
538542
body: impl FnOnce(&mut Self) -> hir::Expr<'hir>,
539543
) -> hir::ExprKind<'hir> {
540544
let output = match ret_ty {
541-
Some(ty) => hir::FnRetTy::Return(self.lower_ty(&ty, ImplTraitContext::disallowed())),
545+
Some(ty) => hir::FnRetTy::Return(
546+
self.lower_ty(&ty, ImplTraitContext::Disallowed(ImplTraitPosition::AsyncBlock)),
547+
),
542548
None => hir::FnRetTy::DefaultReturn(self.lower_span(span)),
543549
};
544550

@@ -827,7 +833,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
827833
});
828834

829835
// Lower outside new scope to preserve `is_in_loop_condition`.
830-
let fn_decl = self.lower_fn_decl(decl, None, false, None);
836+
let fn_decl = self.lower_fn_decl(decl, None, FnDeclKind::Closure, None);
831837

832838
hir::ExprKind::Closure(
833839
capture_clause,
@@ -919,7 +925,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
919925
// We need to lower the declaration outside the new scope, because we
920926
// have to conserve the state of being inside a loop condition for the
921927
// closure argument types.
922-
let fn_decl = self.lower_fn_decl(&outer_decl, None, false, None);
928+
let fn_decl = self.lower_fn_decl(&outer_decl, None, FnDeclKind::Closure, None);
923929

924930
hir::ExprKind::Closure(
925931
capture_clause,
@@ -1064,7 +1070,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
10641070
qself,
10651071
path,
10661072
ParamMode::Optional,
1067-
ImplTraitContext::disallowed(),
1073+
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
10681074
);
10691075
// Destructure like a tuple struct.
10701076
let tuple_struct_pat =
@@ -1089,7 +1095,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
10891095
&se.qself,
10901096
&se.path,
10911097
ParamMode::Optional,
1092-
ImplTraitContext::disallowed(),
1098+
ImplTraitContext::Disallowed(ImplTraitPosition::Path),
10931099
);
10941100
let fields_omitted = match &se.rest {
10951101
StructRest::Base(e) => {

0 commit comments

Comments
 (0)