Add Clang version inspection macros. Fixes PR6681.

llvm-svn: 102686
This commit is contained in:
Douglas Gregor 2010-04-30 02:51:06 +00:00
parent 48bf349471
commit 6602c25c0c
3 changed files with 57 additions and 2 deletions

View File

@ -199,7 +199,44 @@ is used in the file argument.</p>
<h2 id="builtinmacros">Builtin Macros</h2>
<!-- ======================================================================= -->
<p>__BASE_FILE__, __INCLUDE_LEVEL__, __TIMESTAMP__, __COUNTER__</p>
<dl>
<dt><code>__BASE_FILE__</code></dt>
<dd>Defined to a string that contains the name of the main input
file passed to Clang.</dd>
<dt><code>__COUNTER__</code></dt>
<dd>Defined to an integer value that starts at zero and is
incremented each time the <code>__COUNTER__</code> macro is
expanded.</dd>
<dt><code>__INCLUDE_LEVEL__</code></dt>
<dd>Defined to an integral value that is the include depth of the
file currently being translated. For the main file, this value is
zero.</dd>
<dt><code>__TIMESTAMP__</code></dt>
<dd>Defined to the date and time of the last modification of the
current source file.</dd>
<dt><code>__clang__</code></dt>
<dd>Defined when compiling with Clang</dd>
<dt><code>__clang_major__</code></dt>
<dd>Defined to the major version number of Clang (e.g., the 2 in
2.0.1).</dd>
<dt><code>__clang_minor__</code></dt>
<dd>Defined to the minor version number of Clang (e.g., the 0 in
2.0.1).</dd>
<dt><code>__clang_patchlevel__</code></dt>
<dd>Defined to the patch level of Clang (e.g., the 1 in 2.0.1).</dd>
<dt><code>__clang_version__</code></dt>
<dd>Defined to a string that captures the Clang version, including
the Subversion tag or revision number, e.g., "1.5 (trunk
102332)".</dd>
</dl>
<!-- ======================================================================= -->
<h2 id="vectors">Vectors and Extended Vectors</h2>

View File

@ -11,6 +11,7 @@
//
//===----------------------------------------------------------------------===//
#include "clang/Basic/Version.h"
#include "clang/Frontend/Utils.h"
#include "clang/Basic/MacroBuilder.h"
#include "clang/Basic/TargetInfo.h"
@ -212,7 +213,20 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
// Compiler version introspection macros.
Builder.defineMacro("__llvm__"); // LLVM Backend
Builder.defineMacro("__clang__"); // Clang Frontend
#define TOSTR2(X) #X
#define TOSTR(X) TOSTR2(X)
Builder.defineMacro("__clang_major__", TOSTR(CLANG_VERSION_MAJOR));
Builder.defineMacro("__clang_minor__", TOSTR(CLANG_VERSION_MINOR));
#ifdef CLANG_VERSION_PATCHLEVEL
Builder.defineMacro("__clang_patchlevel__", TOSTR(CLANG_VERSION_PATCHLEVEL));
#else
Builder.defineMacro("__clang_patchlevel__", "0");
#endif
Builder.defineMacro("__clang_version__",
"\"" CLANG_VERSION_STRING " ("
+ getClangFullRepositoryVersion() + ")\"");
#undef TOSTR
#undef TOSTR2
// Currently claim to be compatible with GCC 4.2.1-5621.
Builder.defineMacro("__GNUC_MINOR__", "2");
Builder.defineMacro("__GNUC_PATCHLEVEL__", "1");

View File

@ -48,6 +48,10 @@
// COMMON:#define __STDC__ 1
// COMMON:#define __VERSION__
// COMMON:#define __clang__ 1
// COMMON:#define __clang_major__ 2
// COMMON:#define __clang_minor__ 0
// COMMON:#define __clang_patchlevel__ 0
// COMMON:#define __clang_version__ "2.0 (trunk 102685)"
// COMMON:#define __llvm__ 1
//
//