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

Bruno Cardoso Lopes via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 9 17:02:11 PST 2017


Ops. Fixed in r291517!

On Mon, Jan 9, 2017 at 2:13 PM, Reid Kleckner <rnk at google.com> 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
> <cfe-commits at 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 <time.h>        // 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__ >= 100000
>> +#define _LIBCXX_USE_CLOCK_GETTIME
>> +#endif
>> +#elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__)
>> +#if __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 100000
>> +#define _LIBCXX_USE_CLOCK_GETTIME
>> +#endif
>> +#elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__)
>> +#if __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 30000
>> +#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<duration>(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
>> +#if defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_UPTIME_RAW)
>> +steady_clock::time_point
>> +steady_clock::now() _NOEXCEPT
>> +{
>> +    struct timespec tp;
>> +    if (0 != clock_gettime(CLOCK_UPTIME_RAW, &tp))
>> +        __throw_system_error(errno, "clock_gettime(CLOCK_UPTIME_RAW)
>> failed");
>> +    return time_point(seconds(tp.tv_sec) + nanoseconds(tp.tv_nsec));
>> +}
>> +
>> +#else
>>  //   mach_absolute_time() * MachInfo.numer / MachInfo.denom is the number
>> of
>>  //   nanoseconds since the computer booted up.  MachInfo.numer and
>> MachInfo.denom
>>  //   are run time constants supplied by the OS.  This clock has no
>> relationship
>> @@ -157,6 +191,7 @@ steady_clock::now() _NOEXCEPT
>>      static FP fp = init_steady_clock();
>>      return time_point(duration(fp()));
>>  }
>> +#endif // defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_UPTIME_RAW)
>>
>>  #elif defined(_LIBCPP_WIN32API)
>>
>> @@ -175,6 +210,13 @@ steady_clock::now() _NOEXCEPT
>>
>>  #elif defined(CLOCK_MONOTONIC)
>>
>> +// 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.
>> +#ifdef __APPLE__
>> +#error "Never use CLOCK_MONOTONIC for steady_clock::now on Apple
>> platforms"
>> +#endif
>> +
>>  steady_clock::time_point
>>  steady_clock::now() _NOEXCEPT
>>  {
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>



-- 
Bruno Cardoso Lopes
http://www.brunocardoso.cc


More information about the cfe-commits mailing list