[llvm-dev] 8.0 Regression with __builtin_constant_p.

Eric Fiselier via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 8 11:38:32 PST 2019


Hi All,

I know we're late in the release process, but I've discovered a regression
I believe is serious enough to hold the release [1].

The regression is in usages of `__builtin_constant_p` applied to a
dereferenced pointer in a constant expression. In certain cases Clang now
rejects this as a non-constant expression [2].

This regression will have a larger impact than it initially appears.

libstdc++ 7.1 and newer use `__builtin_constant_p` to implement C++17
`std::char_traits` [4]. This means that any usage of `std::string_view` in
a constant expression has the possibility to break. `__builtin_constant_p`
may be rare, but `std::string_view` is not.

This regression was first found because it breaks `absl::StrFormat` [4].
This bug will break Abseil's LTS w/ libstdc++. Abseil cannot fully work
around this bug.

I would implore us to fix this bug in the upcoming 8 release.

/Eric

[1] https://reviews.llvm.org/D59038
[2] https://godbolt.org/z/VOCCJF
[3] https://github.com/abseil/abseil-cpp/issues/271
[4]
https://github.com/gcc-mirror/gcc/blob/gcc-8_1_0-release/libstdc++-v3/include/bits/char_traits.h#L229
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190308/c26c3f4c/attachment.html>


More information about the llvm-dev mailing list