Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions ports/qtwebengine/0ce5e91.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
From 0ce5e91bdfa2cd7cac247911b9e8c4404c114937 Mon Sep 17 00:00:00 2001
From: Peter Varga <pvarga@inf.u-szeged.hu>
Date: Thu, 21 Apr 2022 08:49:53 +0200
Subject: [PATCH] Workaround MSVC2022 ICE in constexpr functions

It happens around initialization of STL containers in a constexpr
function. In this case, aggregate initialization of std::array with
double braces seems to cause the crash.

For some reason it doesn't seem to happen in 98-based. This workaround
can be reverted after Microsoft fixes the issue:
https://developercommunity.visualstudio.com/t/fatal-error-C1001:-Internal-compiler-err/1669485

Change-Id: I6bc2c71d328691cc74bc53c6d62f3d5df519b81e
Pick-to: 90-based
Fixes: QTBUG-101917
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
---

diff --git a/chromium/base/hash/md5_constexpr_internal.h b/chromium/base/hash/md5_constexpr_internal.h
index b705bc8..5c9c004 100644
--- a/chromium/base/hash/md5_constexpr_internal.h
+++ b/chromium/base/hash/md5_constexpr_internal.h
@@ -281,15 +281,63 @@
return IntermediateDataToMD5Digest(ProcessMessage(data, n));
}

- static constexpr uint64_t Hash64(const char* data, uint32_t n) {
- IntermediateData intermediate = ProcessMessage(data, n);
- return (static_cast<uint64_t>(SwapEndian(intermediate.a)) << 32) |
- static_cast<uint64_t>(SwapEndian(intermediate.b));
+ static constexpr uint64_t Hash64(const char* message, uint32_t n) {
+ const uint32_t m = GetPaddedMessageLength(n);
+ IntermediateData intermediate0 = kInitialIntermediateData;
+ for (uint32_t offset = 0; offset < m; offset += 64) {
+ RoundData data = {
+ GetPaddedMessageWord(message, n, m, offset),
+ GetPaddedMessageWord(message, n, m, offset + 4),
+ GetPaddedMessageWord(message, n, m, offset + 8),
+ GetPaddedMessageWord(message, n, m, offset + 12),
+ GetPaddedMessageWord(message, n, m, offset + 16),
+ GetPaddedMessageWord(message, n, m, offset + 20),
+ GetPaddedMessageWord(message, n, m, offset + 24),
+ GetPaddedMessageWord(message, n, m, offset + 28),
+ GetPaddedMessageWord(message, n, m, offset + 32),
+ GetPaddedMessageWord(message, n, m, offset + 36),
+ GetPaddedMessageWord(message, n, m, offset + 40),
+ GetPaddedMessageWord(message, n, m, offset + 44),
+ GetPaddedMessageWord(message, n, m, offset + 48),
+ GetPaddedMessageWord(message, n, m, offset + 52),
+ GetPaddedMessageWord(message, n, m, offset + 56),
+ GetPaddedMessageWord(message, n, m, offset + 60)};
+ IntermediateData intermediate1 = intermediate0;
+ for (uint32_t i = 0; i < 64; ++i)
+ intermediate1 = ApplyStep(i, data, intermediate1);
+ intermediate0 = Add(intermediate0, intermediate1);
+ }
+ return (static_cast<uint64_t>(SwapEndian(intermediate0.a)) << 32) |
+ static_cast<uint64_t>(SwapEndian(intermediate0.b));
}

- static constexpr uint32_t Hash32(const char* data, uint32_t n) {
- IntermediateData intermediate = ProcessMessage(data, n);
- return SwapEndian(intermediate.a);
+ static constexpr uint32_t Hash32(const char* message, uint32_t n) {
+ const uint32_t m = GetPaddedMessageLength(n);
+ IntermediateData intermediate0 = kInitialIntermediateData;
+ for (uint32_t offset = 0; offset < m; offset += 64) {
+ RoundData data = {
+ GetPaddedMessageWord(message, n, m, offset),
+ GetPaddedMessageWord(message, n, m, offset + 4),
+ GetPaddedMessageWord(message, n, m, offset + 8),
+ GetPaddedMessageWord(message, n, m, offset + 12),
+ GetPaddedMessageWord(message, n, m, offset + 16),
+ GetPaddedMessageWord(message, n, m, offset + 20),
+ GetPaddedMessageWord(message, n, m, offset + 24),
+ GetPaddedMessageWord(message, n, m, offset + 28),
+ GetPaddedMessageWord(message, n, m, offset + 32),
+ GetPaddedMessageWord(message, n, m, offset + 36),
+ GetPaddedMessageWord(message, n, m, offset + 40),
+ GetPaddedMessageWord(message, n, m, offset + 44),
+ GetPaddedMessageWord(message, n, m, offset + 48),
+ GetPaddedMessageWord(message, n, m, offset + 52),
+ GetPaddedMessageWord(message, n, m, offset + 56),
+ GetPaddedMessageWord(message, n, m, offset + 60)};
+ IntermediateData intermediate1 = intermediate0;
+ for (uint32_t i = 0; i < 64; ++i)
+ intermediate1 = ApplyStep(i, data, intermediate1);
+ intermediate0 = Add(intermediate0, intermediate1);
+ }
+ return SwapEndian(intermediate0.a);
}
};

17 changes: 14 additions & 3 deletions ports/qtwebengine/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -82,15 +82,26 @@ if(WIN32) # WIN32 HOST probably has win_flex and win_bison!
endif()
endif()

#set(CURRENT_BUILDTREES_DIR "${CURRENT_BUILDTREES_DIR}/../tmp") # avoid long path issues in CI.
#cmake_path(NORMAL_PATH CURRENT_BUILDTREES_DIR)
#file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}")
string(LENGTH "${CURRENT_BUILDTREES_DIR}" buildtree_length)
# We know that C:/buildrees/${PORT} is to long to build Release. Debug works however. Means 24 length is too much but 23 might work.
if(buildtree_length GREATER 22 AND VCPKG_TARGET_IS_WINDOWS)
message(WARNING "Buildtree path '${CURRENT_BUILDTREES_DIR}' is too long.\nConsider passing --x-buildtrees-root=<shortpath> to vcpkg!\nTrying to use '${CURRENT_BUILDTREES_DIR}/../tmp'")
set(CURRENT_BUILDTREES_DIR "${CURRENT_BUILDTREES_DIR}/../tmp") # activly avoid long path issues in CI. -> Means CI will not return logs
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BillyONeal Is there a clever way to make CI return these logs?
https://dev.azure.com/vcpkg/public/_build/results?buildId=71640&view=logs&jobId=7922e5c4-0103-5f8f-ad17-45ce9bb98e80&j=7922e5c4-0103-5f8f-ad17-45ce9bb98e80&t=491b9f02-7edc-5990-cda1-511e95a3768e was successful but the host build seems to fail sometimes in other triplets (at least in the latest CI) run other than x64-windows

cmake_path(NORMAL_PATH CURRENT_BUILDTREES_DIR)
string(LENGTH "${CURRENT_BUILDTREES_DIR}" buildtree_length_new)
if(buildtree_length_new GREATER 22)
message(FATAL_ERROR "Buildtree path is too long. Build will fail! Pass --x-buildtrees-root=<shortpath> to vcpkg!")
endif()
file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}")
endif()

