summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp5
-rw-r--r--llvm/test/Assembler/2009-07-24-ZeroArgGEP.ll5
2 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 94224a6361c..45e70c8f9c8 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -2017,10 +2017,11 @@ bool LLParser::ParseValID(ValID &ID) {
return Error(ID.Loc, "getelementptr requires pointer operand");
if (!GetElementPtrInst::getIndexedType(Elts[0]->getType(),
- (Value**)&Elts[1], Elts.size()-1))
+ (Value**)(Elts.data() + 1),
+ Elts.size() - 1))
return Error(ID.Loc, "invalid indices for getelementptr");
ID.ConstantVal = Context.getConstantExprGetElementPtr(Elts[0],
- &Elts[1], Elts.size()-1);
+ Elts.data() + 1, Elts.size() - 1);
} else if (Opc == Instruction::Select) {
if (Elts.size() != 3)
return Error(ID.Loc, "expected three operands to select");
diff --git a/llvm/test/Assembler/2009-07-24-ZeroArgGEP.ll b/llvm/test/Assembler/2009-07-24-ZeroArgGEP.ll
new file mode 100644
index 00000000000..ce4a9614861
--- /dev/null
+++ b/llvm/test/Assembler/2009-07-24-ZeroArgGEP.ll
@@ -0,0 +1,5 @@
+; RUN: llvm-as %s -o /dev/null -f
+
+@foo = global i32 0
+@bar = constant i32* getelementptr(i32* @foo)
+
OpenPOWER on IntegriCloud