2005-10-03 Paolo Carlini <pcarlini@suse.de>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Oct 2005 17:35:55 +0000 (17:35 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Oct 2005 17:35:55 +0000 (17:35 +0000)
* include/tr1/hashtable
(node_iterator::node_iterator(const node_iterator<,true,>&)): Fix to
take a "false" (i.e., is_const == false) node_iterator.
(hashtable_iterator::hashtable_iterator(const hashtable_iterator<,
true,>&)): Likewise for hashtable_iterator.
(hashtable::const_local_iterator): Fix typedef (is_const == true).
(hashtable::const_iterator): Likewise.
* testsuite/tr1/6_containers/unordered/types/map_iterator.cc: New.
* testsuite/tr1/6_containers/unordered/types/multimap_iterator.cc: New.
* testsuite/tr1/6_containers/unordered/types/set_iterator.cc: New.
* testsuite/tr1/6_containers/unordered/types/multiset_iterator.cc: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104900 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/tr1/hashtable
libstdc++-v3/testsuite/tr1/6_containers/unordered/types/map_iterator.cc [new file with mode: 0644]
libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multimap_iterator.cc [new file with mode: 0644]
libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multiset_iterator.cc [new file with mode: 0644]
libstdc++-v3/testsuite/tr1/6_containers/unordered/types/set_iterator.cc [new file with mode: 0644]

index 789c85c..1d0fc12 100644 (file)
@@ -1,3 +1,17 @@
+2005-10-03  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/tr1/hashtable
+       (node_iterator::node_iterator(const node_iterator<,true,>&)): Fix to
+       take a "false" (i.e., is_const == false) node_iterator.
+       (hashtable_iterator::hashtable_iterator(const hashtable_iterator<,
+       true,>&)): Likewise for hashtable_iterator.
+       (hashtable::const_local_iterator): Fix typedef (is_const == true).
+       (hashtable::const_iterator): Likewise.
+       * testsuite/tr1/6_containers/unordered/types/map_iterator.cc: New.
+       * testsuite/tr1/6_containers/unordered/types/multimap_iterator.cc: New.
+       * testsuite/tr1/6_containers/unordered/types/set_iterator.cc: New.
+       * testsuite/tr1/6_containers/unordered/types/multiset_iterator.cc: New.
 2005-10-02  Paolo Carlini  <pcarlini@suse.de>
 
        PR libstdc++/24054
index f5f1e29..240c471 100644 (file)
@@ -171,7 +171,7 @@ namespace Internal
       node_iterator(hash_node<Value, cache>* p = 0)
       : node_iterator_base<Value, cache>(p) { }
 
-      node_iterator(const node_iterator<Value, true, cache>& x)
+      node_iterator(const node_iterator<Value, false, cache>& x)
       : node_iterator_base<Value, cache>(x.m_cur) { }
 
       reference
@@ -266,7 +266,7 @@ namespace Internal
       hashtable_iterator(hash_node<Value, cache>** b)
       : hashtable_iterator_base<Value, cache>(*b, b) { }
   
-      hashtable_iterator(const hashtable_iterator<Value, true, cache>& x)
+      hashtable_iterator(const hashtable_iterator<Value, false, cache>& x)
       : hashtable_iterator_base<Value, cache>(x.m_cur_node, x.m_cur_bucket) { }
 
       reference
@@ -890,13 +890,13 @@ namespace tr1
       typedef Internal::node_iterator<value_type, !mutable_iterators,
                                      cache_hash_code>
         local_iterator;
-      typedef Internal::node_iterator<value_type, false, cache_hash_code>
+      typedef Internal::node_iterator<value_type, true, cache_hash_code>
         const_local_iterator;
 
       typedef Internal::hashtable_iterator<value_type, !mutable_iterators,
                                           cache_hash_code>
         iterator;
-      typedef Internal::hashtable_iterator<value_type, false, cache_hash_code>
+      typedef Internal::hashtable_iterator<value_type, true, cache_hash_code>
         const_iterator;
 
     private:
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/map_iterator.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/map_iterator.cc
new file mode 100644 (file)
index 0000000..da64404
--- /dev/null
@@ -0,0 +1,49 @@
+// 2005-10-02  Paolo Carlini  <pcarlini@suse.de>
+//
+// Copyright (C) 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// { dg-do compile }
+
+#include <tr1/unordered_map>
+
+void test01()
+{
+  typedef std::tr1::unordered_map<int, int> Map;
+
+  Map m;
+
+  Map::const_iterator cit = m.begin();
+  (*cit).second = 0; // { dg-error "read-only" }
+
+  Map::const_local_iterator clit = m.begin(0);
+  (*clit).second = 0; // { dg-error "read-only" }
+
+  Map::iterator it = cit; // { dg-error "conversion" }
+
+  Map::local_iterator lit = clit; // { dg-error "conversion" }
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multimap_iterator.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multimap_iterator.cc
new file mode 100644 (file)
index 0000000..a3d705a
--- /dev/null
@@ -0,0 +1,49 @@
+// 2005-10-02  Paolo Carlini  <pcarlini@suse.de>
+//
+// Copyright (C) 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// { dg-do compile }
+
+#include <tr1/unordered_map>
+
+void test01()
+{
+  typedef std::tr1::unordered_multimap<int, int> Mmap;
+
+  Mmap mm;
+
+  Mmap::const_iterator cit = mm.begin();
+  (*cit).second = 0; // { dg-error "read-only" }
+
+  Mmap::const_local_iterator clit = mm.begin(0);
+  (*clit).second = 0; // { dg-error "read-only" }
+
+  Mmap::iterator it = cit; // { dg-error "conversion" }
+
+  Mmap::local_iterator lit = clit; // { dg-error "conversion" }  
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multiset_iterator.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multiset_iterator.cc
new file mode 100644 (file)
index 0000000..3b3161a
--- /dev/null
@@ -0,0 +1,45 @@
+// 2005-10-02  Paolo Carlini  <pcarlini@suse.de>
+//
+// Copyright (C) 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// { dg-do compile }
+
+#include <tr1/unordered_set>
+
+void test01()
+{
+  typedef std::tr1::unordered_multiset<int> Mset;
+
+  Mset ms;
+
+  Mset::const_iterator cit = ms.begin();
+  *cit = 0; // { dg-error "read-only" }
+
+  Mset::const_local_iterator clit = ms.begin(0);
+  *clit = 0; // { dg-error "read-only" }
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/set_iterator.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/set_iterator.cc
new file mode 100644 (file)
index 0000000..40dc9c8
--- /dev/null
@@ -0,0 +1,45 @@
+// 2005-10-02  Paolo Carlini  <pcarlini@suse.de>
+//
+// Copyright (C) 2005 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING.  If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+//
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+// { dg-do compile }
+
+#include <tr1/unordered_set>
+
+void test01()
+{
+  typedef std::tr1::unordered_set<int> Set;
+
+  Set s;
+
+  Set::const_iterator cit = s.begin();
+  *cit = 0; // { dg-error "read-only" }
+
+  Set::const_local_iterator clit = s.begin(0);
+  *clit = 0; // { dg-error "read-only" }
+}