WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
236036
[GLIB] Unreviewed debug buildfix after
r288872
https://bugs.webkit.org/show_bug.cgi?id=236036
Summary
[GLIB] Unreviewed debug buildfix after r288872
Lauro Moura
Reported
2022-02-02 12:44:28 PST
[GLIB] Unreviewed debug buildfix after
r288872
Attachments
[fast-cq] Patch
(1.39 KB, patch)
2022-02-02 12:45 PST
,
Lauro Moura
no flags
Details
Formatted Diff
Diff
[fast-cq] Actual fix
(2.63 KB, patch)
2022-02-02 14:42 PST
,
Lauro Moura
no flags
Details
Formatted Diff
Diff
Show Obsolete
(1)
View All
Add attachment
proposed patch, testcase, etc.
Lauro Moura
Comment 1
2022-02-02 12:45:40 PST
Created
attachment 450689
[details]
[fast-cq] Patch
EWS
Comment 2
2022-02-02 12:55:28 PST
Committed
r288990
(
246709@main
): <
https://commits.webkit.org/246709@main
> All reviewed patches have been landed. Closing bug and clearing flags on
attachment 450689
[details]
.
Darin Adler
Comment 3
2022-02-02 12:57:20 PST
Comment on
attachment 450689
[details]
[fast-cq] Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=450689&action=review
> Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp:707 > - static constexpr SortedArrayMap roleNamesMap { roleNames }; > + static const SortedArrayMap roleNamesMap { roleNames };
This change looks like a bad idea. Could you explain why it wasn’t compiling?
Lauro Moura
Comment 4
2022-02-02 13:14:31 PST
(In reply to Darin Adler from
comment #3
)
> Comment on
attachment 450689
[details]
> [fast-cq] Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=450689&action=review
> > > Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp:707 > > - static constexpr SortedArrayMap roleNamesMap { roleNames }; > > + static const SortedArrayMap roleNamesMap { roleNames }; > > This change looks like a bad idea. Could you explain why it wasn’t compiling?
This was the first bug that failed:
https://build.webkit.org/#/builders/66/builds/7404
/app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/SortedArrayMap.h: In static member function ‘static const char* WebCore::AccessibilityAtspi::localizedRoleName(WebCore::AccessibilityRole)’: /app/webkit/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp:705:62: in ‘constexpr’ expansion of ‘WTF::SortedArrayMap<std::pair<WebCore::AccessibilityRole, WebCore::RoleNameEntry> [122]>(WebCore::roleNames)’ /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/Assertions.h:364:34: error: call to non-‘constexpr’ function ‘void WTFReportAssertionFailure(const char*, int, const char*, const char*)’ 364 | WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/SortedArrayMap.h:151:5: note: in expansion of macro ‘ASSERT_UNDER_CONSTEXPR_CONTEXT’ 151 | ASSERT_UNDER_CONSTEXPR_CONTEXT(isSortedConstExpr(std::begin(array), std::end(array), [] (auto& a, auto b) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/Assertions.h:212:25: note: ‘void WTFReportAssertionFailure(const char*, int, const char*, const char*)’ declared here 212 | WTF_EXPORT_PRIVATE void WTFReportAssertionFailure(const char* file, int line, const char* function, const char* assertion); | ^~~~~~~~~~~~~~~~~~~~~~~~~
Lauro Moura
Comment 5
2022-02-02 13:18:18 PST
And the clang error: In file included from /app/webkit/WebKitBuild/Debug/WebCore/DerivedSources/unified-sources/UnifiedSource-aba958d6-7.cpp:4: /app/webkit/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp:707:37: error: constexpr variable 'roleNamesMap' must be initialized by a constant expression static constexpr SortedArrayMap roleNamesMap { roleNames }; ^~~~~~~~~~~~~~~~~~~~~~~~~~ /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/SortedArrayMap.h:151:5: note: non-constexpr function 'WTFReportAssertionFailure' cannot be used in a constant expression ASSERT_UNDER_CONSTEXPR_CONTEXT(isSortedConstExpr(std::begin(array), std::end(array), [] (auto& a, auto b) { ^ /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/Assertions.h:364:9: note: expanded from macro 'ASSERT_UNDER_CONSTEXPR_CONTEXT' WTFReportAssertionFailure(__FILE__, __LINE__, WTF_PRETTY_FUNCTION, #assertion); \ ^ /app/webkit/Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp:707:37: note: in call to 'SortedArrayMap(roleNames)' static constexpr SortedArrayMap roleNamesMap { roleNames }; ^ /app/webkit/WebKitBuild/Debug/WTF/Headers/wtf/Assertions.h:212:25: note: declared here WTF_EXPORT_PRIVATE void WTFReportAssertionFailure(const char* file, int line, const char* function, const char* assertion); ^
Darin Adler
Comment 6
2022-02-02 13:20:31 PST
So ASSERT_UNDER_CONSTEXPR_CONTEXT is not working on this platform. It’s not working under constexpr context. We need to fix that. Not by changing this line of code, but but fixing the implementation of ASSERT_UNDER_CONSTEXPR_CONTEXT in the Assertions.h header. It’s working on newer versions of clang. We can’t keep dumbing down the rest of our code; even if we turned off those assertions entirely that would be better than un-constexpr'ing code whenever we run into this problem.
Darin Adler
Comment 7
2022-02-02 13:22:21 PST
The fix might be to change "if" into "if constexpr". But whatever the fix is, the fix has to be a fix to make ASSERT_UNDER_CONSTEXPR_CONTEXT work.
Lauro Moura
Comment 8
2022-02-02 14:05:36 PST
It seems the failure happened because the array being passed to SortedArrayMap wasn't fully ordered, failing the isSortedConstExpr and thus generating the call to WTFReportAssertionFailure and the non-constexpr error. Example of a similar behavior:
https://godbolt.org/z/6hzshsvdE
In this specific case (build error), fixing the array order makes the build pass. I'll reopen and submit an updated patch reverting the original one. But indeed ASSERT_UNDER_CONSTEXPR_CONTEXT could provide a more meaningful error message in this config.
Darin Adler
Comment 9
2022-02-02 14:09:14 PST
(In reply to Lauro Moura from
comment #8
)
> It seems the failure happened because the array being passed to > SortedArrayMap wasn't fully ordered, failing the isSortedConstExpr and thus > generating the call to WTFReportAssertionFailure and the non-constexpr error.
That makes total sense, great detective work! We have to fix that because it literally might not find some of the items in the map if it’s not sorted. So we definitely need to roll this out. That also means that the assertion will be hit at runtime after patching constexpr to be const.
> But indeed ASSERT_UNDER_CONSTEXPR_CONTEXT could provide a more meaningful > error message in this config.
I don’t know if that is practical. But we could at least name the WTFReportAssertionFailure function, or a function that is called here, with a clue about what the real problem might be (the assertion failed at compile time!).
Darin Adler
Comment 10
2022-02-02 14:10:03 PST
(In reply to Darin Adler from
comment #9
)
> So we definitely need to roll this out.
Revert this constexpr->const change, I meant.
Lauro Moura
Comment 11
2022-02-02 14:42:32 PST
Created
attachment 450698
[details]
[fast-cq] Actual fix
Adrian Perez
Comment 12
2022-02-02 14:57:43 PST
Nice found, and really cool that the compile-time assertion can signal that the input is not pre-sorted 🤯️
EWS
Comment 13
2022-02-02 16:49:44 PST
Committed
r289016
(
246725@main
): <
https://commits.webkit.org/246725@main
> All reviewed patches have been landed. Closing bug and clearing flags on
attachment 450698
[details]
.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug