aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust
diff options
context:
space:
mode:
authorbenjamin.thos <benjamin.thos@epita.fr>2024-09-11 14:31:20 +0000
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2024-09-11 23:03:02 +0000
commitf2e03227e06db75f51005454589f428fa9629c4a (patch)
tree6496cce8b8920f4ab20a09af2ba0a8daa9d20815 /gcc/rust
parent9941d6f3dd4e469bc8962abbba9ffcaa1a5ac60e (diff)
downloadgcc-f2e03227e06db75f51005454589f428fa9629c4a.zip
gcc-f2e03227e06db75f51005454589f428fa9629c4a.tar.gz
gcc-f2e03227e06db75f51005454589f428fa9629c4a.tar.bz2
Emit error on auto-traits
Throw an error when auto-traits used without feature attribute. gcc/rust/ChangeLog: * checks/errors/rust-feature-gate.cc (FeatureGate::visit): Emit error on trait when auto field member true. * checks/errors/rust-feature-gate.h: add prototype of trait visitor. * checks/errors/rust-feature.cc (Feature::create): add optin_builtin_traits in match of feature. gcc/testsuite/ChangeLog: * rust/compile/auto_trait_super_trait.rs: Add feature attribute. * rust/compile/generic_auto_trait.rs: likewise. * rust/compile/auto_trait.rs: add test for error without feature attribute Signed-off-by: benjamin.thos <benjamin.thos@epita.fr>
Diffstat (limited to 'gcc/rust')
-rw-r--r--gcc/rust/checks/errors/rust-feature-gate.cc9
-rw-r--r--gcc/rust/checks/errors/rust-feature-gate.h1
-rw-r--r--gcc/rust/checks/errors/rust-feature.cc3
3 files changed, 13 insertions, 0 deletions
diff --git a/gcc/rust/checks/errors/rust-feature-gate.cc b/gcc/rust/checks/errors/rust-feature-gate.cc
index 2b2c44a..5f07d22 100644
--- a/gcc/rust/checks/errors/rust-feature-gate.cc
+++ b/gcc/rust/checks/errors/rust-feature-gate.cc
@@ -174,6 +174,15 @@ FeatureGate::visit (AST::TraitImpl &impl)
}
void
+FeatureGate::visit (AST::Trait &trait)
+{
+ if (trait.is_auto ())
+ gate (Feature::Name::AUTO_TRAITS, trait.get_locus (),
+ "auto traits are experimental and possibly buggy");
+ AST::DefaultASTVisitor::visit (trait);
+}
+
+void
FeatureGate::visit (AST::BoxExpr &expr)
{
gate (
diff --git a/gcc/rust/checks/errors/rust-feature-gate.h b/gcc/rust/checks/errors/rust-feature-gate.h
index f8a9db7..2d63f4c 100644
--- a/gcc/rust/checks/errors/rust-feature-gate.h
+++ b/gcc/rust/checks/errors/rust-feature-gate.h
@@ -42,6 +42,7 @@ public:
void visit (AST::UseTreeGlob &use_tree) override;
void visit (AST::Function &function) override;
void visit (AST::TraitImpl &impl) override;
+ void visit (AST::Trait &trait) override;
void visit (AST::ExternalTypeItem &item) override;
void visit (AST::ExternBlock &block) override;
void visit (AST::MacroRulesDefinition &rules_def) override;
diff --git a/gcc/rust/checks/errors/rust-feature.cc b/gcc/rust/checks/errors/rust-feature.cc
index 3fab5e5..0487261 100644
--- a/gcc/rust/checks/errors/rust-feature.cc
+++ b/gcc/rust/checks/errors/rust-feature.cc
@@ -55,6 +55,9 @@ Feature::create (Feature::Name f)
"1.11.0", 37854);
case Feature::Name::PRELUDE_IMPORT:
return Feature (f, Feature::State::ACTIVE, "prelude_import", "1.0.0");
+ case Feature::Name::AUTO_TRAITS:
+ return Feature (f, Feature::State::ACTIVE, "optin_builtin_traits",
+ "1.0.0", 13231);
default:
rust_unreachable ();
}