https://gcc.gnu.org/g:7ac6f9b4c75cad8189611852c417e4f7483eaef9
commit 7ac6f9b4c75cad8189611852c417e4f7483eaef9 Author: Jakub Dupak <d...@jakubdupak.com> Date: Thu Oct 19 10:59:54 2023 +0200 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 <d...@jakubdupak.com> Diff: --- gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc | 2 -- gcc/rust/checks/errors/borrowck/rust-borrow-checker.h | 5 ++++- gcc/rust/lang.opt | 7 +++++-- gcc/rust/rust-session-manager.cc | 14 +++++++++++++- 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 a6086b8a6956..6c2922310423 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 7df5fe788a0b..549af3560e9b 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 a77c0a903947..67285a6d92b2 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 c674a18d1c92..2843b7d25cf2 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 7e82291f95f9..2b1f6d00d9c9 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)