On sábado, 7 de dezembro de 2013 13:36:35, Kurt Pattyn wrote:
>                         "-Wsign-conversion"
>                         "-Wsign-promo"
>                         "-Wsign-compare"

Oh, man. These three are extremely annoying. I now remember why we don't like 
unsigned types in our API...

So why are we using uint in a few member variables, like in QMetaType?

Here's what I've got for QtCore, without fixing the 
Q_DECLARE_METATYPE_TEMPLATE_2ARG macro. Do we want apply this?

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center
diff --git i/src/corelib/global/qendian.h w/src/corelib/global/qendian.h
index 9b939fe..2b02ff7 100644
--- i/src/corelib/global/qendian.h
+++ w/src/corelib/global/qendian.h
@@ -331,17 +331,17 @@ template <> inline quint16 qbswap<quint16>(quint16 source)
 // signed specializations
 template <> inline qint64 qbswap<qint64>(qint64 source)
 {
-    return qbswap<quint64>(quint64(source));
+    return qint64(qbswap<quint64>(quint64(source)));
 }
 
 template <> inline qint32 qbswap<qint32>(qint32 source)
 {
-    return qbswap<quint32>(quint32(source));
+    return qint32(qbswap<quint32>(quint32(source)));
 }
 
 template <> inline qint16 qbswap<qint16>(qint16 source)
 {
-    return qbswap<quint16>(quint16(source));
+    return qint16(qbswap<quint16>(quint16(source)));
 }
 
 #if Q_BYTE_ORDER == Q_BIG_ENDIAN
