]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Add feature gate for "rustc_attri".
authormxlol233 <mxlol233@outlook.com>
Thu, 16 Feb 2023 11:38:42 +0000 (19:38 +0800)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:13:34 +0000 (18:13 +0100)
This commit implemented a basic feature gate to check some attributes
for `rustc_attri`.

gcc/rust/ChangeLog:

* checks/errors/rust-feature-gate.cc: Add implementations
for `rustc_attri`.
* checks/errors/rust-feature-gate.h: Likewise.

gcc/testsuite/ChangeLog:

* rust/compile/builtin_macro_compile_error.rs: Add
crate feature `rustc_attri`.
* rust/compile/builtin_macro_concat.rs: Likewise.
* rust/compile/builtin_macro_eager1.rs: Likewise.
* rust/compile/builtin_macro_eager2.rs: Likewise.
* rust/compile/builtin_macro_env.rs: Likewise.
* rust/compile/builtin_macro_include_bytes.rs:
Likewise.
* rust/compile/builtin_macro_include_str.rs:
Likewise.
* rust/compile/builtin_macro_not_found.rs:
Likewise.
* rust/compile/builtin_macro_recurse2.rs:
Likewise.
* rust/compile/feature_rust_attri0.rs:New file.
* rust/compile/feature_rust_attri1.rs:New file.
* rust/compile/include_empty.rs:Add crate feature
`rustc_attri`.
* rust/compile/issue-1830_bytes.rs:Likewise.
* rust/compile/issue-1830_str.rs:Likewise.
* rust/compile/macro42.rs:Likewise.
* rust/execute/torture/builtin_macro_cfg.rs:
Likewise.
* rust/execute/torture/builtin_macro_concat.rs:
Likewise.
* rust/execute/torture/builtin_macro_env.rs:
Likewise.
* rust/execute/torture/builtin_macro_include_bytes.rs:
Likewise.
* rust/execute/torture/builtin_macro_include_str.rs:
Likewise.
* rust/execute/torture/builtin_macro_line.rs:
Likewise.
* rust/execute/torture/builtin_macros1.rs:
Likewise.
* rust/execute/torture/builtin_macros3.rs:
Likewise.
* rust/execute/torture/macros29.rs:Likewise.
* rust/execute/torture/macros30.rs:Likewise.
* rust/execute/torture/macros31.rs:Likewise.

Signed-off-by: Xiao Ma <mxlol233@outlook.com>
28 files changed:
gcc/rust/checks/errors/rust-feature-gate.cc
gcc/rust/checks/errors/rust-feature-gate.h
gcc/testsuite/rust/compile/builtin_macro_compile_error.rs
gcc/testsuite/rust/compile/builtin_macro_concat.rs
gcc/testsuite/rust/compile/builtin_macro_eager1.rs
gcc/testsuite/rust/compile/builtin_macro_eager2.rs
gcc/testsuite/rust/compile/builtin_macro_env.rs
gcc/testsuite/rust/compile/builtin_macro_include_bytes.rs
gcc/testsuite/rust/compile/builtin_macro_include_str.rs
gcc/testsuite/rust/compile/builtin_macro_not_found.rs
gcc/testsuite/rust/compile/builtin_macro_recurse2.rs
gcc/testsuite/rust/compile/feature_rust_attri0.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/feature_rust_attri1.rs [new file with mode: 0644]
gcc/testsuite/rust/compile/include_empty.rs
gcc/testsuite/rust/compile/issue-1830_bytes.rs
gcc/testsuite/rust/compile/issue-1830_str.rs
gcc/testsuite/rust/compile/macro42.rs
gcc/testsuite/rust/execute/torture/builtin_macro_cfg.rs
gcc/testsuite/rust/execute/torture/builtin_macro_concat.rs
gcc/testsuite/rust/execute/torture/builtin_macro_env.rs
gcc/testsuite/rust/execute/torture/builtin_macro_include_bytes.rs
gcc/testsuite/rust/execute/torture/builtin_macro_include_str.rs
gcc/testsuite/rust/execute/torture/builtin_macro_line.rs
gcc/testsuite/rust/execute/torture/builtin_macros1.rs
gcc/testsuite/rust/execute/torture/builtin_macros3.rs
gcc/testsuite/rust/execute/torture/macros29.rs
gcc/testsuite/rust/execute/torture/macros30.rs
gcc/testsuite/rust/execute/torture/macros31.rs

