gccrs: Error on duplicate extern crate names
GCC Rust compiler now correctly errors on duplicate `extern crate` declarations.
The GCC Rust compiler now correctly identifies and reports errors for duplicate extern crate declarations. Previously, such duplicates compiled silently. This fix involves inserting the declared crate name into the type namespace and using specific error codes (E0259, E0260) to distinguish between different kinds of duplicate extern crate conflicts.
In Details
This change corrects the handling of duplicate extern crate declarations in gccrs. The TopLevel::visit (ExternCrate) function now inserts the extern crate's bound name into the type namespace within Mappings. The check_multiple_insertion_error function is updated to issue specific errors (E0259 for two extern crates, E0260 for an extern crate and another item) based on the Mappings state, fixing Rust-GCC/gccrs#4679.
- extern crate
- A Rust declaration used to bring an external crate (a library) into the current scope, making its items available for use.
- type namespace
- In programming language design, a namespace is a container for identifiers (names) to avoid conflicts. A type namespace specifically holds names of types.
- E0259
- A specific Rust compiler error code indicating that two
extern cratedeclarations refer to the same crate, likely within the same module or scope. - E0260
- A specific Rust compiler error code indicating a conflict where one
extern cratedeclaration collides with another declaration (e.g., a module or type) of the same name.