[clang] [clang] Make sure the same UsingType is searched and inserted (PR #79182)
Matheus Izvekov via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 23 13:24:31 PST 2024
mizvekov wrote:
The change is correct. The problem is subtle though. It comes from the difference in behavior between the member and non-member Profile functions.
I think we could do better instead with a change which makes it harder to trip on this.
I think a simplification like this should work (untested):
```
diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h
index ea425791fc97..3d411051084c 100644
--- a/clang/include/clang/AST/Type.h
+++ b/clang/include/clang/AST/Type.h
@@ -4729,13 +4729,12 @@ public:
bool typeMatchesDecl() const { return !UsingBits.hasTypeDifferentFromDecl; }
void Profile(llvm::FoldingSetNodeID &ID) {
- Profile(ID, Found, typeMatchesDecl() ? QualType() : getUnderlyingType());
+ Profile(ID, Found, getUnderlyingType());
}
static void Profile(llvm::FoldingSetNodeID &ID, const UsingShadowDecl *Found,
QualType Underlying) {
ID.AddPointer(Found);
- if (!Underlying.isNull())
- Underlying.Profile(ID);
+ Underlying.Profile(ID);
}
static bool classof(const Type *T) { return T->getTypeClass() == Using; }
};
```
https://github.com/llvm/llvm-project/pull/79182
More information about the cfe-commits
mailing list