index e04b1c0156fe03172816e796f4a1ae4ac71b2466..462f9b9742c0bb17e61cb1d762120c4647c316e1 100644 (file)
@@ -105,4 +105,54 @@ FeatureGate::visit (AST::ExternBlock &block)
     }
 }
 
+void
+FeatureGate::check_rustc_attri (const std::vector<AST::Attribute> &attributes)
+{
+  for (const AST::Attribute &attr : attributes)
+    {
+      auto name = attr.get_path ().as_string ();
+      if (name.rfind ("rustc_", 0) == 0)
+       {
+         gate (Feature::Name::RUSTC_ATTRS, attr.get_locus (),
+               "internal implementation detail");
+       }
+    }
+}
+
+void
+FeatureGate::visit (AST::MacroRulesDefinition &rules_def)
+{
+  check_rustc_attri (rules_def.get_outer_attrs ());
+}
+
+void
+FeatureGate::visit (AST::InherentImpl &impl)
+{
+  for (const auto &item : impl.get_impl_items ())
+    {
+      item->accept_vis (*this);
+    }
+}
+
+void
+FeatureGate::visit (AST::TraitImpl &impl)
+{
+  for (const auto &item : impl.get_impl_items ())
+    {
+      item->accept_vis (*this);
+    }
+}
+
+void
+FeatureGate::visit (AST::Method &method)
+{
+  check_rustc_attri (method.get_outer_attrs ());
+}
+
+void
+FeatureGate::visit (AST::Function &function)
+{
+  check_rustc_attri (function.get_outer_attrs ());
+}
+
 } // namespace Rust
\ No newline at end of file
index b4b7900abd91949769f08cd73881dfd2d4b22958..520015543fde59ebb1bd2eaaea49a3fa8af16915 100644 (file)
@@ -25,8 +25,6 @@
 
 namespace Rust {
 
-struct Feature;
-
 class FeatureGate : public AST::ASTVisitor
 {
 public:
@@ -109,14 +107,14 @@ public:
   void visit (AST::TypeParam &param) override {}
   void visit (AST::LifetimeWhereClauseItem &item) override {}
   void visit (AST::TypeBoundWhereClauseItem &item) override {}
-  void visit (AST::Method &method) override {}
+  void visit (AST::Method &method) override;
   void visit (AST::Module &module) override {}
   void visit (AST::ExternCrate &crate) override {}
   void visit (AST::UseTreeGlob &use_tree) override {}
   void visit (AST::UseTreeList &use_tree) override {}
   void visit (AST::UseTreeRebind &use_tree) override {}
   void visit (AST::UseDeclaration &use_decl) override {}
-  void visit (AST::Function &function) override {}
+  void visit (AST::Function &function) override;
   void visit (AST::TypeAlias &type_alias) override {}
   void visit (AST::StructStruct &struct_item) override {}
   void visit (AST::TupleStruct &tuple_struct) override {}
@@ -133,15 +131,15 @@ public:
   void visit (AST::TraitItemConst &item) override {}
   void visit (AST::TraitItemType &item) override {}
   void visit (AST::Trait &trait) override {}
-  void visit (AST::InherentImpl &impl) override {}
-  void visit (AST::TraitImpl &impl) override {}
+  void visit (AST::InherentImpl &impl) override;
+  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::MacroMatchFragment &match) override {}
   void visit (AST::MacroMatchRepetition &match) override {}
   void visit (AST::MacroMatcher &matcher) override {}
-  void visit (AST::MacroRulesDefinition &rules_def) override {}
+  void visit (AST::MacroRulesDefinition &rules_def) override;
   void visit (AST::MacroInvocation &macro_invoc) override {}
   void visit (AST::MetaItemPath &meta_item) override {}
   void visit (AST::MetaItemSeq &meta_item) override {}
@@ -191,6 +189,7 @@ public:
 
 private:
   void gate (Feature::Name name, Location loc, const std::string &error_msg);
+  void check_rustc_attri (const std::vector<AST::Attribute> &attributes);
   std::set<Feature::Name> valid_features;
 };
 } // namespace Rust
