From d39627c5b610628d19cccb5b72466a9b19be35e6 Mon Sep 17 00:00:00 2001 From: "Ralf W. Grosse-Kunstleve" Date: Wed, 8 Dec 2010 17:53:29 +0000 Subject: [PATCH] boost/optional/optional.hpp: avoid gcc 3.2 warnings [SVN r67109] --- include/boost/optional/optional.hpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/include/boost/optional/optional.hpp b/include/boost/optional/optional.hpp index 4e4e4bb..e2e4fcc 100644 --- a/include/boost/optional/optional.hpp +++ b/include/boost/optional/optional.hpp @@ -103,6 +103,12 @@ class typed_in_place_factory_base ; namespace optional_detail { +#if defined(__GNUC__) \ + && !(__GNUC__ == 3 && __GNUC_MINOR__ == 2) \ + && !defined(__INTEL_COMPILER) +#define BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS +#endif + // This local class is used instead of that in "aligned_storage.hpp" // because I've found the 'official' class to ICE BCB5.5 // when some types are used with optional<> @@ -112,8 +118,8 @@ class aligned_storage { // Borland ICEs if unnamed unions are used for this! union -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) // This works around GCC warnings about breaking strict aliasing rules when casting storage address to T* +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS) __attribute__((may_alias)) #endif dummy_u @@ -125,7 +131,7 @@ class aligned_storage public: -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS) void const* address() const { return &dummy_; } void * address() { return &dummy_; } #else @@ -437,7 +443,7 @@ class optional_base : public optional_tag private : // internal_type can be either T or reference_content -#if defined(__GNUC__) && !defined(__INTEL_COMPILER) +#if defined(BOOST_OPTIONAL_DETAIL_USE_ATTRIBUTE_MAY_ALIAS) // This workaround is supposed to silence GCC warnings about broken strict aliasing rules internal_type const* get_object() const {