[llvm-commits] CVS: llvm/include/llvm/Support/Compiler.h
Chris Lattner
lattner at cs.uiuc.edu
Sun Aug 27 05:43:05 PDT 2006
Changes in directory llvm/include/llvm/Support:
Compiler.h added (r1.1)
---
Log message:
New place to put compiler-specific functionality. This replaces Visibility.h,
and provides macros that can be used to make explicit instantiations of
template specializations, which is a gcc-specific feature.
---
Diffs of the changes: (+40 -0)
Compiler.h | 40 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 40 insertions(+)
Index: llvm/include/llvm/Support/Compiler.h
diff -c /dev/null llvm/include/llvm/Support/Compiler.h:1.1
*** /dev/null Sun Aug 27 07:42:56 2006
--- llvm/include/llvm/Support/Compiler.h Sun Aug 27 07:42:45 2006
***************
*** 0 ****
--- 1,40 ----
+ //===-- llvm/Support/Compiler.h - Compiler abstraction support --*- C++ -*-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by Chris Lattner and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This file defines several macros, based on the current compiler. This allows
+ // use of compiler-specific features in a way that remains portable.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef LLVM_SUPPORT_COMPILER_H
+ #define LLVM_SUPPORT_COMPILER_H
+
+ // The VISIBILITY_HIDDEN macro, used for marking classes with the GCC-specific
+ // visibility("hidden") attribute.
+ #if __GNUC__ >= 4
+ #define VISIBILITY_HIDDEN __attribute__ ((visibility("hidden")))
+ #else
+ #define VISIBILITY_HIDDEN
+ #endif
+
+
+ // C++ doesn't support 'extern template' of template specializations. GCC does,
+ // but requires __extension__ before it. In the header, use this:
+ // EXTERN_TEMPLATE_INSTANTIATION(class foo<bar>);
+ // in the .cpp file, use this:
+ // TEMPLATE_INSTANTIATION(class foo<bar>);
+ #ifdef __GNUC__
+ #define EXTERN_TEMPLATE_INSTANTIATION(X) __extension__ extern template X
+ #define TEMPLATE_INSTANTIATION(X) template X
+ #else
+ #define EXTERN_TEMPLATE_INSTANTIATION(X)
+ #define TEMPLATE_INSTANTIATION(X)
+ #endif
+
+ #endif
More information about the llvm-commits
mailing list