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

            Bug ID: 86113
           Summary: __builtin_nan has "const" attribute
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gfalcon at google dot com
  Target Milestone: ---

__builtin_nan and friends incorrectly have ATTR_CONST.  This leads the
optimizer into generating incorrect code.  This issue also infects std::nan()
and friends.

The two functions below return different answers in -O1 and above:

double a() {
  char buf[4];
  buf[0] = buf[1] = buf[2] = '9';
  buf[3] = '\0';
  return nan(buf);
}

double b() { return nan("999"); }

In a(), the optimizer thinks that nothing reads the contents of `buf`, and
eliminates the assignments.  See https://godbolt.org/g/RGHnXQ.

Reply via email to