aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2009-07-07 13:01:57 +0000
committerJan Hubicka <jh@suse.cz>2009-07-07 13:01:57 +0000
commit2149237318e54c4970cc53f72f1a5d802bcfaf39 (patch)
treee013f55d367c433b0c8f8b69c675aaf85654321e /libstdc++-v3
parent81775a6f705cc3bd51eaa4d44361013b624f5384 (diff)
Merge from mainline.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/pretty-ipa@149323 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog30
-rw-r--r--libstdc++-v3/libsupc++/dyncast.cc16
-rw-r--r--libstdc++-v3/libsupc++/vmi_class_type_info.cc32
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/char/3.cc17
-rw-r--r--libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3.cc19
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/init-list.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/moveable.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc1
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc1
21 files changed, 128 insertions, 2 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index b1269dda782..5641a782196 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,33 @@
+2009-07-06 Benjamin Kosnik <bkoz@redhat.com>
+
+ * testsuite/21_strings/c_strings/wchar_t/3.cc: Add copyright.
+ * testsuite/21_strings/c_strings/char/3.cc: Same.
+
+2009-07-06 Jason Merrill <jason@redhat.com>
+
+ * libsupc++/vmi_class_type_info.cc (__do_dyncast): Use src2dst hint
+ to defer searching bases that don't overlap the desired address.
+
+2009-07-05 Joseph Myers <joseph@codesourcery.com>
+
+ * testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc,
+ testsuite/21_strings/basic_string/numeric_conversions/wchar_t/
+ to_wstring.cc, testsuite/ext/vstring/element_access/char/front_back.cc,
+ testsuite/ext/vstring/element_access/wchar_t/front_back.cc,
+ testsuite/ext/vstring/init-list.cc,
+ testsuite/ext/vstring/moveable.cc,
+ testsuite/ext/vstring/requirements/citerators.cc,
+ testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc,
+ testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc:
+ Use dg-require-string-conversions.
+
2009-06-30 Richard Sandiford <r.sandiford@uk.ibm.com>
* testsuite/lib/libstdc++.exp (libstdc++_init): Don't add "."
diff --git a/libstdc++-v3/libsupc++/dyncast.cc b/libstdc++-v3/libsupc++/dyncast.cc
index f565ed459fe..cb97bc50ecc 100644
--- a/libstdc++-v3/libsupc++/dyncast.cc
+++ b/libstdc++-v3/libsupc++/dyncast.cc
@@ -28,12 +28,26 @@ namespace __cxxabiv1 {
// this is the external interface to the dynamic cast machinery
+/* sub: source address to be adjusted; nonnull, and since the
+ * source object is polymorphic, *(void**)sub is a virtual pointer.
+ * src: static type of the source object.
+ * dst: destination type (the "T" in "dynamic_cast<T>(v)").
+ * src2dst_offset: a static hint about the location of the
+ * source subobject with respect to the complete object;
+ * special negative values are:
+ * -1: no hint
+ * -2: src is not a public base of dst
+ * -3: src is a multiple public base type but never a
+ * virtual base type
+ * otherwise, the src type is a unique public nonvirtual
+ * base type of dst at offset src2dst_offset from the
+ * origin of dst. */
extern "C" void *
__dynamic_cast (const void *src_ptr, // object started from
const __class_type_info *src_type, // type of the starting object
const __class_type_info *dst_type, // desired target type
ptrdiff_t src2dst) // how src and dst are related
-{
+ {
const void *vtable = *static_cast <const void *const *> (src_ptr);
const vtable_prefix *prefix =
adjust_pointer <vtable_prefix> (vtable,
diff --git a/libstdc++-v3/libsupc++/vmi_class_type_info.cc b/libstdc++-v3/libsupc++/vmi_class_type_info.cc
index 6904f7723ca..195061d72e4 100644
--- a/libstdc++-v3/libsupc++/vmi_class_type_info.cc
+++ b/libstdc++-v3/libsupc++/vmi_class_type_info.cc
@@ -108,7 +108,17 @@ __do_dyncast (ptrdiff_t src2dst,
return false;
}
+ // If src_type is a unique non-virtual base of dst_type, we have a good
+ // guess at the address we want, so in the first pass try skipping any
+ // bases which don't contain that address.
+ const void *dst_cand = NULL;
+ if (src2dst >= 0)
+ dst_cand = adjust_pointer<void>(src_ptr, -src2dst);
+ bool first_pass = true;
+ bool skipped = false;
+
bool result_ambig = false;
+ again:
for (std::size_t i = __base_count; i--;)
{
__dyncast_result result2 (result.whole_details);
@@ -121,6 +131,20 @@ __do_dyncast (ptrdiff_t src2dst,
base_access = __sub_kind (base_access | __contained_virtual_mask);
base = convert_to_base (base, is_virtual, offset);
+ if (dst_cand)
+ {
+ bool skip_on_first_pass = base > dst_cand;
+ if (skip_on_first_pass == first_pass)
+ {
+ // We aren't interested in this base on this pass: either
+ // we're on the first pass and this base doesn't contain the
+ // likely address, or we're on the second pass and we checked
+ // this base on the first pass.
+ skipped = true;
+ continue;
+ }
+ }
+
if (!__base_info[i].__is_public_p ())
{
if (src2dst == -2 &&
@@ -267,6 +291,14 @@ __do_dyncast (ptrdiff_t src2dst,
return result_ambig;
}
+ if (skipped && first_pass)
+ {
+ // We didn't find dst where we expected it, so let's go back and try
+ // the bases we skipped (if any).
+ first_pass = false;
+ goto again;
+ }
+
return result_ambig;
}
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc
index c5c7bdd4435..e18e7434dcf 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stod.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc
index ffc0867b5c6..338aa506231 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stof.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc
index b37cc757bf2..6ab66e47cd0 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoi.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc
index 3cd3df677f8..eb74d122746 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stol.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
index 4757f0c0861..f996593417d 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stold.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
index 55f484a5790..e954b13df7b 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoll.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
index 5498a962051..b1edae4d1fb 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoul.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
index f2d8fb1729f..c6568307187 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/stoull.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
index dd46736ea65..31af58f0556 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/numeric_conversions/wchar_t/to_wstring.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2008-06-15 Paolo Carlini <paolo.carlini@oracle.com>
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/char/3.cc b/libstdc++-v3/testsuite/21_strings/c_strings/char/3.cc
index 5e5c514d776..3b254383776 100644
--- a/libstdc++-v3/testsuite/21_strings/c_strings/char/3.cc
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/char/3.cc
@@ -1,6 +1,23 @@
// { dg-do compile { target correct_iso_cpp_string_wchar_protos } }
// { dg-options "-O2" }
+// Copyright (C) 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
#include <cstring>
const char *cc1, *cc2;
diff --git a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3.cc b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3.cc
index 47c653abbbd..2c875fdde25 100644
--- a/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/21_strings/c_strings/wchar_t/3.cc
@@ -1,6 +1,23 @@
// { dg-do compile { target correct_iso_cpp_string_wchar_protos } }
// { dg-options "-O2" }
+// Copyright (C) 2009 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 3, 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 COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
#include <cwchar>
const wchar_t *cw1, *cw2;
@@ -23,8 +40,8 @@ test01 ()
w1 = wmemchr (cw2, L'/', 3); // { dg-error "invalid conversion" }
w1 = wcschr (cw2, L'/'); // { dg-error "invalid conversion" }
- w1 = wcspbrk (cw2, L"abc"); // { dg-error "invalid conversion" }
w1 = wcsrchr (cw2, L'c'); // { dg-error "invalid conversion" }
+ w1 = wcspbrk (cw2, L"abc"); // { dg-error "invalid conversion" }
w1 = wcsstr (cw2, L"abc"); // { dg-error "invalid conversion" }
cw1 = wmemchr (cw2, L'/', 3);
diff --git a/libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc b/libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
index 7b089d3804c..a1d4c5f0298 100644
--- a/libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/element_access/char/front_back.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2007-10-16 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc b/libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc
index 60252241b7b..6e45bc55e61 100644
--- a/libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/element_access/wchar_t/front_back.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2007-10-16 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/ext/vstring/init-list.cc b/libstdc++-v3/testsuite/ext/vstring/init-list.cc
index 7d2babc5792..1d9279f0f2d 100644
--- a/libstdc++-v3/testsuite/ext/vstring/init-list.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/init-list.cc
@@ -17,6 +17,7 @@
//
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
#include <ext/vstring.h>
#include <testsuite_hooks.h>
diff --git a/libstdc++-v3/testsuite/ext/vstring/moveable.cc b/libstdc++-v3/testsuite/ext/vstring/moveable.cc
index 41b409c538b..82486368543 100644
--- a/libstdc++-v3/testsuite/ext/vstring/moveable.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/moveable.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// Copyright (C) 2007, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc b/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
index 10807b5c4fe..125cefd7109 100644
--- a/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/requirements/citerators.cc
@@ -1,4 +1,5 @@
// { dg-options "-std=gnu++0x" }
+// { dg-require-string-conversions "" }
// 2007-10-15 Paolo Carlini <pcarlini@suse.de>
diff --git a/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc b/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc
index 347db028d94..f6f7d41417e 100644
--- a/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char16_t/1.cc
@@ -1,6 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
+// { dg-require-string-conversions "" }
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
//
diff --git a/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc b/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc
index 5d01845f467..0020792cc44 100644
--- a/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/char32_t/1.cc
@@ -1,6 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
// { dg-require-cstdint "" }
+// { dg-require-string-conversions "" }
// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
//