diff options
Diffstat (limited to 'lib/CodeGen/CGExprConstant.cpp')
-rw-r--r-- | lib/CodeGen/CGExprConstant.cpp | 33 |
1 files changed, 5 insertions, 28 deletions
diff --git a/lib/CodeGen/CGExprConstant.cpp b/lib/CodeGen/CGExprConstant.cpp index d428983..dec06e2 100644 --- a/lib/CodeGen/CGExprConstant.cpp +++ b/lib/CodeGen/CGExprConstant.cpp @@ -408,6 +408,8 @@ public: llvm::Constant *EmitMemberFunctionPointer(CXXMethodDecl *MD) { assert(MD->isInstance() && "Member function must not be static!"); + MD = MD->getCanonicalDecl(); + const llvm::Type *PtrDiffTy = CGM.getTypes().ConvertType(CGM.getContext().getPointerDiffType()); @@ -633,32 +635,6 @@ public: return ConstStructBuilder::BuildStruct(CGM, CGF, ILE); } - llvm::Constant *EmitVectorInitialization(InitListExpr *ILE) { - const llvm::VectorType *VType = - cast<llvm::VectorType>(ConvertType(ILE->getType())); - const llvm::Type *ElemTy = VType->getElementType(); - std::vector<llvm::Constant*> Elts; - unsigned NumElements = VType->getNumElements(); - unsigned NumInitElements = ILE->getNumInits(); - - unsigned NumInitableElts = std::min(NumInitElements, NumElements); - - // Copy initializer elements. - unsigned i = 0; - for (; i < NumInitableElts; ++i) { - Expr *Init = ILE->getInit(i); - llvm::Constant *C = CGM.EmitConstantExpr(Init, Init->getType(), CGF); - if (!C) - return 0; - Elts.push_back(C); - } - - for (; i < NumElements; ++i) - Elts.push_back(llvm::Constant::getNullValue(ElemTy)); - - return llvm::ConstantVector::get(VType, Elts); - } - llvm::Constant *VisitImplicitValueInitExpr(ImplicitValueInitExpr* E) { return CGM.EmitNullConstant(E->getType()); } @@ -682,8 +658,9 @@ public: if (ILE->getType()->isUnionType()) return EmitUnionInitialization(ILE); + // If ILE was a constant vector, we would have handled it already. if (ILE->getType()->isVectorType()) - return EmitVectorInitialization(ILE); + return 0; assert(0 && "Unable to handle InitListExpr"); // Get rid of control reaches end of void function warning. @@ -833,7 +810,7 @@ llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E, const llvm::Type *DestTy = getTypes().ConvertTypeForMem(DestType); llvm::Constant *Offset = llvm::ConstantInt::get(llvm::Type::getInt64Ty(VMContext), - Result.Val.getLValueOffset()); + Result.Val.getLValueOffset().getQuantity()); llvm::Constant *C; if (const Expr *LVBase = Result.Val.getLValueBase()) { |