summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-10-05 01:01:05 +0200
committerQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-10-05 01:01:06 +0200
commit327b305e95187fda869c5af407e78a17e0e381cd (patch)
treefc51c7579a9c1fed3c3993ac2ea68bf9dd32f8bb /src/corelib
parentda284ef10e0ef80776b9fc9b7bb0e6dc8d71ba63 (diff)
parenta2e718a71abad719ea196e9dc4d90d9267102f54 (diff)
Merge remote-tracking branch 'origin/5.14' into 5.15
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/Qt5CoreConfigExtras.cmake.in2
-rw-r--r--src/corelib/global/qfloat16.cpp2
-rw-r--r--src/corelib/global/qfloat16.h4
-rw-r--r--src/corelib/global/qglobal.cpp11
-rw-r--r--src/corelib/global/qlibraryinfo.cpp9
-rw-r--r--src/corelib/io/qsettings.cpp7
-rw-r--r--src/corelib/kernel/qcore_mac_objc.mm6
-rw-r--r--src/corelib/kernel/qcore_mac_p.h8
-rw-r--r--src/corelib/text/qchar.cpp1
-rw-r--r--src/corelib/text/qlocale.cpp82
-rw-r--r--src/corelib/text/qlocale_p.h1
-rw-r--r--src/corelib/tools/qlist.h2
-rw-r--r--src/corelib/tools/qpair.qdoc1
13 files changed, 103 insertions, 33 deletions
diff --git a/src/corelib/Qt5CoreConfigExtras.cmake.in b/src/corelib/Qt5CoreConfigExtras.cmake.in
index e0652fdcf9..659faac6a5 100644
--- a/src/corelib/Qt5CoreConfigExtras.cmake.in
+++ b/src/corelib/Qt5CoreConfigExtras.cmake.in
@@ -46,6 +46,8 @@ if (NOT TARGET Qt5::rcc)
)
endif()
+set(CMAKE_AUTOMOC_MACRO_NAMES "Q_OBJECT" "Q_GADGET" "Q_NAMESPACE" "Q_NAMESPACE_EXPORT")
+
set(Qt5Core_QMAKE_EXECUTABLE Qt5::qmake)
set(Qt5Core_MOC_EXECUTABLE Qt5::moc)
set(Qt5Core_RCC_EXECUTABLE Qt5::rcc)
diff --git a/src/corelib/global/qfloat16.cpp b/src/corelib/global/qfloat16.cpp
index 2ba4c79374..6c21b7de5a 100644
--- a/src/corelib/global/qfloat16.cpp
+++ b/src/corelib/global/qfloat16.cpp
@@ -155,7 +155,7 @@ QT_BEGIN_NAMESPACE
int qfloat16::fpClassify() const noexcept
{
return isInf() ? FP_INFINITE : isNaN() ? FP_NAN
- : !b16 ? FP_ZERO : isNormal() ? FP_NORMAL : FP_SUBNORMAL;
+ : !(b16 & 0x7fff) ? FP_ZERO : isNormal() ? FP_NORMAL : FP_SUBNORMAL;
}
/*! \fn int qRound(qfloat16 value)
diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h
index 4d1aa91349..9a4f1800a4 100644
--- a/src/corelib/global/qfloat16.h
+++ b/src/corelib/global/qfloat16.h
@@ -94,7 +94,7 @@ public:
static constexpr qfloat16 _limit_quiet_NaN() noexcept { return qfloat16(Wrap(0x7e00)); }
// Signalling NaN is 0x7f00
inline constexpr bool isNormal() const noexcept
- { return b16 == 0 || ((b16 & 0x7c00) && (b16 & 0x7c00) != 0x7c00); }
+ { return (b16 & 0x7fff) == 0 || ((b16 & 0x7c00) && (b16 & 0x7c00) != 0x7c00); }
private:
quint16 b16;
constexpr inline explicit qfloat16(Wrap nibble) noexcept : b16(nibble.b16) {}
@@ -296,7 +296,7 @@ class numeric_limits<QT_PREPEND_NAMESPACE(qfloat16)> : public numeric_limits<flo
public:
/*
Treat quint16 b16 as if it were:
- uint S: 1; // b16 >> 15 (sign)
+ uint S: 1; // b16 >> 15 (sign); can be set for zero
uint E: 5; // (b16 >> 10) & 0x1f (offset exponent)
uint M: 10; // b16 & 0x3ff (adjusted mantissa)
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 123aeb1f7c..17aab17fe4 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -2940,11 +2940,10 @@ QString QSysInfo::prettyProductName()
if (!name)
return result + versionString;
result += QLatin1String(name);
-# if !defined(Q_OS_WIN)
- return result + QLatin1String(" (") + versionString + QLatin1Char(')');
-# else
+# if !defined(Q_OS_WIN) || defined(Q_OS_WINRT)
+ return result + QLatin1String(" (") + versionString + QLatin1Char(')');
+# else
// (resembling winver.exe): Windows 10 "Windows 10 Version 1809"
- result += QLatin1String(" Version ");
if (majorVersion >= 10) {
const auto releaseId = windows10ReleaseId();
if (!releaseId.isEmpty())
@@ -2952,7 +2951,7 @@ QString QSysInfo::prettyProductName()
return result;
}
// Windows 7: "Windows 7 Version 6.1 (Build 7601: Service Pack 1)"
- result += versionString + QLatin1String(" (");
+ result += QLatin1String(" Version ") + versionString + QLatin1String(" (");
const auto build = windows7Build();
if (!build.isEmpty())
result += QLatin1String("Build ") + build;
@@ -2960,7 +2959,7 @@ QString QSysInfo::prettyProductName()
if (!servicePack.isEmpty())
result += QLatin1String(": ") + servicePack;
return result + QLatin1Char(')');
-# endif // Windows
+# endif // Windows
#elif defined(Q_OS_HAIKU)
return QLatin1String("Haiku ") + productVersion();
#elif defined(Q_OS_UNIX)
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index c7357f9d13..6476b7404a 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -495,6 +495,8 @@ static QString prefixFromAppDirHelper()
#endif
#if !defined(QT_BUILD_QMAKE) && QT_CONFIG(relocatable)
+#if !defined(QT_STATIC) && !(defined(Q_OS_DARWIN) && QT_CONFIG(framework)) \
+ && (QT_CONFIG(dlopen) || defined(Q_OS_WIN))
static QString prefixFromQtCoreLibraryHelper(const QString &qtCoreLibraryPath)
{
const QString qtCoreLibrary = QDir::fromNativeSeparators(qtCoreLibraryPath);
@@ -503,6 +505,7 @@ static QString prefixFromQtCoreLibraryHelper(const QString &qtCoreLibraryPath)
+ QLatin1String(QT_CONFIGURE_LIBLOCATION_TO_PREFIX_PATH);
return QDir::cleanPath(prefixDir);
}
+#endif
#if defined(Q_OS_WIN)
#if defined(Q_OS_WINRT)
@@ -851,10 +854,14 @@ QT_END_NAMESPACE
#include "private/qcoreapplication_p.h"
+QT_WARNING_DISABLE_GCC("-Wattributes")
+QT_WARNING_DISABLE_CLANG("-Wattributes")
+QT_WARNING_DISABLE_INTEL(2621)
+
extern const char qt_core_interpreter[] __attribute__((section(".interp")))
= ELF_INTERPRETER;
-extern "C" void qt_core_boilerplate();
+extern "C" void qt_core_boilerplate() __attribute__((force_align_arg_pointer));
void qt_core_boilerplate()
{
printf("This is the QtCore library version " QT_BUILD_STR "\n"
diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp
index 4a119a1e2f..fc7122d904 100644
--- a/src/corelib/io/qsettings.cpp
+++ b/src/corelib/io/qsettings.cpp
@@ -746,7 +746,6 @@ bool QSettingsPrivate::iniUnescapedStringList(const QByteArray &str, int from, i
{ '\'', '\'' },
{ '\\', '\\' }
};
- static const int numEscapeCodes = sizeof(escapeCodes) / sizeof(escapeCodes[0]);
bool isStringList = false;
bool inQuotedString = false;
@@ -770,9 +769,9 @@ StNormal:
goto end;
ch = str.at(i++);
- for (int j = 0; j < numEscapeCodes; ++j) {
- if (ch == escapeCodes[j][0]) {
- stringResult += QLatin1Char(escapeCodes[j][1]);
+ for (const auto &escapeCode : escapeCodes) {
+ if (ch == escapeCode[0]) {
+ stringResult += QLatin1Char(escapeCode[1]);
goto StNormal;
}
}
diff --git a/src/corelib/kernel/qcore_mac_objc.mm b/src/corelib/kernel/qcore_mac_objc.mm
index 9e9e71c397..b1f3b74cd4 100644
--- a/src/corelib/kernel/qcore_mac_objc.mm
+++ b/src/corelib/kernel/qcore_mac_objc.mm
@@ -211,6 +211,12 @@ QDebug operator<<(QDebug debug, const QMacAutoReleasePool *pool)
debug << "QMacAutoReleasePool(" << (const void *)pool << ')';
return debug;
}
+
+QDebug operator<<(QDebug debug, const QCFString &string)
+{
+ debug << static_cast<QString>(string);
+ return debug;
+}
#endif // !QT_NO_DEBUG_STREAM
#ifdef Q_OS_MACOS
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h
index 3266dc10a8..535d3579b2 100644
--- a/src/corelib/kernel/qcore_mac_p.h
+++ b/src/corelib/kernel/qcore_mac_p.h
@@ -137,8 +137,10 @@ private:
template <typename T>
class QCFType : public QAppleRefCounted<T, CFTypeRef, CFRetain, CFRelease>
{
+ using Base = QAppleRefCounted<T, CFTypeRef, CFRetain, CFRelease>;
public:
- using QAppleRefCounted<T, CFTypeRef, CFRetain, CFRelease>::QAppleRefCounted;
+ using Base::Base;
+ explicit QCFType(CFTypeRef r) : Base(static_cast<T>(r)) {}
template <typename X> X as() const { return reinterpret_cast<X>(this->value); }
static QCFType constructFromGet(const T &t)
{
@@ -151,6 +153,7 @@ public:
class Q_CORE_EXPORT QCFString : public QCFType<CFStringRef>
{
public:
+ using QCFType<CFStringRef>::QCFType;
inline QCFString(const QString &str) : QCFType<CFStringRef>(0), string(str) {}
inline QCFString(const CFStringRef cfstr = 0) : QCFType<CFStringRef>(cfstr) {}
inline QCFString(const QCFType<CFStringRef> &other) : QCFType<CFStringRef>(other) {}
@@ -168,7 +171,8 @@ Q_CORE_EXPORT bool qt_mac_applicationIsInDarkMode();
#endif
#ifndef QT_NO_DEBUG_STREAM
-QDebug operator<<(QDebug debug, const QMacAutoReleasePool *pool);
+Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QMacAutoReleasePool *pool);
+Q_CORE_EXPORT QDebug operator<<(QDebug debug, const QCFString &string);
#endif
Q_CORE_EXPORT bool qt_apple_isApplicationExtension();
diff --git a/src/corelib/text/qchar.cpp b/src/corelib/text/qchar.cpp
index d959c55bb7..9b03a93278 100644
--- a/src/corelib/text/qchar.cpp
+++ b/src/corelib/text/qchar.cpp
@@ -61,6 +61,7 @@ QT_BEGIN_NAMESPACE
/*!
\class QLatin1Char
\inmodule QtCore
+ \reentrant
\brief The QLatin1Char class provides an 8-bit ASCII/Latin-1 character.
\ingroup string-processing
diff --git a/src/corelib/text/qlocale.cpp b/src/corelib/text/qlocale.cpp
index 48d57e5e6e..75a5bc802e 100644
--- a/src/corelib/text/qlocale.cpp
+++ b/src/corelib/text/qlocale.cpp
@@ -345,6 +345,23 @@ QByteArray QLocalePrivate::bcp47Name(char separator) const
return localeId.withLikelySubtagsRemoved().name(separator);
}
+/*!
+ \internal
+ */
+QByteArray QLocalePrivate::rawName(char separator) const
+{
+ QByteArrayList parts;
+ if (m_data->m_language_id != QLocale::AnyLanguage)
+ parts.append(languageCode().latin1());
+ if (m_data->m_script_id != QLocale::AnyScript)
+ parts.append(scriptCode().latin1());
+ if (m_data->m_country_id != QLocale::AnyCountry)
+ parts.append(countryCode().latin1());
+
+ return parts.join(separator);
+}
+
+
static const QLocaleData *findLocaleDataById(const QLocaleId &lid)
{
QLocaleId localeId = lid.withLikelySubtagsAdded();
@@ -4367,30 +4384,63 @@ QString QLocale::formattedDataSize(qint64 bytes, int precision, DataSizeFormats
*/
QStringList QLocale::uiLanguages() const
{
+ QStringList uiLanguages;
+ QVector<QLocale> locales;
#ifndef QT_NO_SYSTEMLOCALE
if (d->m_data == systemData()) {
QVariant res = systemLocale()->query(QSystemLocale::UILanguages, QVariant());
if (!res.isNull()) {
- QStringList result = res.toStringList();
- if (!result.isEmpty())
- return result;
+ uiLanguages = res.toStringList();
+ // ... but we need to include likely-adjusted forms of each of those, too:
+ for (const auto entry : qAsConst(uiLanguages))
+ locales.append(QLocale(entry));
}
- }
+ } else
#endif
- QLocaleId id = QLocaleId::fromIds(d->m_data->m_language_id, d->m_data->m_script_id,
- d->m_data->m_country_id);
- const QLocaleId max = id.withLikelySubtagsAdded();
- const QLocaleId min = max.withLikelySubtagsRemoved();
+ {
+ locales.append(*this);
+ }
+ for (int i = locales.size(); i-- > 0; ) {
+ const QLocale &locale = locales.at(i);
+ int j;
+ QByteArray prior;
+ if (i < uiLanguages.size()) {
+ // Adding likely-adjusted forms to system locale's list.
+ // Name the locale is derived from:
+ const QString &name = uiLanguages.at(i);
+ prior = name.toLatin1();
+ // Don't try to likely-adjust if construction's likely-adjustments
+ // were so drastic the result doesn't match the prior name:
+ if (locale.name() != name && locale.d->rawName() != prior)
+ continue;
+ // Insert just after prior:
+ j = i + 1;
+ } else {
+ // Plain locale, not system locale; just append.
+ j = uiLanguages.size();
+ }
+ const auto data = locale.d->m_data;
+
+ QLocaleId id
+ = QLocaleId::fromIds(data->m_language_id, data->m_script_id, data->m_country_id);
+ const QLocaleId max = id.withLikelySubtagsAdded();
+ const QLocaleId min = max.withLikelySubtagsRemoved();
+ id.script_id = 0; // For re-use as script-less variant.
+
+ // Include version with all likely sub-tags (last) if distinct from the rest:
+ if (max != min && max != id && max.name() != prior)
+ uiLanguages.insert(j, QString::fromLatin1(max.name()));
+
+ // Include scriptless version if likely-equivalent and distinct:
+ if (data->m_script_id && id != min && id.name() != prior
+ && id.withLikelySubtagsAdded() == max) {
+ uiLanguages.insert(j, QString::fromLatin1(id.name()));
+ }
- QStringList uiLanguages;
- uiLanguages.append(QString::fromLatin1(min.name()));
- if (id.script_id) {
- id.script_id = 0;
- if (id != min && id.withLikelySubtagsAdded() == max)
- uiLanguages.append(QString::fromLatin1(id.name()));
+ // Include minimal version (first) unless it's what our locale is derived from:
+ if (min.name() != prior)
+ uiLanguages.insert(j, QString::fromLatin1(min.name()));
}
- if (max != min && max != id)
- uiLanguages.append(QString::fromLatin1(max.name()));
return uiLanguages;
}
diff --git a/src/corelib/text/qlocale_p.h b/src/corelib/text/qlocale_p.h
index 5ebed9b385..edee3a89c7 100644
--- a/src/corelib/text/qlocale_p.h
+++ b/src/corelib/text/qlocale_p.h
@@ -359,6 +359,7 @@ public:
quint16 countryId() const { return m_data->m_country_id; }
QByteArray bcp47Name(char separator = '-') const;
+ QByteArray rawName(char separator = '-') const;
inline QLatin1String languageCode() const { return languageToCode(QLocale::Language(m_data->m_language_id)); }
inline QLatin1String scriptCode() const { return scriptToCode(QLocale::Script(m_data->m_script_id)); }
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index be987c359b..425ffa42a5 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -1051,7 +1051,7 @@ int lastIndexOf(const QList<T> &list, const U &u, int from)
Node *n = reinterpret_cast<Node *>(list.p.at(from + 1));
while (n-- != b) {
if (n->t() == u)
- return typename QList<T>::difference_type(n - b);
+ return int(n - b);
}
}
return -1;
diff --git a/src/corelib/tools/qpair.qdoc b/src/corelib/tools/qpair.qdoc
index 59e6931995..65576ef2e6 100644
--- a/src/corelib/tools/qpair.qdoc
+++ b/src/corelib/tools/qpair.qdoc
@@ -28,6 +28,7 @@
/*!
\class QPair
\inmodule QtCore
+ \reentrant
\brief The QPair class is a template class that stores a pair of items.
\ingroup tools