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@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits