Skip to content

Commit 8c54004

Browse files
authored
Merge pull request #1607 from justinmichaud/eng/wpe-backports-1
WTF build fixes
2 parents 70d07ca + 542c293 commit 8c54004

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

Source/WTF/wtf/EnumTraits.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,16 @@ constexpr bool isZeroBasedContiguousEnum()
161161
#pragma clang diagnostic ignored "-Wenum-constexpr-conversion"
162162
#endif
163163

164+
#if COMPILER(CLANG) && __clang_major__ >= 16
165+
template <typename E, auto V, typename = void>
166+
inline constexpr bool isEnumConstexprStaticCastValid = false;
167+
template <typename E, auto V>
168+
inline constexpr bool isEnumConstexprStaticCastValid<E, V, std::void_t<std::integral_constant<E, static_cast<E>(V)>>> = true;
169+
#else
170+
template <typename, auto>
171+
inline constexpr bool isEnumConstexprStaticCastValid = true;
172+
#endif
173+
164174
template<typename E>
165175
constexpr std::span<const char> enumTypeNameImpl()
166176
{
@@ -224,6 +234,15 @@ constexpr std::span<const char> enumName()
224234
return result;
225235
}
226236

237+
template<typename E, auto V>
238+
constexpr std::span<const char> enumName()
239+
{
240+
if constexpr (isEnumConstexprStaticCastValid<E, V>)
241+
return enumName<static_cast<E>(V)>();
242+
else
243+
return { };
244+
}
245+
227246
namespace detail {
228247

229248
template<size_t i, size_t end>
@@ -243,7 +262,7 @@ constexpr std::array<std::span<const char>, limit> enumNames()
243262
std::array<std::span<const char>, limit> names;
244263

245264
detail::forConstexpr<0, limit>([&] (auto i) {
246-
names[i] = enumName<static_cast<E>(static_cast<unsigned>(i))>();
265+
names[i] = enumName<E, std::underlying_type_t<E>(static_cast<unsigned>(i))>();
247266
});
248267
return names;
249268
}

Source/WTF/wtf/dtoa.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ WTF_EXPORT_PRIVATE const char* numberToStringWithTrailingPoint(double, NumberToS
4646
WTF_EXPORT_PRIVATE const char* numberToFixedPrecisionString(double, unsigned significantFigures, NumberToStringBuffer&, bool truncateTrailingZeros = false);
4747
WTF_EXPORT_PRIVATE const char* numberToFixedWidthString(double, unsigned decimalPlaces, NumberToStringBuffer&);
4848

49-
WTF_EXPORT_PRIVATE NumberToStringSpan numberToStringAndSize(float, NumberToStringBuffer& LIFETIME_BOUND);
50-
WTF_EXPORT_PRIVATE NumberToStringSpan numberToStringAndSize(double, NumberToStringBuffer& LIFETIME_BOUND);
49+
WTF_EXPORT_PRIVATE NumberToStringSpan numberToStringAndSize(float, NumberToStringBuffer& buffer LIFETIME_BOUND);
50+
WTF_EXPORT_PRIVATE NumberToStringSpan numberToStringAndSize(double, NumberToStringBuffer& buffer LIFETIME_BOUND);
5151

5252
// Fixed width with up to 6 decimal places, trailing zeros truncated.
5353
WTF_EXPORT_PRIVATE const char* numberToCSSString(double, NumberToCSSStringBuffer&);

0 commit comments

Comments
 (0)