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

            Bug ID: 118921
           Summary: C++ frontend does not honor GCC pragma optimize
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tnfchris at gcc dot gnu.org
  Target Milestone: ---

The following example:

# pragma STDC FP_CONTRACT ON
# if __GNUC__ >= 4
#  pragma GCC optimize ("no-fast-math,fp-contract=on")
# endif
# ifdef __FAST_MATH__
#  error Hey yo, What you doing on FAST_MATH??
# endif

--

compiles with gcc -Ofast but not with g++ -Ofast,
it looks like the macro does not get undefined for g++, but the pragma does get
processed:

#include <math.h>

# pragma STDC FP_CONTRACT ON
# if __GNUC__ >= 4
#  pragma GCC optimize ("no-fast-math,fp-contract=off")
# endif

void foo (float *f, float *g, int n)
{
  for (int i = 0; i < n; i++)
    f[i] += 2.6f * g[i];
}

shows that for both GCC and G++ the FMA doesn't get formed.

Is the pragma supposed to update the CPP define?

Reply via email to