diff --git a/gcc/rust/checks/errors/rust-feature-gate.cc b/gcc/rust/checks/errors/rust-feature-gate.cc
index 31ce3679ee18981bffddef6f59f2fe3c5393fc4a..bd01b52c7ff399fdf191bb05c15b8cc1ae4506d0 100644
--- a/gcc/rust/checks/errors/rust-feature-gate.cc
+++ b/gcc/rust/checks/errors/rust-feature-gate.cc
@@ -17,14 +17,15 @@
 // <http://www.gnu.org/licenses/>.
 
 #include "rust-feature-gate.h"
-#include "rust-feature.h"
+#include "rust-abi.h"
 
 namespace Rust {
 
 void
 FeatureGate::check (AST::Crate &crate)
 {
-  std::vector<Feature> valid_features;
+  valid_features.clear ();
+
   for (const auto &attr : crate.inner_attrs)
     {
       if (attr.get_path ().as_string () == "feature")
@@ -39,20 +40,22 @@ FeatureGate::check (AST::Crate &crate)
 		option.parse_to_meta_item ());
 	      for (const auto &item : meta_item->get_items ())
 		{
-		  const auto &name = item->as_string ();
-		  auto tname = Feature::as_name (name);
+		  const auto &name_str = item->as_string ();
+		  auto tname = Feature::as_name (name_str);
 		  if (!tname.is_none ())
-		    valid_features.push_back (Feature::create (tname.get ()));
+		    {
+		      auto name = tname.get ();
+		      valid_features.insert (name);
+		    }
+
 		  else
 		    rust_error_at (item->get_locus (), "unknown feature '%s'",
-				   name.c_str ());
+				   name_str.c_str ());
 		}
 	    }
 	}
     }
-  valid_features.shrink_to_fit ();
 
-  // TODO (mxlol233): add the real feature gate stuff.
   auto &items = crate.items;
   for (auto it = items.begin (); it != items.end (); it++)
     {
@@ -60,4 +63,46 @@ FeatureGate::check (AST::Crate &crate)
       item->accept_vis (*this);
     }
 }
+
+void
+FeatureGate::gate (Feature::Name name, Location loc,
+		   const std::string &error_msg)
+{
+  if (!valid_features.count (name))
+    {
+      auto feature = Feature::create (name);
+      auto issue = feature.issue ();
+      if (issue > 0)
+	{
+	  const char *fmt_str
+	    = "%s. see issue %ld "
+	      "<https://github.com/rust-lang/rust/issues/%ld> for more "
+	      "information. add `#![feature(%s)]` to the crate attributes to "
+	      "enable.";
+	  rust_error_at (loc, fmt_str, error_msg.c_str (), issue, issue,
+			 feature.as_string ().c_str ());
+	}
+      else
+	{
+	  const char *fmt_str
+	    = "%s. add `#![feature(%s)]` to the crate attributes to enable.";
+	  rust_error_at (loc, fmt_str, error_msg.c_str (),
+			 feature.as_string ().c_str ());
+	}
+    }
+}
+
+void
+FeatureGate::visit (AST::ExternBlock &block)
+{
+  if (block.has_abi ())
+    {
+      const auto abi = block.get_abi ();
+
+      if (get_abi_from_string (abi) == ABI::INTRINSIC)
+	gate (Feature::Name::INTRINSICS, block.get_locus (),
+	      "intrinsics are subject to change");
+    }
+}
+
 } // namespace Rust
\ No newline at end of file
diff --git a/gcc/rust/checks/errors/rust-feature-gate.h b/gcc/rust/checks/errors/rust-feature-gate.h
index dc95c6b3879aac26783b9bddc836e608a0851afa..6768c4c24985f19f701c26e95c0dce7d6877d967 100644
--- a/gcc/rust/checks/errors/rust-feature-gate.h
+++ b/gcc/rust/checks/errors/rust-feature-gate.h
@@ -21,6 +21,7 @@
 
 #include "rust-ast-visitor.h"
 #include "rust-ast-full.h"
