[libcxx] r292833 - Manually force the use of __decltype in C++03 with Clang 3.4.

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 23 13:56:59 PST 2017


This patch should be merge into 4.0 since it is needed to fix compile time
regressions in <string> when using Clang 3.4 and C++03.

See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=216054 for more info.

/Eric

On Mon, Jan 23, 2017 at 2:41 PM, Eric Fiselier via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: ericwf
> Date: Mon Jan 23 15:41:13 2017
> New Revision: 292833
>
> URL: http://llvm.org/viewvc/llvm-project?rev=292833&view=rev
> Log:
> Manually force the use of __decltype in C++03 with Clang 3.4.
>
> <string> uses `decltype` in a way incompatible with `__typeof__`.
> This is problematic when compiling <string> with Clang 3.4 because
> even though it provides `__decltype` libc++ still used `__typeof__`
> because clang 3.4 doesn't provide __is_identifier which libc++
> uses to detect __decltype.
>
> This patch manually detects Clang 3.4 and properly configures
> for it.
>
> Modified:
>     libcxx/trunk/include/__config
>
> Modified: libcxx/trunk/include/__config
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/_
> _config?rev=292833&r1=292832&r2=292833&view=diff
> ============================================================
> ==================
> --- libcxx/trunk/include/__config (original)
> +++ libcxx/trunk/include/__config Mon Jan 23 15:41:13 2017
> @@ -109,6 +109,9 @@
>
>  #if defined(__clang__)
>  #define _LIBCPP_COMPILER_CLANG
> +# ifndef __apple_build_version__
> +#   define _LIBCPP_CLANG_VER (__clang_major__ * 100 + __clang_minor__)
> +# endif
>  #elif defined(__GNUC__)
>  #define _LIBCPP_COMPILER_GCC
>  #elif defined(_MSC_VER)
> @@ -117,6 +120,10 @@
>  #define _LIBCPP_COMPILER_IBM
>  #endif
>
> +#ifndef _LIBCPP_CLANG_VER
> +#define _LIBCPP_CLANG_VER 0
> +#endif
> +
>  // FIXME: ABI detection should be done via compiler builtin macros. This
>  // is just a placeholder until Clang implements such macros. For now
> assume
>  // that Windows compilers pretending to be MSVC++ target the microsoft
> ABI.
> @@ -754,7 +761,7 @@ template <unsigned> struct __static_asse
>
>  #ifdef _LIBCPP_HAS_NO_DECLTYPE
>  // GCC 4.6 provides __decltype in all standard modes.
> -#if __has_keyword(__decltype) || _GNUC_VER >= 406
> +#if __has_keyword(__decltype) || _LIBCPP_CLANG_VER >= 304 || _GNUC_VER >=
> 406
>  #  define decltype(__x) __decltype(__x)
>  #else
>  #  define decltype(__x) __typeof__(__x)
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170123/fe228d9f/attachment.html>


More information about the cfe-commits mailing list