]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Partial unsafe support for inline asm
authorjjasmine <tanghocle456@gmail.com>
Fri, 31 May 2024 23:09:40 +0000 (16:09 -0700)
committerArthur Cohen <arthur.cohen@embecosm.com>
Mon, 17 Mar 2025 15:35:44 +0000 (16:35 +0100)
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.

gcc/rust/checks/errors/rust-unsafe-checker.cc
gcc/rust/checks/errors/rust-unsafe-checker.h
gcc/rust/hir/tree/rust-hir-expr.h
gcc/rust/hir/tree/rust-hir.cc

index 8d986c72eda5700a769e867a9b4bfbc9c24e9aa9..c6ed9221565785e5ca1ee6482cb4b7e652366b7e 100644 (file)
@@ -636,6 +636,17 @@ UnsafeChecker::visit (AsyncBlockExpr &)
   // TODO: Visit block expression
 }
 
+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 &)
 {}
index ba926729c70d6294fff718f23a93d84dd864ad3e..1fa1fe072da8aa7ce20503f379decdebe3dedd10 100644 (file)
@@ -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;
index a0858a36f04c0426e600b8df9e49723bae685e58..9c66f3e79d54aaf6a7e0838708f3a78c16a291bf 100644 (file)
@@ -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"; }
 
index 5cb224506725f5fdd0ba3138efa639b5c09f1fef..66c6240bfa5af6fd8698d9e793ab8cbc2f634cb1 100644 (file)
@@ -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"
@@ -3769,6 +3770,14 @@ BorrowExpr::accept_vis (HIRFullVisitor &vis)
   vis.visit (*this);
 }
 
+void
+InlineAsm::accept_vis (HIRExpressionVisitor &vis)
+{}
+
+void
+InlineAsm::accept_vis (HIRFullVisitor &vis)
+{}
+
 void
 BorrowExpr::accept_vis (HIRExpressionVisitor &vis)
 {