[LLVMbugs] [Bug 22193] New: invalid high_resolution_clock::now behavior

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sun Jan 11 10:58:01 PST 2015


            Bug ID: 22193
           Summary: invalid high_resolution_clock::now behavior
           Product: libc++
           Version: unspecified
          Hardware: PC
                OS: FreeBSD
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: edouard at quasardb.net
                CC: llvmbugs at cs.uiuc.edu, mclow.lists at gmail.com
    Classification: Unclassified

See this test program:

#include <chrono>
#include <iostream>

int main(int argc, char ** argv)

    // although system_clock should be less precise the returned values should
be pretty close
    // on my machine I have
    // 2689496100548 (this is in the 70', YEAH BABY YEAH)
    // 1421001821241019

    std::cout <<
<< std::endl;

    std::cout <<
<< std::endl;

    return 0;

Looking at the source code, the problem is obvious:

// from chrono.cpp

system_clock::now() _NOEXCEPT
    timeval tv;
    gettimeofday(&tv, 0);
    return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec));

system_clock::to_time_t(const time_point& t) _NOEXCEPT
    // correct because gettimeofday is epoch based
    return time_t(duration_cast<seconds>(t.time_since_epoch()).count());

steady_clock::now() _NOEXCEPT
    // incorrect, CLOCK_MONOTONIC returns an arbitrary value when calling
time_since_epoch it will fail

    struct timespec tp;

    if (0 != clock_gettime(CLOCK_MONOTONIC, &tp))
        __throw_system_error(errno, "clock_gettime(CLOCK_MONOTONIC) failed");

    return time_point(seconds(tp.tv_sec) + nanoseconds(tp.tv_nsec));

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150111/5bf602c8/attachment.html>

More information about the llvm-bugs mailing list