diff options
author | Jakub Dupak <dev@jakubdupak.com> | 2023-10-19 10:59:54 +0200 |
---|---|---|
committer | CohenArthur <arthur.cohen@embecosm.com> | 2023-10-26 15:05:49 +0000 |
commit | 7ac6f9b4c75cad8189611852c417e4f7483eaef9 (patch) | |
tree | 93eaef4bd05ec983210ea33ecae8350d17f62451 | |
parent | 2bb559cea908d08eb6bc9faae4567de0ebfdccd6 (diff) | |
download | gcc-7ac6f9b4c75cad8189611852c417e4f7483eaef9.zip gcc-7ac6f9b4c75cad8189611852c417e4f7483eaef9.tar.gz gcc-7ac6f9b4c75cad8189611852c417e4f7483eaef9.tar.bz2 |
borrowck: Add CLI option for borrowck
gcc/rust/ChangeLog:
* checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::BorrowChecker): Opt dump.
(BorrowChecker::go): Opt dump.
* checks/errors/borrowck/rust-borrow-checker.h (class BorrowChecker): Opt dump.
* lang.opt: Add compile until borrowcheck.
* rust-session-manager.cc (Session::enable_dump): Add BIR.
(Session::compile_crate): Handle new options.
* rust-session-manager.h (struct CompileOptions): Add BIR.
Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
-rw-r--r-- | gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc | 2 | ||||
-rw-r--r-- | gcc/rust/checks/errors/borrowck/rust-borrow-checker.h | 5 | ||||
-rw-r--r-- | gcc/rust/lang.opt | 7 | ||||
-rw-r--r-- | gcc/rust/rust-session-manager.cc | 14 | ||||
-rw-r--r-- | gcc/rust/rust-session-manager.h | 3 |
5 files changed, 25 insertions, 6 deletions
diff --git a/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc b/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc index a6086b8..6c29223 100644 --- a/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc +++ b/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc @@ -22,8 +22,6 @@ namespace Rust { namespace HIR { -BorrowChecker::BorrowChecker () = default; - void BorrowChecker::go (HIR::Crate &crate) { diff --git a/gcc/rust/checks/errors/borrowck/rust-borrow-checker.h b/gcc/rust/checks/errors/borrowck/rust-borrow-checker.h index 7df5fe7..549af35 100644 --- a/gcc/rust/checks/errors/borrowck/rust-borrow-checker.h +++ b/gcc/rust/checks/errors/borrowck/rust-borrow-checker.h @@ -26,8 +26,11 @@ namespace HIR { class BorrowChecker { + bool enable_dump_bir; + public: - BorrowChecker (); + explicit BorrowChecker (bool enable_dump_bir) + : enable_dump_bir (enable_dump_bir){}; /** Perform borrow-checking using polonius on an entire crate */ void go (HIR::Crate &crate); diff --git a/gcc/rust/lang.opt b/gcc/rust/lang.opt index a77c0a9..67285a6 100644 --- a/gcc/rust/lang.opt +++ b/gcc/rust/lang.opt @@ -190,10 +190,13 @@ EnumValue Enum(frust_compile_until) String(const) Value(8) EnumValue -Enum(frust_compile_until) String(compilation) Value(9) +Enum(frust_compile_until) String(borrowcheck) Value(9) EnumValue -Enum(frust_compile_until) String(end) Value(10) +Enum(frust_compile_until) String(compilation) Value(10) + +EnumValue +Enum(frust_compile_until) String(end) Value(11) frust-name-resolution-2.0 Rust Var(flag_name_resolution_2_0) diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc index c674a18..2843b7d 100644 --- a/gcc/rust/rust-session-manager.cc +++ b/gcc/rust/rust-session-manager.cc @@ -51,6 +51,7 @@ #include "selftest.h" #include "tm.h" #include "rust-target.h" +#include "rust-borrow-checker.h" extern bool saw_errors (void); @@ -313,7 +314,7 @@ Session::enable_dump (std::string arg) "dump option was not given a name. choose %<lex%>, %<ast-pretty%>, " "%<register_plugins%>, %<injection%>, " "%<expansion%>, %<resolution%>, %<target_options%>, %<hir%>, " - "%<hir-pretty%>, or %<all%>"); + "%<hir-pretty%>, %<bir%> or %<all%>"); return false; } @@ -357,6 +358,10 @@ Session::enable_dump (std::string arg) { options.enable_dump_option (CompileOptions::HIR_DUMP_PRETTY); } + else if (arg == "bir") + { + options.enable_dump_option (CompileOptions::BIR_DUMP); + } else { rust_error_at ( @@ -659,6 +664,13 @@ Session::compile_crate (const char *filename) HIR::ConstChecker ().go (hir); + if (last_step == CompileOptions::CompileStep::BorrowCheck) + return; + + const bool dump_bir + = options.dump_option_enabled (CompileOptions::DumpOption::BIR_DUMP); + HIR::BorrowChecker (dump_bir).go (hir); + if (saw_errors ()) return; diff --git a/gcc/rust/rust-session-manager.h b/gcc/rust/rust-session-manager.h index 7e82291..2b1f6d0 100644 --- a/gcc/rust/rust-session-manager.h +++ b/gcc/rust/rust-session-manager.h @@ -221,6 +221,7 @@ struct CompileOptions TARGET_OPTION_DUMP, HIR_DUMP, HIR_DUMP_PRETTY, + BIR_DUMP, }; std::set<DumpOption> dump_options; @@ -254,6 +255,7 @@ struct CompileOptions Privacy, Unsafety, Const, + BorrowCheck, Compilation, End, } compile_until @@ -277,6 +279,7 @@ struct CompileOptions enable_dump_option (DumpOption::TARGET_OPTION_DUMP); enable_dump_option (DumpOption::HIR_DUMP); enable_dump_option (DumpOption::HIR_DUMP_PRETTY); + enable_dump_option (DumpOption::BIR_DUMP); } void set_crate_name (std::string name) |