https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118243
--- Comment #10 from Martin Jambor <jamborm at gcc dot gnu.org> ---
This is an equivalent testcase without OpenMP and especially without iostream,
making dump reading a bit easier:
using complex_t = double __complex__;
struct A {
complex_t value;
A(double r) : value{r, 0} {}
};
void __attribute__((noipa))
int_sink (const int x)
{
if (x != 0)
__builtin_abort ();
return;
}
void __attribute__((noipa))
double_sink (const double x)
{
if (x < 0.1)
__builtin_abort ();
return;
}
void
test (const complex_t &c, const int &x)
{
if (x < 0)
int_sink (x+2*x+3*x+4*x+5*x);
else
{
double r = __real__ c;
double_sink (r);
}
}
volatile int vc = 1;
int main() {
for (int i = 0; i < vc; i++)
{
A a{0.123};
test(a.value, 123);
}
return 0;
}