aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Dupak <dev@jakubdupak.com>2023-10-19 10:59:54 +0200
committerCohenArthur <arthur.cohen@embecosm.com>2023-10-26 15:05:49 +0000
commit7ac6f9b4c75cad8189611852c417e4f7483eaef9 (patch)
tree93eaef4bd05ec983210ea33ecae8350d17f62451
parent2bb559cea908d08eb6bc9faae4567de0ebfdccd6 (diff)
downloadgcc-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.cc2
-rw-r--r--gcc/rust/checks/errors/borrowck/rust-borrow-checker.h5
-rw-r--r--gcc/rust/lang.opt7
-rw-r--r--gcc/rust/rust-session-manager.cc14
-rw-r--r--gcc/rust/rust-session-manager.h3
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)