From 1e5892f74a7950ba2d05bc507f2219a45fde3897 Mon Sep 17 00:00:00 2001 From: Tim Blechmann Date: Thu, 5 May 2022 10:09:00 +0800 Subject: [PATCH] core/gui: fix odr violation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When linking Qt statically, QtCore and QtGui are not separated into different DSOs. when both statically linked versions of QtCore and QtGui are linked into the same binary with LTO, gcc emits: ``` /usr/src/debug/qtbase/6.3.0-r0/git/src/gui/painting/qicc.cpp:105: warning: type ‘Tag’ violates the C++ One Definition Rule [-Wodr] /usr/src/debug/qtbase/6.3.0-r0/git/src/corelib/kernel/qtranslator.cpp:78: note: an enum with different value name is defined in another translation unit /usr/src/debug/qtbase/6.3.0-r0/git/src/gui/painting/qicc.cpp:106: note: name ‘acsp’ differs from name ‘Tag_End’ defined in another translation unit /usr/src/debug/qtbase/6.3.0-r0/git/src/corelib/kernel/qtranslator.cpp:78: note: mismatching definition ``` we therefore define the `struct Tag` in an anonymous namespace or the QIcc namespace Change-Id: Ib4edeede35c51322ab1959d70fb87359b196e59b Pick-to: 6.6 6.5 Reviewed-by: Thiago Macieira (cherry picked from commit 6b13e0ca593592b34ea34837335db0d5cefdf630) Reviewed-by: Qt Cherry-pick Bot --- src/corelib/kernel/qtranslator.cpp | 3 +++ src/gui/painting/qicc.cpp | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index 8ae35f5ef27..ec92404a154 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -39,8 +39,11 @@ QT_BEGIN_NAMESPACE +namespace { enum Tag { Tag_End = 1, Tag_SourceText16, Tag_Translation, Tag_Context16, Tag_Obsolete1, Tag_SourceText, Tag_Context, Tag_Comment, Tag_Obsolete2 }; +} + /* $ mcookie 3cb86418caef9c95cd211cbf60a1bddd diff --git a/src/gui/painting/qicc.cpp b/src/gui/painting/qicc.cpp index 9d95c80bf81..77aae9ec49a 100644 --- a/src/gui/painting/qicc.cpp +++ b/src/gui/painting/qicc.cpp @@ -20,6 +20,8 @@ QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY(lcIcc, "qt.gui.icc", QtWarningMsg) +namespace QIcc { + struct ICCProfileHeader { quint32_be profileSize; @@ -104,7 +106,9 @@ enum class Tag : quint32 { aabg = IccTag('a', 'a', 'b', 'g'), }; -inline size_t qHash(const Tag &key, size_t seed = 0) +} // namespace QIcc + +inline size_t qHash(const QIcc::Tag &key, size_t seed = 0) { return qHash(quint32(key), seed); }