diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-09-28 09:35:10 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-28 09:35:10 +0200 |
| commit | 2df6b0773e802b08d1c244e6d07ccb16fecdf209 (patch) | |
| tree | 4febcef1c9789e24b748dd4f78db29c086794ca0 /compiler | |
| parent | 9c4b81c2385bea85e3b3cf17db53dcbb70e62fe4 (diff) | |
| parent | 0bf928968bf442ba0e4d50e8d716edf2dd43cbbc (diff) | |
| download | rust-2df6b0773e802b08d1c244e6d07ccb16fecdf209.tar.gz rust-2df6b0773e802b08d1c244e6d07ccb16fecdf209.zip | |
Rollup merge of #130924 - surechen:fix_130851, r=compiler-errors
Make clashing_extern_declarations considering generic args for ADT field
In following example, G<u16> should be recognized as different from G<u32> :
```rust
#[repr(C)] pub struct G<T> { g: [T; 4] }
pub mod x { extern "C" { pub fn g(_: super::G<u16>); } }
pub mod y { extern "C" { pub fn g(_: super::G<u32>); } }
```
fixes #130851
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_lint/src/foreign_modules.rs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler/rustc_lint/src/foreign_modules.rs b/compiler/rustc_lint/src/foreign_modules.rs index 1ead377607f..816882962be 100644 --- a/compiler/rustc_lint/src/foreign_modules.rs +++ b/compiler/rustc_lint/src/foreign_modules.rs @@ -280,7 +280,7 @@ fn structurally_same_type_impl<'tcx>( ensure_sufficient_stack(|| { match (a.kind(), b.kind()) { - (&Adt(a_def, _), &Adt(b_def, _)) => { + (&Adt(a_def, a_gen_args), &Adt(b_def, b_gen_args)) => { // Only `repr(C)` types can be compared structurally. if !(a_def.repr().c() && b_def.repr().c()) { return false; @@ -304,8 +304,8 @@ fn structurally_same_type_impl<'tcx>( seen_types, tcx, param_env, - tcx.type_of(a_did).instantiate_identity(), - tcx.type_of(b_did).instantiate_identity(), + tcx.type_of(a_did).instantiate(tcx, a_gen_args), + tcx.type_of(b_did).instantiate(tcx, b_gen_args), ckind, ) }, |
