15f757f3fSDimitry Andric //===-- LinkInModulesPass.cpp - Module Linking pass --------------- C++ -*-===// 25f757f3fSDimitry Andric // 35f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65f757f3fSDimitry Andric // 75f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 85f757f3fSDimitry Andric /// \file 95f757f3fSDimitry Andric /// 105f757f3fSDimitry Andric /// LinkInModulesPass implementation. 115f757f3fSDimitry Andric /// 125f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 135f757f3fSDimitry Andric 145f757f3fSDimitry Andric #include "LinkInModulesPass.h" 155f757f3fSDimitry Andric #include "BackendConsumer.h" 165f757f3fSDimitry Andric 17*0fca6ea1SDimitry Andric #include "clang/Basic/CodeGenOptions.h" 18*0fca6ea1SDimitry Andric #include "clang/Basic/FileManager.h" 19*0fca6ea1SDimitry Andric #include "clang/Basic/SourceManager.h" 20*0fca6ea1SDimitry Andric 215f757f3fSDimitry Andric using namespace llvm; 225f757f3fSDimitry Andric 23*0fca6ea1SDimitry Andric LinkInModulesPass::LinkInModulesPass(clang::BackendConsumer *BC) : BC(BC) {} 245f757f3fSDimitry Andric 255f757f3fSDimitry Andric PreservedAnalyses LinkInModulesPass::run(Module &M, ModuleAnalysisManager &AM) { 26*0fca6ea1SDimitry Andric if (!BC) 275f757f3fSDimitry Andric return PreservedAnalyses::all(); 28*0fca6ea1SDimitry Andric 29*0fca6ea1SDimitry Andric if (BC->LinkInModules(&M)) 30*0fca6ea1SDimitry Andric report_fatal_error("Bitcode module postopt linking failed, aborted!"); 31*0fca6ea1SDimitry Andric 32*0fca6ea1SDimitry Andric return PreservedAnalyses::none(); 335f757f3fSDimitry Andric } 34