//===--- LLVM.h - Import various common LLVM datatypes ----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // /// \file /// Forward-declares and imports various common LLVM datatypes that /// clang wants to use unqualified. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_BASIC_LLVM_H #define LLVM_CLANG_BASIC_LLVM_H // Do not proliferate #includes here, require clients to #include their // dependencies. // Casting.h has complex templates that cannot be easily forward declared. #include "llvm/Support/Casting.h" // None.h includes an enumerator that is desired & cannot be forward declared // without a definition of NoneType. #include "llvm/ADT/None.h" // Add this header as a workaround to prevent `too few template arguments for // class template 'SmallVector'` building error with build compilers like XL. #include "llvm/ADT/SmallVector.h" namespace llvm { // ADT's. class StringRef; class Twine; class VersionTuple; template class ArrayRef; template class MutableArrayRef; template class OwningArrayRef; template class SmallString; template class SmallVector; template class SmallVectorImpl; template class Optional; template class Expected; template struct SaveAndRestore; // Reference counting. template class IntrusiveRefCntPtr; template struct IntrusiveRefCntPtrInfo; template class RefCountedBase; class raw_ostream; class raw_pwrite_stream; // TODO: DenseMap, ... } namespace clang { // Casting operators. using llvm::isa; using llvm::isa_and_nonnull; using llvm::cast; using llvm::dyn_cast; using llvm::dyn_cast_or_null; using llvm::cast_or_null; // ADT's. using llvm::ArrayRef; using llvm::MutableArrayRef; using llvm::None; using llvm::Optional; using llvm::OwningArrayRef; using llvm::SaveAndRestore; using llvm::SmallString; using llvm::SmallVector; using llvm::SmallVectorImpl; using llvm::StringRef; using llvm::Twine; using llvm::VersionTuple; // Error handling. using llvm::Expected; // Reference counting. using llvm::IntrusiveRefCntPtr; using llvm::IntrusiveRefCntPtrInfo; using llvm::RefCountedBase; using llvm::raw_ostream; using llvm::raw_pwrite_stream; } // end namespace clang. #endif