Skip to content

Conversation

@lucasly-ba
Copy link
Contributor

This PR implements unused mut lint, it uses the hir default visitor and visit IdentifierPattern and StructPatternFieldIdent, to add to a map of mutable vars in the lint unused context.

@lucasly-ba lucasly-ba force-pushed the unused-mut branch 5 times, most recently from ee7d44a to fac95ea Compare November 18, 2025 12:42
sakupan102 and others added 5 commits November 18, 2025 12:42
This change moves the unused variable checker from the type resolver
to HIR. We can now use the HIR Default Visitor, and it will be much more
easier to implement other unused lints with this change.

gcc/rust/ChangeLog:

	* Make-lang.in: Add new files rules in Makefile.
	* lang.opt: Add new flag.
	* rust-session-manager.cc (Session::compile_crate): Execute new variable checker.
	* checks/lints/unused-var/rust-unused-var-checker.cc (UnusedVarChecker): Implement unused
	variable checker.
	* checks/lints/unused-var/rust-unused-var-checker.h (UnusedVarChecker): Implement unused
	variable checker.
	* checks/lints/unused-var/rust-unused-var-collector.cc (UnusedVarCollector): Implement
	unused variable collector.
	* checks/lints/unused-var/rust-unused-var-collector.h (UnusedVarCollector): Implement
	unused variable collector.
	* checks/lints/unused-var/rust-unused-var-context.cc (UnusedVarContext): Implement
	unused variable context.
	* checks/lints/unused-var/rust-unused-var-context.h (UnusedVarContext): Implement unused
	variable context.

gcc/testsuite/ChangeLog:

	* rust/compile/static_item_0.rs: New test.
	* rust/compile/template_function_0.rs: New test.

Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
gcc/rust/ChangeLog:

	* checks/lints/unused-var/rust-unused-var-checker.cc (UnusedVarChecker):
	Implement unused assignments warning.
	(UnusedVarChecker::go): Remove unique pointer unused var context.
	(UnusedVarChecker::visit): Visit AssignExpr in HIR default visitor.
	* checks/lints/unused-var/rust-unused-var-checker.h: Add visit method.
	* checks/lints/unused-var/rust-unused-var-collector.cc (UnusedVarCollector):
	Collect warnings for assignments.
	(UnusedVarCollector::visit): Visit AssignExpr in HIR default visitor.
	* checks/lints/unused-var/rust-unused-var-collector.h: Add visit method.
	* checks/lints/unused-var/rust-unused-var-context.cc (UnusedVarContext::add_assign):
	Add assignment in map.
	(UnusedVarContext::remove_assign): Remove assignment in map.
	(UnusedVarContext::is_variable_assigned): Check if a variable is assigned.
	* checks/lints/unused-var/rust-unused-var-context.h: Add a map to stock assignments.

gcc/testsuite/ChangeLog:

	* rust/compile/issue-4260_0.rs: New test.

Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
gcc/rust/ChangeLog:

	* checks/lints/unused-var/rust-unused-var-checker.cc (UnusedVarChecker::visit):
	Change unused name warning to unused variable warning.
	* checks/lints/unused-var/rust-unused-var-collector.cc (UnusedVarCollector::visit):
	Remove useless methods.
	* checks/lints/unused-var/rust-unused-var-collector.h: Same here.
	* checks/lints/unused-var/rust-unused-var-context.cc (UnusedVarContext::add_variable):
	Add used variables to set.
	(UnusedVarContext::mark_used): Remove method.
	(UnusedVarContext::is_variable_used):
	Check if the set contains the hir id linked to a variable.
	(UnusedVarContext::as_string): Refactor method for new set.
	* checks/lints/unused-var/rust-unused-var-context.h: Refactor methods.
	* lang.opt: Change description for unused check flag.

gcc/testsuite/ChangeLog:

	* rust/compile/static_item_0.rs: Modify warning output.
	* rust/compile/template_function_0.rs: Modify warning output.

Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
gcc/rust/ChangeLog:

	* Make-lang.in: Compile the right files.
	* checks/lints/unused-var/rust-unused-var-checker.cc: Move to...
	* checks/lints/unused/rust-unused-checker.cc: ...here.
	* checks/lints/unused-var/rust-unused-var-checker.h: Move to...
	* checks/lints/unused/rust-unused-checker.h: ...here.
	* checks/lints/unused-var/rust-unused-var-collector.cc: Move to...
	* checks/lints/unused/rust-unused-collector.cc: ...here.
	* checks/lints/unused-var/rust-unused-var-collector.h: Move to...
	* checks/lints/unused/rust-unused-collector.h: ...here.
	* checks/lints/unused-var/rust-unused-var-context.cc: Move to...
	* checks/lints/unused/rust-unused-context.cc: ...here.
	* checks/lints/unused-var/rust-unused-var-context.h: Move to...
	* checks/lints/unused/rust-unused-context.h: ...here.
	* rust-session-manager.cc (Session::compile_crate): Call the right method.

Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
gcc/rust/ChangeLog:

	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::UnusedChecker):
	Add warning for identifier pattern and field ident pattern in struct
	(UnusedChecker::visit): Add methods.
	* checks/lints/unused/rust-unused-checker.h: Same here.
	* checks/lints/unused/rust-unused-collector.cc (UnusedCollector::UnusedCollector):
	Collect unused mut variables
	(UnusedCollector::visit): Add methods.
	* checks/lints/unused/rust-unused-collector.h: Same here.
	* checks/lints/unused/rust-unused-context.cc (UnusedContext::remove_assign):
	Add methods for unused mut set.
	(UnusedContext::add_mut): Same here.
	(UnusedContext::remove_mut): Same here.
	(UnusedContext::is_mut_used): Same here.
	* checks/lints/unused/rust-unused-context.h: Same here.

gcc/testsuite/ChangeLog:

	* rust/compile/unused-mut-identifier_0.rs: New test.
	* rust/compile/unused-mut-struct-field_0.rs: New test.

Signed-off-by: Lucas Ly Ba <lucas.ly-ba@outlook.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants