Merge "Update slang for LLVM rebase to r212749."
diff --git a/llvm-rs-as.cpp b/llvm-rs-as.cpp
index 9e61395..b176002 100644
--- a/llvm-rs-as.cpp
+++ b/llvm-rs-as.cpp
@@ -15,7 +15,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "llvm/ADT/OwningPtr.h"
 #include "llvm/IR/LLVMContext.h"
 #include "llvm/IR/Verifier.h"
 #include "llvm/AsmParser/Parser.h"
@@ -89,7 +88,7 @@
   }
 
   std::string ErrorInfo;
-  OwningPtr<tool_output_file> Out
+  std::unique_ptr<tool_output_file> Out
   (new tool_output_file(OutputFilename.c_str(), ErrorInfo,
                         llvm::sys::fs::F_None));
   if (!ErrorInfo.empty()) {
@@ -128,7 +127,7 @@
 
   // Parse the file now...
   SMDiagnostic Err;
-  OwningPtr<Module> M(ParseAssemblyFile(InputFilename, Err, Context));
+  std::unique_ptr<Module> M(ParseAssemblyFile(InputFilename, Err, Context));
   if (M.get() == 0) {
     Err.print(argv[0], errs());
     return 1;
diff --git a/llvm-rs-cc.cpp b/llvm-rs-cc.cpp
index e7300d2..72db214 100644
--- a/llvm-rs-cc.cpp
+++ b/llvm-rs-cc.cpp
@@ -22,7 +22,6 @@
 
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/ADT/OwningPtr.h"
 
 #include "llvm/Option/OptTable.h"
 #include "llvm/Support/CommandLine.h"
@@ -30,7 +29,6 @@
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/Support/system_error.h"
 #include "llvm/Target/TargetMachine.h"
 
 #include "rs_cc_options.h"
@@ -181,7 +179,7 @@
     IOFiles->push_back(std::make_pair(InputFile, OutputFile));
   }
 
-  llvm::OwningPtr<slang::SlangRS> Compiler(new slang::SlangRS());
+  std::unique_ptr<slang::SlangRS> Compiler(new slang::SlangRS());
   Compiler->init(Opts.mBitWidth, DiagEngine, DiagClient);
   int CompileFailed = !Compiler->compile(*IOFiles, *IOFiles32, DepFiles, Opts);
   Compiler->reset();
@@ -242,7 +240,7 @@
   }
 
   if (Opts.mShowHelp) {
-    llvm::OwningPtr<llvm::opt::OptTable> OptTbl(slang::createRSCCOptTable());
+    std::unique_ptr<llvm::opt::OptTable> OptTbl(slang::createRSCCOptTable());
     OptTbl->PrintHelp(llvm::outs(), Argv0.c_str(),
                       "Renderscript source compiler");
     return 0;
@@ -284,12 +282,14 @@
                               llvm::SmallVectorImpl<const char*> &ArgVector,
                               std::set<std::string> &SavedStrings) {
   const char *FName = Arg + 1;
-  std::unique_ptr<llvm::MemoryBuffer> MemBuf;
-  if (llvm::MemoryBuffer::getFile(FName, MemBuf)) {
+  llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> MBOrErr =
+      llvm::MemoryBuffer::getFile(FName);
+  if (MBOrErr.getError()) {
     // Unable to open the file
     ArgVector.push_back(SaveStringInSet(SavedStrings, Arg));
     return;
   }
+  std::unique_ptr<llvm::MemoryBuffer> MemBuf = std::move(MBOrErr.get());
 
   const char *Buf = MemBuf->getBufferStart();
   char InQuote = ' ';
diff --git a/rs_cc_options.cpp b/rs_cc_options.cpp
index 987313b..a1f3762 100644
--- a/rs_cc_options.cpp
+++ b/rs_cc_options.cpp
@@ -19,7 +19,6 @@
 #include "clang/Driver/Options.h"
 #include "clang/Frontend/Utils.h"
 
-#include "llvm/ADT/OwningPtr.h"
 #include "llvm/Option/Arg.h"
 #include "llvm/Option/ArgList.h"
 #include "llvm/Option/Option.h"
@@ -87,8 +86,8 @@
     const char **ArgBegin = ArgVector.data() + 1;
     const char **ArgEnd = ArgVector.data() + ArgVector.size();
     unsigned MissingArgIndex, MissingArgCount;
-    llvm::OwningPtr<llvm::opt::OptTable> OptParser(slang::createRSCCOptTable());
-    llvm::OwningPtr<llvm::opt::InputArgList> Args(OptParser->ParseArgs(
+    std::unique_ptr<llvm::opt::OptTable> OptParser(slang::createRSCCOptTable());
+    std::unique_ptr<llvm::opt::InputArgList> Args(OptParser->ParseArgs(
         ArgBegin, ArgEnd, MissingArgIndex, MissingArgCount));
 
     // Check for missing argument error.
diff --git a/slang.cpp b/slang.cpp
index d982e4d..7810695 100644
--- a/slang.cpp
+++ b/slang.cpp
@@ -183,7 +183,7 @@
   }
 
   mTarget.reset(clang::TargetInfo::CreateTargetInfo(*mDiagEngine,
-                                                    mTargetOpts.getPtr()));
+                                                    mTargetOpts));
 }
 
 void Slang::createFileManager() {
@@ -218,7 +218,7 @@
   // Initialize the preprocessor
   mPP->Initialize(getTargetInfo());
   clang::FrontendOptions FEOpts;
-  clang::InitializePreprocessor(*mPP, *PPOpts, *HSOpts, FEOpts);
+  clang::InitializePreprocessor(*mPP, *PPOpts, FEOpts);
 
   mPragmas.clear();
   mPP->AddPragmaHandler(new PragmaRecorder(&mPragmas));
@@ -258,8 +258,8 @@
                      &mPragmas, OS, OT);
 }
 
