https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95676

Alex Coplan <acoplan at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |RESOLVED
         Resolution|---                         |INVALID

--- Comment #4 from Alex Coplan <acoplan at gcc dot gnu.org> ---
Looks like the program has undefined behavior (signed integer overflow), so not
a compiler bug.

$ cat test.cc
#include <msgpack.hpp>

bool check_equality()
{
    std::chrono::system_clock::time_point
v(std::chrono::system_clock::time_point::min());
    msgpack::zone z;
    msgpack::object obj(v, z);
    return obj.as<std::chrono::system_clock::time_point>() == v;
}

int main()
{
    return check_equality() ? 42 : 0;
}
$ g++ test.cc -fsanitize=undefined -I msgpack-c/include/ -I boost_1_73_0
$ ./a.out
/usr/include/c++/7/chrono:176:38: runtime error: signed integer overflow:
-9223372037 * 1000000000 cannot be represented in type 'long int'
/usr/include/c++/7/chrono:379:8: runtime error: signed integer overflow:
9223372036709551616 + 145224192 cannot be represented in type 'long int'

I get the same result with clang++ as well.

Reply via email to