[Bug libstdc++/67434] std::chrono::duration acts like static even if instantiated every time

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Sep 2 11:28:00 GMT 2015


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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

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

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Michal Kucharski from comment #0)
> std::chrono::duration<double> benchmark( ) 
> {
>   std::random_device rd;
> 
>   std::chrono::duration<double> total;

You have not initialized this variable.

>   
>   for (int i = 0; i < 100; i++) 
>   {
>      auto t1 = std::chrono::high_resolution_clock::now();
>      auto t2 = std::chrono::high_resolution_clock::now();
>      total += std::chrono::duration_cast<std::chrono::duration<double>>(t2 -
> t1);

This has undefined behaviour because you are performing addition on an
uninitialized value. You could have found this with valgrind.



More information about the Gcc-bugs mailing list