diff options
author | Duncan Sands <baldrick@free.fr> | 2009-08-17 14:33:27 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2009-08-17 14:33:27 +0000 |
commit | 408bbf32d1c18f0af5f3f6fd9013291c2bcb7e6c (patch) | |
tree | 0e96b83a73e5615ed24d1ca49d67c1b8133f4c5d | |
parent | 4f718c6929ad95ab14623609a11497b7bc55e055 (diff) | |
download | external_llvm-408bbf32d1c18f0af5f3f6fd9013291c2bcb7e6c.zip external_llvm-408bbf32d1c18f0af5f3f6fd9013291c2bcb7e6c.tar.gz external_llvm-408bbf32d1c18f0af5f3f6fd9013291c2bcb7e6c.tar.bz2 |
Don't access the first element of a potentially empty
vector (&Formals[0]). With this change llvm-gcc builds
with expensive checking enabled for C, C++ and Fortran.
While there, change a std::vector into a SmallVector.
This is partly gratuitous, but mostly because not all
STL vector implementations define the data method (and
it should be faster).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79237 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index df49f7d..46ff307 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -2156,7 +2156,7 @@ static Constant *ComputeLoadResult(Constant *P, /// successful, false if we can't evaluate it. ActualArgs contains the formal /// arguments for the function. static bool EvaluateFunction(Function *F, Constant *&RetVal, - const std::vector<Constant*> &ActualArgs, + const SmallVectorImpl<Constant*> &ActualArgs, std::vector<Function*> &CallStack, DenseMap<Constant*, Constant*> &MutatedMemory, std::vector<GlobalVariable*> &AllocaTmps) { @@ -2251,14 +2251,14 @@ static bool EvaluateFunction(Function *F, Constant *&RetVal, Function *Callee = dyn_cast<Function>(getVal(Values, CI->getOperand(0))); if (!Callee) return false; // Cannot resolve. - std::vector<Constant*> Formals; + SmallVector<Constant*, 8> Formals; for (User::op_iterator i = CI->op_begin() + 1, e = CI->op_end(); i != e; ++i) Formals.push_back(getVal(Values, *i)); - + if (Callee->isDeclaration()) { // If this is a function we can constant fold, do it. - if (Constant *C = ConstantFoldCall(Callee, &Formals[0], + if (Constant *C = ConstantFoldCall(Callee, Formals.data(), Formals.size())) { InstResult = C; } else { @@ -2353,8 +2353,9 @@ static bool EvaluateStaticConstructor(Function *F) { // Call the function. Constant *RetValDummy; - bool EvalSuccess = EvaluateFunction(F, RetValDummy, std::vector<Constant*>(), - CallStack, MutatedMemory, AllocaTmps); + bool EvalSuccess = EvaluateFunction(F, RetValDummy, + SmallVector<Constant*, 0>(), CallStack, + MutatedMemory, AllocaTmps); if (EvalSuccess) { // We succeeded at evaluation: commit the result. DEBUG(errs() << "FULLY EVALUATED GLOBAL CTOR FUNCTION '" |