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

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Thanks - so it looks as though the problem is in std::stod which is pretty
simple, and can be reduced to:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
      double d;

      char* endptr;
      errno = 0;
      const char* str = "0x1.1000000000000p+8";
      const double tmp = strtod(str, &endptr);

      if (endptr == str) {
        puts("no characters consumed");
    return 1;
      }
      else if (errno == ERANGE) {
        puts("ERANGE");
    return 2;
      }
      else if (*endptr) {
        printf("stopped at '%c'\n", *endptr);
        return 3;
      }
      else
    d = tmp;

     printf("%f %a\n", d, d);
}

Maybe Solaris' strtod() doesn't support hex floats in C++ code, so it will
print "stopped at 'x'"

Reply via email to