[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 17:13:13 PST 2017


r292866.

On Mon, Jan 23, 2017 at 5:22 PM, Hans Wennborg <hans at chromium.org> wrote:

> 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
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170123/96cf7324/attachment-0001.html>


More information about the cfe-commits mailing list