<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54594>54594</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
libc++: Unable to build libcxx with newlib
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jupiter-zzp
</td>
</tr>
</table>
<pre>
Cross build libcxx with newlib will raise error:
```
runtimes/include/c++/v1/__locale:552:5: error: static_assert failed due to requirement '(__regex_word & ~(space | print | cntrl | upper | lower | alpha | digit | punct | xdigit | blank)) == __regex_word' "__regex_word can't overlap other bits"
static_assert((__regex_word & ~(space | print | cntrl | upper | lower | alpha | digit | punct | xdigit | blank)) == __regex_word,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
23 warnings and 1 error generated.
```
The definitions for newlib are as below.
```
#elif defined(_NEWLIB_VERSION)
// Same type as Newlib's _ctype_ array in newlib/libc/include/ctype.h.
typedef char mask;
static const mask space = _S;
static const mask print = _P | _U | _L | _N | _B;
static const mask cntrl = _C;
static const mask upper = _U;
static const mask lower = _L;
static const mask alpha = _U | _L;
static const mask digit = _N;
static const mask punct = _P;
static const mask xdigit = _X | _N;
static const mask blank = _B;
static const mask __regex_word = 0x80;
```
In newlib 4.1.0 the definitions are as below. So `blank` and `print` will overlap with `__regex_word`
```
#define _U 01
#define _L 02
#define _N 04
#define _S 010
#define _P 020
#define _C 040
#define _X 0100
#define _B 0200
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVktv4zYQ_jXyZbCGTEl-HHRYOwkQIHCLumn3JlDi2OIuLakkFTv76zsknXjtuNClhz2sQYujeZOab8iyFa_5SrfGQNlLJUDJsjoe4SBtDQ0e6JVopUBzaRBQ61ZHyecovoviz9E0Pg3_qvvGyj2aiD3IplK9QKKqiC39eHiZ0KMoVFtxheQjy5h70v_dLRjLrawKbgxqC1suFQoQPYJtQeM_vdS4x8ZCxGYRmxeFxh0ei0OrBbGmEM3uiW06XiHRK-i0dMpEVY3VylN916H2lGoPJ4qrruaeEnIng0XXN1WgjmdmqXjzLWILGhAldzTgxyQoLcqDXeRV8YbYFtoX1Ip30NqaopbS0j6xsHFAv4uV0yJ-zuWtzglH2T38-HPJ_Rr_-_D7zRI4cN3IZmeANwImATGwwwY1tyjGNwH5Z40gcCsbaWXbGNiSyQnTXCNwwjxSldw2jliCSm6DAxSuHtf3fz89Lou_7v_YPP62dnVyrgb2QAM2fE9Yfe2887UPRcVvoKgcs6Cwmr-CbE5pkInrN5cNw2mO6_HZt2NQFlDVXMOem29RsrwGDlS0QOulEAACvno3A7oBQkH3d4-B4jlMT2Fah2k54CcAMPhZDegGiAbd5wHdAOKg-zSgG2B-8ntaxIBJgH4wWQ9tle8Yp60a0H3rKU73y2kjB0x87zm5H9rty85IFvFxHr_bXBeyfz6-1Ryk48k4BnuFjQtAwKYFsg_tcBp7zNHsi8W9-xPxraH7o5K4F53yPfgHUAU8RfGCvn28iCc3BE9OwG4I1k6Q3hBsvKvrIO47OU8f-Svv6CP_S_BzK9tlcHW9rpHIE7FIFnxkpVWYBzz7I5_O8-eGl8qf3v91uxj1WuW1tZ1x1wrfRahy6r4cV-3e9Qf18jZ96nT7FSvr2oUxvb9oZGm2SEd1PptN5nM-qxaJSNi0jJNpmqYLIbZimiLD7Uhx-rQmjzJKjVFo8C7cEZzdjWTOYsbihM3jRTabZOMUyyyrsnSKgldlKaI0xj3dRsYuj3GrdyOd-5TKfmdIqKSx5iykU1zuGkQfjvzz3tatzr_2nbSoP33_3o18-Nyn_y9MBrsL">