diff options
Diffstat (limited to 'src/corelib/global')
-rw-r--r-- | src/corelib/global/qcompilerdetection.h | 22 | ||||
-rw-r--r-- | src/corelib/global/qconfig-bootstrapped.h | 2 | ||||
-rw-r--r-- | src/corelib/global/qendian.cpp | 2 | ||||
-rw-r--r-- | src/corelib/global/qendian.h | 12 | ||||
-rw-r--r-- | src/corelib/global/qglobal.cpp | 4 | ||||
-rw-r--r-- | src/corelib/global/qglobal.h | 59 | ||||
-rw-r--r-- | src/corelib/global/qnumeric_p.h | 6 | ||||
-rw-r--r-- | src/corelib/global/qrandom.cpp | 4 | ||||
-rw-r--r-- | src/corelib/global/qrandom.h | 2 | ||||
-rw-r--r-- | src/corelib/global/qtypeinfo.h | 1 |
10 files changed, 26 insertions, 88 deletions
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index e47f284a42..ad3d2be69b 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -91,8 +91,6 @@ # define Q_OUTOFLINE_TEMPLATE inline # define Q_COMPILER_MANGLES_RETURN_TYPE # define Q_FUNC_INFO __FUNCSIG__ -# define Q_ALIGNOF(type) __alignof(type) -# define Q_DECL_ALIGN(n) __declspec(align(n)) # define Q_ASSUME_IMPL(expr) __assume(expr) # define Q_UNREACHABLE_IMPL() __assume(0) # define Q_NORETURN __declspec(noreturn) @@ -222,10 +220,8 @@ # endif # define Q_FUNC_INFO __PRETTY_FUNCTION__ -# define Q_ALIGNOF(type) __alignof__(type) # define Q_TYPEOF(expr) __typeof__(expr) # define Q_DECL_DEPRECATED __attribute__ ((__deprecated__)) -# define Q_DECL_ALIGN(n) __attribute__((__aligned__(n))) # define Q_DECL_UNUSED __attribute__((__unused__)) # define Q_LIKELY(expr) __builtin_expect(!!(expr), true) # define Q_UNLIKELY(expr) __builtin_expect(!!(expr), false) @@ -272,9 +268,7 @@ # if __xlC__ < 0x400 # error "Compiler not supported" # elif __xlC__ >= 0x0600 -# define Q_ALIGNOF(type) __alignof__(type) # define Q_TYPEOF(expr) __typeof__(expr) -# define Q_DECL_ALIGN(n) __attribute__((__aligned__(n))) # define Q_PACKED __attribute__((__packed__)) # endif @@ -352,7 +346,6 @@ # define Q_PACKED __attribute__ ((__packed__)) # define Q_FUNC_INFO __PRETTY_FUNCTION__ # define Q_TYPEOF(expr) __typeof__(expr) -# define Q_ALIGNOF(type) __alignof__(type) # define Q_UNREACHABLE_IMPL() # if defined(__cplusplus) # define Q_COMPILER_AUTO_TYPE @@ -450,9 +443,7 @@ # define QT_NO_TEMPLATE_TEMPLATE_PARAMETERS /* see http://developers.sun.com/sunstudio/support/Ccompare.html */ # if __SUNPRO_CC >= 0x590 -# define Q_ALIGNOF(type) __alignof__(type) # define Q_TYPEOF(expr) __typeof__(expr) -# define Q_DECL_ALIGN(n) __attribute__((__aligned__(n))) # endif # if __SUNPRO_CC >= 0x550 # define Q_DECL_EXPORT __global @@ -489,9 +480,6 @@ # define Q_DECL_EXPORT __declspec(dllexport) # define Q_DECL_IMPORT __declspec(dllimport) # endif -# if __HP_aCC-0 >= 061200 -# define Q_DECL_ALIGN(n) __attribute__((aligned(n))) -# endif # if __HP_aCC-0 >= 062000 # define Q_DECL_EXPORT __attribute__((visibility("default"))) # define Q_DECL_HIDDEN __attribute__((visibility("hidden"))) @@ -1128,14 +1116,12 @@ #endif #define Q_DECL_NOTHROW Q_DECL_NOEXCEPT -#if defined(Q_COMPILER_ALIGNOF) -# undef Q_ALIGNOF -# define Q_ALIGNOF(x) alignof(x) +#ifndef Q_ALIGNOF +# define Q_ALIGNOF(x) alignof(x) #endif -#if defined(Q_COMPILER_ALIGNAS) -# undef Q_DECL_ALIGN -# define Q_DECL_ALIGN(n) alignas(n) +#ifndef Q_DECL_ALIGN +# define Q_DECL_ALIGN(n) alignas(n) #endif #if QT_HAS_CPP_ATTRIBUTE(nodiscard) && !defined(Q_CC_CLANG) // P0188R1 diff --git a/src/corelib/global/qconfig-bootstrapped.h b/src/corelib/global/qconfig-bootstrapped.h index e9383ca68b..c58dc56c42 100644 --- a/src/corelib/global/qconfig-bootstrapped.h +++ b/src/corelib/global/qconfig-bootstrapped.h @@ -74,6 +74,7 @@ #else # define QT_FEATURE_alloca_malloc_h -1 #endif +#define QT_FEATURE_binaryjson -1 #define QT_FEATURE_cborstream -1 #define QT_CRYPTOGRAPHICHASH_ONLY_SHA1 #define QT_FEATURE_cxx11_random (QT_HAS_INCLUDE(<random>) ? 1 : -1) @@ -110,6 +111,7 @@ # define QT_FEATURE_renameat2 -1 #endif #define QT_FEATURE_sharedmemory -1 +#define QT_FEATURE_shortcut -1 #define QT_FEATURE_signaling_nan -1 #define QT_FEATURE_slog2 -1 #ifdef __GLIBC_PREREQ diff --git a/src/corelib/global/qendian.cpp b/src/corelib/global/qendian.cpp index 7fd6e13d3b..c56a7ffbf7 100644 --- a/src/corelib/global/qendian.cpp +++ b/src/corelib/global/qendian.cpp @@ -765,7 +765,7 @@ QT_BEGIN_NAMESPACE #if defined(__SSSE3__) using ShuffleMask = uchar[16]; -Q_DECL_ALIGN(16) static const ShuffleMask shuffleMasks[3] = { +alignas(16) static const ShuffleMask shuffleMasks[3] = { // 16-bit {1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14}, // 32-bit diff --git a/src/corelib/global/qendian.h b/src/corelib/global/qendian.h index 615f523888..5cd9d3160b 100644 --- a/src/corelib/global/qendian.h +++ b/src/corelib/global/qendian.h @@ -327,9 +327,9 @@ public: return pre; } - static constexpr QSpecialInteger max() + static Q_DECL_CONSTEXPR QSpecialInteger max() { return QSpecialInteger(std::numeric_limits<T>::max()); } - static constexpr QSpecialInteger min() + static Q_DECL_CONSTEXPR QSpecialInteger min() { return QSpecialInteger(std::numeric_limits<T>::min()); } }; @@ -373,8 +373,8 @@ public: QLEInteger &operator ++(int); QLEInteger &operator --(int); - static constexpr QLEInteger max(); - static constexpr QLEInteger min(); + static Q_DECL_CONSTEXPR QLEInteger max(); + static Q_DECL_CONSTEXPR QLEInteger min(); }; template<typename T> @@ -400,8 +400,8 @@ public: QBEInteger &operator ++(int); QBEInteger &operator --(int); - static constexpr QBEInteger max(); - static constexpr QBEInteger min(); + static Q_DECL_CONSTEXPR QBEInteger max(); + static Q_DECL_CONSTEXPR QBEInteger min(); }; #else diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index a06e9ab6c6..799d953c8d 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -114,8 +114,8 @@ extern "C" { // without full system POSIX. # pragma weak shm_area_password # pragma weak shm_area_name - char *shm_area_password = "dummy"; - char *shm_area_name = "dummy"; + char shm_area_password[] = "dummy"; + char shm_area_name[] = "dummy"; } #endif diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 7db7dba9b5..4dc63cae5e 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -86,15 +86,9 @@ #define QT_CONFIG(feature) (1/QT_FEATURE_##feature == 1) #define QT_REQUIRE_CONFIG(feature) Q_STATIC_ASSERT_X(QT_FEATURE_##feature == 1, "Required feature " #feature " for file " __FILE__ " not available.") -#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) -// ### Qt6: FIXME and get rid of unsharable containers -//# define QT_NO_UNSHARABLE_CONTAINERS -# define QT6_VIRTUAL virtual -# define QT6_NOT_VIRTUAL -#else -# define QT6_VIRTUAL -# define QT6_NOT_VIRTUAL virtual -#endif +// ### Clean those up, once all code is adjusted +#define QT6_VIRTUAL virtual +#define QT6_NOT_VIRTUAL /* These two macros makes it possible to turn the builtin line expander into a * string literal. */ @@ -499,53 +493,6 @@ Q_CORE_EXPORT Q_DECL_CONST_FUNCTION const char *qVersion(void) Q_DECL_NOEXCEPT; # define Q_DESTRUCTOR_FUNCTION(AFUNC) Q_DESTRUCTOR_FUNCTION0(AFUNC) #endif -namespace QtPrivate { - template <class T> - struct AlignOfHelper - { - char c; - T type; - - AlignOfHelper(); - ~AlignOfHelper(); - }; - - template <class T> - struct AlignOf_Default - { - enum { Value = sizeof(AlignOfHelper<T>) - sizeof(T) }; - }; - - template <class T> struct AlignOf : AlignOf_Default<T> { }; - template <class T> struct AlignOf<T &> : AlignOf<T> {}; - template <class T> struct AlignOf<T &&> : AlignOf<T> {}; - template <size_t N, class T> struct AlignOf<T[N]> : AlignOf<T> {}; - -#if defined(Q_PROCESSOR_X86_32) && !defined(Q_OS_WIN) - template <class T> struct AlignOf_WorkaroundForI386Abi { enum { Value = sizeof(T) }; }; - - // x86 ABI weirdness - // Alignment of naked type is 8, but inside struct has alignment 4. - template <> struct AlignOf<double> : AlignOf_WorkaroundForI386Abi<double> {}; - template <> struct AlignOf<qint64> : AlignOf_WorkaroundForI386Abi<qint64> {}; - template <> struct AlignOf<quint64> : AlignOf_WorkaroundForI386Abi<quint64> {}; -#ifdef Q_CC_CLANG - // GCC and Clang seem to disagree wrt to alignment of arrays - template <size_t N> struct AlignOf<double[N]> : AlignOf_Default<double> {}; - template <size_t N> struct AlignOf<qint64[N]> : AlignOf_Default<qint64> {}; - template <size_t N> struct AlignOf<quint64[N]> : AlignOf_Default<quint64> {}; -#endif -#endif -} // namespace QtPrivate - -#define QT_EMULATED_ALIGNOF(T) \ - (size_t(QT_PREPEND_NAMESPACE(QtPrivate)::AlignOf<T>::Value)) - -#ifndef Q_ALIGNOF -#define Q_ALIGNOF(T) QT_EMULATED_ALIGNOF(T) -#endif - - /* quintptr and qptrdiff is guaranteed to be the same size as a pointer, i.e. diff --git a/src/corelib/global/qnumeric_p.h b/src/corelib/global/qnumeric_p.h index 86e7997680..c006296b3d 100644 --- a/src/corelib/global/qnumeric_p.h +++ b/src/corelib/global/qnumeric_p.h @@ -202,7 +202,7 @@ namespace { This function works for v containing infinities, but not NaN. It's the caller's responsibility to exclude that possibility before calling it. */ -template <typename T> static inline bool convertDoubleTo(double v, T *value) +template <typename T> static inline bool convertDoubleTo(double v, T *value, bool allow_precision_upgrade = true) { Q_STATIC_ASSERT(std::numeric_limits<T>::is_integer); @@ -227,6 +227,10 @@ template <typename T> static inline bool convertDoubleTo(double v, T *value) supremum = -2.0 * std::numeric_limits<ST>::min(); // -2 * (-2^63) = 2^64, exact (for T = quint64) v = fabs(v); } + if (std::is_integral<T>::value && sizeof(T) > 4 && !allow_precision_upgrade) { + if (v > double(Q_INT64_C(1)<<53) || v < double(-((Q_INT64_C(1)<<53) + 1))) + return false; + } *value = std::numeric_limits<T>::max(); if (v >= supremum) diff --git a/src/corelib/global/qrandom.cpp b/src/corelib/global/qrandom.cpp index 3cbd40b772..563e5eb7ed 100644 --- a/src/corelib/global/qrandom.cpp +++ b/src/corelib/global/qrandom.cpp @@ -355,7 +355,7 @@ struct QRandomGenerator::SystemAndGlobalGenerators // the state in case another thread tries to lock the mutex. It's not // a common scenario, but since sizeof(QRandomGenerator) >= 2560, the // overhead is actually acceptable. - // 2) We use both Q_DECL_ALIGN and std::aligned_storage<..., 64> because + // 2) We use both alignas and std::aligned_storage<..., 64> because // some implementations of std::aligned_storage can't align to more // than a primitive type's alignment. // 3) We don't store the entire system QRandomGenerator, only the space @@ -364,7 +364,7 @@ struct QRandomGenerator::SystemAndGlobalGenerators QBasicMutex globalPRNGMutex; struct ShortenedSystem { uint type; } system_; SystemGenerator sys; - Q_DECL_ALIGN(64) std::aligned_storage<sizeof(QRandomGenerator64), 64>::type global_; + alignas(64) std::aligned_storage<sizeof(QRandomGenerator64), 64>::type global_; #ifdef Q_COMPILER_CONSTEXPR constexpr SystemAndGlobalGenerators() diff --git a/src/corelib/global/qrandom.h b/src/corelib/global/qrandom.h index 445b520c76..e1494ab523 100644 --- a/src/corelib/global/qrandom.h +++ b/src/corelib/global/qrandom.h @@ -196,7 +196,7 @@ private: RandomEngine &engine() { return twister; } const RandomEngine &engine() const { return twister; } #else - std::aligned_storage<sizeof(RandomEngine), Q_ALIGNOF(RandomEngine)>::type buffer; + std::aligned_storage<sizeof(RandomEngine), alignof(RandomEngine)>::type buffer; RandomEngine &engine() { return reinterpret_cast<RandomEngine &>(buffer); } const RandomEngine &engine() const { return reinterpret_cast<const RandomEngine &>(buffer); } #endif diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h index 30be47296e..34cf1de4f5 100644 --- a/src/corelib/global/qtypeinfo.h +++ b/src/corelib/global/qtypeinfo.h @@ -209,7 +209,6 @@ public: \ }; \ } -Q_DECLARE_MOVABLE_CONTAINER(QList); Q_DECLARE_MOVABLE_CONTAINER(QVector); Q_DECLARE_MOVABLE_CONTAINER(QQueue); Q_DECLARE_MOVABLE_CONTAINER(QStack); |