+#include "rust-feature.h"
 
 namespace Rust {
 
@@ -136,7 +137,7 @@ public:
   void visit (AST::TraitImpl &impl) override {}
   void visit (AST::ExternalStaticItem &item) override {}
   void visit (AST::ExternalFunctionItem &item) override {}
-  void visit (AST::ExternBlock &block) override {}
+  void visit (AST::ExternBlock &block) override;
   void visit (AST::MacroMatchFragment &match) override {}
   void visit (AST::MacroMatchRepetition &match) override {}
   void visit (AST::MacroMatcher &matcher) override {}
@@ -186,6 +187,10 @@ public:
   void visit (AST::SliceType &type) override {}
   void visit (AST::InferredType &type) override {}
   void visit (AST::BareFunctionType &type) override {}
+
+private:
+  void gate (Feature::Name name, Location loc, const std::string &error_msg);
+  std::set<Feature::Name> valid_features;
 };
 } // namespace Rust
 #endif
\ No newline at end of file
diff --git a/gcc/rust/checks/errors/rust-feature.h b/gcc/rust/checks/errors/rust-feature.h
index 1425e26cd9adda470191765c76820d518cecd6d9..7bd76c093f2966ee199553e01d8e51bfc89b74f8 100644
--- a/gcc/rust/checks/errors/rust-feature.h
+++ b/gcc/rust/checks/errors/rust-feature.h
@@ -47,6 +47,7 @@ public:
   Name name () { return m_name; }
   const std::string &description () { return m_description; }
   State state () { return m_state; }
+  uint64_t issue () { return m_issue; }
 
   static Optional<Name> as_name (const std::string &name);
   static Feature create (Name name);
@@ -57,7 +58,7 @@ private:
 	   const Optional<CompileOptions::Edition> &edition,
 	   const char *description)
     : m_state (state), m_name (name), m_name_str (name_str),
-      m_rustc_since (rustc_since), issue (issue_number), edition (edition),
+      m_rustc_since (rustc_since), m_issue (issue_number), edition (edition),
       m_description (description)
   {}
 
@@ -65,7 +66,7 @@ private:
   Name m_name;
   std::string m_name_str;
   std::string m_rustc_since;
-  uint64_t issue;
+  uint64_t m_issue;
   Optional<CompileOptions::Edition> edition;
   std::string m_description;
 
