gccrs: Warn about redundant 'Drop' bounds on generic parameters
gccrs now warns developers if a generic parameter is explicitly bound to `Drop`, as this is usually a mistake.
A new lint has been added to gccrs that warns developers when a generic parameter is given an explicit Drop bound. In Rust, the Drop trait is implicitly handled for types that need cleanup, and explicitly adding it as a bound to a generic parameter typically does not provide any useful constraint and is often a sign of a misunderstanding. This warning helps catch potential errors early in the development process.
In Details
This commit introduces a new type-checking rule in TypeCheckBase::resolve_generic_params within gccrs. It identifies and warns about generic parameters that have an explicit Drop trait bound. Since Drop semantics are usually handled implicitly by the type system for types that require cleanup, and an explicit Drop bound does not practically constrain a generic parameter, its presence is likely an error or a misunderstanding of Rust's trait system. This lint aims to improve the correctness of generic code.
- gccrs
- The GCC Rust frontend, responsible for parsing, type-checking, and generating code for Rust programs using the GCC compiler infrastructure.
- generic parameter
- A placeholder in a Rust function, struct, enum, or trait definition that allows it to operate on different types without being rewritten for each type. For example,
TinVec<T>. - Drop bound
- In Rust, a 'Drop bound' refers to a trait bound that specifies a type must implement the
Droptrait. TheDroptrait provides a custom destructor for types that need to clean up resources when they go out of scope. - lint
- A tool or feature within a compiler that analyzes code for stylistic issues, potential errors, or unidiomatic constructs, without necessarily preventing compilation. It provides warnings to guide developers towards better code quality.