]> granicus.if.org Git - clang/commitdiff
Use the newer/simple API for passing a diagnostic handler to the IR linker.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 27 Oct 2014 23:02:34 +0000 (23:02 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 27 Oct 2014 23:02:34 +0000 (23:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220733 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenAction.cpp

index 044eec643bb0b6209e4d705a2d18b0c8a516792a..0bd53b8da5151713152f2e34db5c78a4f6cf880d 100644 (file)
@@ -153,15 +153,9 @@ namespace clang {
 
       // Link LinkModule into this module if present, preserving its validity.
       if (LinkModule) {
-        LLVMContext &Ctx = LinkModule->getContext();
-        LLVMContext::DiagnosticHandlerTy OldHandler =
-            Ctx.getDiagnosticHandler();
-        void *OldDiagnosticContext = Ctx.getDiagnosticContext();
-        Ctx.setDiagnosticHandler(linkerDiagnosticHandler, this);
-        bool Failed =
-            Linker::LinkModules(M, LinkModule.get(), Linker::PreserveSource);
-        Ctx.setDiagnosticHandler(OldHandler, OldDiagnosticContext);
-        if (Failed)
+        if (Linker::LinkModules(
+                M, LinkModule.get(), Linker::PreserveSource,
+                [=](const DiagnosticInfo &DI) { linkerDiagnosticHandler(DI); }))
           return;
       }
 
@@ -225,12 +219,7 @@ namespace clang {
       ((BackendConsumer*)Context)->InlineAsmDiagHandler2(SM, Loc);
     }
 
-    static void linkerDiagnosticHandler(const llvm::DiagnosticInfo &DI,
-                                        void *Context) {
-      ((BackendConsumer *)Context)->linkerDiagnosticHandlerImpl(DI);
-    }
-
-    void linkerDiagnosticHandlerImpl(const llvm::DiagnosticInfo &DI);
+    void linkerDiagnosticHandler(const llvm::DiagnosticInfo &DI);
 
     static void DiagnosticHandler(const llvm::DiagnosticInfo &DI,
                                   void *Context) {
@@ -507,7 +496,7 @@ void BackendConsumer::OptimizationFailureHandler(
   EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure);
 }
 
-void BackendConsumer::linkerDiagnosticHandlerImpl(const DiagnosticInfo &DI) {
+void BackendConsumer::linkerDiagnosticHandler(const DiagnosticInfo &DI) {
   if (DI.getSeverity() != DS_Error)
     return;