aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2005-10-03 17:35:55 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2005-10-03 17:35:55 +0000
commitd26e1ec86f1dbee829619c235bafcd7143b65c07 (patch)
tree9f3a1151182d612584b09d30629842b73aab7d8c /libstdc++-v3
parent9f1dfd16185a63d0586963d8d014385c05c087fc (diff)
hashtable (node_iterator::node_iterator(const node_iterator<,true,>&)): Fix to take a "false" (i.e., is_const == false) node_iterator.
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. From-SVN: r104900
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog14
-rw-r--r--libstdc++-v3/include/tr1/hashtable8
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered/types/map_iterator.cc49
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multimap_iterator.cc49
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multiset_iterator.cc45
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered/types/set_iterator.cc45
6 files changed, 206 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 789c85c5c10..1d0fc12d4b4 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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
diff --git a/libstdc++-v3/include/tr1/hashtable b/libstdc++-v3/include/tr1/hashtable
index f5f1e299816..240c471b520 100644
--- a/libstdc++-v3/include/tr1/hashtable
+++ b/libstdc++-v3/include/tr1/hashtable
@@ -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
index 00000000000..da644048f1b
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/map_iterator.cc
@@ -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
index 00000000000..a3d705ae81b
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multimap_iterator.cc
@@ -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
index 00000000000..3b3161a0001
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/multiset_iterator.cc
@@ -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
index 00000000000..40dc9c8ce31
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered/types/set_iterator.cc
@@ -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" }
+}