This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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

--- Comment #2 from sthlm58 at gmail dot com ---
(In reply to Jonathan Wakely from comment #1)
> (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.

In other words, here 'total' was default-initialized (hence unspecified) thus
causing undefined behavior. It it were value-initialized e.g. with '{}' the
problem would not happen.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]