-Slang::Slang() : mInitialized(false), mDiagClient(NULL), mOT(OT_Default) {
-  mTargetOpts = new clang::TargetOptions();
+Slang::Slang() : mInitialized(false), mDiagClient(NULL),
+  mTargetOpts(new clang::TargetOptions()), mOT(OT_Default) {
   GlobalInitialization();
 }
 
diff --git a/slang.h b/slang.h
index c733a52..39cfb56 100644
--- a/slang.h
+++ b/slang.h
@@ -28,7 +28,6 @@
 #include "clang/Basic/TargetOptions.h"
 #include "clang/Lex/ModuleLoader.h"
 
-#include "llvm/ADT/OwningPtr.h"
 #include "llvm/ADT/StringRef.h"
 
 #include "llvm/Target/TargetMachine.h"
@@ -82,7 +81,7 @@
   bool mInitialized;
 
   // Diagnostics Mediator (An interface for both Producer and Consumer)
-  llvm::OwningPtr<clang::Diagnostic> mDiag;
+  std::unique_ptr<clang::Diagnostic> mDiag;
 
   // Diagnostics Engine (Producer and Diagnostics Reporter)
   clang::DiagnosticsEngine *mDiagEngine;
@@ -92,34 +91,34 @@
   DiagnosticBuffer *mDiagClient;
 
   // The target being compiled for
-  llvm::IntrusiveRefCntPtr<clang::TargetOptions> mTargetOpts;
-  llvm::OwningPtr<clang::TargetInfo> mTarget;
+  std::shared_ptr<clang::TargetOptions> mTargetOpts;
+  std::unique_ptr<clang::TargetInfo> mTarget;
   void createTarget(uint32_t BitWidth);
 
 
   // File manager (for prepocessor doing the job such as header file search)
-  llvm::OwningPtr<clang::FileManager> mFileMgr;
-  llvm::OwningPtr<clang::FileSystemOptions> mFileSysOpt;
+  std::unique_ptr<clang::FileManager> mFileMgr;
+  std::unique_ptr<clang::FileSystemOptions> mFileSysOpt;
   void createFileManager();
 
 
   // Source manager (responsible for the source code handling)
-  llvm::OwningPtr<clang::SourceManager> mSourceMgr;
+  std::unique_ptr<clang::SourceManager> mSourceMgr;
   void createSourceManager();
 
 
   // Preprocessor (source code preprocessor)
-  llvm::OwningPtr<clang::Preprocessor> mPP;
+  std::unique_ptr<clang::Preprocessor> mPP;
   void createPreprocessor();
 
 
   // AST context (the context to hold long-lived AST nodes)
-  llvm::OwningPtr<clang::ASTContext> mASTContext;
+  std::unique_ptr<clang::ASTContext> mASTContext;
   void createASTContext();
 
 
   // AST consumer, responsible for code generation
-  llvm::OwningPtr<clang::ASTConsumer> mBackend;
+  std::unique_ptr<clang::ASTConsumer> mBackend;
 
 
   // File names
@@ -135,10 +134,10 @@
   OutputType mOT;
 
   // Output stream
-  llvm::OwningPtr<llvm::tool_output_file> mOS;
+  std::unique_ptr<llvm::tool_output_file> mOS;
 
   // Dependency output stream
-  llvm::OwningPtr<llvm::tool_output_file> mDOS;
+  std::unique_ptr<llvm::tool_output_file> mDOS;
 
   std::vector<std::string> mIncludePaths;
 
@@ -153,7 +152,7 @@
   clang::ASTContext &getASTContext() { return *mASTContext; }
 
   inline clang::TargetOptions const &getTargetOptions() const
-    { return *mTargetOpts.getPtr(); }
+    { return *mTargetOpts.get(); }
 
   virtual void initDiagnostic() {}
   virtual void initPreprocessor() {}
diff --git a/slang_diagnostic_buffer.h b/slang_diagnostic_buffer.h
index 66a0c9c..56fa0a0 100644
--- a/slang_diagnostic_buffer.h
+++ b/slang_diagnostic_buffer.h
@@ -21,7 +21,6 @@
 
 #include "clang/Basic/Diagnostic.h"
 
-#include "llvm/ADT/OwningPtr.h"
 #include "llvm/Support/raw_ostream.h"
 
 namespace llvm {
@@ -34,7 +33,7 @@
 class DiagnosticBuffer : public clang::DiagnosticConsumer {
  private:
   std::string mDiags;
-  llvm::OwningPtr<llvm::raw_string_ostream> mSOS;
+  std::unique_ptr<llvm::raw_string_ostream> mSOS;
 
  public:
   DiagnosticBuffer();
diff --git a/slang_rs.cpp b/slang_rs.cpp
index bc46972..6bb5798 100644
--- a/slang_rs.cpp
+++ b/slang_rs.cpp
@@ -165,8 +165,7 @@
       }
     } else {
       llvm::StringMapEntry<ReflectedDefinitionTy> *ME =
-          llvm::StringMapEntry<ReflectedDefinitionTy>::Create(RDKey.begin(),
-                                                              RDKey.end());
+          llvm::StringMapEntry<ReflectedDefinitionTy>::Create(RDKey);
       ME->setValue(std::make_pair(ERT, CurInputFile));
 
       if (!ReflectedDefinitions.insert(ME))
@@ -182,14 +181,14 @@
 void SlangRS::initDiagnostic() {
   clang::DiagnosticsEngine &DiagEngine = getDiagnostics();
 
-  if (DiagEngine.setDiagnosticGroupMapping("implicit-function-declaration",
-                                           clang::diag::MAP_ERROR))
+  if (DiagEngine.setSeverityForGroup("implicit-function-declaration",
+                                     clang::diag::Severity::Error))
     DiagEngine.Report(clang::diag::warn_unknown_warning_option)
       << "implicit-function-declaration";
 
-  DiagEngine.setDiagnosticMapping(
+  DiagEngine.setSeverity(
     clang::diag::ext_typecheck_convert_discards_qualifiers,
-    clang::diag::MAP_ERROR,
+    clang::diag::Severity::Error,
     clang::SourceLocation());
 
   mDiagErrorInvalidOutputDepParameter =
diff --git a/slang_rs_context.cpp b/slang_rs_context.cpp
index 24fc204..bef4766 100644
--- a/slang_rs_context.cpp
+++ b/slang_rs_context.cpp
@@ -251,8 +251,7 @@
 bool RSContext::insertExportType(const llvm::StringRef &TypeName,
                                  RSExportType *ET) {
   ExportTypeMap::value_type *NewItem =
-      ExportTypeMap::value_type::Create(TypeName.begin(),
-                                        TypeName.end(),
+      ExportTypeMap::value_type::Create(TypeName,
                                         mExportTypes.getAllocator(),
                                         ET);
 
diff --git a/slang_rs_context.h b/slang_rs_context.h
index 82cee40..c47f4c1 100644
--- a/slang_rs_context.h
+++ b/slang_rs_context.h
@@ -25,7 +25,6 @@
 #include "clang/Lex/Preprocessor.h"
 #include "clang/AST/Mangle.h"
 
-#include "llvm/ADT/OwningPtr.h"
 #include "llvm/ADT/StringSet.h"
 #include "llvm/ADT/StringMap.h"
 
@@ -88,7 +87,7 @@
 
   int version;
 
-  llvm::OwningPtr<clang::MangleContext> mMangleCtx;
+  std::unique_ptr<clang::MangleContext> mMangleCtx;
 
   bool mIs64Bit;
 
diff --git a/slang_rs_export_element.cpp b/slang_rs_export_element.cpp
index 6985053..00d5a53 100644
--- a/slang_rs_export_element.cpp
+++ b/slang_rs_export_element.cpp
@@ -62,7 +62,7 @@
       EI->vsize = DataElementInfoTable[i].vsize;
       llvm::StringRef Name(DataElementInfoTable[i].name);
       ElementInfoMap.insert(ElementInfoMapTy::value_type::Create(
-          Name.begin(), Name.end(), ElementInfoMap.getAllocator(), EI));
+          Name, ElementInfoMap.getAllocator(), EI));
     }
     Initialized = true;
   }
diff --git a/slang_rs_pragma_handler.cpp b/slang_rs_pragma_handler.cpp
index 03e2161..2d82232 100644
--- a/slang_rs_pragma_handler.cpp
+++ b/slang_rs_pragma_handler.cpp
@@ -270,7 +270,7 @@
   PP.LexUnexpandedToken(PragmaToken);
   if (PragmaToken.isNot(clang::tok::r_paren)) {
     // Eat the whole string literal
-    clang::StringLiteralParser StringLiteral(&PragmaToken, 1, PP);
+    clang::StringLiteralParser StringLiteral(PragmaToken, PP);
     if (StringLiteral.hadError) {
       // Diagnostics will be generated automatically
       return;
diff --git a/slang_utils.cpp b/slang_utils.cpp
index b4fa052..45d1b93 100644
--- a/slang_utils.cpp
+++ b/slang_utils.cpp
@@ -20,14 +20,13 @@
 
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/FileSystem.h"
-#include "llvm/Support/system_error.h"
 
 namespace slang {
 
 bool SlangUtils::CreateDirectoryWithParents(llvm::StringRef Dir,
                                             std::string* Error) {
-  llvm::error_code EC = llvm::sys::fs::create_directories(Dir);
-  if (EC != llvm::errc::success) {
+  std::error_code EC = llvm::sys::fs::create_directories(Dir);
+  if (EC) {
     Error->assign(EC.message());
     return false;
   }