This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/67434] std::chrono::duration acts like static even if instantiated every time
- From: "sthlm58 at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 03 Sep 2015 11:55:35 +0000
- Subject: [Bug libstdc++/67434] std::chrono::duration acts like static even if instantiated every time
- Auto-submitted: auto-generated
- References: <bug-67434-4 at http dot gcc dot gnu dot org/bugzilla/>
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.