]> git.lizzy.rs Git - rust.git/blob - compiler/rustc_borrowck/src/session_diagnostics.rs
Rollup merge of #107271 - Zeegomo:drop-rmw, r=oli-obk
[rust.git] / compiler / rustc_borrowck / src / session_diagnostics.rs
1 use rustc_errors::MultiSpan;
2 use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic};
3 use rustc_middle::ty::{GenericArg, Ty};
4 use rustc_span::Span;
5
6 use crate::diagnostics::RegionName;
7
8 #[derive(Diagnostic)]
9 #[diag(borrowck_move_unsized, code = "E0161")]
10 pub(crate) struct MoveUnsized<'tcx> {
11     pub ty: Ty<'tcx>,
12     #[primary_span]
13     #[label]
14     pub span: Span,
15 }
16
17 #[derive(Diagnostic)]
18 #[diag(borrowck_higher_ranked_lifetime_error)]
19 pub(crate) struct HigherRankedLifetimeError {
20     #[subdiagnostic]
21     pub cause: Option<HigherRankedErrorCause>,
22     #[primary_span]
23     pub span: Span,
24 }
25
26 #[derive(Subdiagnostic)]
27 pub(crate) enum HigherRankedErrorCause {
28     #[note(borrowck_could_not_prove)]
29     CouldNotProve { predicate: String },
30     #[note(borrowck_could_not_normalize)]
31     CouldNotNormalize { value: String },
32 }
33
34 #[derive(Diagnostic)]
35 #[diag(borrowck_higher_ranked_subtype_error)]
36 pub(crate) struct HigherRankedSubtypeError {
37     #[primary_span]
38     pub span: Span,
39 }
40
41 #[derive(Diagnostic)]
42 #[diag(borrowck_generic_does_not_live_long_enough)]
43 pub(crate) struct GenericDoesNotLiveLongEnough {
44     pub kind: String,
45     #[primary_span]
46     pub span: Span,
47 }
48
49 #[derive(LintDiagnostic)]
50 #[diag(borrowck_var_does_not_need_mut)]
51 pub(crate) struct VarNeedNotMut {
52     #[suggestion(style = "short", applicability = "machine-applicable", code = "")]
53     pub span: Span,
54 }
55 #[derive(Diagnostic)]
56 #[diag(borrowck_var_cannot_escape_closure)]
57 #[note]
58 #[note(cannot_escape)]
59 pub(crate) struct FnMutError {
60     #[primary_span]
61     pub span: Span,
62     #[subdiagnostic]
63     pub ty_err: FnMutReturnTypeErr,
64 }
65
66 #[derive(Subdiagnostic)]
67 pub(crate) enum VarHereDenote {
68     #[label(borrowck_var_here_captured)]
69     Captured {
70         #[primary_span]
71         span: Span,
72     },
73     #[label(borrowck_var_here_defined)]
74     Defined {
75         #[primary_span]
76         span: Span,
77     },
78     #[label(borrowck_closure_inferred_mut)]
79     FnMutInferred {
80         #[primary_span]
81         span: Span,
82     },
83 }
84
85 #[derive(Subdiagnostic)]
86 pub(crate) enum FnMutReturnTypeErr {
87     #[label(borrowck_returned_closure_escaped)]
88     ReturnClosure {
89         #[primary_span]
90         span: Span,
91     },
92     #[label(borrowck_returned_async_block_escaped)]
93     ReturnAsyncBlock {
94         #[primary_span]
95         span: Span,
96     },
97     #[label(borrowck_returned_ref_escaped)]
98     ReturnRef {
99         #[primary_span]
100         span: Span,
101     },
102 }
103
104 #[derive(Diagnostic)]
105 #[diag(borrowck_lifetime_constraints_error)]
106 pub(crate) struct LifetimeOutliveErr {
107     #[primary_span]
108     pub span: Span,
109 }
110
111 #[derive(Subdiagnostic)]
112 pub(crate) enum LifetimeReturnCategoryErr<'a> {
113     #[label(borrowck_returned_lifetime_wrong)]
114     WrongReturn {
115         #[primary_span]
116         span: Span,
117         mir_def_name: &'a str,
118         outlived_fr_name: RegionName,
119         fr_name: &'a RegionName,
120     },
121     #[label(borrowck_returned_lifetime_short)]
122     ShortReturn {
123         #[primary_span]
124         span: Span,
125         category_desc: &'static str,
126         free_region_name: &'a RegionName,
127         outlived_fr_name: RegionName,
128     },
129 }
130
131 #[derive(Subdiagnostic)]
132 pub(crate) enum RequireStaticErr {
133     #[note(borrowck_used_impl_require_static)]
134     UsedImpl {
135         #[primary_span]
136         multi_span: MultiSpan,
137     },
138 }
139
140 #[derive(Subdiagnostic)]
141 pub(crate) enum CaptureVarPathUseCause {
142     #[label(borrowck_borrow_due_to_use_generator)]
143     BorrowInGenerator {
144         #[primary_span]
145         path_span: Span,
146     },
147     #[label(borrowck_use_due_to_use_generator)]
148     UseInGenerator {
149         #[primary_span]
150         path_span: Span,
151     },
152     #[label(borrowck_assign_due_to_use_generator)]
153     AssignInGenerator {
154         #[primary_span]
155         path_span: Span,
156     },
157     #[label(borrowck_assign_part_due_to_use_generator)]
158     AssignPartInGenerator {
159         #[primary_span]
160         path_span: Span,
161     },
162     #[label(borrowck_borrow_due_to_use_closure)]
163     BorrowInClosure {
164         #[primary_span]
165         path_span: Span,
166     },
167     #[label(borrowck_use_due_to_use_closure)]
168     UseInClosure {
169         #[primary_span]
170         path_span: Span,
171     },
172     #[label(borrowck_assign_due_to_use_closure)]
173     AssignInClosure {
174         #[primary_span]
175         path_span: Span,
176     },
177     #[label(borrowck_assign_part_due_to_use_closure)]
178     AssignPartInClosure {
179         #[primary_span]
180         path_span: Span,
181     },
182 }
183
184 #[derive(Subdiagnostic)]
185 pub(crate) enum CaptureVarKind {
186     #[label(borrowck_capture_immute)]
187     Immute {
188         #[primary_span]
189         kind_span: Span,
190     },
191     #[label(borrowck_capture_mut)]
192     Mut {
193         #[primary_span]
194         kind_span: Span,
195     },
196     #[label(borrowck_capture_move)]
197     Move {
198         #[primary_span]
199         kind_span: Span,
200     },
201 }
202
203 #[derive(Subdiagnostic)]
204 pub(crate) enum CaptureVarCause {
205     #[label(borrowck_var_borrow_by_use_place_in_generator)]
206     BorrowUsePlaceGenerator {
207         place: String,
208         #[primary_span]
209         var_span: Span,
210     },
211     #[label(borrowck_var_borrow_by_use_place_in_closure)]
212     BorrowUsePlaceClosure {
213         place: String,
214         #[primary_span]
215         var_span: Span,
216     },
217 }
218
219 #[derive(Diagnostic)]
220 #[diag(borrowck_cannot_move_when_borrowed, code = "E0505")]
221 pub(crate) struct MoveBorrow<'a> {
222     pub place: &'a str,
223     pub borrow_place: &'a str,
224     pub value_place: &'a str,
225     #[primary_span]
226     #[label(move_label)]
227     pub span: Span,
228     #[label]
229     pub borrow_span: Span,
230 }
231
232 #[derive(Diagnostic)]
233 #[diag(borrowck_opaque_type_non_generic_param, code = "E0792")]
234 pub(crate) struct NonGenericOpaqueTypeParam<'a, 'tcx> {
235     pub ty: GenericArg<'tcx>,
236     pub kind: &'a str,
237     #[primary_span]
238     pub span: Span,
239     #[label]
240     pub param_span: Span,
241 }