PR libstdc++/24975 (basic_string)
authorPaolo Carlini <pcarlini@suse.de>
Thu, 24 Nov 2005 01:29:51 +0000 (01:29 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 24 Nov 2005 01:29:51 +0000 (01:29 +0000)
2005-11-23  Paolo Carlini  <pcarlini@suse.de>

PR libstdc++/24975 (basic_string)
* include/bits/basic_string.h (_Rep::_S_empty_rep): Avoid
strict-aliasing warnings.

From-SVN: r107447

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.h

index 8517757ea00339efe3d76316ce46028ddd147281..d0f773dfb58c9a3e7b07fbf14c4eaa5a1368d1a2 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-23  Paolo Carlini  <pcarlini@suse.de>
+
+       PR libstdc++/24975 (basic_string)
+       * include/bits/basic_string.h (_Rep::_S_empty_rep): Avoid
+       strict-aliasing warnings.
+
 2005-11-22  Paolo Carlini  <pcarlini@suse.de>
 
        PR libstdc++/24975
index 8f35b15a07c989663cc87ec2b02bbf49e103db17..8623c8db7fea573ca98c2f5f6550a1931b43df7e 100644 (file)
@@ -177,7 +177,13 @@ namespace std
 
         static _Rep&
         _S_empty_rep()
-        { return *reinterpret_cast<_Rep*>(&_S_empty_rep_storage); }
+        { 
+         // NB: Mild hack to avoid strict-aliasing warnings.  Note that
+         // _S_empty_rep_storage is never modified and the punning should
+         // be reasonably safe in this case.
+         void* __p = reinterpret_cast<void*>(&_S_empty_rep_storage);
+         return *reinterpret_cast<_Rep*>(__p);
+       }
 
         bool
        _M_is_leaked() const