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

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 23 16:22:08 PST 2017


Sounds good to me.

On Mon, Jan 23, 2017 at 1:56 PM, Eric Fiselier <eric at efcs.ca> wrote:
> 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
>
>


More information about the cfe-commits mailing list