diff options
author | Daniel Dunbar <daniel@zuster.org> | 2008-11-08 05:48:37 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2008-11-08 05:48:37 +0000 |
commit | 1d75118af76cae2bfc06389cde410e14bd0a19fc (patch) | |
tree | def528f7afa6768c8d490d238b0cd5d9e0bdd649 /lib/AST/ASTContext.cpp | |
parent | d7f6050113598797078f2718bc9f76c3ae35f0df (diff) |
Support getTypeInfo, getTypeAlign, getTypeSize on const Type*s.
- Size/align are not effected by CVR qualifiers.
Support getCanonicalType: const Type* -> const Type*.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58891 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/ASTContext.cpp')
-rw-r--r-- | lib/AST/ASTContext.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 1aea5b5c69..52abf43a0e 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -223,7 +223,7 @@ const llvm::fltSemantics &ASTContext::getFloatTypeSemantics(QualType T) const { /// getTypeSize - Return the size of the specified type, in bits. This method /// does not work on incomplete types. std::pair<uint64_t, unsigned> -ASTContext::getTypeInfo(QualType T) { +ASTContext::getTypeInfo(const Type *T) { T = getCanonicalType(T); uint64_t Width; unsigned Align; @@ -236,7 +236,7 @@ ASTContext::getTypeInfo(QualType T) { case Type::VariableArray: assert(0 && "VLAs not implemented yet!"); case Type::ConstantArray: { - ConstantArrayType *CAT = cast<ConstantArrayType>(T); + const ConstantArrayType *CAT = cast<ConstantArrayType>(T); std::pair<uint64_t, unsigned> EltInfo = getTypeInfo(CAT->getElementType()); Width = EltInfo.first*CAT->getSize().getZExtValue(); @@ -344,23 +344,25 @@ ASTContext::getTypeInfo(QualType T) { break; } case Type::ObjCInterface: { - ObjCInterfaceType *ObjCI = cast<ObjCInterfaceType>(T); + const ObjCInterfaceType *ObjCI = cast<ObjCInterfaceType>(T); const ASTRecordLayout &Layout = getASTObjCInterfaceLayout(ObjCI->getDecl()); Width = Layout.getSize(); Align = Layout.getAlignment(); break; } case Type::Tagged: { - if (cast<TagType>(T)->getDecl()->isInvalidDecl()) { + const TagType *TT = cast<TagType>(T); + + if (TT->getDecl()->isInvalidDecl()) { Width = 1; Align = 1; break; } - if (EnumType *ET = dyn_cast<EnumType>(cast<TagType>(T))) + if (const EnumType *ET = dyn_cast<EnumType>(TT)) return getTypeInfo(ET->getDecl()->getIntegerType()); - RecordType *RT = cast<RecordType>(T); + const RecordType *RT = cast<RecordType>(TT); const ASTRecordLayout &Layout = getASTRecordLayout(RT->getDecl()); Width = Layout.getSize(); Align = Layout.getAlignment(); |