From 87f7e75e58a8b45312512c34f36b4d842d4d11bf Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Sat, 20 Sep 2014 00:10:47 +0000 Subject: [PATCH] Fix crash with an insertvalue that produces an empty object. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218171 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 6 ++++++ test/CodeGen/Generic/empty-insertvalue.ll | 7 +++++++ 2 files changed, 13 insertions(+) create mode 100644 test/CodeGen/Generic/empty-insertvalue.ll diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 6d302f98f55..6a8cd2eb3b1 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -3307,6 +3307,12 @@ void SelectionDAGBuilder::visitInsertValue(const InsertValueInst &I) { unsigned NumValValues = ValValueVTs.size(); SmallVector Values(NumAggValues); + // Ignore an insertvalue that produces an empty object + if (!NumAggValues) { + setValue(&I, DAG.getUNDEF(MVT(MVT::Other))); + return; + } + SDValue Agg = getValue(Op0); unsigned i = 0; // Copy the beginning value(s) from the original aggregate. diff --git a/test/CodeGen/Generic/empty-insertvalue.ll b/test/CodeGen/Generic/empty-insertvalue.ll new file mode 100644 index 00000000000..e4cc27c2ffc --- /dev/null +++ b/test/CodeGen/Generic/empty-insertvalue.ll @@ -0,0 +1,7 @@ +; RUN: llc < %s + +define void @f() { +entry: + %0 = insertvalue { [0 x { i8*, i8* }], [0 x { i8*, i64 }] } undef, [0 x { i8*, i8* }] undef, 0 + ret void +} -- 2.34.1