]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Partial unsafe support for inline asm
authorjjasmine <tanghocle456@gmail.com>
Fri, 31 May 2024 23:09:40 +0000 (16:09 -0700)
committerCohenArthur <arthur.cohen@embecosm.com>
Thu, 13 Jun 2024 15:31:07 +0000 (15:31 +0000)
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 56ac2666752966de293012ddfd026a9c7efe1c11..ff307ae21134c491b5c32db107fbf1cd16bb5c2a 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 27659f5141a554d213bcf54ccd4b23555dd2e990..3a1e715d244213a1cd73058b3dd44e2317a3b23a 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 7dcb84e9050ce27044281d380f18f3cc9a8b85d2..15a32cf989d752c69068c8c0f6d7f52535858986 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 3eb8838eb9db9418b00796db00e4a336565d50ce..5e5d579e26b952c91559a249752ccd80c544fb3d 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)
 {