diff options
author | Paolo Carlini <pcarlini@suse.de> | 2005-11-24 01:29:51 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2005-11-24 01:29:51 +0000 |
commit | 7fdc03073c4c0f664a6d5f1a5951b07c6e37fa44 (patch) | |
tree | d1a0f1aebbb9a1bd9dea8d13348355584ec30650 | |
parent | 89de9021fb7c427c6d3ae9fd2239b67e7efbd2c9 (diff) | |
download | gcc-7fdc03073c4c0f664a6d5f1a5951b07c6e37fa44.zip gcc-7fdc03073c4c0f664a6d5f1a5951b07c6e37fa44.tar.gz gcc-7fdc03073c4c0f664a6d5f1a5951b07c6e37fa44.tar.bz2 |
PR libstdc++/24975 (basic_string)
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
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/basic_string.h | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 8517757..d0f773d 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -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 diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index 8f35b15..8623c8d 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -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 |