### Download third_party modules
vcpkg_from_git(
OUT_SOURCE_PATH SOURCE_PATH_WEBENGINE
URL git://code.qt.io/qt/qtwebengine-chromium.git
REF "${${PORT}_chromium_REF}"
PATCHES
0ce5e91.diff
)

##### qt_install_submodule
Expand Down
1 change: 1 addition & 0 deletions ports/qtwebengine/vcpkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"$comment": "x86-windows is not within the upstream support matrix of Qt6",
"name": "qtwebengine",
"version": "6.3.0",
"port-version": 1,
"description": "Qt WebEngine",
"homepage": "https://www.qt.io/",
"license": null,
Expand Down
3 changes: 0 additions & 3 deletions scripts/ci.baseline.txt
Original file line number Diff line number Diff line change
Expand Up @@ -927,9 +927,6 @@ qpid-proton:x64-uwp=fail
qpid-proton:x64-windows-static=fail
qt5-base:arm64-windows=fail

# qtwebengine:x64-windows has an ICE in VS2022
qtwebengine:x64-windows=fail

# Skip deprecated Qt module
# (remove after 1 year or longer due to vcpkg upgrade not handling removed ports correctly)
qt5-canvas3d:x64-linux=skip
Expand Down
2 changes: 1 addition & 1 deletion versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -5998,7 +5998,7 @@
},
"qtwebengine": {
"baseline": "6.3.0",
"port-version": 0
"port-version": 1
},
"qtwebsockets": {
"baseline": "6.3.0",
Expand Down
5 changes: 5 additions & 0 deletions versions/q-/qtwebengine.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{
"versions": [
{
"git-tree": "6562d0a0294290afd20da039ff60602c1f3f4701",
"version": "6.3.0",
"port-version": 1
},
{
"git-tree": "47cd0b321b5eda832afbb46e58159ca3adb65ce9",
"version": "6.3.0",
Expand Down