1 //===--- Visibility.h - Visibility enumeration and utilities ----*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// 10 /// \file 11 /// \brief Defines the clang::Visibility enumeration and various utility 12 /// functions. 13 /// 14 //===----------------------------------------------------------------------===// 15 #ifndef LLVM_CLANG_BASIC_VISIBILITY_H 16 #define LLVM_CLANG_BASIC_VISIBILITY_H 17 18 namespace clang { 19 20 /// \brief Describes the different kinds of visibility that a declaration 21 /// may have. 22 /// 23 /// Visibility determines how a declaration interacts with the dynamic 24 /// linker. It may also affect whether the symbol can be found by runtime 25 /// symbol lookup APIs. 26 /// 27 /// Visibility is not described in any language standard and 28 /// (nonetheless) sometimes has odd behavior. Not all platforms 29 /// support all visibility kinds. 30 enum Visibility { 31 /// Objects with "hidden" visibility are not seen by the dynamic 32 /// linker. 33 HiddenVisibility, 34 35 /// Objects with "protected" visibility are seen by the dynamic 36 /// linker but always dynamically resolve to an object within this 37 /// shared object. 38 ProtectedVisibility, 39 40 /// Objects with "default" visibility are seen by the dynamic linker 41 /// and act like normal objects. 42 DefaultVisibility 43 }; 44 45 inline Visibility minVisibility(Visibility L, Visibility R) { 46 return L < R ? L : R; 47 } 48 49 } 50 51 #endif // LLVM_CLANG_BASIC_VISIBILITY_H 52