Skip to content

Conversation

@lucasly-ba
Copy link
Contributor

This patch is simple, it only moves the check of unused static items and unused const items into the dead-code scan visitor.

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>
@lucasly-ba lucasly-ba force-pushed the dead-code branch 5 times, most recently from 4da5fdc to fba4e7c Compare November 20, 2025 15:12
This patch is simple, it only moves the check of unused static items
and unused const items into the dead-code scan visitor.

gcc/rust/ChangeLog:

	* checks/lints/rust-lint-scan-deadcode.h: Warns if there is an
	unused static item or unused const item.
	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit):
	Removes static item and const item.
	* checks/lints/unused/rust-unused-checker.h:
	Same here.

gcc/testsuite/ChangeLog:

	* rust/compile/static_item_0.rs: Change warning description.
	* rust/compile/const_item_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