From b285f9202590050a7b480a99a074673630b11f4f Mon Sep 17 00:00:00 2001
From: Seo Sanghyeon <sanxiyn@gmail.com>
Date: Sat, 24 Oct 2015 18:42:23 +0900
Subject: [PATCH] rustllvm: Update to LLVM trunk

---
 src/rustllvm/ArchiveWrapper.cpp |  8 ++++++++
 src/rustllvm/PassWrapper.cpp    |  2 ++
 src/rustllvm/RustWrapper.cpp    | 18 ++++++++++++++++++
 3 files changed, 28 insertions(+)

diff --git a/src/rustllvm/ArchiveWrapper.cpp b/src/rustllvm/ArchiveWrapper.cpp
index a40f0a245d17e..2cf6277e05722 100644
--- a/src/rustllvm/ArchiveWrapper.cpp
+++ b/src/rustllvm/ArchiveWrapper.cpp
@@ -163,12 +163,20 @@ LLVMRustWriteArchive(char *Dst,
     auto Member = NewMembers[i];
     assert(Member->name);
     if (Member->filename) {
+#if LLVM_VERSION_MINOR >= 8
+      Members.push_back(NewArchiveIterator(Member->filename));
+#else
       Members.push_back(NewArchiveIterator(Member->filename, Member->name));
+#endif
     } else {
       Members.push_back(NewArchiveIterator(Member->child, Member->name));
     }
   }
+#if LLVM_VERSION_MINOR >= 8
+  auto pair = writeArchive(Dst, Members, WriteSymbtab, Kind, true, false);
+#else
   auto pair = writeArchive(Dst, Members, WriteSymbtab, Kind, true);
+#endif
   if (!pair.second)
     return 0;
   LLVMRustSetLastError(pair.second.message().c_str());
diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp
index 16c35970bfe77..b27a622136f74 100644
--- a/src/rustllvm/PassWrapper.cpp
+++ b/src/rustllvm/PassWrapper.cpp
@@ -49,7 +49,9 @@ LLVMInitializePasses() {
   initializeVectorization(Registry);
   initializeIPO(Registry);
   initializeAnalysis(Registry);
+#if LLVM_VERSION_MINOR <= 7
   initializeIPA(Registry);
+#endif
   initializeTransformUtils(Registry);
   initializeInstCombine(Registry);
   initializeInstrumentation(Registry);
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp
index 9ce34c40730ce..5a9c096e5f543 100644
--- a/src/rustllvm/RustWrapper.cpp
+++ b/src/rustllvm/RustWrapper.cpp
@@ -320,7 +320,9 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateSubroutineType(
     LLVMMetadataRef File,
     LLVMMetadataRef ParameterTypes) {
     return wrap(Builder->createSubroutineType(
+#if LLVM_VERSION_MINOR <= 7
         unwrapDI<DIFile>(File),
+#endif
 #if LLVM_VERSION_MINOR >= 7
         DITypeRefArray(unwrap<MDTuple>(ParameterTypes))));
 #elif LLVM_VERSION_MINOR >= 6
@@ -502,11 +504,27 @@ extern "C" LLVMMetadataRef LLVMDIBuilderCreateVariable(
         ));
     }
 #endif
+#if LLVM_VERSION_MINOR >= 8
+    if (Tag == 0x100) { // DW_TAG_auto_variable
+        return wrap(Builder->createAutoVariable(
+            unwrapDI<DIDescriptor>(Scope), Name,
+            unwrapDI<DIFile>(File),
+            LineNo,
+            unwrapDI<DIType>(Ty), AlwaysPreserve, Flags));
+    } else {
+        return wrap(Builder->createParameterVariable(
+            unwrapDI<DIDescriptor>(Scope), Name, ArgNo,
+            unwrapDI<DIFile>(File),
+            LineNo,
+            unwrapDI<DIType>(Ty), AlwaysPreserve, Flags));
+    }
+#else
     return wrap(Builder->createLocalVariable(Tag,
         unwrapDI<DIDescriptor>(Scope), Name,
         unwrapDI<DIFile>(File),
         LineNo,
         unwrapDI<DIType>(Ty), AlwaysPreserve, Flags, ArgNo));
+#endif
 }
 
 extern "C" LLVMMetadataRef LLVMDIBuilderCreateArrayType(