[PATCH] D23692: Interpret strlen as constexpr for GCC Compatibility

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 19 08:15:19 PDT 2016

erichkeane added a comment.

In https://reviews.llvm.org/D23692#520097, @erichkeane wrote:

> In https://reviews.llvm.org/D23692#520081, @rsmith wrote:
> > This is not a conforming extension. We are explicitly not allowed to make standard library functions `constexpr` if the standard doesn't say they are; see [constexpr.functions] ( in the C++ standard. Clang previously used to allow constant-folding `strlen` calls, but we removed that support intentionally for this reason.
> >
> > It would seem reasonable for this constant-folding to be enabled for `strlen` if the callee was explicitly marked as `constexpr` in the source code. That way, if the standard library chooses to mark it as `constexpr` as a (currently) non-conforming extension, we would provide an optimized implementation.
> Ok, thank you for your prompt response.  I'll see if that is a viable solution for this case.
> Thanks!

Sadly, it doesn't seem that this would be a viable fix.  libstdc++ doesn't actually seem to implement strlen, and all references to it are "extern size_t strlen", with no constexpr.  I suspect they are doing what I did here, just treating it as constexpr as a special function.  As mentioned, I didn't even see an implementation at all, so I think they're counting on the compiler replacing it with the built-in immediately anyway.



More information about the cfe-commits mailing list