rpms/qt4/devel qt-43-aliasing.diff,NONE,1.1 qt4.spec,1.77,1.78

Than Ngo (than) fedora-extras-commits at redhat.com
Mon Jan 7 17:09:06 UTC 2008


Author: than

Update of /cvs/extras/rpms/qt4/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv5747

Modified Files:
	qt4.spec 
Added Files:
	qt-43-aliasing.diff 
Log Message:
apply patch from Dirk Müller to fix strict aliasing violations in tool classes


qt-43-aliasing.diff:

--- NEW FILE qt-43-aliasing.diff ---
--- src/corelib/tools/qmap.h
+++ src/corelib/tools/qmap.h
@@ -185,6 +185,7 @@ public:
 
     class iterator
     {
+        friend class const_iterator;
         QMapData::Node *i;
 
     public:
@@ -240,9 +241,9 @@ public:
     public:
 #endif
         inline bool operator==(const const_iterator &o) const
-            { return i == reinterpret_cast<const iterator &>(o).i; }
+            { return i == o.i; }
         inline bool operator!=(const const_iterator &o) const
-            { return i != reinterpret_cast<const iterator &>(o).i; }
+            { return i != o.i; }
 
     private:
         // ### Qt 5: remove
@@ -252,6 +253,7 @@ public:
 
     class const_iterator
     {
+        friend class iterator;
         QMapData::Node *i;
 
     public:
@@ -270,7 +272,7 @@ public:
 #else
         inline const_iterator(const iterator &o)
 #endif
-        { i = reinterpret_cast<const const_iterator &>(o).i; }
+        { i = o.i; }
 
         inline const Key &key() const { return concrete(i)->key; }
         inline const T &value() const { return concrete(i)->value; }
--- src/corelib/tools/qset.h
+++ src/corelib/tools/qset.h
@@ -84,6 +84,7 @@ public:
     {
         typedef QHash<T, QHashDummyValue> Hash;
         typename Hash::iterator i;
+        friend class const_iterator;
 
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
@@ -101,9 +102,9 @@ public:
         inline bool operator==(const iterator &o) const { return i == o.i; }
         inline bool operator!=(const iterator &o) const { return i != o.i; }
         inline bool operator==(const const_iterator &o) const
-            { return i == reinterpret_cast<const iterator &>(o).i; }
+            { return i == o.i; }
         inline bool operator!=(const const_iterator &o) const
-            { return i != reinterpret_cast<const iterator &>(o).i; }
+            { return i != o.i; }
         inline iterator &operator++() { ++i; return *this; }
         inline iterator operator++(int) { iterator r = *this; ++i; return r; }
         inline iterator &operator--() { --i; return *this; }
@@ -118,6 +119,7 @@ public:
     {
         typedef QHash<T, QHashDummyValue> Hash;
         typename Hash::const_iterator i;
+        friend class iterator;
 
     public:
         typedef std::bidirectional_iterator_tag iterator_category;
@@ -130,7 +132,7 @@ public:
         inline const_iterator(typename Hash::const_iterator o) : i(o) {}
         inline const_iterator(const const_iterator &o) : i(o.i) {}
         inline const_iterator(const iterator &o)
-            : i(reinterpret_cast<const const_iterator &>(o).i) {}
+            : i(o.i) {}
         inline const_iterator &operator=(const const_iterator &o) { i = o.i; return *this; }
         inline const T &operator*() const { return i.key(); }
         inline const T *operator->() const { return &i.key(); }
--- src/corelib/tools/qhash.h
+++ src/corelib/tools/qhash.h
@@ -291,6 +291,7 @@ public:
 
     class iterator
     {
+        friend class const_iterator;
         QHashData::Node *i;
 
     public:
@@ -343,9 +344,9 @@ public:
     public:
 #endif
         inline bool operator==(const const_iterator &o) const
-            { return i == reinterpret_cast<const iterator &>(o).i; }
+            { return i == o.i; }
         inline bool operator!=(const const_iterator &o) const
-            { return i != reinterpret_cast<const iterator &>(o).i; }
+            { return i != o.i; }
 
     private:
         // ### Qt 5: remove
@@ -355,6 +356,7 @@ public:
 
     class const_iterator
     {
+        friend class iterator;
         QHashData::Node *i;
 
     public:
@@ -374,7 +376,7 @@ public:
 #else
         inline const_iterator(const iterator &o)
 #endif
-        { i = reinterpret_cast<const const_iterator &>(o).i; }
+        { i = o.i; }
 
         inline const Key &key() const { return concrete(i)->key; }
         inline const T &value() const { return concrete(i)->value; }
--- src/corelib/tools/qlist.h
+++ src/corelib/tools/qlist.h
@@ -162,17 +162,17 @@ public:
         inline bool operator>=(const iterator& other) const { return i >= other.i; }
 #ifndef QT_STRICT_ITERATORS
         inline bool operator==(const const_iterator &o) const
-            { return i == reinterpret_cast<const iterator &>(o).i; }
+            { return i == o.i; }
         inline bool operator!=(const const_iterator &o) const
-            { return i != reinterpret_cast<const iterator &>(o).i; }
+            { return i != o.i; }
         inline bool operator<(const const_iterator& other) const
-            { return i < reinterpret_cast<const iterator &>(other).i; }
+            { return i < other.i; }
         inline bool operator<=(const const_iterator& other) const
-            { return i <= reinterpret_cast<const iterator &>(other).i; }
+            { return i <= other.i; }
         inline bool operator>(const const_iterator& other) const
-            { return i > reinterpret_cast<const iterator &>(other).i; }
+            { return i > other.i; }
         inline bool operator>=(const const_iterator& other) const
-            { return i >= reinterpret_cast<const iterator &>(other).i; }
+            { return i >= other.i; }
 #endif
         inline iterator &operator++() { ++i; return *this; }
         inline iterator operator++(int) { Node *n = i; ++i; return n; }
--- src/corelib/tools/qlinkedlist.h
+++ src/corelib/tools/qlinkedlist.h
@@ -119,9 +119,9 @@ public:
         inline bool operator==(const iterator &o) const { return i == o.i; }
         inline bool operator!=(const iterator &o) const { return i != o.i; }
         inline bool operator==(const const_iterator &o) const
-            { return i == reinterpret_cast<const iterator &>(o).i; }
+            { return i == o.i; }
         inline bool operator!=(const const_iterator &o) const
-            { return i != reinterpret_cast<const iterator &>(o).i; }
+            { return i != o.i; }
         inline iterator &operator++() { i = i->n; return *this; }
         inline iterator operator++(int) { Node *n = i; i = i->n; return n; }
         inline iterator &operator--() { i = i->p; return *this; }



Index: qt4.spec
===================================================================
RCS file: /cvs/extras/rpms/qt4/devel/qt4.spec,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -r1.77 -r1.78
--- qt4.spec	21 Dec 2007 18:12:45 -0000	1.77
+++ qt4.spec	7 Jan 2008 17:08:30 -0000	1.78
@@ -4,7 +4,7 @@
 Summary: Qt toolkit
 Name:	 qt4
 Version: 4.3.3
-Release: 2%{?dist}
+Release: 3%{?dist}
 
 # GPLv2+exceptions(see GPL_EXCEPTIONS*.txt)
 License: GPLv2
@@ -29,6 +29,9 @@
 Patch1: qt-x11-opensource-src-4.3.0-qassistant-qt4.patch
 # multilib hacks 
 Patch2: qt-x11-opensource-src-4.2.2-multilib.patch
+# strict aliasing violations in tool classes
+Patch3: qt-43-aliasing.diff
+
 ## qt-copy patches
 
 Source10: qt4-wrapper.sh
@@ -227,6 +230,7 @@
 %patch1 -p1 -b .assistant4
 # don't use -b on mkspec files, else they get installed too.
 %patch2 -p1
+%patch3 -p0
 
 # drop -fexceptions from $RPM_OPT_FLAGS
 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's|-fexceptions||g'`
@@ -637,6 +641,9 @@
 
 
 %changelog
+* Mon Jan 07 2008 Than Ngo <than at redhat.com> 4.3.3-3
+- apply patch from Dirk Müller to fix strict aliasing violations in tool classes
+
 * Fri Dec 21 2007 Rex Dieter <rdieter[AT]fedoraproject.org> 4.3.3-2
 - -doc: Requires: %%name-assistant, omit assistant bin, 
   -x11: Provides: %%name-assistant (#147948)




More information about the fedora-extras-commits mailing list