[libcxx-dev] Adding a _LIBCXX_HAS_NO_LONG_DOUBLE

Dionna Glaze via libcxx-dev libcxx-dev at lists.llvm.org
Tue Jul 2 11:25:23 PDT 2019

Heya folks, new contributor here. I work at Google on the Asylo project for
enclave development. I'm in the process of switching our toolchain over to
clang from GCC, and I've found that I have some minor problems doing so
with newlib as our libc implementation.

Mainly, long double math operations are not supported by newlib. In
libstdc++, if long double functions weren't defined in libc (#ifndef
HAVE_HYPOTL, etc, ...), it'd define them itself. That's not the case in
libc++, so I was wondering what y'all thought would be the best course of

Mainly, should libc++ act like libstdc++ and define its own long double
implementations of math operations, or should it not add the functions to
the std:: namespace if they're not available?

If not adding them, then the following headers would guard given
declarations within _LIBCPP_HAS_NO_LONG_DOUBLE/#endif:

#include <cmath>:
using ::nexttoward;
using ::nexttowardf;

using ::acosl;
[...contiguously down to...]
using ::truncl;

inline _LIBCPP_INLINE_VISIBILITY long double hypot( long double x, long
double y, long double z ) { return sqrt(x*x + y*y + z*z); }

#include <cstdlib>:
using ::strtold;

#include <locale>:
[...] long double __do_strtod<long double> [...]

#include <math.h>:
[...everything that mentions long double in its prototype...]

I can produce a patch quickly if this is an acceptable change to folks.

-Dionna Glaze, PhD (she/her)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libcxx-dev/attachments/20190702/e88eab0f/attachment.html>

More information about the libcxx-dev mailing list