Visibility.h revision 245431
150476Speter//===--- Visibility.h - Visibility enumeration and utilities ----*- C++ -*-===//
229585Sjulian//
329585Sjulian//                     The LLVM Compiler Infrastructure
429585Sjulian//
529585Sjulian// This file is distributed under the University of Illinois Open Source
629585Sjulian// License. See LICENSE.TXT for details.
729585Sjulian//
829585Sjulian//===----------------------------------------------------------------------===//
929585Sjulian///
1029585Sjulian/// \file
1129585Sjulian/// \brief Defines the clang::Visibility enumeration and various utility
1229585Sjulian/// functions.
1329585Sjulian///
1429585Sjulian//===----------------------------------------------------------------------===//
1529585Sjulian#ifndef LLVM_CLANG_BASIC_VISIBILITY_H
1629585Sjulian#define LLVM_CLANG_BASIC_VISIBILITY_H
1729585Sjulian
1829585Sjuliannamespace clang {
1929585Sjulian
2029585Sjulian/// \brief Describes the different kinds of visibility that a declaration
2129585Sjulian/// may have.
2229585Sjulian///
2329594Sjulian/// Visibility determines how a declaration interacts with the dynamic
2429594Sjulian/// linker.  It may also affect whether the symbol can be found by runtime
2529594Sjulian/// symbol lookup APIs.
2629594Sjulian///
2729594Sjulian/// Visibility is not described in any language standard and
2829594Sjulian/// (nonetheless) sometimes has odd behavior.  Not all platforms
2929594Sjulian/// support all visibility kinds.
3029594Sjulianenum Visibility {
3129594Sjulian  /// Objects with "hidden" visibility are not seen by the dynamic
3229594Sjulian  /// linker.
3329594Sjulian  HiddenVisibility,
3429594Sjulian
3529585Sjulian  /// Objects with "protected" visibility are seen by the dynamic
3629585Sjulian  /// linker but always dynamically resolve to an object within this
3729585Sjulian  /// shared object.
3829585Sjulian  ProtectedVisibility,
3929585Sjulian
4029594Sjulian  /// Objects with "default" visibility are seen by the dynamic linker
4129594Sjulian  /// and act like normal objects.
4229594Sjulian  DefaultVisibility
4329594Sjulian};
4429594Sjulian
4529594Sjulianinline Visibility minVisibility(Visibility L, Visibility R) {
4629594Sjulian  return L < R ? L : R;
4729585Sjulian}
4829585Sjulian
4929585Sjulian}
5029594Sjulian
5129594Sjulian#endif // LLVM_CLANG_BASIC_VISIBILITY_H
5229594Sjulian