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-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.