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
This commit is contained in:
commit
2df6b0773e
3 changed files with 76 additions and 3 deletions
|
@ -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,
|
||||
)
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue