https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88111
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- Does it even make sense to have pools for objects of 1024 bytes on a 16-bit target? Is anybody really going to dynamically-allocate lots of 1kb objects? It certainly seems unnecessary to support objects of size 1<<14 bytes. I'd prefer to fix this for any 16-bit targets, not just msp430, so I don't want the fix to check __MSP430X_LARGE__. So taking all the above into account, and assuming __SIZE_WIDTH__ is set correctly, something like this seems preferable: --- a/libstdc++-v3/src/c++17/memory_resource.cc +++ b/libstdc++-v3/src/c++17/memory_resource.cc @@ -820,10 +820,15 @@ namespace pmr 128, 192, 256, 320, 384, 448, 512, 768, +#if __SIZE_WIDTH__ > 16 1024, 1536, 2048, 3072, - 1<<12, 1<<13, 1<<14, 1<<15, 1<<16, 1<<17, +#if __SIZE_WIDTH__ > 20 + 1<<12, 1<<13, 1<<14, + 1<<15, 1<<16, 1<<17, 1<<20, 1<<21, 1<<22 // 4MB should be enough for anybody +#endif +#endif }; pool_options