diff options
author | Evan Cheng <evan.cheng@apple.com> | 2010-03-29 21:27:30 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2010-03-29 21:27:30 +0000 |
commit | 742db6874a10b7bd3eaade2e865ef12ed357e74e (patch) | |
tree | f9ec063bcfad928bf9f7e2d6fba217596bffc5f4 | |
parent | b355db7877176696fa7e57269b44e26a312fc623 (diff) | |
download | bcm5719-llvm-742db6874a10b7bd3eaade2e865ef12ed357e74e.tar.gz bcm5719-llvm-742db6874a10b7bd3eaade2e865ef12ed357e74e.zip |
Fix PR4975. Avoid referencing empty vector.
llvm-svn: 99840
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 6 | ||||
-rw-r--r-- | llvm/test/CodeGen/Generic/2010-ZeroSizedArg.ll | 17 |
2 files changed, 21 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index faefe2932ec..7a0daf69c84 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -6051,8 +6051,10 @@ void SelectionDAGISel::LowerArguments(BasicBlock *LLVMBB) { } if (!I->use_empty()) { - SDValue Res = DAG.getMergeValues(&ArgValues[0], NumValues, - SDB->getCurDebugLoc()); + SDValue Res; + if (!ArgValues.empty()) + Res = DAG.getMergeValues(&ArgValues[0], NumValues, + SDB->getCurDebugLoc()); SDB->setValue(I, Res); // If this argument is live outside of the entry block, insert a copy from diff --git a/llvm/test/CodeGen/Generic/2010-ZeroSizedArg.ll b/llvm/test/CodeGen/Generic/2010-ZeroSizedArg.ll new file mode 100644 index 00000000000..ba40bd08e8e --- /dev/null +++ b/llvm/test/CodeGen/Generic/2010-ZeroSizedArg.ll @@ -0,0 +1,17 @@ +; RUN: llc < %s +; PR4975 + +%0 = type <{ [0 x i32] }> +%union.T0 = type { } + +@.str = private constant [1 x i8] c" " + +define arm_apcscc void @t(%0) nounwind { +entry: + %arg0 = alloca %union.T0 + %1 = bitcast %union.T0* %arg0 to %0* + store %0 %0, %0* %1, align 1 + ret void +} + +declare arm_apcscc i32 @printf(i8*, ...) |