forked from OSchip/llvm-project
Simplify getTypeInfoImpl handling of 'non-canonical unless dependent' types.
These types are not dependent in this context, so just look through the sugar. Review by Richard Smith & Eli Friedman. llvm-svn: 186260
This commit is contained in:
parent
b58f6a4211
commit
ab277d6400
|
@ -1394,6 +1394,10 @@ ASTContext::getTypeInfoImpl(const Type *T) const {
|
|||
#define ABSTRACT_TYPE(Class, Base)
|
||||
#define NON_CANONICAL_TYPE(Class, Base)
|
||||
#define DEPENDENT_TYPE(Class, Base) case Type::Class:
|
||||
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base) \
|
||||
case Type::Class: \
|
||||
assert(!T->isDependentType() && "should not see dependent types here"); \
|
||||
return getTypeInfo(cast<Class##Type>(T)->desugar().getTypePtr());
|
||||
#include "clang/AST/TypeNodes.def"
|
||||
llvm_unreachable("Should not see dependent types");
|
||||
|
||||
|
@ -1644,20 +1648,6 @@ ASTContext::getTypeInfoImpl(const Type *T) const {
|
|||
break;
|
||||
}
|
||||
|
||||
case Type::TypeOfExpr:
|
||||
return getTypeInfo(cast<TypeOfExprType>(T)->getUnderlyingExpr()->getType()
|
||||
.getTypePtr());
|
||||
|
||||
case Type::TypeOf:
|
||||
return getTypeInfo(cast<TypeOfType>(T)->getUnderlyingType().getTypePtr());
|
||||
|
||||
case Type::Decltype:
|
||||
return getTypeInfo(cast<DecltypeType>(T)->getUnderlyingExpr()->getType()
|
||||
.getTypePtr());
|
||||
|
||||
case Type::UnaryTransform:
|
||||
return getTypeInfo(cast<UnaryTransformType>(T)->getUnderlyingType());
|
||||
|
||||
case Type::Elaborated:
|
||||
return getTypeInfo(cast<ElaboratedType>(T)->getNamedType().getTypePtr());
|
||||
|
||||
|
@ -1665,18 +1655,6 @@ ASTContext::getTypeInfoImpl(const Type *T) const {
|
|||
return getTypeInfo(
|
||||
cast<AttributedType>(T)->getEquivalentType().getTypePtr());
|
||||
|
||||
case Type::TemplateSpecialization: {
|
||||
assert(getCanonicalType(T) != T &&
|
||||
"Cannot request the size of a dependent type");
|
||||
const TemplateSpecializationType *TST = cast<TemplateSpecializationType>(T);
|
||||
// A type alias template specialization may refer to a typedef with the
|
||||
// aligned attribute on it.
|
||||
if (TST->isTypeAlias())
|
||||
return getTypeInfo(TST->getAliasedType().getTypePtr());
|
||||
else
|
||||
return getTypeInfo(getCanonicalType(T));
|
||||
}
|
||||
|
||||
case Type::Atomic: {
|
||||
// Start with the base type information.
|
||||
std::pair<uint64_t, unsigned> Info
|
||||
|
|
Loading…
Reference in New Issue