Line data Source code
1 : // Copyright (C) 2020-2026 Free Software Foundation, Inc.
2 :
3 : // This file is part of GCC.
4 :
5 : // GCC is free software; you can redistribute it and/or modify it under
6 : // the terms of the GNU General Public License as published by the Free
7 : // Software Foundation; either version 3, or (at your option) any later
8 : // version.
9 :
10 : // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 : // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 : // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 : // for more details.
14 :
15 : // You should have received a copy of the GNU General Public License
16 : // along with GCC; see the file COPYING3. If not see
17 : // <http://www.gnu.org/licenses/>.
18 :
19 : #ifndef RUST_BORROW_CHECKER_DIAGNOSTICS_H
20 : #define RUST_BORROW_CHECKER_DIAGNOSTICS_H
21 :
22 : #include "polonius/rust-polonius.h"
23 : #include "rust-bir.h"
24 : #include "rust-hir-item.h"
25 : #include "text-range-label.h"
26 :
27 : namespace Rust {
28 : namespace BIR {
29 : class BorrowCheckerDiagnostics
30 : {
31 : // HIR representation of Rust function
32 : const HIR::Function *hir_function;
33 : // BIR representation of Rust function
34 : const Function &bir_function;
35 : // Some facts related to this function
36 : const Polonius::Facts &facts;
37 : // Polonius output
38 : // Point - vector<Path>
39 : const std::vector<std::pair<size_t, std::vector<size_t>>> &move_errors;
40 : // Point - vector<Loan>
41 : const std::vector<std::pair<size_t, std::vector<size_t>>> &loan_errors;
42 : // Point - pair<Origin, Origin>
43 : const std::vector<std::pair<size_t, std::pair<size_t, size_t>>>
44 : &subset_errors;
45 :
46 : public:
47 36 : BorrowCheckerDiagnostics (
48 : const HIR::Function *hir_function, const Function &bir_function,
49 : const Polonius::Facts &facts,
50 : const std::vector<std::pair<size_t, std::vector<size_t>>> &move_errors,
51 : const std::vector<std::pair<size_t, std::vector<size_t>>> &loan_errors,
52 : const std::vector<std::pair<size_t, std::pair<size_t, size_t>>>
53 : &subset_errors)
54 :
55 36 : : hir_function (hir_function), bir_function (bir_function), facts (facts),
56 36 : move_errors (move_errors), loan_errors (loan_errors),
57 36 : subset_errors (subset_errors)
58 : {}
59 :
60 : void report_errors ();
61 :
62 : private:
63 : void report_move_errors ();
64 : void report_loan_errors ();
65 : void report_subset_errors ();
66 :
67 : const BIR::Statement &get_statement (Polonius::Point point);
68 : const BIR::Loan &get_loan (Polonius::Loan loan);
69 : const HIR::LifetimeParam *get_lifetime_param (Polonius::Origin origin);
70 :
71 94 : struct LabelLocationPair
72 : {
73 : text_range_label label;
74 : location_t location;
75 : };
76 : static void
77 : multi_label_error (const char *error_message, location_t error_location,
78 : std::vector<LabelLocationPair> location_label_pairs);
79 : };
80 :
81 : } // namespace BIR
82 : } // namespace Rust
83 :
84 : #endif // RUST_BORROW_CHECKER_DIAGNOSTICS_H
|