diff options
-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 // // |