Created attachment 872214 [details] build log In a stricter lto environment, trying to emerge net-libs/webkit-gtk-2.40.5-r410 will generate the following errors: ``` XPathGrammar.y:72: error: type ‘union YYSTYPE’ violates the C++ One Definition Rule [-Werror=odr] /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab_autogen.h:253: note: a different type is defined in another translation unit 253 | union YYSTYPE | XPathGrammar.y:58: note: the first difference of corresponding definitions is field ‘numericOpcode’ /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab_autogen.h:267: note: a field with different name is defined in another translation unit 267 | } lex; | XPathGrammar.cpp:366: error: type ‘union yyalloc’ violates the C++ One Definition Rule [-Werror=odr] /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab_autogen.cpp:742: note: a different type is defined in another translation unit 742 | union yyalloc | XPathGrammar.cpp:368: note: the first difference of corresponding definitions is field ‘yyss’ /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab_autogen.cpp:744: note: a field with different name is defined in another translation unit 744 | yy_state_t yyss_alloc; | glslang.l:1005: error: type ‘struct yyguts_t’ violates the C++ One Definition Rule [-Werror=odr] preprocessor.l:777: note: a different type is defined in another translation unit glslang.l:1009: note: the first difference of corresponding definitions is field ‘yyextra_r’ preprocessor.l:781: note: a field of same name but different type is defined in another translation unit /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/translator/ParseContext.h:33: note: type name ‘sh::TParseContext’ should match type name ‘angle::pp::Tokenizer::Context’ 33 | class TParseContext : angle::NonCopyable | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/preprocessor/Tokenizer.h:25: note: the incompatible type is defined here 25 | struct Context | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/xml/XPathParser.h:45: error: ‘lex’ violates the C++ One Definition Rule [-Werror=odr] 45 | int lex(YYSTYPE&); | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/xml/XPathParser.cpp:404: note: type mismatch in parameter 1 404 | int Parser::lex(YYSTYPE& yylval) | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/xml/XPathParser.cpp:404: note: ‘lex’ was previously declared here /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebKit/UIProcess/API/glib/WebKitWebsitePoliciesPrivate.h:26: error: ‘webkitWebsitePoliciesGetWebsitePolicies’ violates the C++ One Definition Rule [-Werror=odr] 26 | API::WebsitePolicies* webkitWebsitePoliciesGetWebsitePolicies(WebKitWebsitePolicies*); | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebKit/UIProcess/API/glib/WebKitWebsitePolicies.cpp:61: note: return value type mismatch 61 | API::WebsitePolicies& webkitWebsitePoliciesGetWebsitePolicies(WebKitWebsitePolicies* policies) | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebKit/UIProcess/API/glib/WebKitWebsitePolicies.cpp:61: note: ‘webkitWebsitePoliciesGetWebsitePolicies’ was previously declared here /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab_autogen.cpp:132: error: type ‘yysymbol_kind_t’ violates the C++ One Definition Rule [-Werror=odr] 132 | enum yysymbol_kind_t | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/preprocessor/preprocessor_tab_autogen.cpp:226: note: an enum with different value name is defined in another translation unit 226 | enum yysymbol_kind_t | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/translator/glslang_tab_autogen.cpp:138: note: name ‘YYSYMBOL_INVARIANT’ differs from name ‘YYSYMBOL_TOK_CONST_INT’ defined in another translation unit 138 | YYSYMBOL_INVARIANT = 3, /* INVARIANT */ | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/ThirdParty/ANGLE/src/compiler/preprocessor/preprocessor_tab_autogen.cpp:232: note: mismatching definition 232 | YYSYMBOL_TOK_CONST_INT = 3, /* TOK_CONST_INT */ | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/xml/XMLHttpRequest.h:55: error: virtual table of type ‘struct XMLHttpRequest’ violates one definition rule [-Werror=odr] 55 | class XMLHttpRequest final : public ActiveDOMObject, public RefCounted<XMLHttpRequest>, private ThreadableLoaderClient, public XMLHttpRequestEventTarget { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSXMLHttpRequest.cpp:816: note: variable of same assembler name as the virtual table is defined in another translation unit 816 | extern "C" { extern void* _ZTVN7WebCore14XMLHttpRequestE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/xml/XMLHttpRequestUpload.h:35: error: virtual table of type ‘struct XMLHttpRequestUpload’ violates one definition rule [-Werror=odr] 35 | class XMLHttpRequestUpload final : public XMLHttpRequestEventTarget { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSXMLHttpRequestUpload.cpp:199: note: variable of same assembler name as the virtual table is defined in another translation unit 199 | extern "C" { extern void* _ZTVN7WebCore20XMLHttpRequestUploadE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/shared/SharedWorker.h:42: error: virtual table of type ‘struct SharedWorker’ violates one definition rule [-Werror=odr] 42 | class SharedWorker final : public AbstractWorker, public ActiveDOMObject { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSSharedWorker.cpp:292: note: variable of same assembler name as the virtual table is defined in another translation unit 292 | extern "C" { extern void* _ZTVN7WebCore12SharedWorkerE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/service/ServiceWorkerRegistration.h:54: error: virtual table of type ‘struct ServiceWorkerRegistration’ violates one definition rule [-Werror=odr] 54 | class ServiceWorkerRegistration final : public RefCounted<ServiceWorkerRegistration>, public Supplementable<ServiceWorkerRegistration>, public EventTarget, public ActiveDOMObject { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSServiceWorkerRegistration.cpp:552: note: variable of same assembler name as the virtual table is defined in another translation unit 552 | extern "C" { extern void* _ZTVN7WebCore25ServiceWorkerRegistrationE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/service/ServiceWorker.h:50: error: virtual table of type ‘struct ServiceWorker’ violates one definition rule [-Werror=odr] 50 | class ServiceWorker final : public RefCounted<ServiceWorker>, public EventTarget, public ActiveDOMObject { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSServiceWorker.cpp:433: note: variable of same assembler name as the virtual table is defined in another translation unit 433 | extern "C" { extern void* _ZTVN7WebCore13ServiceWorkerE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/service/ServiceWorkerContainer.h:56: error: virtual table of type ‘struct ServiceWorkerContainer’ violates one definition rule [-Werror=odr] 56 | class ServiceWorkerContainer final : public EventTarget, public ActiveDOMObject, public ServiceWorkerJobClient { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSServiceWorkerContainer.cpp:484: note: variable of same assembler name as the virtual table is defined in another translation unit 484 | extern "C" { extern void* _ZTVN7WebCore22ServiceWorkerContainerE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/service/ExtendableMessageEvent.h:50: error: virtual table of type ‘struct ExtendableMessageEvent’ violates one definition rule [-Werror=odr] 50 | class ExtendableMessageEvent final : public ExtendableEvent { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSExtendableMessageEvent.cpp:400: note: variable of same assembler name as the virtual table is defined in another translation unit 400 | extern "C" { extern void* _ZTVN7WebCore22ExtendableMessageEventE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/service/FetchEvent.h:48: error: virtual table of type ‘struct FetchEvent’ violates one definition rule [-Werror=odr] 48 | class FetchEvent final : public ExtendableEvent { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSFetchEvent.cpp:459: note: variable of same assembler name as the virtual table is defined in another translation unit 459 | extern "C" { extern void* _ZTVN7WebCore10FetchEventE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/service/ExtendableEvent.h:38: error: virtual table of type ‘struct ExtendableEvent’ violates one definition rule [-Werror=odr] 38 | class ExtendableEvent : public Event, public CanMakeWeakPtr<ExtendableEvent> { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSExtendableEvent.cpp:247: note: variable of same assembler name as the virtual table is defined in another translation unit 247 | extern "C" { extern void* _ZTVN7WebCore15ExtendableEventE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/workers/Worker.h:59: error: virtual table of type ‘struct Worker’ violates one definition rule [-Werror=odr] 59 | class Worker final : public AbstractWorker, public ActiveDOMObject, private WorkerScriptLoaderClient { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSWorker.cpp:426: note: variable of same assembler name as the virtual table is defined in another translation unit 426 | extern "C" { extern void* _ZTVN7WebCore6WorkerE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/svg/SVGTransformList.h:31: error: virtual table of type ‘struct SVGTransformList’ violates one definition rule [-Werror=odr] 31 | class SVGTransformList final : public SVGValuePropertyList<SVGTransform> { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSSVGTransformList.cpp:548: note: variable of same assembler name as the virtual table is defined in another translation unit 548 | extern "C" { extern void* _ZTVN7WebCore16SVGTransformListE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/svg/SVGStringList.h:34: error: virtual table of type ‘struct SVGStringList’ violates one definition rule [-Werror=odr] 34 | class SVGStringList final : public SVGPrimitiveList<String> { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSSVGStringList.cpp:507: note: variable of same assembler name as the virtual table is defined in another translation unit 507 | extern "C" { extern void* _ZTVN7WebCore13SVGStringListE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/svg/SVGPointList.h:33: error: virtual table of type ‘struct SVGPointList’ violates one definition rule [-Werror=odr] 33 | class SVGPointList final : public SVGValuePropertyList<SVGPoint> { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSSVGPointList.cpp:509: note: variable of same assembler name as the virtual table is defined in another translation unit 509 | extern "C" { extern void* _ZTVN7WebCore12SVGPointListE[]; } | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5/Source/WebCore/svg/SVGNumberList.h:33: error: virtual table of type ‘struct SVGNumberList’ violates one definition rule [-Werror=odr] 33 | class SVGNumberList final : public SVGValuePropertyList<SVGNumber> { | /var/tmp/portage/net-libs/webkit-gtk-2.40.5-r410/work/webkitgtk-2.40.5_build/WebCore/DerivedSources/JSSVGNumberList.cpp:509: note: variable of same assembler name as the virtual table is defined in another translation unit 509 | extern "C" { extern void* _ZTVN7WebCore13SVGNumberListE[]; } | compilation terminated due to -fmax-errors=20. lto-wrapper: fatal error: /usr/bin/x86_64-pc-linux-gnu-g++ returned 1 exit status compilation terminated. /usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. ``` Attaching logs.
Created attachment 872215 [details] emerge --info
2.42 seems to compile fine with at least ThinLTO, but exhibits crashes at runtime for usage within evolution. But when it doesn't crash outside evolution, it renders at wrong scale, so it might be triggered by that for me specifically. Without LTO the crashes don't happen anymore, but the wrong scale (outside evolution) remains. Though that might be related to simpledrm framebuffer with llvmpipe, no proper graphics (e.g. screencast portal says my 27" monitor is 46" too) Do you have trouble with 2.42.1 as well with LTO or in general? We need to stabilize 2.42 very soon for security issues anyhow, independent of any webkit-gtk consumers, so it'd be a good additional tests if you're otherwise on stable.
(In reply to Mart Raudsepp from comment #2) > 2.42 seems to compile fine with at least ThinLTO, but exhibits crashes at > runtime for usage within evolution. But when it doesn't crash outside > evolution, it renders at wrong scale, so it might be triggered by that for > me specifically. Without LTO the crashes don't happen anymore, but the wrong > scale (outside evolution) remains. Though that might be related to simpledrm > framebuffer with llvmpipe, no proper graphics (e.g. screencast portal says > my 27" monitor is 46" too) > > Do you have trouble with 2.42.1 as well with LTO or in general? > We need to stabilize 2.42 very soon for security issues anyhow, independent > of any webkit-gtk consumers, so it'd be a good additional tests if you're > otherwise on stable. net-libs/webkit-gtk-2.40.5-r410 (this package) builds successfully with clang, full LTO, libstdc++, -Werror=odr and -Werror=strict-aliasing. I haven't noticed any runtime issues (yet). In this build environment, however, net-libs/webkit-gtk-2.42.1-r410 fails with the exact same errors.
Created attachment 872798 [details] build log (2.42.1)
The compiler error seems self-inflicted from CXXFLAGS=-Werror=odr, so I'm afraid you'll need to get your hands dirty here to figure out the cause. Maybe a difference in flex, bison or whatever tool version? For me 2.42.1-r410 crashes at runtime on half my e-mails within mail-client/evolution (at least all gitlab and github mails) when built with ThinLTO and works fine without LTO. This is on ARM64 though, but backtraces are not inside ARM64 specific JavaScriptCore JIT or anything like that, but some rendering stuff.
See also: https://bugs.gentoo.org/866896 https://bugs.webkit.org/show_bug.cgi?id=233007
(In reply to Mart Raudsepp from comment #5) > The compiler error seems self-inflicted from CXXFLAGS=-Werror=odr, so I'm > afraid you'll need to get your hands dirty here to figure out the cause. > Maybe a difference in flex, bison or whatever tool version? > Right, self-inflicted, but the point is this isn't safe to use with LTO until it's fixed. See https://wiki.gentoo.org/wiki/Project:Toolchain/LTO.
Glad I found this. I got problems with www-client/surf when upgrading to webkit-gtk-2.42.3-r410. Web pages do not render correctly to the point that the browser is useless. I could now fix it with an /etc/portage/env/nolto.conf that appends -fno-lto to CFLAGS et al for webkit-gtk:4.1.
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=21109fa861f07a6ae06cfbed1ef2c721bfae9afd commit 21109fa861f07a6ae06cfbed1ef2c721bfae9afd Author: Sam James <sam@gentoo.org> AuthorDate: 2024-01-05 12:35:53 +0000 Commit: Sam James <sam@gentoo.org> CommitDate: 2024-01-05 12:35:53 +0000 net-libs/webkit-gtk: filter LTO ODR violations thanks to Bison. Fortunately, upstream are open to fixing it, it just needs a hack like GDB did, or could even maybe just do --name-prefix or something if Bison-only is OK. Closes: https://bugs.gentoo.org/866896 Closes: https://bugs.gentoo.org/915230 Signed-off-by: Sam James <sam@gentoo.org> net-libs/webkit-gtk/webkit-gtk-2.42.3-r410.ebuild | 5 ++++- net-libs/webkit-gtk/webkit-gtk-2.42.3-r600.ebuild | 5 ++++- net-libs/webkit-gtk/webkit-gtk-2.42.3.ebuild | 5 ++++- net-libs/webkit-gtk/webkit-gtk-2.42.4-r410.ebuild | 3 +++ net-libs/webkit-gtk/webkit-gtk-2.42.4-r600.ebuild | 3 +++ net-libs/webkit-gtk/webkit-gtk-2.42.4.ebuild | 3 +++ 6 files changed, 21 insertions(+), 3 deletions(-)