Re: [COMMITTED 41/77] gccrs: add static mut refs lint
Arthur Cohen <[email protected]>
| Newsgroups | gmane.comp.gcc.rust,gmane.comp.gcc.patches |
|---|---|
| Message-ID | <[email protected]> |
Note that upstream the commit changelog is correct and the mention of `rust-lang.cc` has been removed. Thanks, Arthur On 8/7/26 2:39 PM, [email protected] wrote: > From: Lucas Ly Ba <[email protected]> > > Warn on taking a reference to a mutable static, which is discouraged as > it can easily lead to undefined behaviour. > > gcc/rust/ChangeLog: > > * checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit): > New. > * checks/lints/unused/rust-unused-checker.h (UnusedChecker::visit): > New. > * rust-lang.cc (grs_langhook_init_options_struct): Enable warn_unused. > > gcc/testsuite/ChangeLog: > > * rust/compile/static-mut-refs_0.rs: New test. > > Signed-off-by: Lucas Ly Ba <[email protected]> > --- > .../lints/unused/rust-unused-checker.cc | 20 +++++++++++++++++++ > .../checks/lints/unused/rust-unused-checker.h | 1 + > .../rust/compile/static-mut-refs_0.rs | 13 ++++++++++++ > 3 files changed, 34 insertions(+) > create mode 100644 gcc/testsuite/rust/compile/static-mut-refs_0.rs > > diff --git a/gcc/rust/checks/lints/unused/rust-unused-checker.cc b/gcc/rust/checks/lints/unused/rust-unused-checker.cc > index 0d091e6473a..fffe61dd129 100644 > --- a/gcc/rust/checks/lints/unused/rust-unused-checker.cc > +++ b/gcc/rust/checks/lints/unused/rust-unused-checker.cc > @@ -347,5 +347,25 @@ UnusedChecker::visit (HIR::LetStmt &stmt) > walk (stmt); > } > > +void > +UnusedChecker::visit (HIR::BorrowExpr &expr) > +{ > + // The static_mut_refs lint: taking a reference to a mutable static is > + // discouraged as it can easily lead to undefined behaviour. > + NodeId ast_node_id = expr.get_expr ().get_mappings ().get_nodeid (); > + if (auto def > + = nr_context.lookup (ast_node_id, Resolver2_0::Namespace::Values)) > + if (auto id = mappings.lookup_node_to_hir (*def)) > + if (auto item = mappings.lookup_hir_item (*id)) > + if (item.value ()->get_item_kind () == HIR::Item::ItemKind::Static) > + { > + auto &static_item = static_cast<HIR::StaticItem &> (*item.value ()); > + if (static_item.is_mut ()) > + rust_warning_at (expr.get_locus (), OPT_Wunused, > + "creating a reference to a mutable static"); > + } > + walk (expr); > +} > + > } // namespace Analysis > } // namespace Rust > diff --git a/gcc/rust/checks/lints/unused/rust-unused-checker.h b/gcc/rust/checks/lints/unused/rust-unused-checker.h > index 46e012e7907..161f59b8a66 100644 > --- a/gcc/rust/checks/lints/unused/rust-unused-checker.h > +++ b/gcc/rust/checks/lints/unused/rust-unused-checker.h > @@ -52,6 +52,7 @@ private: > virtual void visit (HIR::MatchExpr &expr) override; > virtual void visit (HIR::ExternBlock &block) override; > virtual void visit (HIR::LetStmt &stmt) override; > + virtual void visit (HIR::BorrowExpr &expr) override; > virtual void visit_loop_label (HIR::LoopLabel &label) override; > }; > } // namespace Analysis > diff --git a/gcc/testsuite/rust/compile/static-mut-refs_0.rs b/gcc/testsuite/rust/compile/static-mut-refs_0.rs > new file mode 100644 > index 00000000000..5dcc5978a74 > --- /dev/null > +++ b/gcc/testsuite/rust/compile/static-mut-refs_0.rs > @@ -0,0 +1,13 @@ > +// { dg-additional-options "-frust-unused-check-2.0" } > +#![feature(no_core, lang_items)] > +#![no_core] > + > +#[lang = "sized"] > +pub trait Sized {} > + > +static mut S: i32 = 0; > + > +pub unsafe fn f() { > + let _y = &S; > +// { dg-warning "reference to a mutable static" "" { target *-*-* } .-1 } > +}
OpenPGP_0x1B3465B044AD9C65.asc
(application/pgp-keys, 3.1 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 7FJmBg== =Qnyj -----END PGP PUBLIC KEY BLOCK-----
OpenPGP_signature.asc
(application/pgp-signature, 840 B)
-----BEGIN PGP SIGNATURE----- wsF5BAABCAAjFiEEhx8wPNj7cw6CrvzGGzRlsEStnGUFAmp10wIFAwAAAAAACgkQGzRlsEStnGV+ gQ//WJY3YyjPDPaK++3u3qqTu5muIAQCNULxBPIY5zZP/Qln03SQnMbUeGVuJidcgsGq664Re7JD IxwMmciUhYvLPnNNBFBquEsWdvODvbB51L9iRFv1/tCZ8+Sl8o3VxO5DPFo/Ubo3ImFBqKaXYcP1 pNg7FvtPwB3xn15gQW3EiQYy5OeNHPF1mEMH46QDxuB9mzHvEp+tTMw78LYArIXmaCYtx0lw7wfa ME4e4lplGwHqMr45NRG+hIrfgOmf6uk85GORE0nxrp6KHIhgedSDT0V39vGVKwTLhCCgMxskP/ys KlDrsVRo5Y2UvH3zoL2Gf6jbUeAetp6iu1mLJe5tftcmW/LZatdMog1lw7m4kwKDTfX+nT3TSZ+b DlYWJJZW2VUpINFrCuxG4q7iM05Ew5a4x01V4BOx2sidBIkSadUVXDXN0iFh+0NFnFpMM1j9b1kv U7HQ2uwkwuJS7piT+XbzS+ZKIe/PpOnL/J00StqdQkAI3Y16dPx5vaA5kxG3u2wSan/BgjP+xqak Bxdcfk33tymnEHr/nTVYEx7pfDyETKUzCC1T2NQFa5rUhrBBymh+b5ZNT+onuLckr41j+q5d6JQB zynOfmt/5frGPsq+KzzG1Q8DquoMPLq+Yh9nV2NmnI10qxBUEHP+Wg1IHwcYf08fqwvA07gtnh3V VOk= =xTff -----END PGP SIGNATURE-----