Pull in r292833 from upstream libc++ trunk (by Eric Fiselier):

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.

This allows the graphics/openshadinglanguage port to build with
lang/clang34.

PR:		216054
This commit is contained in:
Dimitry Andric 2017-01-23 23:20:00 +00:00
parent f23c525c9b
commit b1c1e77a87
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/projects/clang400-import/; revision=312675

View File

@ -103,6 +103,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)
@ -111,6 +114,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.
@ -741,7 +748,7 @@ template <unsigned> struct __static_assert_check {};
#ifdef _LIBCPP_HAS_NO_DECLTYPE
// GCC 4.6 provides __decltype in all standard modes.
#if !__is_identifier(__decltype) || _GNUC_VER >= 406
#if !__is_identifier(__decltype) || _LIBCPP_CLANG_VER >= 304 || _GNUC_VER >= 406
# define decltype(__x) __decltype(__x)
#else
# define decltype(__x) __typeof__(__x)