[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