FreeBSD Bugzilla – Attachment 253495 Details for
Bug 281431
www/qt5-webengine: fix build with clang and libc++ 19
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
www/qt5-webengine: fix build with clang and libc++ 19
www__qt5-webengine-fix-clang19-libcxx19-build-1.diff (text/plain), 18.04 KB, created by
Dimitry Andric
on 2024-09-11 07:14:00 UTC
(
hide
)
Description:
www/qt5-webengine: fix build with clang and libc++ 19
Filename:
MIME Type:
Creator:
Dimitry Andric
Created:
2024-09-11 07:14:00 UTC
Size:
18.04 KB
patch
obsolete
>commit aea7dd65888df65a38e6bbdcbdc72439db94d31c >Author: Dimitry Andric <dim@FreeBSD.org> >Date: 2024-09-11T09:12:57+02:00 > > www/qt5-webengine: fix build with clang and libc++ 19 > > As noted in the libc++ 19 release notes [1], std::char_traits<> is now > only provided for char, char8_t, char16_t, char32_t and wchar_t, and any > instantiation for other types will fail. > > This causes www/qt5-webengine to fail to compile with clang 19 and > libc++ 19, resulting in errors similar to: > > /usr/include/c++/v1/string:820:42: error: implicit instantiation of undefined template 'std::char_traits<unsigned short>' > 820 | static_assert(is_same<_CharT, typename traits_type::char_type>::value, > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.cc:390:26: note: in instantiation of template class 'std::basic_string<unsigned short>' requested here > 390 | std::basic_string<UChar> UTF8ToUTF16(const char* stringStart, size_t length) { > | ^ > /usr/include/c++/v1/__fwd/string.h:23:29: note: template is declared here > 23 | struct _LIBCPP_TEMPLATE_VIS char_traits; > | ^ > > Upstream v8 has fixed this in commit 182d9c05e78 [2], so add it as a > backported patch, until the next version of qt5-webengine is released. > > Also, clang 19 now implements CWG 96 [1], which requires a template > argument list after a 'template' keyword, resulting in errors similar > to: > > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/hash_table.h:1789:23: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 1789 | Allocator::template BackingWriteBarrier(&table_); > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/hash_table.h:1847:23: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 1847 | Allocator::template BackingWriteBarrier(&table_); > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/hash_table.h:2015:23: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 2015 | Allocator::template BackingWriteBarrier(&table_); > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/hash_table.h:2016:23: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 2016 | Allocator::template BackingWriteBarrier(&other.table_); > | ^ > > and: > > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/internal/track_event_data_source.h:110:20: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 110 | Base::template Trace([](typename Base::TraceContext ctx) { ctx.Flush(); }); > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/internal/track_event_data_source.h:124:20: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 124 | Base::template Trace([&](typename Base::TraceContext ctx) { > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/internal/track_event_data_source.h:431:20: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 431 | Base::template Trace([&](typename Base::TraceContext ctx) { > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/internal/track_event_data_source.h:548:22: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 548 | Base::template TraceWithInstances(instances, std::move(lambda)); > | ^ > ../../../../kde-qtwebengine-5.15.17p3/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/internal/track_event_data_source.h:563:20: error: a template argument list is expected after a name prefixed by the template keyword [-Wmissing-template-arg-list-after-template-kw] > 563 | Base::template Trace([&](typename Base::TraceContext ctx) { > | ^ > > In case of wtf, appending "<>" is enough to satisfy the constraint. For > perfetto, this was fixed by upstream commit e2f661907a [3]. > > [1] https://libcxx.llvm.org/ReleaseNotes/19.html#deprecations-and-removals > [2] https://chromium.googlesource.com/v8/v8.git/+/182d9c05e78 > [3] https://android.googlesource.com/platform/external/perfetto/+/e2f661907a > > PR: 281431 > MFH: 2024Q3 > >diff --git a/www/qt5-webengine/files/patch-libc++19 b/www/qt5-webengine/files/patch-libc++19 >new file mode 100644 >index 000000000000..058ec396cc4e >--- /dev/null >+++ b/www/qt5-webengine/files/patch-libc++19 >@@ -0,0 +1,176 @@ >+Obtained from: https://chromium.googlesource.com/v8/v8.git/+/182d9c05e78b1ddb1cb8242cd3628a7855a0336f >+ >+commit 182d9c05e78b1ddb1cb8242cd3628a7855a0336f >+Author: Andrey Kosyakov <caseq@chromium.org> >+Date: 2023-08-17T13:50:11-07:00 >+ >+ Define UChar as char16_t >+ >+ We used to have UChar defined as uint16_t which does not go along >+ with STL these days if you try to have an std::basic_string<> of it, >+ as there are no standard std::char_traits<> specialization for uint16_t. >+ >+ This switches UChar to char16_t where practical, introducing a few >+ compatibility shims to keep CL size small, as (1) this would likely >+ have to be back-ported and (2) crdtp extensively uses uint16_t for >+ wide chars. >+ >+ Bug: b:296390693 >+ Change-Id: I66a32d8f0050915225b187de56896c26dd76163d >+ Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4789966 >+ Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> >+ Commit-Queue: Jaroslav Sevcik <jarin@chromium.org> >+ Auto-Submit: Andrey Kosyakov <caseq@chromium.org> >+ Cr-Commit-Position: refs/heads/main@{#89559} >+ >+--- src/3rdparty/chromium/v8/src/inspector/string-16.cc.orig 2024-08-13 14:59:47 UTC >++++ src/3rdparty/chromium/v8/src/inspector/string-16.cc >+@@ -27,7 +27,7 @@ bool isSpaceOrNewLine(UChar c) { >+ return isASCII(c) && c <= ' ' && (c == ' ' || (c <= 0xD && c >= 0x9)); >+ } >+ >+-int64_t charactersToInteger(const UChar* characters, size_t length, >++int64_t charactersToInteger(const uint16_t* characters, size_t length, >+ bool* ok = nullptr) { >+ std::vector<char> buffer; >+ buffer.reserve(length + 1); >+@@ -50,6 +50,8 @@ String16::String16(const UChar* characters, size_t siz >+ >+ String16::String16(const UChar* characters, size_t size) >+ : m_impl(characters, size) {} >++String16::String16(const uint16_t* characters, size_t size) >++ : m_impl(reinterpret_cast<const UChar*>(characters), size) {} >+ >+ String16::String16(const UChar* characters) : m_impl(characters) {} >+ >+@@ -231,6 +233,10 @@ String16 String16::fromUTF16LE(const UChar* stringStar >+ // No need to do anything on little endian machines. >+ return String16(stringStart, length); >+ #endif // V8_TARGET_BIG_ENDIAN >++} >++ >++String16 String16::fromUTF16LE(const uint16_t* stringStart, size_t length) { >++ return fromUTF16LE(reinterpret_cast<const UChar*>(stringStart), length); >+ } >+ >+ std::string String16::utf8() const { >+--- src/3rdparty/chromium/v8/src/inspector/string-16.h.orig 2024-08-13 14:59:47 UTC >++++ src/3rdparty/chromium/v8/src/inspector/string-16.h >+@@ -6,6 +6,8 @@ >+ #define V8_INSPECTOR_STRING_16_H_ >+ >+ #include <stdint.h> >++#include <uchar.h> >++ >+ #include <cctype> >+ #include <climits> >+ #include <cstring> >+@@ -17,7 +19,7 @@ namespace v8_inspector { >+ >+ namespace v8_inspector { >+ >+-using UChar = uint16_t; >++using UChar = char16_t; >+ >+ class String16 { >+ public: >+@@ -27,6 +29,7 @@ class String16 { >+ String16(const String16&) V8_NOEXCEPT = default; >+ String16(String16&&) V8_NOEXCEPT = default; >+ String16(const UChar* characters, size_t size); >++ String16(const uint16_t* characters, size_t size); >+ V8_EXPORT String16(const UChar* characters); // NOLINT(runtime/explicit) >+ V8_EXPORT String16(const char* characters); // NOLINT(runtime/explicit) >+ String16(const char* characters, size_t size); >+@@ -45,7 +48,9 @@ class String16 { >+ int64_t toInteger64(bool* ok = nullptr) const; >+ int toInteger(bool* ok = nullptr) const; >+ String16 stripWhiteSpace() const; >+- const UChar* characters16() const { return m_impl.c_str(); } >++ const uint16_t* characters16() const { >++ return reinterpret_cast<const uint16_t*>(m_impl.c_str()); >++ } >+ size_t length() const { return m_impl.length(); } >+ bool isEmpty() const { return !m_impl.length(); } >+ UChar operator[](size_t index) const { return m_impl[index]; } >+@@ -74,6 +79,8 @@ class String16 { >+ // Instantiates a String16 in native endianness from UTF16 LE. >+ // On Big endian architectures, byte order needs to be flipped. >+ V8_EXPORT static String16 fromUTF16LE(const UChar* stringStart, >++ size_t length); >++ V8_EXPORT static String16 fromUTF16LE(const uint16_t* stringStart, >+ size_t length); >+ >+ std::size_t hash() const { >+--- src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.cc.orig 2024-08-13 14:59:47 UTC >++++ src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.cc >+@@ -12,7 +12,7 @@ namespace { >+ >+ namespace v8_inspector { >+ namespace { >+-using UChar = uint16_t; >++using UChar = char16_t; >+ using UChar32 = uint32_t; >+ >+ bool isASCII(UChar c) { return !(c & ~0x7F); } >+@@ -389,7 +389,7 @@ std::basic_string<UChar> UTF8ToUTF16(const char* strin >+ >+ std::basic_string<UChar> UTF8ToUTF16(const char* stringStart, size_t length) { >+ if (!stringStart || !length) return std::basic_string<UChar>(); >+- std::vector<uint16_t> buffer(length); >++ std::vector<UChar> buffer(length); >+ UChar* bufferStart = buffer.data(); >+ >+ UChar* bufferCurrent = bufferStart; >+@@ -398,7 +398,7 @@ std::basic_string<UChar> UTF8ToUTF16(const char* strin >+ reinterpret_cast<const char*>(stringStart + length), >+ &bufferCurrent, bufferCurrent + buffer.size(), nullptr, >+ true) != conversionOK) >+- return std::basic_string<uint16_t>(); >++ return std::basic_string<UChar>(); >+ size_t utf16Length = bufferCurrent - bufferStart; >+ return std::basic_string<UChar>(bufferStart, bufferStart + utf16Length); >+ } >+--- src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h.orig 2024-08-13 14:59:47 UTC >++++ src/3rdparty/chromium/v8/src/inspector/v8-string-conversions.h >+@@ -5,14 +5,16 @@ >+ #ifndef V8_INSPECTOR_V8_STRING_CONVERSIONS_H_ >+ #define V8_INSPECTOR_V8_STRING_CONVERSIONS_H_ >+ >++#include <uchar.h> >++ >+ #include <cstdint> >+ #include <string> >+ >+ // Conversion routines between UT8 and UTF16, used by string-16.{h,cc}. You may >+ // want to use string-16.h directly rather than these. >+ namespace v8_inspector { >+-std::basic_string<uint16_t> UTF8ToUTF16(const char* stringStart, size_t length); >+-std::string UTF16ToUTF8(const uint16_t* stringStart, size_t length); >++std::basic_string<char16_t> UTF8ToUTF16(const char* stringStart, size_t length); >++std::string UTF16ToUTF8(const char16_t* stringStart, size_t length); >+ } // namespace v8_inspector >+ >+ #endif // V8_INSPECTOR_V8_STRING_CONVERSIONS_H_ >+--- src/3rdparty/chromium/v8/third_party/inspector_protocol/crdtp/test_platform_v8.cc.orig 2024-08-13 14:59:47 UTC >++++ src/3rdparty/chromium/v8/third_party/inspector_protocol/crdtp/test_platform_v8.cc >+@@ -11,13 +11,16 @@ std::string UTF16ToUTF8(span<uint16_t> in) { >+ namespace v8_crdtp { >+ >+ std::string UTF16ToUTF8(span<uint16_t> in) { >+- return v8_inspector::UTF16ToUTF8(in.data(), in.size()); >++ return v8_inspector::UTF16ToUTF8(reinterpret_cast<const char16_t*>(in.data()), >++ in.size()); >+ } >+ >+ std::vector<uint16_t> UTF8ToUTF16(span<uint8_t> in) { >+- std::basic_string<uint16_t> utf16 = v8_inspector::UTF8ToUTF16( >++ std::basic_string<char16_t> utf16 = v8_inspector::UTF8ToUTF16( >+ reinterpret_cast<const char*>(in.data()), in.size()); >+- return std::vector<uint16_t>(utf16.begin(), utf16.end()); >++ return std::vector<uint16_t>( >++ reinterpret_cast<const uint16_t*>(utf16.data()), >++ reinterpret_cast<const uint16_t*>(utf16.data()) + utf16.size()); >+ } >+ >+ } // namespace v8_crdtp >diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_wtf_hash__table.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_wtf_hash__table.h >new file mode 100644 >index 000000000000..7a6e6b8ef618 >--- /dev/null >+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_blink_renderer_platform_wtf_hash__table.h >@@ -0,0 +1,31 @@ >+--- src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/hash_table.h.orig 2024-08-13 14:59:47 UTC >++++ src/3rdparty/chromium/third_party/blink/renderer/platform/wtf/hash_table.h >+@@ -1786,7 +1786,7 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits >+ } >+ } >+ table_ = temporary_table; >+- Allocator::template BackingWriteBarrier(&table_); >++ Allocator::template BackingWriteBarrier<>(&table_); >+ >+ if (Traits::kEmptyValueIsZero) { >+ memset(original_table, 0, new_table_size * sizeof(ValueType)); >+@@ -1844,7 +1844,7 @@ HashTable<Key, Value, Extractor, HashFunctions, Traits >+ // This swaps the newly allocated buffer with the current one. The store to >+ // the current table has to be atomic to prevent races with concurrent marker. >+ AsAtomicPtr(&table_)->store(new_hash_table.table_, std::memory_order_relaxed); >+- Allocator::template BackingWriteBarrier(&table_); >++ Allocator::template BackingWriteBarrier<>(&table_); >+ table_size_ = new_table_size; >+ >+ new_hash_table.table_ = old_table; >+@@ -2012,8 +2012,8 @@ void HashTable<Key, >+ // on the mutator thread, which is also the only one that writes to them, so >+ // there is *no* risk of data races when reading. >+ AtomicWriteSwap(table_, other.table_); >+- Allocator::template BackingWriteBarrier(&table_); >+- Allocator::template BackingWriteBarrier(&other.table_); >++ Allocator::template BackingWriteBarrier<>(&table_); >++ Allocator::template BackingWriteBarrier<>(&other.table_); >+ if (IsWeak<ValueType>::value) { >+ // Weak processing is omitted when no backing store is present. In case such >+ // an empty table is later on used it needs to be strongified. >diff --git a/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_tracing_internal_track__event__data__source.h b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_tracing_internal_track__event__data__source.h >new file mode 100644 >index 000000000000..47ae763823e6 >--- /dev/null >+++ b/www/qt5-webengine/files/patch-src_3rdparty_chromium_third__party_perfetto_include_perfetto_tracing_internal_track__event__data__source.h >@@ -0,0 +1,47 @@ >+--- src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/internal/track_event_data_source.h.orig 2024-08-13 14:59:47 UTC >++++ src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/internal/track_event_data_source.h >+@@ -107,7 +107,7 @@ class TrackEventDataSource >+ } >+ >+ static void Flush() { >+- Base::template Trace([](typename Base::TraceContext ctx) { ctx.Flush(); }); >++ Base::Trace([](typename Base::TraceContext ctx) { ctx.Flush(); }); >+ } >+ >+ // Determine if tracing for the given static category is enabled. >+@@ -121,7 +121,7 @@ class TrackEventDataSource >+ static bool IsDynamicCategoryEnabled( >+ const DynamicCategory& dynamic_category) { >+ bool enabled = false; >+- Base::template Trace([&](typename Base::TraceContext ctx) { >++ Base::Trace([&](typename Base::TraceContext ctx) { >+ enabled = IsDynamicCategoryEnabled(&ctx, dynamic_category); >+ }); >+ return enabled; >+@@ -428,7 +428,7 @@ class TrackEventDataSource >+ const protos::gen::TrackDescriptor& desc) { >+ PERFETTO_DCHECK(track.uuid == desc.uuid()); >+ TrackRegistry::Get()->UpdateTrack(track, desc.SerializeAsString()); >+- Base::template Trace([&](typename Base::TraceContext ctx) { >++ Base::Trace([&](typename Base::TraceContext ctx) { >+ TrackEventInternal::WriteTrackDescriptor( >+ track, ctx.tls_inst_->trace_writer.get()); >+ }); >+@@ -545,7 +545,7 @@ class TrackEventDataSource >+ static void TraceWithInstances(uint32_t instances, >+ Lambda lambda) PERFETTO_ALWAYS_INLINE { >+ if (CategoryIndex == TrackEventCategoryRegistry::kDynamicCategoryIndex) { >+- Base::template TraceWithInstances(instances, std::move(lambda)); >++ Base::TraceWithInstances(instances, std::move(lambda)); >+ } else { >+ Base::template TraceWithInstances< >+ CategoryTracePointTraits<CategoryIndex>>(instances, >+@@ -560,7 +560,7 @@ class TrackEventDataSource >+ const TrackType& track, >+ std::function<void(protos::pbzero::TrackDescriptor*)> callback) { >+ TrackRegistry::Get()->UpdateTrack(track, std::move(callback)); >+- Base::template Trace([&](typename Base::TraceContext ctx) { >++ Base::Trace([&](typename Base::TraceContext ctx) { >+ TrackEventInternal::WriteTrackDescriptor( >+ track, ctx.tls_inst_->trace_writer.get()); >+ });
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 281431
: 253495