1b1c73532SDimitry Andric //===-- LinkInModulesPass.cpp - Module Linking pass --------------- C++ -*-===// 2b1c73532SDimitry Andric // 3b1c73532SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4b1c73532SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5b1c73532SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6b1c73532SDimitry Andric // 7b1c73532SDimitry Andric //===----------------------------------------------------------------------===// 8b1c73532SDimitry Andric /// \file 9b1c73532SDimitry Andric /// 10b1c73532SDimitry Andric /// LinkInModulesPass implementation. 11b1c73532SDimitry Andric /// 12b1c73532SDimitry Andric //===----------------------------------------------------------------------===// 13b1c73532SDimitry Andric 14b1c73532SDimitry Andric #include "LinkInModulesPass.h" 15b1c73532SDimitry Andric #include "BackendConsumer.h" 16b1c73532SDimitry Andric 17ac9a064cSDimitry Andric #include "clang/Basic/CodeGenOptions.h" 18ac9a064cSDimitry Andric #include "clang/Basic/FileManager.h" 19ac9a064cSDimitry Andric #include "clang/Basic/SourceManager.h" 20ac9a064cSDimitry Andric 21b1c73532SDimitry Andric using namespace llvm; 22b1c73532SDimitry Andric LinkInModulesPass(clang::BackendConsumer * BC)23ac9a064cSDimitry AndricLinkInModulesPass::LinkInModulesPass(clang::BackendConsumer *BC) : BC(BC) {} 24b1c73532SDimitry Andric run(Module & M,ModuleAnalysisManager & AM)25b1c73532SDimitry AndricPreservedAnalyses LinkInModulesPass::run(Module &M, ModuleAnalysisManager &AM) { 26ac9a064cSDimitry Andric if (!BC) 27b1c73532SDimitry Andric return PreservedAnalyses::all(); 28ac9a064cSDimitry Andric 29ac9a064cSDimitry Andric if (BC->LinkInModules(&M)) 30ac9a064cSDimitry Andric report_fatal_error("Bitcode module postopt linking failed, aborted!"); 31ac9a064cSDimitry Andric 32ac9a064cSDimitry Andric return PreservedAnalyses::none(); 33b1c73532SDimitry Andric } 34