Re: [libcxx] r291466 - [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW

2017-01-09 Thread Bruno Cardoso Lopes via cfe-commits
Ops. Fixed in r291517!

On Mon, Jan 9, 2017 at 2:13 PM, Reid Kleckner  wrote:
> This appears to have broken the Chromium build:
> https://build.chromium.org/p/chromium.fyi/builders/ClangToTMac/builds/12620/steps/gclient%20runhooks/logs/stdio
> FAILED: projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o
> /Applications/Xcode8.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
> -D_DEBUG -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
> -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
> -Iprojects/libcxx/lib
> -I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/lib -Iinclude
> -I/b/c/b/ClangToTMac/src/third_party/llvm/include
> -I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/include
> -DLLVM_FORCE_HEAD_REVISION -fPIC -fvisibility-inlines-hidden -Wall -W
> -Wno-unused-parameter -Wwrite-strings -Wcast-qual
> -Wmissing-field-initializers  -Wno-long-long -Wcovered-switch-default
> -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion
> -Werror=date-time -std=c++11 -fcolor-diagnostics -O3  -isysroot
> /Applications/Xcode8.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk
> -mmacosx-version-min=10.11-UNDEBUG -std=c++11 -nostdinc++
> -fvisibility-inlines-hidden -Wall -Wextra -W -Wwrite-strings
> -Wno-unused-parameter -Wno-long-long -Werror=return-type
> -Wno-user-defined-literals -Wno-covered-switch-default -Wno-error -fPIC -MMD
> -MT projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o -MF
> projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o.d -o
> projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o -c
> /b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp
> /b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp:102:5:
> error: use of undeclared identifier 'gettimeofday'
> gettimeofday(&tv, 0);
> ^
>
> The interesting flag in there is probably -mmacosx-version-min=10.11. Any
> thoughts on what's going wrong?
>
> On Mon, Jan 9, 2017 at 11:21 AM, Bruno Cardoso Lopes via cfe-commits
>  wrote:
>>
>> Author: bruno
>> Date: Mon Jan  9 13:21:48 2017
>> New Revision: 291466
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=291466&view=rev
>> Log:
>> [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW
>>
>> Use CLOCK_UPTIME_RAW in case clock_gettime is available on Darwin.
>>
>> On Apple platforms only CLOCK_UPTIME_RAW or mach_absolute_time are able
>> to time functions in the nanosecond range. Thus, they are the only
>> acceptable implementations of steady_clock.
>>
>> Differential Revision: https://reviews.llvm.org/D27429
>>
>> rdar://problem/29449467
>>
>> Modified:
>> libcxx/trunk/src/chrono.cpp
>>
>> Modified: libcxx/trunk/src/chrono.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/chrono.cpp?rev=291466&r1=291465&r2=291466&view=diff
>>
>> ==
>> --- libcxx/trunk/src/chrono.cpp (original)
>> +++ libcxx/trunk/src/chrono.cpp Mon Jan  9 13:21:48 2017
>> @@ -12,6 +12,28 @@
>>  #include "system_error"  // __throw_system_error
>>  #include // clock_gettime, CLOCK_MONOTONIC and
>> CLOCK_REALTIME
>>
>> +#if (__APPLE__)
>> +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
>> +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101200
>> +#define _LIBCXX_USE_CLOCK_GETTIME
>> +#endif
>> +#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
>> +#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 10
>> +#define _LIBCXX_USE_CLOCK_GETTIME
>> +#endif
>> +#elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
>> +#if __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 10
>> +#define _LIBCXX_USE_CLOCK_GETTIME
>> +#endif
>> +#elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__)
>> +#if __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 3
>> +#define _LIBCXX_USE_CLOCK_GETTIME
>> +#endif
>> +#endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__
>> +#else
>> +#define _LIBCXX_USE_CLOCK_GETTIME
>> +#endif // __APPLE__
>> +
>>  #if defined(_LIBCPP_WIN32API)
>>  #define WIN32_LEAN_AND_MEAN
>>  #define VC_EXTRA_LEAN
>> @@ -70,16 +92,16 @@ system_clock::now() _NOEXCEPT
>> static_cast<__int64>(ft.dwLowDateTime)};
>>return time_point(duration_cast(d - nt_to_unix_epoch));
>>  #else
>> -#ifdef CLOCK_REALTIME
>> +#if defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_REALTIME)
>>  struct timespec tp;
>>  if (0 != clock_gettime(CLOCK_REALTIME, &tp))
>>  __throw_system_error(errno, "clock_gettime(CLOCK_REALTIME)
>> failed");
>>  return time_point(seconds(tp.tv_sec) + microseconds(tp.tv_nsec /
>> 1000));
>> -#else  // !CLOCK_REALTIME
>> +#else
>>  timeval tv;
>>  gettimeofday(&tv, 0);
>>  return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec));
>> -#endif  // CLOCK_REALTIME
>> +#endif // _LIBCXX_USE_CLOCK_GETTIME && CLOCK_RE

