diff options
author | benjamin.thos <benjamin.thos@epita.fr> | 2024-09-11 14:31:20 +0000 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2024-09-11 23:03:02 +0000 |
commit | f2e03227e06db75f51005454589f428fa9629c4a (patch) | |
tree | 6496cce8b8920f4ab20a09af2ba0a8daa9d20815 /gcc/rust | |
parent | 9941d6f3dd4e469bc8962abbba9ffcaa1a5ac60e (diff) | |
download | gcc-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.cc | 9 | ||||
-rw-r--r-- | gcc/rust/checks/errors/rust-feature-gate.h | 1 | ||||
-rw-r--r-- | gcc/rust/checks/errors/rust-feature.cc | 3 |
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 (); } |