From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 21E353858C52; Sun, 5 Mar 2023 11:41:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 21E353858C52 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1678016469; bh=6b8O061vzCiS0zzXzRL+c2V1xbIcIEnD61YjRC0jgTo=; h=From:To:Subject:Date:From; b=DWLTdT17Jz9D72yPsz5BBFf6FldZj7FWNpN4jXrPRGHn2YIjO+0usiV6CTvH+gwpw W5Zw/rQ4M/jdc8rfriCB1p/A+ejBfaS4cRKnaKNt7IoSE402UbGz3/vY1FgdikB8mF PMCRB+pTJ8eIbYFYM6cAfCWyWm+R2UcHCExwnvPg= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] Add feature gate definition for `extern_types`. X-Act-Checkin: gcc X-Git-Author: mxlol233 X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: 9dce6f995c2b3bc021a97872b413807de7d294b1 X-Git-Newrev: 9c46a853be4b5a9c2e1b965fa0dcd44beed71924 Message-Id: <20230305114109.21E353858C52@sourceware.org> Date: Sun, 5 Mar 2023 11:41:09 +0000 (GMT) List-Id: https://gcc.gnu.org/g:9c46a853be4b5a9c2e1b965fa0dcd44beed71924 commit 9c46a853be4b5a9c2e1b965fa0dcd44beed71924 Author: mxlol233 Date: Wed Mar 1 19:31:19 2023 +0800 Add feature gate definition for `extern_types`. This commit add a basic implementation to gating `ExternalTypeItem` AST node. gcc/rust/ChangeLog: * checks/errors/rust-feature-gate.cc: Add definition for `extern_types`. * checks/errors/rust-feature-gate.h: Likewise. * checks/errors/rust-feature.cc: Likewise. * checks/errors/rust-feature.h: Likewise. gcc/testsuite/ChangeLog: * rust/compile/feature_extern_types.rs:New file. Signed-off-by: Xiao Ma Diff: --- gcc/rust/checks/errors/rust-feature-gate.cc | 13 +++++++++++++ gcc/rust/checks/errors/rust-feature-gate.h | 2 +- gcc/rust/checks/errors/rust-feature.cc | 5 +++++ gcc/rust/checks/errors/rust-feature.h | 1 + gcc/testsuite/rust/compile/feature_extern_types.rs | 8 ++++++++ 5 files changed, 28 insertions(+), 1 deletion(-) diff --git a/gcc/rust/checks/errors/rust-feature-gate.cc b/gcc/rust/checks/errors/rust-feature-gate.cc index 9b2f025689f..07d367e6292 100644 --- a/gcc/rust/checks/errors/rust-feature-gate.cc +++ b/gcc/rust/checks/errors/rust-feature-gate.cc @@ -103,6 +103,10 @@ FeatureGate::visit (AST::ExternBlock &block) gate (Feature::Name::INTRINSICS, block.get_locus (), "intrinsics are subject to change"); } + for (const auto &item : block.get_extern_items ()) + { + item->accept_vis (*this); + } } void @@ -155,4 +159,13 @@ FeatureGate::visit (AST::Function &function) check_rustc_attri (function.get_outer_attrs ()); } +void +FeatureGate::visit (AST::ExternalTypeItem &item) +{ + // TODO(mxlol233): The gating needs a complete visiting chain to activate + // `AST::ExternalTypeItem`. + gate (Feature::Name::EXTERN_TYPES, item.get_locus (), + "extern types are experimental"); +} + } // 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 0262903f123..c442fd3d7d0 100644 --- a/gcc/rust/checks/errors/rust-feature-gate.h +++ b/gcc/rust/checks/errors/rust-feature-gate.h @@ -133,7 +133,7 @@ public: void visit (AST::Trait &trait) override {} void visit (AST::InherentImpl &impl) override; void visit (AST::TraitImpl &impl) override; - void visit (AST::ExternalTypeItem &item) override {} + void visit (AST::ExternalTypeItem &item) override; void visit (AST::ExternalStaticItem &item) override {} void visit (AST::ExternalFunctionItem &item) override {} void visit (AST::ExternBlock &block) override; diff --git a/gcc/rust/checks/errors/rust-feature.cc b/gcc/rust/checks/errors/rust-feature.cc index ceae2aaddec..e36e540035f 100644 --- a/gcc/rust/checks/errors/rust-feature.cc +++ b/gcc/rust/checks/errors/rust-feature.cc @@ -43,6 +43,10 @@ Feature::create (Feature::Name name) return Feature (Feature::Name::DECL_MACRO, Feature::State::ACCEPTED, "decl_macro", "1.0.0", 0, Optional::none (), ""); + case Feature::Name::EXTERN_TYPES: + return Feature (Feature::Name::EXTERN_TYPES, Feature::State::ACTIVE, + "extern_types", "1.23.0", 43467, + Optional::none (), ""); default: gcc_unreachable (); } @@ -56,6 +60,7 @@ const std::map Feature::name_hash_map = { // TODO: Rename to "auto_traits" when supporting // later Rust versions {"optin_builtin_traits", Feature::Name::AUTO_TRAITS}, + {"extern_types", Feature::Name::EXTERN_TYPES}, }; // namespace Rust Optional diff --git a/gcc/rust/checks/errors/rust-feature.h b/gcc/rust/checks/errors/rust-feature.h index 1f580a00a0a..7562eaf594b 100644 --- a/gcc/rust/checks/errors/rust-feature.h +++ b/gcc/rust/checks/errors/rust-feature.h @@ -42,6 +42,7 @@ public: RUSTC_ATTRS, DECL_MACRO, AUTO_TRAITS, + EXTERN_TYPES, }; const std::string &as_string () { return m_name_str; } diff --git a/gcc/testsuite/rust/compile/feature_extern_types.rs b/gcc/testsuite/rust/compile/feature_extern_types.rs new file mode 100644 index 00000000000..5e314931d6a --- /dev/null +++ b/gcc/testsuite/rust/compile/feature_extern_types.rs @@ -0,0 +1,8 @@ +extern "C" { + type F; //{ dg-error "extern types are experimental." "" { target *-*-* } } +} + + +fn main() { + +}