aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-01-16 00:57:08 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-01-16 00:57:08 +0000
commitdb751ebd3330bc9a64ce4d9d8f24e30669d91406 (patch)
treee88484a938b25e441fdd998f86316e1e0314cbe9
parent4dc6b1c81c5efbaf68b868df10b18466b5e14b34 (diff)
Implemented code gen for sizeof(objc class interface).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62289 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/CodeGen/CGExprScalar.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp
index 4bb5fd1a4f..628bfb0788 100644
--- a/lib/CodeGen/CGExprScalar.cpp
+++ b/lib/CodeGen/CGExprScalar.cpp
@@ -686,7 +686,14 @@ ScalarExprEmitter::VisitSizeOfAlignOfExpr(const SizeOfAlignOfExpr *E) {
Align /= 8; // Return alignment in bytes, not bits.
return llvm::ConstantInt::get(llvm::APInt(ResultWidth, Align));
}
-
+ if (TypeToSize->isObjCInterfaceType()) {
+ ObjCInterfaceDecl *OI = TypeToSize->getAsObjCInterfaceType()->getDecl();
+ const RecordDecl *RD = CGF.getContext().addRecordToClass(OI);
+ const Type *Key =
+ CGF.getContext().getTagDeclType(
+ const_cast<TagDecl*>(dyn_cast<TagDecl>(RD))).getTypePtr();
+ TypeToSize = Key->getDesugaredType();
+ }
std::pair<uint64_t, unsigned> Info = CGF.getContext().getTypeInfo(TypeToSize);
uint64_t Val = E->isSizeOf() ? Info.first : Info.second;