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

Reid Kleckner via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 9 14:13:28 PST 2017


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


More information about the cfe-commits mailing list