[ODRHash] Skip more types hashing TypedefType

To get the underlying type for TypedefType's, also skip ElaboratedType's.

llvm-svn: 329869
This commit is contained in:
Richard Trieu 2018-04-12 02:26:49 +00:00
parent 48ee59b6f0
commit caaccee77d
2 changed files with 45 additions and 3 deletions

View File

@ -646,9 +646,19 @@ public:
AddDecl(T->getDecl());
QualType UnderlyingType = T->getDecl()->getUnderlyingType();
VisitQualifiers(UnderlyingType.getQualifiers());
while (const TypedefType *Underlying =
while (true) {
if (const TypedefType *Underlying =
dyn_cast<TypedefType>(UnderlyingType.getTypePtr())) {
UnderlyingType = Underlying->getDecl()->getUnderlyingType();
continue;
}
if (const ElaboratedType *Underlying =
dyn_cast<ElaboratedType>(UnderlyingType.getTypePtr())) {
UnderlyingType = Underlying->getNamedType();
continue;
}
break;
}
AddType(UnderlyingType.getTypePtr());
VisitType(T);

View File

@ -2744,6 +2744,38 @@ struct S3 {
#else
S3 s3;
#endif
#if defined(FIRST)
using A4 = int;
using B4 = A4;
struct S4 {
B4 x;
};
#elif defined(SECOND)
using A4 = int;
using B4 = ::MultipleTypedefs::A4;
struct S4 {
B4 x;
};
#else
S4 s4;
#endif
#if defined(FIRST)
using A5 = int;
using B5 = MultipleTypedefs::A5;
struct S5 {
B5 x;
};
#elif defined(SECOND)
using A5 = int;
using B5 = ::MultipleTypedefs::A5;
struct S5 {
B5 x;
};
#else
S5 s5;
#endif
} // MultipleTypedefs
namespace DefaultArguments {