$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r57537 - in trunk: boost/functional/hash libs/functional/hash/test libs/unordered/test/exception libs/unordered/test/helpers libs/unordered/test/unordered
From: daniel_james_at_[hidden]
Date: 2009-11-10 03:15:58
Author: danieljames
Date: 2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
New Revision: 57537
URL: http://svn.boost.org/trac/boost/changeset/57537
Log:
Stricter warnings for unordered and hash.
There are still warnings in hash_complex_test.
Text files modified: 
   trunk/boost/functional/hash/hash.hpp                           |    13 ++++++++++                              
   trunk/libs/functional/hash/test/Jamfile.v2                     |    18 ++++++++++---                           
   trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp      |     3 ++                                      
   trunk/libs/unordered/test/exception/Jamfile.v2                 |    13 +++++++++                               
   trunk/libs/unordered/test/exception/assign_exception_tests.cpp |     4 +++                                     
   trunk/libs/unordered/test/exception/swap_exception_tests.cpp   |     4 +++                                     
   trunk/libs/unordered/test/helpers/exception_test.hpp           |     3 ++                                      
   trunk/libs/unordered/test/helpers/input_iterator.hpp           |     2 +                                       
   trunk/libs/unordered/test/helpers/list.hpp                     |    19 +++++++++++++                           
   trunk/libs/unordered/test/helpers/strong.hpp                   |     2                                         
   trunk/libs/unordered/test/helpers/tracker.hpp                  |     4 +-                                      
   trunk/libs/unordered/test/unordered/Jamfile.v2                 |    10 +++++--                                 
   trunk/libs/unordered/test/unordered/equality_tests.cpp         |    52 ++++++++++++++++++++--------------------
   trunk/libs/unordered/test/unordered/erase_tests.cpp            |     2                                         
   14 files changed, 109 insertions(+), 40 deletions(-)
Modified: trunk/boost/functional/hash/hash.hpp
==============================================================================
--- trunk/boost/functional/hash/hash.hpp	(original)
+++ trunk/boost/functional/hash/hash.hpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -197,6 +197,15 @@
         return x + (x >> 3);
     }
 
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#if BOOST_MSVC == 1400
+#pragma warning(disable:4267) // 'argument' : conversion from 'size_t' to 'unsigned int',
+                              // possible loss of data
+                              // A misguided attempt to detect 64-bit incompatability.
+#endif
+#endif
+
 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
     template <class T>
     inline void hash_combine(std::size_t& seed, T& v)
