Hi Rainer, I submitted the pull-request and will merge it soon:
https://github.com/Rust-GCC/gccrs/pull/4549 I've attached the patch if you would like to try it in the meantime. It should be upstream tomorrow or on Wednesday. Thank you! Arthur On 5/18/26 4:41 PM, Rainer Orth wrote:
Hi Arthur,I think it looks good and indeed fixes the issue, but I think what we should really have here is an enum class instead and a different case for the variants - it would also align more closely with the refactors we've been doing recently.I see. Whatever works for you is obviously fine with me.If you're happy to wait I'll do a fix today and will upstream it to trunk this week.Certainly: this isn't urgent at all. I can easily postpone committing my patch to switch g++ to XPG7 however long it takes you. Thanks for your help. Rainer
From b8688720cf6fcecc58d01caf5c4534fafc63a411 Mon Sep 17 00:00:00 2001 From: Arthur Cohen <[email protected]> Date: Mon, 18 May 2026 17:37:20 +0200 Subject: [PATCH] util: Switch VisType to an enum class and rename variants. gcc/rust/ChangeLog: * hir/tree/rust-hir-visibility.h: Switch Visibility::VisType to an enum class, adapt variants' case. * backend/rust-compile-base.cc (HIRCompileBase::setup_fndecl): Use the new enum API. * backend/rust-compile-implitem.cc (CompileTraitItem::visit): Likewise. * checks/errors/privacy/rust-visibility-resolver.cc (VisibilityResolver::resolve_visibility): Likewise. * hir/rust-ast-lower.cc (translate_visibility): Likewise. * hir/tree/rust-hir.cc (Visibility::to_string): Likewise. * metadata/rust-export-metadata.cc (PublicInterface::is_crate_public): Likewise. * util/rust-hir-map.cc (Mappings::Mappings): Likewise. --- gcc/rust/backend/rust-compile-base.cc | 2 +- gcc/rust/backend/rust-compile-implitem.cc | 2 +- .../errors/privacy/rust-visibility-resolver.cc | 6 +++--- gcc/rust/hir/rust-ast-lower.cc | 6 +++--- gcc/rust/hir/tree/rust-hir-visibility.h | 18 +++++++++--------- gcc/rust/hir/tree/rust-hir.cc | 6 +++--- gcc/rust/metadata/rust-export-metadata.cc | 2 +- gcc/rust/util/rust-hir-map.cc | 2 +- 8 files changed, 22 insertions(+), 22 deletions(-) diff --git a/gcc/rust/backend/rust-compile-base.cc b/gcc/rust/backend/rust-compile-base.cc index 655a43ac9c8..b7f2628f5d1 100644 --- a/gcc/rust/backend/rust-compile-base.cc +++ b/gcc/rust/backend/rust-compile-base.cc @@ -62,7 +62,7 @@ HIRCompileBase::setup_fndecl (tree fndecl, bool is_main_entry_point, { // if its the main fn or pub visibility mark its as DECL_PUBLIC // please see https://github.com/Rust-GCC/gccrs/pull/137 - bool is_pub = visibility.get_vis_type () == HIR::Visibility::VisType::PUBLIC; + bool is_pub = visibility.get_vis_type () == HIR::Visibility::VisType::Public; if (is_main_entry_point || (is_pub && !is_generic_fn)) { TREE_PUBLIC (fndecl) = 1; diff --git a/gcc/rust/backend/rust-compile-implitem.cc b/gcc/rust/backend/rust-compile-implitem.cc index c94f439e1d6..9689ee7f71a 100644 --- a/gcc/rust/backend/rust-compile-implitem.cc +++ b/gcc/rust/backend/rust-compile-implitem.cc @@ -96,7 +96,7 @@ CompileTraitItem::visit (HIR::TraitItemFunc &func) = nr_ctx.to_canonical_path (func.get_mappings ().get_nodeid ()); // FIXME: How do we get the proper visibility here? - auto vis = HIR::Visibility (HIR::Visibility::VisType::PUBLIC); + auto vis = HIR::Visibility (HIR::Visibility::VisType::Public); HIR::TraitFunctionDecl &function = func.get_decl (); tree fndecl = compile_function (false, function.get_function_name ().as_string (), diff --git a/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc b/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc index ff1c1eaa5b9..ac050f89924 100644 --- a/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc +++ b/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc @@ -108,13 +108,13 @@ VisibilityResolver::resolve_visibility (const HIR::Visibility &visibility, { switch (visibility.get_vis_type ()) { - case HIR::Visibility::PRIVATE: + case HIR::Visibility::VisType::Private: to_resolve = ModuleVisibility::create_restricted (current_module); return true; - case HIR::Visibility::PUBLIC: + case HIR::Visibility::VisType::Public: to_resolve = ModuleVisibility::create_public (); return true; - case HIR::Visibility::RESTRICTED: + case HIR::Visibility::VisType::Restricted: { // FIXME: We also need to handle 2015 vs 2018 edition conflicts auto id = UNKNOWN_DEFID; diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc index 4ccaf638f6a..167c5eeac42 100644 --- a/gcc/rust/hir/rust-ast-lower.cc +++ b/gcc/rust/hir/rust-ast-lower.cc @@ -42,14 +42,14 @@ translate_visibility (const AST::Visibility &vis) switch (vis.get_vis_type ()) { case AST::Visibility::PUB: - return Visibility (Visibility::VisType::PUBLIC); + return Visibility (Visibility::VisType::Public); case AST::Visibility::PRIV: case AST::Visibility::PUB_SELF: - return Visibility (Visibility::VisType::PRIVATE); + return Visibility (Visibility::VisType::Private); case AST::Visibility::PUB_CRATE: case AST::Visibility::PUB_SUPER: case AST::Visibility::PUB_IN_PATH: - return Visibility (Visibility::VisType::RESTRICTED, + return Visibility (Visibility::VisType::Restricted, ASTLoweringSimplePath::translate (vis.get_path ()), vis.get_locus ()); break; diff --git a/gcc/rust/hir/tree/rust-hir-visibility.h b/gcc/rust/hir/tree/rust-hir-visibility.h index a09204da920..4cf5252840b 100644 --- a/gcc/rust/hir/tree/rust-hir-visibility.h +++ b/gcc/rust/hir/tree/rust-hir-visibility.h @@ -27,12 +27,12 @@ namespace HIR { struct Visibility { public: - enum VisType + enum class VisType { - PRIVATE, - PUBLIC, - RESTRICTED, - ERROR, + Private, + Public, + Restricted, + Error, }; private: @@ -50,18 +50,18 @@ public: {} // Returns whether visibility is in an error state. - bool is_error () const { return vis_type == ERROR; } + bool is_error () const { return vis_type == VisType::Error; } // Does the current visibility refer to a simple `pub <item>` entirely public - bool is_public () const { return vis_type == PUBLIC; } + bool is_public () const { return vis_type == VisType::Public; } // Is the current visibility public restricted to a certain path - bool is_restricted () const { return vis_type == RESTRICTED; } + bool is_restricted () const { return vis_type == VisType::Restricted; } // Creates an error visibility. static Visibility create_error () { - return Visibility (ERROR, HIR::SimplePath::create_empty ()); + return Visibility (VisType::Error, HIR::SimplePath::create_empty ()); } VisType get_vis_type () const { return vis_type; } diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc index cdea32783c5..ada10449706 100644 --- a/gcc/rust/hir/tree/rust-hir.cc +++ b/gcc/rust/hir/tree/rust-hir.cc @@ -164,11 +164,11 @@ Visibility::to_string () const { switch (vis_type) { - case PRIVATE: + case VisType::Private: return std::string ("private"); - case PUBLIC: + case VisType::Public: return std::string ("pub"); - case RESTRICTED: + case VisType::Restricted: return std::string ("pub(in ") + path.get_mappings ().as_string () + std::string (")"); default: diff --git a/gcc/rust/metadata/rust-export-metadata.cc b/gcc/rust/metadata/rust-export-metadata.cc index b382db73e13..25f5f255ccb 100644 --- a/gcc/rust/metadata/rust-export-metadata.cc +++ b/gcc/rust/metadata/rust-export-metadata.cc @@ -344,7 +344,7 @@ PublicInterface::is_crate_public (const HIR::VisItem &item) const HIR::Visibility &visibility = item.get_visibility (); bool is_public - = visibility.get_vis_type () == HIR::Visibility::VisType::PUBLIC; + = visibility.get_vis_type () == HIR::Visibility::VisType::Public; bool has_path = !visibility.get_path ().is_error (); // FIXME this might be pub(crate) diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 89b95647861..2f804e48d78 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -105,7 +105,7 @@ Mappings::Mappings () builtinMarker = new HIR::ImplBlock (node, {}, {}, nullptr, nullptr, HIR::WhereClause ({}), BoundPolarity::RegularBound, - HIR::Visibility (HIR::Visibility::VisType::PUBLIC), + HIR::Visibility (HIR::Visibility::VisType::Public), {}, {}, UNDEF_LOCATION); } -- 2.50.1
OpenPGP_0x1B3465B044AD9C65.asc
Description: OpenPGP public key
OpenPGP_signature.asc
Description: OpenPGP digital signature
