From 70b889b90ae982a2c0c6fe8596d9885d5dcc644f Mon Sep 17 00:00:00 2001 From: Arthur Cohen Date: Tue, 28 Mar 2023 14:22:21 +0200 Subject: privacy: Check for pub(crate) when resolving visibility path. This causes the function to return true and the checks to pass, but it requires more thinking - how do we deal with pub(crate) in the current system? Should we simply treat it as a pub item in the current crate, but export it as a private item in the metadata? gcc/rust/ChangeLog: * ast/rust-item.h: Fix `Visibility::has_path()` implementation. * checks/errors/privacy/rust-visibility-resolver.cc (VisibilityResolver::resolve_module_path): Check if we are dealing with pub(crate) properly. gcc/testsuite/ChangeLog: * rust/compile/privacy8.rs: New test. --- gcc/rust/ast/rust-item.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gcc/rust/ast') diff --git a/gcc/rust/ast/rust-item.h b/gcc/rust/ast/rust-item.h index 80421c5..a96076e 100644 --- a/gcc/rust/ast/rust-item.h +++ b/gcc/rust/ast/rust-item.h @@ -642,7 +642,7 @@ public: } // Returns whether a visibility has a path - bool has_path () const { return !(is_error ()) && vis_type == PUB_IN_PATH; } + bool has_path () const { return !is_error () && vis_type >= PUB_CRATE; } // Returns whether visibility is public or not. bool is_public () const { return vis_type != PRIV && !is_error (); } -- cgit v1.1