@@ -209,6 +218,10 @@
         seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
     }
 
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#endif
+
     template <class It>
     inline std::size_t hash_range(It first, It last)
     {
Modified: trunk/libs/functional/hash/test/Jamfile.v2
==============================================================================
--- trunk/libs/functional/hash/test/Jamfile.v2	(original)
+++ trunk/libs/functional/hash/test/Jamfile.v2	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -7,9 +7,16 @@
 
 project hash-tests
     : requirements
+        <warnings>all
+        <toolset>intel:<warnings>on
+        <toolset>intel:<cxxflags>-strict-ansi
+        <toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
+        <toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
         <toolset>gcc:<define>_GLIBCXX_DEBUG
-        <toolset>gcc:<cxxflags>-Wsign-promo
-        #<toolset>gcc:<cxxflags>-Wextra
+        <toolset>darwin:<define>_GLIBCXX_DEBUG
+        <toolset>msvc:<warnings-as-errors>on
+        <toolset>gcc:<warnings-as-errors>on
+        <toolset>darwin:<warnings-as-errors>on
     ;
 
 test-suite functional/hash
@@ -33,13 +40,14 @@
         [ run hash_deque_test.cpp ]
         [ run hash_set_test.cpp ]
         [ run hash_map_test.cpp ]
-        [ run hash_complex_test.cpp ]
+        [ run hash_complex_test.cpp : : : <warnings-as-errors>off ]
         [ run link_test.cpp link_test_2.cpp ]
         [ run link_ext_test.cpp link_no_ext_test.cpp ]
         [ run extensions_hpp_test.cpp ]
         [ run container_fwd_test.cpp ]
-        [ compile-fail hash_no_ext_fail_test.cpp ]
-        [ compile-fail namespace_fail_test.cpp ]
+        # Don't want compile-fail tests to fail because of warnings.
+        [ compile-fail hash_no_ext_fail_test.cpp : : : <warnings-as-errors>off  ]
+        [ compile-fail namespace_fail_test.cpp : : : <warnings-as-errors>off  ]
         [ run hash_no_ext_macro_1.cpp ]
         [ run hash_no_ext_macro_2.cpp ]
     ;
Modified: trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp
==============================================================================
--- trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp	(original)
+++ trunk/libs/functional/hash/test/hash_no_ext_fail_test.cpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -12,8 +12,11 @@
 #include <boost/functional/hash.hpp>
 #include <boost/functional/hash.hpp>
 
+template <class T> void ignore(T const&) {}
+
 int main()
 {
     HASH_NAMESPACE::hash< int[10] > hasher;
+    ignore(hasher);
     return 0;
 }
Modified: trunk/libs/unordered/test/exception/Jamfile.v2
==============================================================================
--- trunk/libs/unordered/test/exception/Jamfile.v2	(original)
+++ trunk/libs/unordered/test/exception/Jamfile.v2	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -8,7 +8,18 @@
 #alias framework : /boost/test//boost_unit_test_framework ;
 alias framework : ;
 
-project unordered-test/exception-tests ;
+project unordered-test/exception-tests
+    : requirements
+        <warnings>all
+        <toolset>intel:<warnings>on
+        <toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
+        <toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
+        <toolset>gcc:<define>_GLIBCXX_DEBUG
+        <toolset>darwin:<define>_GLIBCXX_DEBUG
+        <toolset>msvc:<warnings-as-errors>on
+        <toolset>gcc:<warnings-as-errors>on
+        <toolset>darwin:<warnings-as-errors>on
+    ;
 
 test-suite unordered-exception
     :
Modified: trunk/libs/unordered/test/exception/assign_exception_tests.cpp
==============================================================================
--- trunk/libs/unordered/test/exception/assign_exception_tests.cpp	(original)
+++ trunk/libs/unordered/test/exception/assign_exception_tests.cpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -7,6 +7,10 @@
 #include "../helpers/random_values.hpp"
 #include "../helpers/invariants.hpp"
 
+#if defined(BOOST_MSVC)
+#pragma warning(disable:4512) // assignment operator could not be generated
+#endif
+
 test::seed_t seed(12847);
 
 template <class T>
Modified: trunk/libs/unordered/test/exception/swap_exception_tests.cpp
==============================================================================
--- trunk/libs/unordered/test/exception/swap_exception_tests.cpp	(original)
+++ trunk/libs/unordered/test/exception/swap_exception_tests.cpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -7,6 +7,10 @@
 #include "../helpers/random_values.hpp"
 #include "../helpers/invariants.hpp"
 
+#if defined(BOOST_MSVC)
+#pragma warning(disable:4512) // assignment operator could not be generated
+#endif
+
 test::seed_t seed(9387);
 
 template <class T>
Modified: trunk/libs/unordered/test/helpers/exception_test.hpp
==============================================================================
--- trunk/libs/unordered/test/helpers/exception_test.hpp	(original)
+++ trunk/libs/unordered/test/helpers/exception_test.hpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -143,6 +143,9 @@
     class test_runner
     {
         Test const& test_;
+
+        test_runner(test_runner const&);
+        test_runner& operator=(test_runner const&);
     public:
         test_runner(Test const& t) : test_(t) {}
         void operator()() const {
Modified: trunk/libs/unordered/test/helpers/input_iterator.hpp
==============================================================================
--- trunk/libs/unordered/test/helpers/input_iterator.hpp	(original)
+++ trunk/libs/unordered/test/helpers/input_iterator.hpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -21,6 +21,8 @@
         operator value_type const&() const { return v_; }
         
         value_type v_;
+    private:
+        proxy& operator=(proxy const&);
     };
 
     template <class Iterator>
Modified: trunk/libs/unordered/test/helpers/list.hpp
==============================================================================
--- trunk/libs/unordered/test/helpers/list.hpp	(original)
+++ trunk/libs/unordered/test/helpers/list.hpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -17,6 +17,23 @@
 
 namespace test
 {
+    template <typename It1, typename It2>
+    bool equal(It1 begin, It1 end, It2 compare)
+    {
+        for(;begin != end; ++begin, ++compare)
+            if(*begin != *compare) return false;
+        return true;
+    }
+
+    template <typename It1, typename It2, typename Pred>
+    bool equal(It1 begin, It1 end, It2 compare, Pred predicate)
+    {
+        for(;begin != end; ++begin, ++compare)
+            if(!predicate(*begin, *compare)) return false;
+        return true;
+    }
+
+
     template <typename T> class list;
 
     namespace test_detail
@@ -222,7 +239,7 @@
 
         bool operator==(list const& y) const {
             return size() == y.size() &&
-                std::equal(begin(), end(), y.begin());
+                test::equal(begin(), end(), y.begin());
         }
 
         bool operator!=(list const& y) const {
Modified: trunk/libs/unordered/test/helpers/strong.hpp
==============================================================================
--- trunk/libs/unordered/test/helpers/strong.hpp	(original)
+++ trunk/libs/unordered/test/helpers/strong.hpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -31,7 +31,7 @@
 
         void test(X const& x, unsigned int allocations = 0) const {
             if(!(x.size() == values_.size() &&
-                    std::equal(x.cbegin(), x.cend(), values_.begin(),
+                    test::equal(x.cbegin(), x.cend(), values_.begin(),
                         test::equivalent)))
                 BOOST_ERROR("Strong exception safety failure.");
             if(allocations != allocations_)
Modified: trunk/libs/unordered/test/helpers/tracker.hpp
==============================================================================
--- trunk/libs/unordered/test/helpers/tracker.hpp	(original)
+++ trunk/libs/unordered/test/helpers/tracker.hpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -50,7 +50,7 @@
         values1.sort();
         values2.sort();
         BOOST_TEST(values1.size() == values2.size() &&
-                std::equal(values1.begin(), values1.end(), values2.begin(),
+                test::equal(values1.begin(), values1.end(), values2.begin(),
                     test::equivalent));
     }
 
@@ -62,7 +62,7 @@
         values1.sort();
         values2.sort();
         BOOST_TEST(values1.size() == values2.size() &&
-                std::equal(values1.begin(), values1.end(), values2.begin(), test::equivalent));
+                test::equal(values1.begin(), values1.end(), values2.begin(), test::equivalent));
     }
 
     template <class X>
Modified: trunk/libs/unordered/test/unordered/Jamfile.v2
==============================================================================
--- trunk/libs/unordered/test/unordered/Jamfile.v2	(original)
+++ trunk/libs/unordered/test/unordered/Jamfile.v2	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -9,9 +9,13 @@
     : requirements
         <warnings>all
         <toolset>intel:<warnings>on
-        <toolset>intel:<cxxflags>-strict-ansi
-        <toolset>msvc:<cxxflags>/W4
-        <toolset>gcc:<cxxflags>"-Wsign-promo -Wunused-parameter -pedantic"
+        <toolset>gcc:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
+        <toolset>darwin:<cxxflags>"-pedantic -Wstrict-aliasing -fstrict-aliasing -Wextra -Wsign-promo -Wunused-parameter"
+        <toolset>gcc:<define>_GLIBCXX_DEBUG
+        <toolset>darwin:<define>_GLIBCXX_DEBUG
+        <toolset>msvc:<warnings-as-errors>on
+        <toolset>gcc:<warnings-as-errors>on
+        <toolset>darwin:<warnings-as-errors>on
     ;
 
 test-suite unordered
Modified: trunk/libs/unordered/test/unordered/equality_tests.cpp
==============================================================================
--- trunk/libs/unordered/test/unordered/equality_tests.cpp	(original)
+++ trunk/libs/unordered/test/unordered/equality_tests.cpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -29,36 +29,36 @@
     };
 
 #define UNORDERED_EQUALITY_SET_TEST(seq1, op, seq2) \
-    do { \
+    { \
         boost::unordered_set<int, mod_compare, mod_compare> set1, set2; \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set1, seq1) \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set2, seq2) \
         BOOST_TEST(set1 op set2); \
-    } while(false)
+    }
 
 #define UNORDERED_EQUALITY_MULTISET_TEST(seq1, op, seq2) \
-    do { \
+    { \
         boost::unordered_multiset<int, mod_compare, mod_compare> set1, set2; \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set1, seq1) \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_SET_INSERT, set2, seq2) \
         BOOST_TEST(set1 op set2); \
-    } while(false)
+    }
 
 #define UNORDERED_EQUALITY_MAP_TEST(seq1, op, seq2) \
