From 9c6c975b61cba67c1bd8f97fe7057be83ad0d67f Mon Sep 17 00:00:00 2001
From: Zuzana Baranova <xbaranov@fi.muni.cz>
Date: Sat, 22 Jun 2019 12:07:23 +0000
Subject: [PATCH] CC: Add link_bitcode virtual method to Native, call it in
 link().

---
 divine/cc/codegen.hpp | 2 ++
 divine/cc/native.cpp  | 9 +++++++++
 divine/cc/native.hpp  | 1 +
 tools/divcc.cpp       | 5 -----
 4 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/divine/cc/codegen.hpp b/divine/cc/codegen.hpp
index 14fe2e068..c2ba53c7b 100644
--- a/divine/cc/codegen.hpp
+++ b/divine/cc/codegen.hpp
@@ -17,7 +17,9 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+DIVINE_RELAX_WARNINGS
 #include <llvm/IR/Module.h>
+DIVINE_UNRELAX_WARNINGS
 
 namespace divine::cc
 {
diff --git a/divine/cc/native.cpp b/divine/cc/native.cpp
index 9c703f3fc..b89e67c14 100644
--- a/divine/cc/native.cpp
+++ b/divine/cc/native.cpp
@@ -81,6 +81,15 @@ namespace divine::cc
             if ( !linked )
                 throw cc::CompileError( "lld failed, not linked" );
         }
+
+        std::unique_ptr< llvm::Module > mod = link_bitcode();
+        std::string file_out = _po.outputFile != "" ? _po.outputFile : "a.out";
+        cc::add_section( file_out, cc::llvm_section_name, _clang.serializeModule( *mod ) );
+    }
+
+    std::unique_ptr< llvm::Module > Native::link_bitcode()
+    {
+        return cc::link_bitcode< cc::Driver, false >( _files, _clang, _po.libSearchPath );
     }
 
     Native::~Native()
diff --git a/divine/cc/native.hpp b/divine/cc/native.hpp
index b0ed388c4..404cc37d7 100644
--- a/divine/cc/native.hpp
+++ b/divine/cc/native.hpp
@@ -35,6 +35,7 @@ namespace divine::cc
         int compile_files();
         void init_ld_args();
         void link();
+        virtual std::unique_ptr< llvm::Module > link_bitcode();
 
         cc::ParsedOpts _po;
         PairedFiles _files;
diff --git a/tools/divcc.cpp b/tools/divcc.cpp
index 7d569a1b6..e446ab309 100644
--- a/tools/divcc.cpp
+++ b/tools/divcc.cpp
@@ -144,11 +144,6 @@ int main( int argc, char **argv )
             nativeCC.compile_files();
             nativeCC._cxx = brick::string::endsWith( argv[0], "divc++" );
             nativeCC.link();
-
-            std::unique_ptr< llvm::Module > mod = cc::link_bitcode< rt::DiosCC, true >( pairedFiles, clang, po.libSearchPath );
-            std::string file_out = po.outputFile != "" ? po.outputFile : "a.out";
-
-            cc::add_section( file_out, cc::llvm_section_name, clang.serializeModule( *mod ) );
             return 0;
         }
 
-- 
GitLab