[Bug c++/89257] New: Bad optimisation at -O3 with vector of pairs
matt at ookypooky dot com
gcc-bugzilla@gcc.gnu.org
Fri Feb 8 15:54:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89257
Bug ID: 89257
Summary: Bad optimisation at -O3 with vector of pairs
Product: gcc
Version: 7.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: matt at ookypooky dot com
Target Milestone: ---
Code as follows:
--
#include <vector>
#include <cstdio>
struct Foo
{
Foo () = default;
Foo (Foo &&f)
: x (f.x)
, y (f.y)
{
f.y = 0;
}
int x = 123;
int y = 456;
};
int main ()
{
std::vector<std::pair<Foo, Foo>> v;
for (size_t i = 0; i < 10; ++i)
{
v.emplace_back ();
}
for (const auto &p : v)
{
printf ("%d\n", p.first.y);
}
}
--
When compiled with:
g++ -std=c++17 -O3 anyway.cpp
Prints:
--
0
0
0
0
0
0
0
0
456
456
--
I expect every line to print 456.
Works correctly at -O2, and at -std=c++14, and works with std::tuple in place
of std::pair. Also works on gcc-6.3.0.
I'm afraid I don't have newer compiler versions to test against (and Compiler
Explorer output is hard to interpret without getting rid of std::vector).
More information about the Gcc-bugs
mailing list