diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-04-30 02:51:06 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-04-30 02:51:06 +0000 |
commit | 4290fbd89e851c1f1240a007461f4afd940cbb47 (patch) | |
tree | 8e9452f27f10c3f92afdb8785e6db7fff5178036 | |
parent | 9dffe6f51c676c1e423c382c62d1648746e36cd4 (diff) |
Add Clang version inspection macros. Fixes PR6681.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@102686 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | docs/LanguageExtensions.html | 39 | ||||
-rw-r--r-- | lib/Frontend/InitPreprocessor.cpp | 16 | ||||
-rw-r--r-- | test/Preprocessor/init.c | 4 |
3 files changed, 57 insertions, 2 deletions
diff --git a/docs/LanguageExtensions.html b/docs/LanguageExtensions.html index 9779c3ff44..838b65f27b 100644 --- a/docs/LanguageExtensions.html +++ b/docs/LanguageExtensions.html @@ -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> diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp index e035afd707..f1e9819d83 100644 --- a/lib/Frontend/InitPreprocessor.cpp +++ b/lib/Frontend/InitPreprocessor.cpp @@ -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"); diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index 4ef460bbc6..7909921784 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -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 // // |