[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