index 9d224406a3eab17034f1a9ef41f0fdf006a9897c..b08f67f4fe6151a5a2b821b006790c17ecf2b739 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! compile_error {
   () => {{}};
index 3b8eb2dcda7435299f47b63e4b27e9d02c7089c6..28c84241129f3619610e42f31262349029db00c1 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! concat {
     () => {{}};
index 0b516fd93a9ddd798e08dded182bfc5255173934..65a80fda62ef21a1b6488483d2b9f7294b3037be 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-additional-options "-fdump-tree-gimple" }
+#![feature(rustc_attrs)]
 
 #[rustc_builtin_macro]
 macro_rules! concat {
index 21bf95c78297a1cde6dc34c72ed4229fa860ed2f..70a92d5b04100e1741a161e622c5bd83b722c4e0 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! env {
     () => {};
index 337f0ae4316b8e2434f5bbfc4e4fec6a883c2e7f..83d3c2d6b28b75326335f0d837eda25021d556ed 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! env {
   () => {{}};
index 38716d33bcd9ae78818391a4396682c9a8e54f73..9972c10b49a4fa2039d10f6257721f19af560c66 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! include_bytes {
   () => {{}};
index 8092193195d9dd7e689f66d35b371ce36255ad6d..d6d7a76856f43ae0b30537addaf24a5985402621 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! include_str {
   () => {{}};
index 1a3228b92841424f98ad5b554848ed94b5a00a2a..5ba7fc08a18655d9c19fd6ff66f3b29d5558686c 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! crabby_crab_carb { // { dg-error "cannot find a built-in macro with name .crabby_crab_carb." }
     () => {{}};
index d859920862451a77920f2d9d9df10cd8245e687d..2e73ab54fb6032c43cf59421ca84c7afa6861dd6 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-additional-options "-fdump-tree-gimple" }
+#![feature(rustc_attrs)]
 
 #[rustc_builtin_macro]
 macro_rules! concat {
diff --git a/gcc/testsuite/rust/compile/feature_rust_attri0.rs b/gcc/testsuite/rust/compile/feature_rust_attri0.rs
new file mode 100644 (file)
index 0000000..9c11f56
--- /dev/null
@@ -0,0 +1,11 @@
+#[rustc_builtin_macro] //{ dg-error "internal implementation detail. " "" { target *-*-* }  }
+macro_rules! line {
+    () => {{}};
+}
+
+fn main() -> i32 {
+    let a = line!();
+    print(a);
+
+    0
+}
diff --git a/gcc/testsuite/rust/compile/feature_rust_attri1.rs b/gcc/testsuite/rust/compile/feature_rust_attri1.rs
new file mode 100644 (file)
index 0000000..ec4e7d5
--- /dev/null
@@ -0,0 +1,13 @@
+
+pub struct NotI8(i8);
+
+impl NotI8 {
+    #[rustc_inherit_overflow_checks] //{ dg-error "internal implementation detail" "" { target *-*-* }  }
+    pub fn add(self, other: NotI8) -> NotI8 {
+        NotI8(self.0 + other.0)
+    }
+}
+
+fn main() -> i32 {
+    0
+}
index 28e940fa0ac7d5b593f8da348c428ee5815701ef..02c2d2e18559d90476558c78a842ad0c22e5732d 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! include {
     () => {};
index 997d4ca0cdcd9052c2dafa1228e33b34a68f3881..24b69334deee9f9ff95c4713ab845d87435ed8fd 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! include_bytes {
     () => {{}};
index fcf2dc988d36fd3bd95b114ea52dff0667c75fbd..ce4a6a94118f2108d5e5a26424d96e487255f7eb 100644 (file)
@@ -1,3 +1,5 @@
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! include_str {
     () => {{}};
index 52d150b82baf08e1ad3f33e9a9a959d486620af6..b3fbf6d6eb9b10760c0ce2049453015343f5c7ec 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-additional-options "-w -frust-cfg=A" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! cfg {
     () => {{}};
index a8d6ae0f7ca3ccb8362d20531a632d629b75bdcf..92343e566123658af89fd72b7a789e4d20649814 100644 (file)
@@ -1,5 +1,7 @@
 // { dg-additional-options "-w -frust-cfg=A" }
 // { dg-output "A\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! cfg {
     () => {{}};
index a9d68e0cd3546238505add78e22946669db63bb9..2470b7559cb9b3cb444db7050cda134669c21db9 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-output "\r*\ntest10btrue2.15\r*\ntest10bfalse2.151\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! concat {
     () => {{}};
index d64e2a00097ee20c71911212c7d04f985b1a3512..5bad4dee63c1a1700601f2bcc925e07047438964 100644 (file)
@@ -1,5 +1,7 @@
 // { dg-output "VALUE\r*\nVALUE\r*\n" }
 // { dg-set-compiler-env-var ENV_MACRO_TEST "VALUE" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! env {
     () => {{}};
index 8be55773036281d90b45f234ecf304952999b6cf..19a1faff11cc8941909f59faf67978c220ce1554 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-output "104\r*\n33\r*\n1\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! include_bytes {
     () => {{}};
index 43d40c9c0dfeeb98a17ee6d6f7b58bf0b1db9de7..a65639dcba1fd940dae375691662badd53568e7e 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-output "hello, include!\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! include_str {
     () => {{}};
index 9998de1402d5b0cabe68a54ac857b66bda205e5a..dd7dd4e5f5bb89849a30bdb7b5b61b5adb3193ae 100644 (file)
@@ -1,4 +1,6 @@
-// { dg-output "18\r*\n21\r*\n" }
+// { dg-output "20\r*\n23\r*\n" }
+#![feature(rustc_attrs)]
+
 extern "C" {
     fn printf(fmt: *const i8, ...);
 }
index 5bccb16e0f9ab062f2f37e3073184411d6fbe329..f5dcbd6423c5f1e4f2f44b53e5eee22d2a036a37 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-output "rust/execute/torture/builtin_macros1.rs\r*" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! file {
     () => {{}};
index 5a024fa0e246ee3600499d93fc7332e58c56077d..85a0c6db70561a96b94192543a32283836b2ae61 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-output "14\r*\n42\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! column {
     () => {{}};
index 9c2cc0e6a1b30e18d41b70bcb0b6ae964ad878d3..817ac67e675715273e3bd60126080cb565a9e8bd 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-output "1\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! concat {
     () => {{}};
index 7ec77d0698258e7a9c8f19a37c726ed608d42bda..4dd0a5531d4eadfb5a4ca952ede8cdd2bdc652b3 100644 (file)
@@ -1,4 +1,6 @@
 // { dg-output "1\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! concat {
     () => {{}};
index 4c6378a68c25eacf652047161f8d58228f2e77ab..0a256c36a4fcdd736764ecb13d2564f137174843 100644 (file)
@@ -1,5 +1,7 @@
 // { dg-additional-options "-w -frust-cfg=A" }
 // { dg-output "A\r*\nB\r*\n" }
+#![feature(rustc_attrs)]
+
 #[rustc_builtin_macro]
 macro_rules! cfg {
     () => {{}};