-    do { \
+    { \
         boost::unordered_map<int, int, mod_compare, mod_compare> map1, map2; \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map1, seq1) \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map2, seq2) \
         BOOST_TEST(map1 op map2); \
-    } while(false)
+    }
 
 #define UNORDERED_EQUALITY_MULTIMAP_TEST(seq1, op, seq2) \
-    do { \
+    { \
         boost::unordered_multimap<int, int, mod_compare, mod_compare> map1, map2; \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map1, seq1) \
         BOOST_PP_SEQ_FOR_EACH(UNORDERED_MAP_INSERT, map2, seq2) \
         BOOST_TEST(map1 op map2); \
-    } while(false)
+    }
 
 #define UNORDERED_SET_INSERT(r, set, item) set.insert(item);
 #define UNORDERED_MAP_INSERT(r, map, item) \
@@ -89,57 +89,57 @@
     
     UNORDERED_AUTO_TEST(equality_key_value_tests)
     {
-        UNORDERED_EQUALITY_MULTISET_TEST((1), !=, (2));
-        UNORDERED_EQUALITY_SET_TEST((2), ==, (2));
-        UNORDERED_EQUALITY_MAP_TEST(((1)(1))((2)(1)), !=, ((1)(1))((3)(1)));
+        UNORDERED_EQUALITY_MULTISET_TEST((1), !=, (2))
+        UNORDERED_EQUALITY_SET_TEST((2), ==, (2))
+        UNORDERED_EQUALITY_MAP_TEST(((1)(1))((2)(1)), !=, ((1)(1))((3)(1)))
     }
     
     UNORDERED_AUTO_TEST(equality_collision_test)
     {
         UNORDERED_EQUALITY_MULTISET_TEST(
-            (1), !=, (501));
+            (1), !=, (501))
         UNORDERED_EQUALITY_MULTISET_TEST(
-            (1)(251), !=, (1)(501));
+            (1)(251), !=, (1)(501))
         UNORDERED_EQUALITY_MULTIMAP_TEST(
-            ((251)(1))((1)(1)), !=, ((501)(1))((1)(1)));
+            ((251)(1))((1)(1)), !=, ((501)(1))((1)(1)))
         UNORDERED_EQUALITY_MULTISET_TEST(
-            (1)(501), ==, (1)(501));
+            (1)(501), ==, (1)(501))
         UNORDERED_EQUALITY_SET_TEST(
-            (1)(501), ==, (501)(1));
+            (1)(501), ==, (501)(1))
     }
 
     UNORDERED_AUTO_TEST(equality_group_size_test)
     {
         UNORDERED_EQUALITY_MULTISET_TEST(
-            (10)(20)(20), !=, (10)(10)(20));
+            (10)(20)(20), !=, (10)(10)(20))
         UNORDERED_EQUALITY_MULTIMAP_TEST(
             ((10)(1))((20)(1))((20)(1)), !=,
-            ((10)(1))((20)(1))((10)(1)));
+            ((10)(1))((20)(1))((10)(1)))
         UNORDERED_EQUALITY_MULTIMAP_TEST(
             ((20)(1))((10)(1))((10)(1)), ==,
-            ((10)(1))((20)(1))((10)(1)));
+            ((10)(1))((20)(1))((10)(1)))
     }
     
     UNORDERED_AUTO_TEST(equality_map_value_test)
     {
         UNORDERED_EQUALITY_MAP_TEST(
-            ((1)(1)), !=, ((1)(2)));
+            ((1)(1)), !=, ((1)(2)))
         UNORDERED_EQUALITY_MAP_TEST(
-            ((1)(1)), ==, ((1)(1)));
+            ((1)(1)), ==, ((1)(1)))
         UNORDERED_EQUALITY_MULTIMAP_TEST(
-            ((1)(1)), !=, ((1)(2)));
+            ((1)(1)), !=, ((1)(2)))
         UNORDERED_EQUALITY_MULTIMAP_TEST(
-            ((1)(1))((1)(1)), !=, ((1)(1))((1)(2)));
+            ((1)(1))((1)(1)), !=, ((1)(1))((1)(2)))
         UNORDERED_EQUALITY_MULTIMAP_TEST(
-            ((1)(2))((1)(1)), !=, ((1)(1))((1)(2)));
+            ((1)(2))((1)(1)), !=, ((1)(1))((1)(2)))
     }
 
     UNORDERED_AUTO_TEST(equality_predicate_test)
     {
         UNORDERED_EQUALITY_SET_TEST(
-            (1), ==, (1001));
+            (1), ==, (1001))
         UNORDERED_EQUALITY_MAP_TEST(
-            ((1)(2))((1001)(1)), ==, ((1001)(2))((1)(1)));
+            ((1)(2))((1001)(1)), ==, ((1001)(2))((1)(1)))
     }
 
     // Test that equality still works when the two containers have
Modified: trunk/libs/unordered/test/unordered/erase_tests.cpp
==============================================================================
--- trunk/libs/unordered/test/unordered/erase_tests.cpp	(original)
+++ trunk/libs/unordered/test/unordered/erase_tests.cpp	2009-11-10 03:15:55 EST (Tue, 10 Nov 2009)
@@ -65,7 +65,7 @@
         while(size > 0 && !x.empty())
         {
             using namespace std;
-            int index = rand() % x.size();
+            int index = rand() % (int) x.size();
             BOOST_DEDUCED_TYPENAME Container::const_iterator prev, pos, next;
             if(index == 0) {
                 prev = pos = x.begin();