--- qtbase/src/corelib/tools/qhash.h Βρ δεκ 8 19:09:52 2013 +++ qtbase/src/corelib/tools/qhash.h Ρα δεκ 14 11:36:18 2013 @@ -69,7 +69,18 @@ inline uint qHash(int key, uint seed = 0) Q_DECL_NOTHROW { return uint(key) ^ seed; } inline uint qHash(ulong key, uint seed = 0) Q_DECL_NOTHROW { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (sizeof(ulong) > sizeof(uint)) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)) ^ seed; } else { return uint(key & (~0U)) ^ seed; @@ -78,7 +89,18 @@ inline uint qHash(long key, uint seed = 0) Q_DECL_NOTHROW { return qHash(ulong(key), seed); } inline uint qHash(quint64 key, uint seed = 0) Q_DECL_NOTHROW { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (sizeof(quint64) > sizeof(uint)) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U)) ^ seed; } else { return uint(key & (~0U)) ^ seed; @@ -202,6 +224,11 @@ Q_DECLARE_TYPEINFO(QHashDummyValue, Q_MOVABLE_TYPE | Q_DUMMY_TYPE); +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4512) +#endif + template struct QHashNode { @@ -215,6 +242,15 @@ inline bool same_key(uint h0, const Key &key0) const { return h0 == h && key0 == key; } }; +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4512) +#endif + template struct QHashDummyNode { @@ -225,6 +261,9 @@ inline QHashDummyNode(const Key &key0, uint hash, QHashNode *n) : next(n), h(hash), key(key0) {} }; +#if defined(_MSC_VER) +#pragma warning(pop) +#endif #if 0 // ### @@ -547,7 +586,18 @@ Q_INLINE_TEMPLATE void QHash::duplicateNode(QHashData::Node *node, void *newNode) { Node *concreteNode = concrete(node); + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isDummy) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + (void) new (newNode) DummyNode(concreteNode->key, concreteNode->h, 0); } else { (void) new (newNode) Node(concreteNode->key, concreteNode->value, concreteNode->h, 0); @@ -560,7 +610,17 @@ { Node *node; +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isDummy) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + node = reinterpret_cast(new (d->allocateNode(alignOfDummyNode())) DummyNode(akey, ah, *anextNode)); } else { node = new (d->allocateNode(alignOfNode())) Node(akey, avalue, ah, *anextNode); @@ -598,9 +658,20 @@ template Q_OUTOFLINE_TEMPLATE void QHash::detach_helper() { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + QHashData *x = d->detach_helper(duplicateNode, deleteNode2, QTypeInfo::isDummy ? sizeof(DummyNode) : sizeof(Node), QTypeInfo::isDummy ? alignOfDummyNode() : alignOfNode()); + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + if (!d->ref.deref()) freeData(d); d = x; @@ -782,7 +853,17 @@ return iterator(createNode(h, akey, avalue, node)); } +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (!QTypeInfo::isDummy) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + (*node)->value = avalue; return iterator(*node); } @@ -951,7 +1032,18 @@ do { if (it2 == other.end() || !(it2.key() == akey)) return false; + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (!QTypeInfo::isDummy && !(it.value() == it2.value())) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + return false; ++it; ++it2; --- qtbase/src/corelib/tools/qlist.h Βρ δεκ 8 19:09:52 2013 +++ qtbase/src/corelib/tools/qlist.h Ρα δεκ 14 11:44:09 2013 @@ -103,9 +103,20 @@ Q_INLINE_TEMPLATE T &t(); #else Q_INLINE_TEMPLATE T &t() - { return *reinterpret_cast(QTypeInfo::isLarge || QTypeInfo::isStatic - ? v : this); } + { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) #endif + + return *reinterpret_cast(QTypeInfo::isLarge || QTypeInfo::isStatic + ? v : this); + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + } +#endif }; union { QListData p; QListData::Data *d; }; @@ -357,14 +368,35 @@ #if defined(Q_CC_BOR) template Q_INLINE_TEMPLATE T &QList::Node::t() -{ return QTypeInfo::isLarge || QTypeInfo::isStatic ? *(T*)v:*(T*)this; } +{ +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) #endif + return QTypeInfo::isLarge || QTypeInfo::isStatic ? *(T*)v:*(T*)this; + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif +} +#endif + template Q_INLINE_TEMPLATE void QList::node_construct(Node *n, const T &t) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isLarge || QTypeInfo::isStatic) n->v = new T(t); else if (QTypeInfo::isComplex) new (n) T(t); + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + #if (defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__IBMCPP__)) && !defined(__OPTIMIZE__) // This violates pointer aliasing rules, but it is known to be safe (and silent) // in unoptimized GCC builds (-fno-strict-aliasing). The other compilers which @@ -379,15 +411,35 @@ template Q_INLINE_TEMPLATE void QList::node_destruct(Node *n) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isLarge || QTypeInfo::isStatic) delete reinterpret_cast(n->v); else if (QTypeInfo::isComplex) reinterpret_cast(n)->~T(); + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif } template Q_INLINE_TEMPLATE void QList::node_copy(Node *from, Node *to, Node *src) { Node *current = from; + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isLarge || QTypeInfo::isStatic) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + QT_TRY { while(current != to) { current->v = new T(*reinterpret_cast(src->v)); @@ -400,7 +452,17 @@ QT_RETHROW; } +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + } else if (QTypeInfo::isComplex) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + QT_TRY { while(current != to) { new (current) T(*reinterpret_cast(src)); @@ -421,9 +483,19 @@ template Q_INLINE_TEMPLATE void QList::node_destruct(Node *from, Node *to) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isLarge || QTypeInfo::isStatic) while(from != to) --to, delete reinterpret_cast(to->v); else if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + while (from != to) --to, reinterpret_cast(to)->~T(); } @@ -518,7 +590,18 @@ QT_RETHROW; } } else { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isLarge || QTypeInfo::isStatic) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + Node *n = reinterpret_cast(p.append()); QT_TRY { node_construct(n, t); @@ -552,7 +635,18 @@ QT_RETHROW; } } else { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isLarge || QTypeInfo::isStatic) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + Node *n = reinterpret_cast(p.prepend()); QT_TRY { node_construct(n, t); @@ -586,7 +680,18 @@ QT_RETHROW; } } else { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isLarge || QTypeInfo::isStatic) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + Node *n = reinterpret_cast(p.insert(i)); QT_TRY { node_construct(n, t); --- qtbase/src/corelib/tools/qmap.h Βρ δεκ 8 19:09:52 2013 +++ qtbase/src/corelib/tools/qmap.h Ος δεκ 13 22:01:15 2013 @@ -263,11 +263,43 @@ template void QMapNode::destroySubTree() { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + key.~Key(); + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + value.~T(); + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex || QTypeInfo::isComplex) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + if (left) leftNode()->destroySubTree(); if (right) @@ -278,9 +310,30 @@ template void QMapData::deleteNode(QMapNode *z) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + z->key.~Key(); + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + z->value.~T(); freeNodeAndRebalance(z); } @@ -1259,4 +1312,4 @@ QT_END_NAMESPACE -#endif // QMAP_H +#endif // QMAP_H \ No newline at end of file --- qtbase/src/corelib/kernel/qmetatype.h Βρ δεκ 8 19:09:54 2013 +++ qtbase/src/corelib/kernel/qmetatype.h Ρα δεκ 14 11:37:13 2013 @@ -761,6 +761,11 @@ : public QMetaTypeFunctionHelper {}; +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4512) +#endif + struct VariantData { VariantData(const int metaTypeId_, @@ -776,6 +781,10 @@ const uint flags; }; +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + template struct IteratorOwner { --- qtbase/src/corelib/kernel/qobject_impl.h Βρ δεκ 8 19:09:54 2013 +++ qtbase/src/corelib/kernel/qobject_impl.h Ος δεκ 13 22:01:18 2013 @@ -106,6 +106,12 @@ #endif // internal base class (interface) containing functions required to call a slot managed by a pointer to function. + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4512) +#endif + class QSlotObjectBase { QAtomicInt m_ref; // don't use virtual functions here; we don't want the @@ -133,6 +139,11 @@ protected: ~QSlotObjectBase() {} }; + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + // implementation of QSlotObjectBase for which the slot is a pointer to member function of a QObject // Args and R are the List of arguments and the returntype of the signal to which the slot is connected. template class QSlotObject : public QSlotObjectBase @@ -211,4 +222,4 @@ QT_END_NAMESPACE -#endif +#endif \ No newline at end of file --- qtbase/src/corelib/tools/qstring.h Βρ δεκ 8 19:09:52 2013 +++ qtbase/src/corelib/tools/qstring.h Ρα δεκ 14 11:38:42 2013 @@ -839,7 +839,18 @@ inline int QString::toWCharArray(wchar_t *array) const { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (sizeof(wchar_t) == sizeof(QChar)) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + memcpy(array, d->data(), sizeof(QChar) * size()); return size(); } @@ -847,8 +858,17 @@ } inline QString QString::fromWCharArray(const wchar_t *string, int size) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + return sizeof(wchar_t) == sizeof(QChar) ? fromUtf16(reinterpret_cast(string), size) : fromUcs4(reinterpret_cast(string), size); + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif } --- qtbase/src/corelib/tools/qvector.h Βρ δεκ 8 19:09:52 2013 +++ qtbase/src/corelib/tools/qvector.h Ρα δεκ 14 13:23:33 2013 @@ -260,7 +260,17 @@ template void QVector::defaultConstruct(T *from, T *to) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + while (from != to) { new (from++) T(); } @@ -276,7 +286,17 @@ template void QVector::copyConstruct(const T *srcFrom, const T *srcTo, T *dstFrom) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + while (srcFrom != srcTo) new (dstFrom++) T(*srcFrom++); } else { @@ -287,7 +307,17 @@ template void QVector::destruct(T *from, T *to) { +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + while (from != to) { from++->~T(); } @@ -466,7 +496,18 @@ QT_TRY { // allocate memory x = Data::allocate(aalloc, options); + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + Q_CHECK_PTR(x); + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + // aalloc is bigger then 0 so it is not [un]sharedEmpty Q_ASSERT(x->ref.isSharable() || options.testFlag(QArrayData::Unsharable)); Q_ASSERT(!x->ref.isStatic()); @@ -476,7 +517,17 @@ T *srcEnd = asize > d->size ? d->end() : d->begin() + asize; T *dst = x->begin(); +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isStatic || (isShared && QTypeInfo::isComplex)) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + // we can not move the data, we need to copy construct it while (srcBegin != srcEnd) { new (dst++) T(*srcBegin++); @@ -521,7 +572,18 @@ } if (d != x) { if (!d->ref.deref()) { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isStatic || !aalloc || (isShared && QTypeInfo::isComplex)) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + // data was copy constructed, we need to call destructors // or if !alloc we did nothing to the old 'd'. freeData(d); @@ -563,7 +625,18 @@ QArrayData::AllocationOptions opt(isTooSmall ? QArrayData::Grow : QArrayData::Default); reallocData(d->size, isTooSmall ? d->size + 1 : d->alloc, opt); } + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + new (d->end()) T(copy); else *d->end() = copy; @@ -578,7 +651,18 @@ if (!d->ref.isShared()) { --d->size; + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + (d->data() + d->size)->~T(); } else { reallocData(d->size - 1); @@ -595,7 +679,18 @@ const T copy(t); if (!isDetached() || d->size + n > int(d->alloc)) reallocData(d->size, d->size + n, QArrayData::Grow); + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isStatic) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + T *b = d->end(); T *i = d->end() + n; while (i != b) @@ -644,11 +739,33 @@ detach(); abegin = d->begin() + itemsUntouched; aend = abegin + itemsToErase; + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isStatic) { + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + iterator moveBegin = abegin + itemsToErase; iterator moveEnd = d->end(); while (moveBegin != moveEnd) { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + static_cast(abegin)->~T(); new (abegin++) T(*moveBegin++); } @@ -710,7 +827,18 @@ T *i = l.d->end(); T *b = l.d->begin(); while (i != b) { + +#if defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable: 4127) +#endif + if (QTypeInfo::isComplex) + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + new (--w) T(*--i); else *--w = *--i; @@ -849,4 +977,4 @@ QT_END_NAMESPACE -#endif // QVECTOR_H +#endif // QVECTOR_H \ No newline at end of file