diff --git a/gcc/testsuite/rust/compile/const-issue1440.rs b/gcc/testsuite/rust/compile/const-issue1440.rs
index 9b974b96bbbdbae77907bd03b8e77b7c550699d5..9ad76a96b2adf470a7ac2a3ef0737b16e6354f6f 100644
--- a/gcc/testsuite/rust/compile/const-issue1440.rs
+++ b/gcc/testsuite/rust/compile/const-issue1440.rs
@@ -1,4 +1,5 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
 
 mod intrinsics {
     extern "rust-intrinsic" {
diff --git a/gcc/testsuite/rust/compile/feature_intrinsics.rs b/gcc/testsuite/rust/compile/feature_intrinsics.rs
new file mode 100644
index 0000000000000000000000000000000000000000..5eb7ffed8645bb4e1d3bed08176c79300ae84aaa
--- /dev/null
+++ b/gcc/testsuite/rust/compile/feature_intrinsics.rs
@@ -0,0 +1,7 @@
+
+extern "rust-intrinsic" { //{ dg-error "intrinsics are subject to change." "" { target *-*-* }  }
+    pub fn sqrtf32(x: f32) -> f32;
+}
+
+fn main() {
+}
diff --git a/gcc/testsuite/rust/compile/issue-1031.rs b/gcc/testsuite/rust/compile/issue-1031.rs
index 5ba8f7a267b22fbbb44c880fbc2b282cbcb55faa..a9049de96fba562734bfb3837a4c7010b2bc8b79 100644
--- a/gcc/testsuite/rust/compile/issue-1031.rs
+++ b/gcc/testsuite/rust/compile/issue-1031.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-1130.rs b/gcc/testsuite/rust/compile/issue-1130.rs
index 92200c7cd5f777ddfd87c9fbee59bf3d4f4ced82..6d265cb6044ae6e475830deafea9cdea91951ce2 100644
--- a/gcc/testsuite/rust/compile/issue-1130.rs
+++ b/gcc/testsuite/rust/compile/issue-1130.rs
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
+
 mod mem {
     extern "rust-intrinsic" {
         fn size_of<T>() -> usize;
diff --git a/gcc/testsuite/rust/compile/issue-1131.rs b/gcc/testsuite/rust/compile/issue-1131.rs
index fd158abc700f3026dddbf54becd81aa5a67f43cf..5cb9caf81f0a00ae29f191b1794034d940471f72 100644
--- a/gcc/testsuite/rust/compile/issue-1131.rs
+++ b/gcc/testsuite/rust/compile/issue-1131.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     fn size_of<T>() -> usize;
     fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-1237.rs b/gcc/testsuite/rust/compile/issue-1237.rs
index 542be89794982a55617a28aa47fa181ee8452bf7..54a51df156fbbb273806b39ed52e9744c081fd8d 100644
--- a/gcc/testsuite/rust/compile/issue-1237.rs
+++ b/gcc/testsuite/rust/compile/issue-1237.rs
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
+
 mod intrinsics {
     extern "rust-intrinsic" {
         pub fn offset<T>(ptr: *const T, count: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/issue-1289.rs b/gcc/testsuite/rust/compile/issue-1289.rs
index eb41af0a75b7bb7f1ccd76dd57f8503892c85a64..3d7716a1d8caa26d35c052ff80664e002611c173 100644
--- a/gcc/testsuite/rust/compile/issue-1289.rs
+++ b/gcc/testsuite/rust/compile/issue-1289.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "C" {
     fn printf(s: *const i8, ...);
 }
diff --git a/gcc/testsuite/rust/compile/rust-const-blog-issue.rs b/gcc/testsuite/rust/compile/rust-const-blog-issue.rs
index a5ea2ebacb98e5888952e024d5bebec0bc2eff5d..679a2ae8c2b0c48c523a0573f8fbd61bf4a6b53c 100644
--- a/gcc/testsuite/rust/compile/rust-const-blog-issue.rs
+++ b/gcc/testsuite/rust/compile/rust-const-blog-issue.rs
@@ -1,4 +1,6 @@
 // { dg-excess-errors "accessing value of"  }
+#![feature(intrinsics)]
+
 mod mem {
     extern "rust-intrinsic" {
         #[rustc_const_stable(feature = "const_transmute", since = "1.46.0")]
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-3.rs b/gcc/testsuite/rust/compile/torture/intrinsics-3.rs
index 5c131bd8aa290f94aebd730b1463e80f9aa78373..1601ab6d5b7e9193ea4d0ca996919e8518d37149 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-3.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-3.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     fn not_an_intrinsic();
 }
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-4.rs b/gcc/testsuite/rust/compile/torture/intrinsics-4.rs
index 4e09f1089b01aa2f41574b40ec8c68f90f77e4ee..1f6c0d6608a2e62c8ae5e718c1a1a29086ddfbb2 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-4.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-4.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 #[lang = "sized"]
 pub trait Sized {}
 
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-5.rs b/gcc/testsuite/rust/compile/torture/intrinsics-5.rs
index ffad0bd3a853aa5d232b9ba3750e8e3442fffc3d..7a62cca280cab246a0af5a1f2844f85b089e124d 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-5.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-5.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 #[lang = "sized"]
 pub trait Sized {}
 
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-6.rs b/gcc/testsuite/rust/compile/torture/intrinsics-6.rs
index 143b62a2b27e2ffe42e3bdb58c660edd3c2cf46b..4e510e110877bd9d2d287c1c4d4921ba70d145f8 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-6.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-6.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     pub fn unchecked_add<T>(x: T, y: T) -> T;
     pub fn unchecked_sub<T>(x: T, y: T) -> T;
diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-7.rs b/gcc/testsuite/rust/compile/torture/intrinsics-7.rs
index 8e8c5fe0cdf8da76b157352964ecfa16fbb745b3..da85fff5cd6800e41b9dd1dffcbcdc4a16ecf341 100644
--- a/gcc/testsuite/rust/compile/torture/intrinsics-7.rs
+++ b/gcc/testsuite/rust/compile/torture/intrinsics-7.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     pub fn unchecked_add<T>(x: T, y: T) -> T;
     // { dg-error "unchecked operation intrinsics can only be used with basic integer types .got .NotAdd.." "" { target *-*-* } .-1 }
diff --git a/gcc/testsuite/rust/compile/torture/issue-1024.rs b/gcc/testsuite/rust/compile/torture/issue-1024.rs
index 109540934a830d7d1f5cbff88a3561e7a0a8965e..a8503cebf533bc5cc2e640d2db056d445975c891 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1024.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1024.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     pub fn size_of<T>() -> usize;
 }
diff --git a/gcc/testsuite/rust/compile/torture/issue-1075.rs b/gcc/testsuite/rust/compile/torture/issue-1075.rs
index 7c0a04342621084ff0ce00d0aa41f442278c86a3..201a241d45d9a2ef791bea4fa43de2d260322d97 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1075.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1075.rs
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/compile/torture/issue-1432.rs b/gcc/testsuite/rust/compile/torture/issue-1432.rs
index 083a369d16f5c9b260a774d4d38e8c6006aa42fb..822ca41c5ad3c0da48277e6cb2880234f384cce9 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1432.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1432.rs
@@ -1,4 +1,5 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
 mod intrinsics {
     extern "rust-intrinsic" {
         #[rustc_const_stable(feature = "const_int_wrapping", since = "1.40.0")]
diff --git a/gcc/testsuite/rust/compile/unsafe10.rs b/gcc/testsuite/rust/compile/unsafe10.rs
index 6b6be06b908dbfd95534116b8fa5c8c02a2446aa..927e69728c96571375e1e3b10e3bb8d591bad8d1 100644
--- a/gcc/testsuite/rust/compile/unsafe10.rs
+++ b/gcc/testsuite/rust/compile/unsafe10.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     pub fn rotate_left<T>(l: T, r: T) -> T;
 }
diff --git a/gcc/testsuite/rust/execute/torture/atomic_load.rs b/gcc/testsuite/rust/execute/torture/atomic_load.rs
index 6e7383aa7e908215abedf37493e2f28fd3938b96..b66c4641424a92c2a558526fb10d550dd8b0503e 100644
--- a/gcc/testsuite/rust/execute/torture/atomic_load.rs
+++ b/gcc/testsuite/rust/execute/torture/atomic_load.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 #[lang = "sized"]
 pub trait Sized {}
 
diff --git a/gcc/testsuite/rust/execute/torture/atomic_store.rs b/gcc/testsuite/rust/execute/torture/atomic_store.rs
index 46960a7a1868961ed11eb3d12ed6b700df411a59..dcbb2a90f19907c0a377c9fca39e09a9f4782b95 100644
--- a/gcc/testsuite/rust/execute/torture/atomic_store.rs
+++ b/gcc/testsuite/rust/execute/torture/atomic_store.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 #[lang = "sized"]
 pub trait Sized {}
 
diff --git a/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs b/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
index 2ae7a0869e3331043f10349240292bc38d0ea825..39afd3424a404da0d424db4e35e59f16bae3d5a9 100644
--- a/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
+++ b/gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     pub fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize);
 }
diff --git a/gcc/testsuite/rust/execute/torture/issue-1120.rs b/gcc/testsuite/rust/execute/torture/issue-1120.rs
index 242c94b5cb63384300692311c8c1e396539b1743..59792b29a291e0c4168e186ea8864c2d926caa59 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1120.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1120.rs
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1133.rs b/gcc/testsuite/rust/execute/torture/issue-1133.rs
index f2080a6e072ac4cf6705071fc88f36589ae8a8bf..8679bb932242afedc993c58b70e52fcf0f874aa5 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1133.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1133.rs
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/issue-1232.rs b/gcc/testsuite/rust/execute/torture/issue-1232.rs
index 9215efdba6c212332aa6b376909ffbc87fe41b73..ce53da2d0339f0db6c59af3645c07014f212242f 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1232.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1232.rs
@@ -1,5 +1,7 @@
 // { dg-additional-options "-w" }
 // { dg-output "slice_access=3\r*\n" }
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/slice-magic.rs b/gcc/testsuite/rust/execute/torture/slice-magic.rs
index d1132989ddbd5477412146594fde69bb5724188b..b52aa3df510470b5ed02c4d12f9f62607a641627 100644
--- a/gcc/testsuite/rust/execute/torture/slice-magic.rs
+++ b/gcc/testsuite/rust/execute/torture/slice-magic.rs
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/slice-magic2.rs b/gcc/testsuite/rust/execute/torture/slice-magic2.rs
index 64a566185fac57055a4f7d9722cf906bbd28129a..cdc39f3dccae3fa5bea65e9ed913d31da47f9e20 100644
--- a/gcc/testsuite/rust/execute/torture/slice-magic2.rs
+++ b/gcc/testsuite/rust/execute/torture/slice-magic2.rs
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     #[rustc_const_stable(feature = "const_ptr_offset", since = "1.61.0")]
     pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
diff --git a/gcc/testsuite/rust/execute/torture/str-layout1.rs b/gcc/testsuite/rust/execute/torture/str-layout1.rs
index 39c1e38d77bb2970e92bd4e836f583214472ba56..c9bcf1631e21e4e648d6e8d22ac792d08760d77e 100644
--- a/gcc/testsuite/rust/execute/torture/str-layout1.rs
+++ b/gcc/testsuite/rust/execute/torture/str-layout1.rs
@@ -1,5 +1,7 @@
 // { dg-additional-options "-w" }
 // { dg-output "t1sz=5 t2sz=10\r*" }
+#![feature(intrinsics)]
+
 mod mem {
     extern "rust-intrinsic" {
         #[rustc_const_stable(feature = "const_transmute", since = "1.46.0")]
diff --git a/gcc/testsuite/rust/execute/torture/transmute1.rs b/gcc/testsuite/rust/execute/torture/transmute1.rs
index b9ec38ca618375363d27545b1f08ff7596d369bb..40dcfdee0b3d433878571b00dbac36a401c70a59 100644
--- a/gcc/testsuite/rust/execute/torture/transmute1.rs
+++ b/gcc/testsuite/rust/execute/torture/transmute1.rs
@@ -1,4 +1,5 @@
 // { dg-additional-options "-w" }
+#![feature(intrinsics)]
 
 extern "rust-intrinsic" {
     fn transmute<T, U>(value: T) -> U;
diff --git a/gcc/testsuite/rust/execute/torture/wrapping_op1.rs b/gcc/testsuite/rust/execute/torture/wrapping_op1.rs
index 64b37085ab75d51c1c144315643d8016d2ff2b03..ab4afd7ddde84395d16ea3bde5237c782abd3ec8 100644
--- a/gcc/testsuite/rust/execute/torture/wrapping_op1.rs
+++ b/gcc/testsuite/rust/execute/torture/wrapping_op1.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     pub fn wrapping_add<T>(l: T, r: T) -> T;
 }
diff --git a/gcc/testsuite/rust/execute/torture/wrapping_op2.rs b/gcc/testsuite/rust/execute/torture/wrapping_op2.rs
index f9990157894d19996665b96e97171a390a49bafd..b24ebce56f1667a66c28af72d114758db57257ac 100644
--- a/gcc/testsuite/rust/execute/torture/wrapping_op2.rs
+++ b/gcc/testsuite/rust/execute/torture/wrapping_op2.rs
@@ -1,3 +1,5 @@
+#![feature(intrinsics)]
+
 extern "rust-intrinsic" {
     pub fn wrapping_add<T>(l: T, r: T) -> T;
     pub fn wrapping_sub<T>(l: T, r: T) -> T;