Re: [libcxx] r291466 - [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW

2017-01-09 Thread Reid Kleckner via cfe-commits
This appears to have broken the Chromium build:
https://build.chromium.org/p/chromium.fyi/builders/ClangToTMac/builds/12620/steps/gclient%20runhooks/logs/stdio
FAILED: projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o
/Applications/Xcode8.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
  -D_DEBUG -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-Iprojects/libcxx/lib
-I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/lib -Iinclude
-I/b/c/b/ClangToTMac/src/third_party/llvm/include
-I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/include
-DLLVM_FORCE_HEAD_REVISION -fPIC -fvisibility-inlines-hidden -Wall -W
-Wno-unused-parameter -Wwrite-strings -Wcast-qual
-Wmissing-field-initializers  -Wno-long-long -Wcovered-switch-default
-Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion
-Werror=date-time -std=c++11 -fcolor-diagnostics -O3  -isysroot
/Applications/Xcode8.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk
-mmacosx-version-min=10.11-UNDEBUG -std=c++11 -nostdinc++
-fvisibility-inlines-hidden -Wall -Wextra -W -Wwrite-strings
-Wno-unused-parameter -Wno-long-long -Werror=return-type
-Wno-user-defined-literals -Wno-covered-switch-default -Wno-error -fPIC
-MMD -MT projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o
-MF projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o.d -o
projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o -c
/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp
/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp:102:5:
error: use of undeclared identifier 'gettimeofday'
gettimeofday(&tv, 0);
^

The interesting flag in there is probably -mmacosx-version-min=10.11. Any
thoughts on what's going wrong?

On Mon, Jan 9, 2017 at 11:21 AM, Bruno Cardoso Lopes via cfe-commits <
cfe-commits@lists.llvm.org> wrote:

> Author: bruno
> Date: Mon Jan  9 13:21:48 2017
> New Revision: 291466
>
> URL: http://llvm.org/viewvc/llvm-project?rev=291466&view=rev
> Log:
> [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW
>
> Use CLOCK_UPTIME_RAW in case clock_gettime is available on Darwin.
>
> On Apple platforms only CLOCK_UPTIME_RAW or mach_absolute_time are able
> to time functions in the nanosecond range. Thus, they are the only
> acceptable implementations of steady_clock.
>
> Differential Revision: https://reviews.llvm.org/D27429
>
> rdar://problem/29449467
>
> Modified:
> libcxx/trunk/src/chrono.cpp
>
> Modified: libcxx/trunk/src/chrono.cpp
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/
> chrono.cpp?rev=291466&r1=291465&r2=291466&view=diff
> 
> ==
> --- libcxx/trunk/src/chrono.cpp (original)
> +++ libcxx/trunk/src/chrono.cpp Mon Jan  9 13:21:48 2017
> @@ -12,6 +12,28 @@
>  #include "system_error"  // __throw_system_error
>  #include // clock_gettime, CLOCK_MONOTONIC and
> CLOCK_REALTIME
>
> +#if (__APPLE__)
> +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
> +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101200
> +#define _LIBCXX_USE_CLOCK_GETTIME
> +#endif
> +#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__)
> +#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 10
> +#define _LIBCXX_USE_CLOCK_GETTIME
> +#endif
> +#elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
> +#if __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 10
> +#define _LIBCXX_USE_CLOCK_GETTIME
> +#endif
> +#elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__)
> +#if __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 3
> +#define _LIBCXX_USE_CLOCK_GETTIME
> +#endif
> +#endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__
> +#else
> +#define _LIBCXX_USE_CLOCK_GETTIME
> +#endif // __APPLE__
> +
>  #if defined(_LIBCPP_WIN32API)
>  #define WIN32_LEAN_AND_MEAN
>  #define VC_EXTRA_LEAN
> @@ -70,16 +92,16 @@ system_clock::now() _NOEXCEPT
> static_cast<__int64>(ft.dwLowDateTime)};
>return time_point(duration_cast(d - nt_to_unix_epoch));
>  #else
> -#ifdef CLOCK_REALTIME
> +#if defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_REALTIME)
>  struct timespec tp;
>  if (0 != clock_gettime(CLOCK_REALTIME, &tp))
>  __throw_system_error(errno, "clock_gettime(CLOCK_REALTIME)
> failed");
>  return time_point(seconds(tp.tv_sec) + microseconds(tp.tv_nsec /
> 1000));
> -#else  // !CLOCK_REALTIME
> +#else
>  timeval tv;
>  gettimeofday(&tv, 0);
>  return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec));
> -#endif  // CLOCK_REALTIME
> +#endif // _LIBCXX_USE_CLOCK_GETTIME && CLOCK_REALTIME
>  #endif
>  }
>
> @@ -106,6 +128,18 @@ const bool steady_clock::is_steady;
>
>  #if defined(__APPLE__)
>
> +// Darwin libc versions >= 1133 provide ns precision via CLOCK_UPTIME_RAW