aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjjasmine <tanghocle456@gmail.com>2024-05-31 16:09:40 -0700
committerCohenArthur <arthur.cohen@embecosm.com>2024-06-13 15:31:07 +0000
commit914777653e9433c525e4b584aa0d5658c7eccddc (patch)
treee34b509f40fdce2014becdc208f71fc09c828905
parent520d279b5d61643cc0f92aed25caf97f981c60b5 (diff)
downloadgcc-914777653e9433c525e4b584aa0d5658c7eccddc.zip
gcc-914777653e9433c525e4b584aa0d5658c7eccddc.tar.gz
gcc-914777653e9433c525e4b584aa0d5658c7eccddc.tar.bz2
Partial unsafe support for inline asm
gcc/rust/ChangeLog: * checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Partial unsafe support for inline asm * checks/errors/rust-unsafe-checker.h: Likewise. * hir/tree/rust-hir-expr.h: Likewise. * hir/tree/rust-hir.cc (InlineAsm::accept_vis): Likewise.
-rw-r--r--gcc/rust/checks/errors/rust-unsafe-checker.cc11
-rw-r--r--gcc/rust/checks/errors/rust-unsafe-checker.h1
-rw-r--r--gcc/rust/hir/tree/rust-hir-expr.h4
-rw-r--r--gcc/rust/hir/tree/rust-hir.cc9
4 files changed, 23 insertions, 2 deletions
diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.cc b/gcc/rust/checks/errors/rust-unsafe-checker.cc
index 56ac266..ff307ae 100644
--- a/gcc/rust/checks/errors/rust-unsafe-checker.cc
+++ b/gcc/rust/checks/errors/rust-unsafe-checker.cc
@@ -637,6 +637,17 @@ UnsafeChecker::visit (AsyncBlockExpr &)
}
void
+UnsafeChecker::visit (InlineAsm &expr)
+{
+ if (unsafe_context.is_in_context ())
+ return;
+
+ rust_error_at (
+ expr.get_locus (), ErrorCode::E0133,
+ "use of inline assembly is unsafe and requires unsafe function or block");
+}
+
+void
UnsafeChecker::visit (TypeParam &)
{}
diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.h b/gcc/rust/checks/errors/rust-unsafe-checker.h
index 27659f5..3a1e715 100644
--- a/gcc/rust/checks/errors/rust-unsafe-checker.h
+++ b/gcc/rust/checks/errors/rust-unsafe-checker.h
@@ -115,6 +115,7 @@ private:
virtual void visit (MatchExpr &expr) override;
virtual void visit (AwaitExpr &expr) override;
virtual void visit (AsyncBlockExpr &expr) override;
+ virtual void visit (InlineAsm &expr);
virtual void visit (TypeParam &param) override;
virtual void visit (ConstGenericParam &param) override;
virtual void visit (LifetimeWhereClauseItem &item) override;
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h
index 7dcb84e..15a32cf 100644
--- a/gcc/rust/hir/tree/rust-hir-expr.h
+++ b/gcc/rust/hir/tree/rust-hir-expr.h
@@ -3878,9 +3878,9 @@ public:
std::vector<location_t> line_spans;
- void accept_vis (HIRExpressionVisitor &vis) override{};
+ void accept_vis (HIRExpressionVisitor &vis) override;
- void accept_vis (HIRFullVisitor &vis) override{};
+ void accept_vis (HIRFullVisitor &vis) override;
std::string as_string () const override { return "InlineAsm HIR Node"; }
diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc
index 3eb8838..5e5d579 100644
--- a/gcc/rust/hir/tree/rust-hir.cc
+++ b/gcc/rust/hir/tree/rust-hir.cc
@@ -17,6 +17,7 @@
// <http://www.gnu.org/licenses/>.
#include "rust-ast-full.h"
+#include "rust-hir-expr.h"
#include "rust-hir-full.h"
#include "rust-hir-visitor.h"
#include "rust-diagnostics.h"
@@ -3770,6 +3771,14 @@ BorrowExpr::accept_vis (HIRFullVisitor &vis)
}
void
+InlineAsm::accept_vis (HIRExpressionVisitor &vis)
+{}
+
+void
+InlineAsm::accept_vis (HIRFullVisitor &vis)
+{}
+
+void
BorrowExpr::accept_vis (HIRExpressionVisitor &vis)
{
vis.visit (*this);