diff options
author | Jan Hubicka <jh@suse.cz> | 2009-07-07 13:01:57 +0000 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2009-07-07 13:01:57 +0000 |
commit | 2149237318e54c4970cc53f72f1a5d802bcfaf39 (patch) | |
tree | e013f55d367c433b0c8f8b69c675aaf85654321e /libstdc++-v3 | |
parent | 81775a6f705cc3bd51eaa4d44361013b624f5384 (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')
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. // |