diff --git i/src/corelib/io/qdatastream.h w/src/corelib/io/qdatastream.h
index f107e80..032a6a8 100644
--- i/src/corelib/io/qdatastream.h
+++ w/src/corelib/io/qdatastream.h
@@ -228,10 +228,10 @@ template <typename T>
 QDataStream& operator>>(QDataStream& s, QList<T>& l)
 {
     l.clear();
-    quint32 c;
+    qint32 c;
     s >> c;
     l.reserve(c);
-    for(quint32 i = 0; i < c; ++i)
+    for(qint32 i = 0; i < c; ++i)
     {
         T t;
         s >> t;
diff --git i/src/corelib/itemmodels/qabstractitemmodel.h w/src/corelib/itemmodels/qabstractitemmodel.h
index 95b9d27..fe18a9f 100644
--- i/src/corelib/itemmodels/qabstractitemmodel.h
+++ w/src/corelib/itemmodels/qabstractitemmodel.h
@@ -500,7 +500,7 @@ inline Qt::ItemFlags QModelIndex::flags() const
 { return m ? m->flags(*this) : Qt::ItemFlags(0); }
 
 inline uint qHash(const QModelIndex &index)
-{ return uint((index.row() << 4) + index.column() + index.internalId()); }
+{ return uint((index.row() << 4) + uint(index.column()) + index.internalId()); }
 
 QT_END_NAMESPACE
 
diff --git i/src/corelib/json/qjsonvalue.h w/src/corelib/json/qjsonvalue.h
index aecbabb..883dbf6 100644
--- i/src/corelib/json/qjsonvalue.h
+++ w/src/corelib/json/qjsonvalue.h
@@ -141,9 +141,9 @@ class Q_CORE_EXPORT QJsonValueRef
 {
 public:
     QJsonValueRef(QJsonArray *array, int idx)
-        : a(array), is_object(false), index(idx) {}
+        : a(array), is_object(false), index(uint(idx)) {}
     QJsonValueRef(QJsonObject *object, int idx)
-        : o(object), is_object(true), index(idx) {}
+        : o(object), is_object(true), index(uint(idx)) {}
 
     inline operator QJsonValue() const { return toValue(); }
     QJsonValueRef &operator = (const QJsonValue &val);
diff --git i/src/corelib/kernel/qmetatype.h w/src/corelib/kernel/qmetatype.h
index fc1d21b..72a967d0 100644
--- i/src/corelib/kernel/qmetatype.h
+++ w/src/corelib/kernel/qmetatype.h
@@ -628,7 +628,7 @@ private:
                      const QMetaObject *metaObject);
     QMetaType(const QMetaType &other);
     QMetaType &operator =(const QMetaType &);
-    inline bool isExtended(const ExtensionFlag flag) const { return m_extensionFlags & flag; }
+    inline bool isExtended(const ExtensionFlag flag) const { return int(m_extensionFlags) & flag; }
 
     // Methods used for future binary compatible extensions
     void ctor(const QMetaTypeInterface *info);
@@ -2000,8 +2000,8 @@ inline void QMetaType::destruct(void *data) const
 inline int QMetaType::sizeOf() const
 {
     if (Q_UNLIKELY(isExtended(SizeEx)))
-        return sizeExtended();
-    return m_size;
+        return int(sizeExtended());
+    return int(m_size);
 }
 
 inline QMetaType::TypeFlags QMetaType::flags() const
diff --git i/src/corelib/tools/qalgorithms.h w/src/corelib/tools/qalgorithms.h
index c6eede0..fa9ab5f 100644
--- i/src/corelib/tools/qalgorithms.h
+++ w/src/corelib/tools/qalgorithms.h
@@ -535,7 +535,7 @@ QT_DEPRECATED Q_OUTOFLINE_TEMPLATE RandomAccessIterator qBinaryFindHelper(Random
 Q_DECL_CONSTEXPR inline uint qPopulationCount(quint32 v)
 {
 #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNT
-    return __builtin_popcount(v);
+    return uint(__builtin_popcount(v));
 #else
     // See http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
     return
@@ -548,7 +548,7 @@ Q_DECL_CONSTEXPR inline uint qPopulationCount(quint32 v)
 Q_DECL_CONSTEXPR inline uint qPopulationCount(quint8 v)
 {
 #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNT
-    return __builtin_popcount(v);
+    return uint(__builtin_popcount(v));
 #else
     return
         (((v      ) & 0xfff)    * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f;
@@ -558,7 +558,7 @@ Q_DECL_CONSTEXPR inline uint qPopulationCount(quint8 v)
 Q_DECL_CONSTEXPR inline uint qPopulationCount(quint16 v)
 {
 #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNT
-    return __builtin_popcount(v);
+    return uint(__builtin_popcount(v));
 #else
     return
         (((v      ) & 0xfff)    * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +
@@ -569,7 +569,7 @@ Q_DECL_CONSTEXPR inline uint qPopulationCount(quint16 v)
 Q_DECL_CONSTEXPR inline uint qPopulationCount(quint64 v)
 {
 #ifdef QALGORITHMS_USE_BUILTIN_POPCOUNT
-    return __builtin_popcountll(v);
+    return uint(__builtin_popcountll(v));
 #else
     return
         (((v      ) & 0xfff)    * Q_UINT64_C(0x1001001001001) & Q_UINT64_C(0x84210842108421)) % 0x1f +
diff --git i/src/corelib/tools/qbitarray.h w/src/corelib/tools/qbitarray.h
index eaf9b2f..893bffa 100644
--- i/src/corelib/tools/qbitarray.h
+++ w/src/corelib/tools/qbitarray.h
@@ -139,7 +139,7 @@ inline bool QBitArray::toggleBit(int i)
  uchar c = uchar(*p&b); *p^=b; return c!=0; }
 
 inline bool QBitArray::operator[](int i) const { return testBit(i); }
-inline bool QBitArray::operator[](uint i) const { return testBit(i); }
+inline bool QBitArray::operator[](uint i) const { return testBit(int(i)); }
 inline bool QBitArray::at(int i) const { return testBit(i); }
 
 class Q_CORE_EXPORT QBitRef
@@ -159,7 +159,7 @@ public:
 inline QBitRef QBitArray::operator[](int i)
 { Q_ASSERT(i >= 0); return QBitRef(*this, i); }
 inline QBitRef QBitArray::operator[](uint i)
-{ return QBitRef(*this, i); }
+{ return QBitRef(*this, int(i)); }
 
 
 #ifndef QT_NO_DATASTREAM
diff --git i/src/corelib/tools/qbytearray.h w/src/corelib/tools/qbytearray.h
index a3b80fc..dbfca9a 100644
--- i/src/corelib/tools/qbytearray.h
+++ w/src/corelib/tools/qbytearray.h
@@ -478,7 +478,7 @@ public:
 inline QByteRef QByteArray::operator[](int i)
 { Q_ASSERT(i >= 0); return QByteRef(*this, i); }
 inline QByteRef QByteArray::operator[](uint i)
-{ return QByteRef(*this, i); }
+{ return QByteRef(*this, int(i)); }
 inline QByteArray::iterator QByteArray::begin()
 { return data(); }
 inline QByteArray::const_iterator QByteArray::begin() const
@@ -518,7 +518,7 @@ inline bool QByteArray::contains(const QByteArray &a) const
 inline bool QByteArray::contains(char c) const
 { return indexOf(c) != -1; }
 inline bool operator==(const QByteArray &a1, const QByteArray &a2)
-{ return (a1.size() == a2.size()) && (memcmp(a1.constData(), a2.constData(), a1.size())==0); }
+{ return (a1.size() == a2.size()) && (memcmp(a1.constData(), a2.constData(), size_t(a1.size()))==0); }
 inline bool operator==(const QByteArray &a1, const char *a2)
 { return a2 ? qstrcmp(a1,a2) == 0 : a1.isEmpty(); }
 inline bool operator==(const char *a1, const QByteArray &a2)
@@ -568,11 +568,11 @@ inline const QByteArray operator+(char a1, const QByteArray &a2)
 inline bool QByteArray::contains(const char *c) const
 { return indexOf(c) != -1; }
 inline QByteArray &QByteArray::replace(char before, const char *c)
-{ return replace(&before, 1, c, qstrlen(c)); }
+{ return replace(&before, 1, c, int(qstrlen(c))); }
 inline QByteArray &QByteArray::replace(const QByteArray &before, const char *c)
-{ return replace(before.constData(), before.size(), c, qstrlen(c)); }
+{ return replace(before.constData(), before.size(), c, int(qstrlen(c))); }
 inline QByteArray &QByteArray::replace(const char *before, const char *after)
-{ return replace(before, qstrlen(before), after, qstrlen(after)); }
+{ return replace(before, int(qstrlen(before)), after, int(qstrlen(after))); }
 
 inline QByteArray &QByteArray::setNum(short n, int base)
 { return base == 10 ? setNum(qlonglong(n), base) : setNum(qulonglong(ushort(n)), base); }
diff --git i/src/corelib/tools/qhash.h w/src/corelib/tools/qhash.h
index 9dd0e61..be362f7 100644
--- i/src/corelib/tools/qhash.h
+++ w/src/corelib/tools/qhash.h
@@ -924,7 +924,7 @@ Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(cons
             *ahp = h;
     }
     if (d->numBuckets) {
-        node = reinterpret_cast<Node **>(&d->buckets[h % d->numBuckets]);
+        node = reinterpret_cast<Node **>(&d->buckets[h % uint(d->numBuckets)]);
         Q_ASSERT(*node == e || (*node)->next);
         while (*node != e && !(*node)->same_key(h, akey))
             node = &(*node)->next;
diff --git i/src/corelib/tools/qlist.h w/src/corelib/tools/qlist.h
index 333ce72..1a38c92 100644
--- i/src/corelib/tools/qlist.h
+++ w/src/corelib/tools/qlist.h
@@ -414,7 +414,7 @@ Q_INLINE_TEMPLATE void QList<T>::node_copy(Node *from, Node *to, Node *src)
         }
     } else {
         if (src != from && to - from > 0)
-            memcpy(from, src, (to - from) * sizeof(Node));
+            memcpy(from, src, size_t(to - from) * sizeof(Node));
     }
 }
 
diff --git i/src/corelib/tools/qmap.h w/src/corelib/tools/qmap.h
index db0cd6a..d950881 100644
--- i/src/corelib/tools/qmap.h
+++ w/src/corelib/tools/qmap.h
@@ -99,8 +99,8 @@ struct Q_CORE_EXPORT QMapNodeBase
     QMapNodeBase *previousNode() { return const_cast<QMapNodeBase *>(const_cast<const QMapNodeBase *>(this)->previousNode()); }
 
     Color color() const { return Color(p & 1); }
-    void setColor(Color c) { if (c == Black) p |= Black; else p &= ~Black; }
-    QMapNodeBase *parent() const { return reinterpret_cast<QMapNodeBase *>(p & ~Mask); }
+    void setColor(Color c) { if (c == Black) p |= uint(Black); else p &= uint(~Black); }
+    QMapNodeBase *parent() const { return reinterpret_cast<QMapNodeBase *>(p & uint(~Mask)); }
     void setParent(QMapNodeBase *pp) { p = (p & Mask) | quintptr(pp); }
 
     QMapNodeBase *minimumNode() { QMapNodeBase *n = this; while (n->left) n = n->left; return n; }
diff --git i/src/corelib/tools/qstring.h w/src/corelib/tools/qstring.h
index 10d4d9b..ea112c1 100644
--- i/src/corelib/tools/qstring.h
+++ w/src/corelib/tools/qstring.h
@@ -89,7 +89,7 @@ class QLatin1String
 public:
     Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s) : m_size(s ? int(strlen(s)) : 0), m_data(s) {}
     Q_DECL_CONSTEXPR inline explicit QLatin1String(const char *s, int sz) : m_size(sz), m_data(s) {}
-    inline explicit QLatin1String(const QByteArray &s) : m_size(int(qstrnlen(s.constData(), s.size()))), m_data(s.constData()) {}
+    inline explicit QLatin1String(const QByteArray &s) : m_size(int(qstrnlen(s.constData(), uint(s.size())))), m_data(s.constData()) {}
 
     inline const char *latin1() const { return m_data; }
     inline int size() const { return m_size; }
@@ -507,11 +507,11 @@ public:
         return fromLocal8Bit_helper(str, (str && size == -1) ? int(strlen(str)) : size);
     }
     static inline QString fromLatin1(const QByteArray &str)
-    { return fromLatin1(str.data(), qstrnlen(str.constData(), str.size())); }
+    { return fromLatin1(str.data(), int(qstrnlen(str.constData(), uint(str.size())))); }
     static inline QString fromUtf8(const QByteArray &str)
-    { return fromUtf8(str.data(), qstrnlen(str.constData(), str.size())); }
+    { return fromUtf8(str.data(), int(qstrnlen(str.constData(), uint(str.size())))); }
     static inline QString fromLocal8Bit(const QByteArray &str)
-    { return fromLocal8Bit(str.data(), qstrnlen(str.constData(), str.size())); }
+    { return fromLocal8Bit(str.data(), int(qstrnlen(str.constData(), uint(str.size())))); }
     static QString fromUtf16(const ushort *, int size = -1);
     static QString fromUcs4(const uint *, int size = -1);
     static QString fromRawData(const QChar *, int size);
@@ -861,7 +861,7 @@ inline QString QString::section(QChar asep, int astart, int aend, SectionFlags a
 inline int QString::toWCharArray(wchar_t *array) const
 {
     if (sizeof(wchar_t) == sizeof(QChar)) {
-        memcpy(array, data(), sizeof(QChar) * size());
+        memcpy(array, data(), sizeof(QChar) * uint(size()));
         return size();
     }
     return toUcs4_helper(reinterpret_cast<const ushort *>(data()), size(), reinterpret_cast<uint *>(array));
@@ -982,7 +982,7 @@ inline QString &QString::setUtf16(const ushort *autf16, int asize)
 inline QCharRef QString::operator[](int i)
 { Q_ASSERT(i >= 0); return QCharRef(*this, i); }
 inline QCharRef QString::operator[](uint i)
-{ return QCharRef(*this, i); }
+{ return QCharRef(*this, int(i)); }
 inline QString::iterator QString::begin()
 { detach(); return reinterpret_cast<QChar*>(d.b); }
 inline QString::const_iterator QString::begin() const
@@ -1015,20 +1015,20 @@ inline bool operator!=(QString::Null, const QString &s) { return !s.isNull(); }
 inline bool operator!=(const QString &s, QString::Null) { return !s.isNull(); }
 
 inline bool operator==(QLatin1String s1, QLatin1String s2)
-{ return (s1.size() == s2.size() && !memcmp(s1.latin1(), s2.latin1(), s1.size())); }
+{ return (s1.size() == s2.size() && !memcmp(s1.latin1(), s2.latin1(), size_t(s1.size()))); }
 inline bool operator!=(QLatin1String s1, QLatin1String s2)
-{ return (s1.size() != s2.size() || memcmp(s1.latin1(), s2.latin1(), s1.size())); }
+{ return (s1.size() != s2.size() || memcmp(s1.latin1(), s2.latin1(), size_t(s1.size()))); }
 inline bool operator<(QLatin1String s1, QLatin1String s2)
-{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
+{ int r = memcmp(s1.latin1(), s2.latin1(), size_t(qMin(s1.size(), s2.size())));
   return (r < 0) || (r == 0 && s1.size() < s2.size()); }
 inline bool operator<=(QLatin1String s1, QLatin1String s2)
-{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
+{ int r = memcmp(s1.latin1(), s2.latin1(), size_t(qMin(s1.size(), s2.size())));
   return (r < 0) || (r == 0 && s1.size() <= s2.size()); }
 inline bool operator>(QLatin1String s1, QLatin1String s2)
-{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
+{ int r = memcmp(s1.latin1(), s2.latin1(), size_t(qMin(s1.size(), s2.size())));
   return (r > 0) || (r == 0 && s1.size() > s2.size()); }
 inline bool operator>=(QLatin1String s1, QLatin1String s2)
-{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size()));
+{ int r = memcmp(s1.latin1(), s2.latin1(), size_t(qMin(s1.size(), s2.size())));
   return (r > 0) || (r == 0 && s1.size() >= s2.size()); }
 
 inline bool QLatin1String::operator==(const QString &s) const
@@ -1180,7 +1180,7 @@ inline QT_ASCII_CAST_WARN const QString operator+(const QString &s, const QByteA
 #endif // QT_USE_QSTRINGBUILDER
 
 inline std::string QString::toStdString() const
-{ const QByteArray asc = toUtf8(); return std::string(asc.constData(), asc.length()); }
+{ const QByteArray asc = toUtf8(); return std::string(asc.constData(), size_t(asc.length())); }
 
 inline QString QString::fromStdString(const std::string &s)
 { return fromUtf8(s.data(), int(s.size())); }
@@ -1188,7 +1188,7 @@ inline QString QString::fromStdString(const std::string &s)
 inline std::wstring QString::toStdWString() const
 {
     std::wstring str;
-    str.resize(length());
+    str.resize(size_t(length()));
 
 #if defined(_MSC_VER) && _MSC_VER >= 1400
     // VS2005 crashes if the string is empty
@@ -1196,7 +1196,7 @@ inline std::wstring QString::toStdWString() const
         return str;
 #endif
 
-    str.resize(toWCharArray(&(*str.begin())));
+    str.resize(size_t(toWCharArray(&(*str.begin()))));
     return str;
 }
 
diff --git i/src/corelib/tools/qstringbuilder.h w/src/corelib/tools/qstringbuilder.h
index 23d61d6..4838624 100644
--- i/src/corelib/tools/qstringbuilder.h
+++ w/src/corelib/tools/qstringbuilder.h
@@ -252,7 +252,7 @@ template <> struct QConcatenable<QString> : private QAbstractConcatenable
     static inline void appendTo(const QString &a, QChar *&out)
     {
         const int n = a.size();
-        memcpy(out, reinterpret_cast<const char*>(a.constData()), sizeof(QChar) * n);
+        memcpy(out, reinterpret_cast<const char*>(a.constData()), sizeof(QChar) * uint(n));
         out += n;
     }
 };
@@ -270,7 +270,7 @@ template <> struct QConcatenable<QStringRef> : private QAbstractConcatenable
     static inline void appendTo(const QStringRef &a, QChar *&out)
     {
         const int n = a.size();
-        memcpy(out, reinterpret_cast<const char*>(a.constData()), sizeof(QChar) * n);
+        memcpy(out, reinterpret_cast<const char*>(a.constData()), sizeof(QChar) * uint(n));
         out += n;
     }
 };
@@ -318,7 +318,7 @@ template <> struct QConcatenable<const char *> : private QAbstractConcatenable
     typedef char const *type;
     typedef QByteArray ConvertTo;
     enum { ExactSize = false };
-    static int size(const char *a) { return qstrlen(a); }
+    static int size(const char *a) { return int(qstrlen(a)); }
 #ifndef QT_NO_CAST_FROM_ASCII
     static inline void QT_ASCII_CAST_WARN appendTo(const char *a, QChar *&out)
     { QAbstractConcatenable::convertFromAscii(a, -1, out); }

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to