summaryrefslogtreecommitdiffstats
path: root/lib/CodeGen/CGExprConstant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/CGExprConstant.cpp')
-rw-r--r--lib/CodeGen/CGExprConstant.cpp33
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()) {
OpenPOWER on IntegriCloud