[llvm] r281940 - BitcodeWriter: fix emission of invoke when calling a var-arg function with operand bundles

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 19 14:27:05 PDT 2016


Author: mehdi_amini
Date: Mon Sep 19 16:27:04 2016
New Revision: 281940

URL: http://llvm.org/viewvc/llvm-project?rev=281940&view=rev
Log:
BitcodeWriter: fix emission of invoke when calling a var-arg function with operand bundles

Modified:
    llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
    llvm/trunk/test/Bitcode/compatibility.ll

Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=281940&r1=281939&r2=281940&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Mon Sep 19 16:27:04 2016
@@ -2500,7 +2500,7 @@ void ModuleBitcodeWriter::writeInstructi
 
     // Emit type/value pairs for varargs params.
     if (FTy->isVarArg()) {
-      for (unsigned i = FTy->getNumParams(), e = I.getNumOperands()-3;
+      for (unsigned i = FTy->getNumParams(), e = II->getNumArgOperands();
            i != e; ++i)
         pushValueAndType(I.getOperand(i), InstID, Vals); // vararg
     }

Modified: llvm/trunk/test/Bitcode/compatibility.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/compatibility.ll?rev=281940&r1=281939&r2=281940&view=diff
==============================================================================
--- llvm/trunk/test/Bitcode/compatibility.ll (original)
+++ llvm/trunk/test/Bitcode/compatibility.ll Mon Sep 19 16:27:04 2016
@@ -1590,6 +1590,24 @@ normal:
   ret void
 }
 
+declare void @vaargs_func(...)
+define void @invoke_with_operand_bundle_vaarg(i32* %ptr) personality i8 3 {
+; CHECK-LABEL: @invoke_with_operand_bundle_vaarg(
+ entry:
+  %l = load i32, i32* %ptr
+  %x = add i32 42, 1
+  invoke void (...) @vaargs_func(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
+        to label %normal unwind label %exception
+; CHECK: invoke void (...) @vaargs_func(i32 10, i32 %x) [ "foo"(i32 42, i64 100, i32 %x), "foo"(i32 42, float  0.000000e+00, i32 %l) ]
+
+exception:
+  %cleanup = landingpad i8 cleanup
+  br label %normal
+normal:
+  ret void
+}
+
+
 declare void @f.writeonly() writeonly
 ; CHECK: declare void @f.writeonly() #39
 




More information about the llvm-commits mailing list