From 82e28742702b50dd67dfebecbef0e7852ca838af Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 29 Jul 2009 00:44:13 +0000 Subject: Code refactoring to define getCXXRecordDeclForPointerType and use it in several places. llvm-svn: 77411 --- clang/lib/CodeGen/CGExprScalar.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'clang/lib/CodeGen/CGExprScalar.cpp') diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 5ded216f03ab..d78082463217 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -442,18 +442,11 @@ Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType, // The source value may be an integer, or a pointer. if (isa(Src->getType())) { // Some heavy lifting for derived to base conversion. - if (const PointerType *PT = SrcType->getAsPointerType()) { - QualType SrcClassTy = PT->getPointeeType(); - if (const RecordType *RT = SrcClassTy->getAsRecordType()) - if (CXXRecordDecl *ClassDecl = - dyn_cast(RT->getDecl())) { - QualType DstClassType = DstType->getPointeeType(); - if (const RecordType *DRT = DstClassType->getAsRecordType()) - if (CXXRecordDecl *BaseClassDecl = - dyn_cast(DRT->getDecl())) - Src = CGF.AddressCXXOfBaseClass(Src, ClassDecl, BaseClassDecl); - } - } + if (const CXXRecordDecl *ClassDecl = + SrcType->getCXXRecordDeclForPointerType()) + if (const CXXRecordDecl *BaseClassDecl = + DstType->getCXXRecordDeclForPointerType()) + Src = CGF.AddressCXXOfBaseClass(Src, ClassDecl, BaseClassDecl); return Builder.CreateBitCast(Src, DstTy, "conv"); } assert(SrcType->isIntegerType() && "Not ptr->ptr or int->ptr conversion?"); -- cgit v1.2.3