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 ABSTRACT_TYPE(Class, Base)
|
||||||
#define NON_CANONICAL_TYPE(Class, Base)
|
#define NON_CANONICAL_TYPE(Class, Base)
|
||||||
#define DEPENDENT_TYPE(Class, Base) case Type::Class:
|
#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"
|
#include "clang/AST/TypeNodes.def"
|
||||||
llvm_unreachable("Should not see dependent types");
|
llvm_unreachable("Should not see dependent types");
|
||||||
|
|
||||||
|
@ -1644,20 +1648,6 @@ ASTContext::getTypeInfoImpl(const Type *T) const {
|
||||||
break;
|
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:
|
case Type::Elaborated:
|
||||||
return getTypeInfo(cast<ElaboratedType>(T)->getNamedType().getTypePtr());
|
return getTypeInfo(cast<ElaboratedType>(T)->getNamedType().getTypePtr());
|
||||||
|
|
||||||
|
@ -1665,18 +1655,6 @@ ASTContext::getTypeInfoImpl(const Type *T) const {
|
||||||
return getTypeInfo(
|
return getTypeInfo(
|
||||||
cast<AttributedType>(T)->getEquivalentType().getTypePtr());
|
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: {
|
case Type::Atomic: {
|
||||||
// Start with the base type information.
|
// Start with the base type information.
|
||||||
std::pair<uint64_t, unsigned> Info
|
std::pair<uint64_t, unsigned> Info
|
||||||
|
|
Loading…
Reference in New Issue