[Bug c++/94175] New: [10 Regression] Passing constexpr empty class variable to function since r10-599
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Mar 14 12:49:07 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94175
Bug ID: 94175
Summary: [10 Regression] Passing constexpr empty class variable
to function since r10-599
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
Target Milestone: ---
Since r10-599-gc652ff83124334837dc16626f9e1040e4fe41fc9 following testcase with
-O2 -m32 (or -O0 -m32 or any arch other than x86_64 64-bit):
struct Foo
{
struct NoStartBar {};
static constexpr NoStartBar noStartBar = NoStartBar();
[[gnu::noinline, gnu::noclone]] Foo(int x, NoStartBar) : f (x) { f++; }
Foo(double x) : Foo(0, noStartBar) {}
int f;
};
Foo a = 6.0;
needs the Foo::noStartBar definition, while before it didn't and just passed
NoStartBar {}.
Is passing the static data member an ODR use of it or not?
In any case, looks like a missed optimization, there shouldn't be reason to
copy the empty class from a variable rather than just passing uninitialized
bytes.
More information about the Gcc-bugs
mailing list