aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYvan Roux <yvan.roux@linaro.org>2012-12-05 21:32:59 +0100
committerYvan Roux <yvan.roux@linaro.org>2012-12-05 21:32:59 +0100
commit4f42b3a23cda11b9ab474294433eba54280981e0 (patch)
tree7fea79c42a56ea958d920bee42b409e15446ef89
parentebb8b21a05be633e75c2605600962033f730dbc1 (diff)
Merge from FSF GCC 4.7.2 (svn branches/gcc-4_7-branch 194184).
-rw-r--r--ChangeLog.linaro4
-rw-r--r--gcc/ChangeLog194
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/ChangeLog15
-rw-r--r--gcc/ada/s-osinte-hpux-dce.ads9
-rw-r--r--gcc/ada/s-osinte-kfreebsd-gnu.ads26
-rw-r--r--gcc/ada/s-osinte-rtems.adb26
-rw-r--r--gcc/ada/s-taspri-hpux-dce.ads4
-rw-r--r--gcc/ada/s-taspri-lynxos.ads125
-rw-r--r--gcc/ada/s-tpopsp-rtems.adb24
-rw-r--r--gcc/c-family/ChangeLog9
-rw-r--r--gcc/c-family/c-common.c4
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/config/darwin.c4
-rw-r--r--gcc/config/i386/i386.c111
-rw-r--r--gcc/config/i386/i386.h3
-rw-r--r--gcc/config/i386/i386.md24
-rw-r--r--gcc/config/i386/sse.md2
-rw-r--r--gcc/config/i386/sync.md8
-rw-r--r--gcc/config/ia64/ia64.c21
-rw-r--r--gcc/config/pa/pa.c74
-rw-r--r--gcc/config/pa/pa.h4
-rw-r--r--gcc/config/pa/pa.md135
-rw-r--r--gcc/config/rs6000/rs6000.md84
-rw-r--r--gcc/config/sparc/sol2.h4
-rw-r--r--gcc/config/sparc/sparc.h6
-rw-r--r--gcc/cp/ChangeLog45
-rw-r--r--gcc/cp/class.c11
-rw-r--r--gcc/cp/cp-tree.h13
-rw-r--r--gcc/cp/init.c3
-rw-r--r--gcc/cp/parser.c4
-rw-r--r--gcc/cp/pt.c388
-rw-r--r--gcc/cp/tree.c195
-rw-r--r--gcc/cp/typeck.c6
-rw-r--r--gcc/doc/install.texi6
-rw-r--r--gcc/fold-const.c5
-rw-r--r--gcc/fortran/ChangeLog20
-rw-r--r--gcc/fortran/resolve.c19
-rw-r--r--gcc/fortran/target-memory.c4
-rw-r--r--gcc/fortran/trans-decl.c31
-rw-r--r--gcc/gcse.c42
-rw-r--r--gcc/ggc-common.c2
-rw-r--r--gcc/gimple-fold.c2
-rw-r--r--gcc/go/gofrontend/expressions.cc160
-rw-r--r--gcc/go/gofrontend/expressions.h23
-rw-r--r--gcc/go/gofrontend/parse.cc2
-rw-r--r--gcc/go/gofrontend/statements.cc16
-rw-r--r--gcc/go/gofrontend/types.cc164
-rw-r--r--gcc/go/gofrontend/types.h51
-rw-r--r--gcc/lto-opts.c25
-rw-r--r--gcc/lto-wrapper.c6
-rw-r--r--gcc/pointer-set.c2
-rw-r--r--gcc/prefix.c4
-rw-r--r--gcc/testsuite/ChangeLog93
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C9
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C32
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic133.C46
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic134.C17
-rw-r--r--gcc/testsuite/g++.dg/init/new41.C22
-rw-r--r--gcc/testsuite/g++.dg/opt/pr55331.C14
-rw-r--r--gcc/testsuite/g++.dg/template/param1.C4
-rw-r--r--gcc/testsuite/g++.dg/template/typedef39.C15
-rw-r--r--gcc/testsuite/g++.dg/torture/pr54735.C179
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20121107-1.c14
-rw-r--r--gcc/testsuite/gcc.dg/pr55570.c4
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr53663-1.c30
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr53663-2.c24
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr53663-3.c24
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr54894.c27
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr54920.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/pr55142-1.c34
-rw-r--r--gcc/testsuite/gcc.target/i386/pr55142-2.c33
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_error_4.f9016
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_76.f9028
-rw-r--r--gcc/testsuite/gfortran.dg/transfer_class_1.f9016
-rw-r--r--gcc/testsuite/stack_check3.adb36
-rw-r--r--gcc/testsuite/stack_check3.ads5
-rw-r--r--gcc/toplev.c5
-rw-r--r--gcc/tree-dump.c3
-rw-r--r--gcc/tree-ssa-pre.c10
-rw-r--r--gcc/tree-ssa-sccvn.c3
-rw-r--r--gcc/tree-vect-stmts.c21
-rw-r--r--libgcc/ChangeLog11
-rw-r--r--libgcc/Makefile.in4
-rw-r--r--libgcc/emutls.c4
-rw-r--r--libgo/go/reflect/type.go15
-rw-r--r--libgo/go/reflect/value.go2
-rw-r--r--libgo/go/syscall/libcall_linux.go2
-rw-r--r--libgo/go/syscall/socket.go6
-rw-r--r--libgo/go/syscall/socket_linux.go2
-rwxr-xr-xlibgo/mksysinfo.sh16
-rw-r--r--libgo/runtime/print.c5
-rw-r--r--libgomp/ChangeLog6
-rw-r--r--libgomp/team.c11
-rw-r--r--libstdc++-v3/ChangeLog71
-rw-r--r--libstdc++-v3/include/bits/hashtable.h16
-rw-r--r--libstdc++-v3/include/profile/iterator_tracker.h4
-rw-r--r--libstdc++-v3/include/std/condition_variable4
-rw-r--r--libstdc++-v3/include/std/functional7
-rw-r--r--libstdc++-v3/include/std/future3
-rw-r--r--libstdc++-v3/include/tr1/functional7
-rw-r--r--libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/bind/ref_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cons/55320.cc46
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cons/addressof.cc41
-rw-r--r--libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/array/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/capacity/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/capacity/1.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/1.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/2.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/3.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/1.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/1.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/2.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/3.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/3.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/4.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/4.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/42352.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/5.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/operations/5.h2
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc20
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/24_iterators/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/34595.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/fill/4.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/heap/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/partition/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc2
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc2
-rw-r--r--libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/28_regex/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc50
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/vstring/range_access.cc2
-rw-r--r--libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc2
-rw-r--r--libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc41
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc2
-rw-r--r--libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc2
284 files changed, 2530 insertions, 1164 deletions
diff --git a/ChangeLog.linaro b/ChangeLog.linaro
index 7e34bf45cbd..765a3c91c05 100644
--- a/ChangeLog.linaro
+++ b/ChangeLog.linaro
@@ -1,3 +1,7 @@
+2012-12-05 Yvan Roux <yvan.roux@linaro.org>
+
+ Merge from FSF GCC 4.7.2 (svn branches/gcc-4_7-branch 194184).
+
2012-11-26 Michael Hope <michael.hope@linaro.org>
Merge from FSF arm/aarch64-4.7-branch r193473..r193768.
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8467e9effdb..1cab51a227a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,197 @@
+2012-12-03 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/ia64/ia64.c (ia64_compute_frame_size): Allocate the scratch
+ area if the function allocates dynamic stack space.
+ (ia64_initial_elimination_offset): Adjust offsets to above change.
+
+2012-12-03 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2012-09-24 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/53663
+ * tree-ssa-sccvn.c (vn_reference_lookup_3): Conditional
+ native encode/interpret translation on VN_WALKREWRITE.
+
+2012-12-03 Kai Tietz <ktietz@redhat.com>
+
+ PR target/53912
+ * ggc-common.c (POINTER_HASH): Cast from pointer via intptr_t.
+
+ PR target/53912
+ * tree-dump.c (dump_pointer): Print pointer via HOST_WIDE_INT_PRINT.
+
+ PR target/53912
+ * pointer-set.c (hash1): Cast from pointer via uintptr_t.
+
+2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ Backport from mainline:
+ 2012-11-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR target/55195
+ * config/pa/pa.md (type): Add sibcall and sh_func_adrs insn types.
+ (in_branch_delay): Don't allow sibcall or sh_func_adrs insns.
+ (in_nullified_branch_delay): Likewise.
+ (in_call_delay): Likewise.
+ Define delay for sibcall insns. Adjust Z3 and Z4 insn reservations for
+ new types. Add opaque cond to mark all calls, sibcalls, dyncalls and
+ the $$sh_func_adrs call as variable. Update type of sibcalls and
+ $$sh_func_adrs call.
+ * config/pa/pa.c (pa_adjust_insn_length): Revise to return updated
+ length instead of adjustment. Handle negative and undefined call
+ adjustments for insn_default_length. Remove adjustment for millicode
+ insn with unfilled delay slot.
+ (pa_output_millicode_call): Update for revised millicode length.
+ * config/pa/pa.h (ADJUST_INSN_LENGTH): Revise to set LENGTH.
+
+2012-11-29 Kai Tietz <ktietz@redhat.com>
+
+ PR target/55171
+ * prefix.c (lookup_key): Replace xmalloc/xrealloc
+ use by XNEWVEC/XRESIZEVEC.
+
+ * i386.c (get_scratch_register_on_entry): Handle
+ thiscall-convention.
+ (split_stack_prologue_scratch_regno): Likewise.
+ (ix86_static_chain): Likewise.
+ (x86_output_mi_thunk): Likewise.
+
+2012-11-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backported from mainline
+ 2012-11-27 H.J. Lu <hongjiu.lu@intel.com>
+ Markus Trippelsdorf <markus@trippelsdorf.de>
+
+ PR lto/54795
+ * lto-opts.c (lto_write_options): Also handle
+ OPT_SPECIAL_unknown, OPT_SPECIAL_ignore and
+ OPT_SPECIAL_program_name.
+
+ PR lto/55474
+ * lto-wrapper.c (merge_and_complain): Handle
+ OPT_SPECIAL_unknown, OPT_SPECIAL_ignore,
+ OPT_SPECIAL_program_name and OPT_SPECIAL_input_file.
+
+2012-11-27 Paolo Bonzini <pbonzini@redhat.com>
+
+ PR rtl-optimization/55489
+ * gcse.c (compute_transp): Precompute a canonical version
+ of XEXP (x, 0), and pass it to canon_true_dependence.
+
+2012-11-27 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/55331
+ * gimple-fold.c (gimplify_and_update_call_from_tree): Replace
+ stmt with a NOP instead of removing it.
+
+2012-11-26 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2012-10-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/54976
+ * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
+ Robustify against odd inner_mode inputs.
+
+ 2012-10-12 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/54894
+ * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
+ Handle over-aligned scalar types properly.
+
+ 2012-10-02 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/54735
+ * tree-ssa-pre.c (do_pre): Make sure to update virtual SSA form before
+ cleaning up the CFG.
+
+2012-11-21 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2012-11-20 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ * config/rs6000/rs6000.md (movdf_hardfloat32): Add a comment
+ explaining the register ordering preferences.
+
+ 2012-11-19 Michael Meissner <meissner@linux.vnet.ibm.com>
+ * config/rs6000/rs6000.md (movdf_hardfloat32): Reorder move
+ constraints so that the traditional floating point loads, stores,
+ and moves are done first, then the VSX loads, stores, and moves,
+ and finally the GPR loads, stores, and moves so that reload
+ chooses FPRs over GPRs, and uses the traditional load/store
+ instructions which provide an offset.
+ (movdf_hardfloat64): Likewise.
+
+2012-11-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backported from mainline
+ 2012-11-13 Eric Botcazou <ebotcazou@adacore.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+
+ PR middle-end/55142
+ * config/i386/i386.c (legitimize_pic_address): Properly handle
+ REG + CONST.
+ (ix86_print_operand_address): Set code to 'k' when forcing
+ addr32 prefix. For x32, zero-extend negative displacement if
+ it < -16*1024*1024.
+
+2012-11-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ * common.opt (fvar-tracking-uninit): Document.
+ * toplev.c (process_options): Fix handling of flag_var_tracking_uninit.
+ * config/darwin.c (darwin_override_options): Likewise.
+
+2012-11-11 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc.h (AS_NIAGARA3_FLAG): Tweak.
+ * config/sparc/sol2.h (TARGET_CPU_niagara4 support): Fix pasto.
+
+2012-11-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * doc/install.texi (sparc64-x-solaris2): Mention MPC as well.
+
+2012-11-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/i386/i386.c (release_scratch_register_on_entry): Also adjust
+ sp_offset manually.
+
+2012-11-07 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2012-11-06 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (ix86_init_machine_status): Do not
+ explicitly clear tls_descriptor_call_expanded_p again.
+
+ 2012-11-06 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sse.md
+ (<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>): Mark operand 0
+ as read and written by the instruction.
+
+ 2012-11-06 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/i386.c (TARGET_INSTANTIATE_DECLS): New define.
+ (ix86_instantiate_decls): New function.
+ (ix86_expand_builtin) <case IX86_BUILTIN_LDMXCSR>: Use SLOT_TEMP
+ stack slot instead of SLOT_VIRTUAL.
+ <case IX86_BUILTIN_STMXCSR>: Ditto.
+ (assign_386_stack_local): Do not assert when virtual slot is valid.
+ * config/i386/i386.h (enum ix86_stack_slot): Remove SLOT_VIRTUAL.
+ * config/i386/i386.md (truncdfsf2): Do not use SLOT_VIRTUAL stack slot.
+ (truncxf<mode>2): Ditto.
+ (floatunssi<mode>2): Ditto.
+ (isinf<mode>2): Ditto.
+ * config/i386/sync.md (atomic_load<mode>): Ditto.
+ (atomic_store<mode>): Ditto.
+
+2012-11-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR middle-end/55219
+ * fold-const.c (fold_binary_op_with_conditional_arg): Do not fold if
+ the argument is itself a conditional expression.
+
2012-11-05 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (print_reg): Replace REX_INT_REG_P with
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 8dbf6812d54..baca56c919b 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20121106
+20121205
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index c8c9b74d4f5..61c28a0a2f4 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,18 @@
+2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR ada/52110
+ * s-osinte-hpux-dce.ads: Declare pthread_rwlockattr_t and
+ pthread_rwlock_t subtypes. Delete duplicate declaration of clockid_t.
+ * s-taspri-hpux-dce.ads: Change "pragma Atomic (Thread)" to comment.
+
+2012-11-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR other/52438
+ * s-taspri-lynxos.ads: Delete.
+ * s-osinte-kfreebsd-gnu.ads: Change license to GPL V3+.
+ * s-tpopsp-rtems.adb: Likewise.
+ * s-osinte-rtems.adb: Likewise.
+
2012-10-30 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/Make-lang.in: Fix and clean up rules for C files.
diff --git a/gcc/ada/s-osinte-hpux-dce.ads b/gcc/ada/s-osinte-hpux-dce.ads
index 3b156a26597..e6ee0ed5e8f 100644
--- a/gcc/ada/s-osinte-hpux-dce.ads
+++ b/gcc/ada/s-osinte-hpux-dce.ads
@@ -244,6 +244,14 @@ package System.OS_Interface is
type pthread_condattr_t is limited private;
type pthread_key_t is private;
+ -- Read/Write lock not supported on HPUX. To add support both types
+ -- pthread_rwlock_t and pthread_rwlockattr_t must properly be defined
+ -- with the associated routines pthread_rwlock_[init/destroy] and
+ -- pthread_rwlock_[rdlock/wrlock/unlock].
+
+ subtype pthread_rwlock_t is pthread_mutex_t;
+ subtype pthread_rwlockattr_t is pthread_mutexattr_t;
+
-----------
-- Stack --
-----------
@@ -444,7 +452,6 @@ private
end record;
pragma Convention (C, timespec);
- type clockid_t is new int;
CLOCK_REALTIME : constant clockid_t := 1;
type cma_t_address is new System.Address;
diff --git a/gcc/ada/s-osinte-kfreebsd-gnu.ads b/gcc/ada/s-osinte-kfreebsd-gnu.ads
index 958d4217de4..23a28e2d545 100644
--- a/gcc/ada/s-osinte-kfreebsd-gnu.ads
+++ b/gcc/ada/s-osinte-kfreebsd-gnu.ads
@@ -9,23 +9,21 @@
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2005,2008 Free Software Foundation, Inc. --
-- --
--- GNARL is free software; you can redistribute it and/or modify it under --
+-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
--- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT 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 distributed with GNARL; see file COPYING. If not, write --
--- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
--- Boston, MA 02110-1301, USA. --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit 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 Public License. --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
-- --
-- GNARL was developed by the GNARL team at Florida State University. --
-- Extensive contributions were provided by Ada Core Technologies, Inc. --
diff --git a/gcc/ada/s-osinte-rtems.adb b/gcc/ada/s-osinte-rtems.adb
index fc99ce4e848..de21785941a 100644
--- a/gcc/ada/s-osinte-rtems.adb
+++ b/gcc/ada/s-osinte-rtems.adb
@@ -8,23 +8,21 @@
-- --
-- Copyright (C) 1991-2009 Florida State University --
-- --
--- GNARL is free software; you can redistribute it and/or modify it under --
+-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
--- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT 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 distributed with GNARL; see file COPYING. If not, write --
--- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
--- Boston, MA 02110-1301, USA. --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit 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 Public License. --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>.
-- --
-- GNARL was developed by the GNARL team at Florida State University. It is --
-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
diff --git a/gcc/ada/s-taspri-hpux-dce.ads b/gcc/ada/s-taspri-hpux-dce.ads
index 9d51d5c4517..6cde3474699 100644
--- a/gcc/ada/s-taspri-hpux-dce.ads
+++ b/gcc/ada/s-taspri-hpux-dce.ads
@@ -102,7 +102,9 @@ private
type Private_Data is record
Thread : aliased System.OS_Interface.pthread_t;
- pragma Atomic (Thread);
+ -- pragma Atomic (Thread);
+ -- Unfortunately, the above fails because Thread is 64 bits.
+
-- Thread field may be updated by two different threads of control.
-- (See, Enter_Task and Create_Task in s-taprop.adb). They put the
-- same value (thr_self value). We do not want to use lock on those
diff --git a/gcc/ada/s-taspri-lynxos.ads b/gcc/ada/s-taspri-lynxos.ads
deleted file mode 100644
index 4e08865d831..00000000000
--- a/gcc/ada/s-taspri-lynxos.ads
+++ /dev/null
@@ -1,125 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
--- --
--- S Y S T E M . T A S K _ P R I M I T I V E S --
--- --
--- S p e c --
--- --
--- Copyright (C) 1991-1994, Florida State University --
--- Copyright (C) 1995-2008, AdaCore --
--- --
--- GNARL is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
--- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
--- OUT 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 distributed with GNARL; see file COPYING. If not, write --
--- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
--- Boston, MA 02110-1301, USA. --
--- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit 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 Public License. --
--- --
--- GNARL was developed by the GNARL team at Florida State University. --
--- Extensive contributions were provided by Ada Core Technologies, Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This is a LynxOS version of this package, derived from s-taspri-posix.ads
-
-pragma Polling (Off);
--- Turn off polling, we do not want ATC polling to take place during tasking
--- operations. It causes infinite loops and other problems.
-
-with System.OS_Interface;
-
-package System.Task_Primitives is
- pragma Preelaborate;
-
- type Lock is limited private;
- -- Should be used for implementation of protected objects
-
- type RTS_Lock is limited private;
- -- Should be used inside the runtime system. The difference between Lock
- -- and the RTS_Lock is that the later one serves only as a semaphore so
- -- that do not check for ceiling violations.
-
- type Suspension_Object is limited private;
- -- Should be used for the implementation of Ada.Synchronous_Task_Control
-
- type Task_Body_Access is access procedure;
- -- Pointer to the task body's entry point (or possibly a wrapper
- -- declared local to the GNARL).
-
- type Private_Data is limited private;
- -- Any information that the GNULLI needs maintained on a per-task basis.
- -- A component of this type is guaranteed to be included in the
- -- Ada_Task_Control_Block.
-
- subtype Task_Address is System.Address;
- -- In some versions of Task_Primitives, notably for VMS, Task_Address is
- -- the short version of address defined in System.Aux_DEC. To avoid
- -- dragging Aux_DEC into tasking packages a tasking specific subtype is
- -- defined here.
-
- Task_Address_Size : constant := Standard'Address_Size;
- -- The size of Task_Address
-
- Alternate_Stack_Size : constant := 0;
- -- No alternate signal stack is used on this platform
-
-private
-
- type Lock is record
- Mutex : aliased System.OS_Interface.pthread_mutex_t;
- Ceiling : System.Any_Priority;
- Saved_Priority : System.Any_Priority;
- end record;
-
- type RTS_Lock is new System.OS_Interface.pthread_mutex_t;
-
- type Suspension_Object is record
- State : Boolean;
- pragma Atomic (State);
- -- Boolean that indicates whether the object is open. This field is
- -- marked Atomic to ensure that we can read its value without locking
- -- the access to the Suspension_Object.
-
- Waiting : Boolean;
- -- Flag showing if there is a task already suspended on this object
-
- L : aliased System.OS_Interface.pthread_mutex_t;
- -- Protection for ensuring mutual exclusion on the Suspension_Object
-
- CV : aliased System.OS_Interface.pthread_cond_t;
- -- Condition variable used to queue threads until condition is signaled
- end record;
-
- type Private_Data is record
- Thread : aliased System.OS_Interface.pthread_t;
- pragma Atomic (Thread);
- -- Thread field may be updated by two different threads of control.
- -- (See, Enter_Task and Create_Task in s-taprop.adb). They put the
- -- same value (thr_self value). We do not want to use lock on those
- -- operations and the only thing we have to make sure is that they
- -- are updated in atomic fashion.
-
- LWP : aliased System.Address;
- -- The purpose of this field is to provide a better tasking support on
- -- gdb. The order of the two first fields (Thread and LWP) is important.
- -- On targets where lwp is not relevant, this is equivalent to Thread.
-
- CV : aliased System.OS_Interface.pthread_cond_t;
-
- L : aliased RTS_Lock;
- -- Protection for all components is lock L
- end record;
-
-end System.Task_Primitives;
diff --git a/gcc/ada/s-tpopsp-rtems.adb b/gcc/ada/s-tpopsp-rtems.adb
index 1d672b95324..a0aec9ef745 100644
--- a/gcc/ada/s-tpopsp-rtems.adb
+++ b/gcc/ada/s-tpopsp-rtems.adb
@@ -14,21 +14,19 @@
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 2, or (at your option) any later ver- --
--- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
-- OUT 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 distributed with GNARL; see file COPYING. If not, write --
--- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
--- Boston, MA 02110-1301, USA. --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
-- --
--- As a special exception, if other files instantiate generics from this --
--- unit, or you link this unit with other files to produce an executable, --
--- this unit 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 Public License. --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
-- --
-- GNARL was developed by the GNARL team at Florida State University. It is --
-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index d8298e01227..1cc6f263be6 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,12 @@
+2012-12-03 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2012-12-03 Marek Polacek <polacek@redhat.com>
+
+ PR c/55570
+ * c-common.c (check_user_alignment): Swap order of tests,
+ check TREE_CODE first.
+
2012-09-20 Release Manager
* GCC 4.7.2 released.
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index 1d19251a65f..82a2b8d6cd2 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -6741,8 +6741,8 @@ check_user_alignment (const_tree align, bool allow_zero)
{
int i;
- if (!INTEGRAL_TYPE_P (TREE_TYPE (align))
- || TREE_CODE (align) != INTEGER_CST)
+ if (TREE_CODE (align) != INTEGER_CST
+ || !INTEGRAL_TYPE_P (TREE_TYPE (align)))
{
error ("requested alignment is not an integer constant");
return -1;
diff --git a/gcc/common.opt b/gcc/common.opt
index 628f765d634..fbeb4810817 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -2129,6 +2129,10 @@ fvar-tracking-assignments-toggle
Common Report Var(flag_var_tracking_assignments_toggle) Optimization
Toggle -fvar-tracking-assignments
+; Positive if we should track uninitialized variables, negative if
+; we should run the var-tracking pass only to discard debug
+; annotations. When flag_var_tracking_uninit == AUTODETECT_VALUE it
+; will be set according to flag_var_tracking.
fvar-tracking-uninit
Common Report Var(flag_var_tracking_uninit) Optimization
Perform variable tracking and also tag variables that are uninitialized
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index ba253dd7dbf..63684e3a02c 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -3024,12 +3024,12 @@ darwin_override_options (void)
darwin_emit_branch_islands = true;
}
- if (flag_var_tracking
+ if (flag_var_tracking_uninit == 0
&& generating_for_darwin_version >= 9
&& (flag_gtoggle ? (debug_info_level == DINFO_LEVEL_NONE)
: (debug_info_level >= DINFO_LEVEL_NORMAL))
&& write_symbols == DWARF2_DEBUG)
- flag_var_tracking_uninit = 1;
+ flag_var_tracking_uninit = flag_var_tracking;
if (MACHO_DYNAMIC_NO_PIC_P)
{
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index b42870f663f..d89adae3447 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -9558,6 +9558,8 @@ get_scratch_register_on_entry (struct scratch_reg *sr)
tree decl = current_function_decl, fntype = TREE_TYPE (decl);
bool fastcall_p
= lookup_attribute ("fastcall", TYPE_ATTRIBUTES (fntype)) != NULL_TREE;
+ bool thiscall_p
+ = lookup_attribute ("thiscall", TYPE_ATTRIBUTES (fntype)) != NULL_TREE;
bool static_chain_p = DECL_STATIC_CHAIN (decl);
int regparm = ix86_function_regparm (fntype, decl);
int drap_regno
@@ -9568,10 +9570,15 @@ get_scratch_register_on_entry (struct scratch_reg *sr)
if ((regparm < 1 || (fastcall_p && !static_chain_p))
&& drap_regno != AX_REG)
regno = AX_REG;
- else if (regparm < 2 && drap_regno != DX_REG)
+ /* 'thiscall' sets regparm to 1, uses ecx for arguments and edx
+ for the static chain register. */
+ else if (thiscall_p && !static_chain_p && drap_regno != AX_REG)
+ regno = AX_REG;
+ else if (regparm < 2 && !thiscall_p && drap_regno != DX_REG)
regno = DX_REG;
/* ecx is the static chain register. */
- else if (regparm < 3 && !fastcall_p && !static_chain_p
+ else if (regparm < 3 && !fastcall_p && !thiscall_p
+ && !static_chain_p
&& drap_regno != CX_REG)
regno = CX_REG;
else if (ix86_save_reg (BX_REG, true))
@@ -9604,6 +9611,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr)
{
if (sr->saved)
{
+ struct machine_function *m = cfun->machine;
rtx x, insn = emit_insn (gen_pop (sr->reg));
/* The RTX_FRAME_RELATED_P mechanism doesn't know about pop. */
@@ -9611,6 +9619,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr)
x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (UNITS_PER_WORD));
x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x);
add_reg_note (insn, REG_FRAME_RELATED_EXPR, x);
+ m->fs.sp_offset -= UNITS_PER_WORD;
}
}
@@ -11081,12 +11090,15 @@ split_stack_prologue_scratch_regno (void)
return R11_REG;
else
{
- bool is_fastcall;
+ bool is_fastcall, is_thiscall;
int regparm;
is_fastcall = (lookup_attribute ("fastcall",
TYPE_ATTRIBUTES (TREE_TYPE (cfun->decl)))
!= NULL);
+ is_thiscall = (lookup_attribute ("thiscall",
+ TYPE_ATTRIBUTES (TREE_TYPE (cfun->decl)))
+ != NULL);
regparm = ix86_function_regparm (TREE_TYPE (cfun->decl), cfun->decl);
if (is_fastcall)
@@ -11099,6 +11111,12 @@ split_stack_prologue_scratch_regno (void)
}
return AX_REG;
}
+ else if (is_thiscall)
+ {
+ if (!DECL_STATIC_CHAIN (cfun->decl))
+ return DX_REG;
+ return AX_REG;
+ }
else if (regparm < 3)
{
if (!DECL_STATIC_CHAIN (cfun->decl))
@@ -12328,7 +12346,6 @@ legitimize_pic_address (rtx orig, rtx reg)
{
rtx addr = orig;
rtx new_rtx = orig;
- rtx base;
#if TARGET_MACHO
if (TARGET_MACHO && !TARGET_64BIT)
@@ -12533,20 +12550,33 @@ legitimize_pic_address (rtx orig, rtx reg)
}
else
{
- base = legitimize_pic_address (XEXP (addr, 0), reg);
- new_rtx = legitimize_pic_address (XEXP (addr, 1),
- base == reg ? NULL_RTX : reg);
+ rtx base = legitimize_pic_address (op0, reg);
+ enum machine_mode mode = GET_MODE (base);
+ new_rtx
+ = legitimize_pic_address (op1, base == reg ? NULL_RTX : reg);
if (CONST_INT_P (new_rtx))
- new_rtx = plus_constant (base, INTVAL (new_rtx));
+ {
+ if (INTVAL (new_rtx) < -16*1024*1024
+ || INTVAL (new_rtx) >= 16*1024*1024)
+ {
+ if (!x86_64_immediate_operand (new_rtx, mode))
+ new_rtx = force_reg (mode, new_rtx);
+ new_rtx
+ = gen_rtx_PLUS (mode, force_reg (mode, base), new_rtx);
+ }
+ else
+ new_rtx = plus_constant (base, INTVAL (new_rtx));
+ }
else
{
- if (GET_CODE (new_rtx) == PLUS && CONSTANT_P (XEXP (new_rtx, 1)))
+ if (GET_CODE (new_rtx) == PLUS
+ && CONSTANT_P (XEXP (new_rtx, 1)))
{
- base = gen_rtx_PLUS (Pmode, base, XEXP (new_rtx, 0));
+ base = gen_rtx_PLUS (mode, base, XEXP (new_rtx, 0));
new_rtx = XEXP (new_rtx, 1);
}
- new_rtx = gen_rtx_PLUS (Pmode, base, new_rtx);
+ new_rtx = gen_rtx_PLUS (mode, base, new_rtx);
}
}
}
@@ -14640,7 +14670,30 @@ ix86_print_operand_address (FILE *file, rtx addr)
}
#endif
gcc_assert (!code);
- code = 'l';
+ code = 'k';
+ }
+ else if (code == 0
+ && TARGET_X32
+ && disp
+ && CONST_INT_P (disp)
+ && INTVAL (disp) < -16*1024*1024)
+ {
+ /* X32 runs in 64-bit mode, where displacement, DISP, in
+ address DISP(%r64), is encoded as 32-bit immediate sign-
+ extended from 32-bit to 64-bit. For -0x40000300(%r64),
+ address is %r64 + 0xffffffffbffffd00. When %r64 <
+ 0x40000300, like 0x37ffe064, address is 0xfffffffff7ffdd64,
+ which is invalid for x32. The correct address is %r64
+ - 0x40000300 == 0xf7ffdd64. To properly encode
+ -0x40000300(%r64) for x32, we zero-extend negative
+ displacement by forcing addr32 prefix which truncates
+ 0xfffffffff7ffdd64 to 0xf7ffdd64. In theory, we should
+ zero-extend all negative displacements, including -1(%rsp).
+ However, for small negative displacements, sign-extension
+ won't cause overflow. We only zero-extend negative
+ displacements if they < -16*1024*1024, which is also used
+ to check legitimate address displacements for PIC. */
+ code = 'k';
}
if (ASSEMBLER_DIALECT == ASM_ATT)
@@ -23318,7 +23371,6 @@ ix86_init_machine_status (void)
f = ggc_alloc_cleared_machine_function ();
f->use_fast_prologue_epilogue_nregs = -1;
- f->tls_descriptor_call_expanded_p = 0;
f->call_abi = ix86_abi;
return f;
@@ -23337,9 +23389,6 @@ assign_386_stack_local (enum machine_mode mode, enum ix86_stack_slot n)
gcc_assert (n < MAX_386_STACK_LOCALS);
- /* Virtual slot is valid only before vregs are instantiated. */
- gcc_assert ((n == SLOT_VIRTUAL) == !virtuals_instantiated);
-
for (s = ix86_stack_locals; s; s = s->next)
if (s->mode == mode && s->n == n)
return validize_mem (copy_rtx (s->rtl));
@@ -23353,6 +23402,16 @@ assign_386_stack_local (enum machine_mode mode, enum ix86_stack_slot n)
ix86_stack_locals = s;
return validize_mem (s->rtl);
}
+
+static void
+ix86_instantiate_decls (void)
+{
+ struct stack_local_entry *s;
+
+ for (s = ix86_stack_locals; s; s = s->next)
+ if (s->rtl != NULL_RTX)
+ instantiate_decl_rtl (s->rtl);
+}
/* Calculate the length of the memory address in the instruction encoding.
Includes addr32 prefix, does not include the one-byte modrm, opcode,
@@ -24405,7 +24464,7 @@ ix86_static_chain (const_tree fndecl, bool incoming_p)
fntype = TREE_TYPE (fndecl);
ccvt = ix86_get_callcvt (fntype);
- if ((ccvt & (IX86_CALLCVT_FASTCALL | IX86_CALLCVT_THISCALL)) != 0)
+ if ((ccvt & IX86_CALLCVT_FASTCALL) != 0)
{
/* Fastcall functions use ecx/edx for arguments, which leaves
us with EAX for the static chain.
@@ -24413,6 +24472,13 @@ ix86_static_chain (const_tree fndecl, bool incoming_p)
leaves us with EAX for the static chain. */
regno = AX_REG;
}
+ else if ((ccvt & IX86_CALLCVT_THISCALL) != 0)
+ {
+ /* Thiscall functions use ecx for arguments, which leaves
+ us with EAX and EDX for the static chain.
+ We are using for abi-compatibility EAX. */
+ regno = AX_REG;
+ }
else if (ix86_function_regparm (fntype, fndecl) == 3)
{
/* For regparm 3, we have no free call-clobbered registers in
@@ -29401,13 +29467,13 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
case IX86_BUILTIN_LDMXCSR:
op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
- target = assign_386_stack_local (SImode, SLOT_VIRTUAL);
+ target = assign_386_stack_local (SImode, SLOT_TEMP);
emit_move_insn (target, op0);
emit_insn (gen_sse_ldmxcsr (target));
return 0;
case IX86_BUILTIN_STMXCSR:
- target = assign_386_stack_local (SImode, SLOT_VIRTUAL);
+ target = assign_386_stack_local (SImode, SLOT_TEMP);
emit_insn (gen_sse_stmxcsr (target));
return copy_to_mode_reg (SImode, target);
@@ -32202,8 +32268,10 @@ x86_output_mi_thunk (FILE *file,
else
{
unsigned int ccvt = ix86_get_callcvt (TREE_TYPE (function));
- if ((ccvt & (IX86_CALLCVT_FASTCALL | IX86_CALLCVT_THISCALL)) != 0)
+ if ((ccvt & IX86_CALLCVT_FASTCALL) != 0)
tmp_regno = AX_REG;
+ else if ((ccvt & IX86_CALLCVT_THISCALL) != 0)
+ tmp_regno = DX_REG;
else
tmp_regno = CX_REG;
}
@@ -38906,6 +38974,9 @@ ix86_autovectorize_vector_sizes (void)
#undef TARGET_PROMOTE_FUNCTION_MODE
#define TARGET_PROMOTE_FUNCTION_MODE ix86_promote_function_mode
+#undef TARGET_INSTANTIATE_DECLS
+#define TARGET_INSTANTIATE_DECLS ix86_instantiate_decls
+
#undef TARGET_SECONDARY_RELOAD
#define TARGET_SECONDARY_RELOAD ix86_secondary_reload
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 3a49803dc30..80d19f1daf2 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -2113,8 +2113,7 @@ enum ix86_entity
enum ix86_stack_slot
{
- SLOT_VIRTUAL = 0,
- SLOT_TEMP,
+ SLOT_TEMP = 0,
SLOT_CW_STORED,
SLOT_CW_TRUNC,
SLOT_CW_FLOOR,
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index f1b53a04655..affc5dd199a 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -3968,10 +3968,7 @@
;
else
{
- enum ix86_stack_slot slot = (virtuals_instantiated
- ? SLOT_TEMP
- : SLOT_VIRTUAL);
- rtx temp = assign_386_stack_local (SFmode, slot);
+ rtx temp = assign_386_stack_local (SFmode, SLOT_TEMP);
emit_insn (gen_truncdfsf2_with_temp (operands[0], operands[1], temp));
DONE;
}
@@ -4152,12 +4149,7 @@
DONE;
}
else
- {
- enum ix86_stack_slot slot = (virtuals_instantiated
- ? SLOT_TEMP
- : SLOT_VIRTUAL);
- operands[2] = assign_386_stack_local (<MODE>mode, slot);
- }
+ operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
})
(define_insn "*truncxfsf2_mixed"
@@ -5365,12 +5357,7 @@
DONE;
}
else
- {
- enum ix86_stack_slot slot = (virtuals_instantiated
- ? SLOT_TEMP
- : SLOT_VIRTUAL);
- operands[2] = assign_386_stack_local (DImode, slot);
- }
+ operands[2] = assign_386_stack_local (DImode, SLOT_TEMP);
})
(define_expand "floatunsdisf2"
@@ -15574,10 +15561,7 @@
emit_insn (gen_fxam<mode>2_i387_with_temp (scratch, operands[1]));
else
{
- enum ix86_stack_slot slot = (virtuals_instantiated
- ? SLOT_TEMP
- : SLOT_VIRTUAL);
- rtx temp = assign_386_stack_local (<MODE>mode, slot);
+ rtx temp = assign_386_stack_local (<MODE>mode, SLOT_TEMP);
emit_move_insn (temp, operands[1]);
emit_insn (gen_fxam<mode>2_i387_with_temp (scratch, temp));
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 0621d61d68a..e1600decc47 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -12315,7 +12315,7 @@
(set_attr "mode" "<sseinsnmode>")])
(define_insn "<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>"
- [(set (match_operand:V48_AVX2 0 "memory_operand" "=m")
+ [(set (match_operand:V48_AVX2 0 "memory_operand" "+m")
(unspec:V48_AVX2
[(match_operand:<sseintvecmode> 1 "register_operand" "x")
(match_operand:V48_AVX2 2 "register_operand" "x")
diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md
index ddff1e680ea..a58a1b94895 100644
--- a/gcc/config/i386/sync.md
+++ b/gcc/config/i386/sync.md
@@ -149,9 +149,7 @@
if (<MODE>mode == DImode && !TARGET_64BIT)
emit_insn (gen_atomic_loaddi_fpu
(operands[0], operands[1],
- assign_386_stack_local (DImode,
- (virtuals_instantiated
- ? SLOT_TEMP : SLOT_VIRTUAL))));
+ assign_386_stack_local (DImode, SLOT_TEMP)));
else
emit_move_insn (operands[0], operands[1]);
DONE;
@@ -212,9 +210,7 @@
out to be significantly larger than this plus a barrier. */
emit_insn (gen_atomic_storedi_fpu
(operands[0], operands[1],
- assign_386_stack_local (DImode,
- (virtuals_instantiated
- ? SLOT_TEMP : SLOT_VIRTUAL))));
+ assign_386_stack_local (DImode, SLOT_TEMP)));
}
else
{
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 77be75787b1..0c6bf7804c4 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -2943,8 +2943,10 @@ ia64_compute_frame_size (HOST_WIDE_INT size)
/* We always use the 16-byte scratch area provided by the caller, but
if we are a leaf function, there's no one to which we need to provide
- a scratch area. */
- if (current_function_is_leaf)
+ a scratch area. However, if the function allocates dynamic stack space,
+ the dynamic offset is computed early and contains STACK_POINTER_OFFSET,
+ so we need to cope. */
+ if (current_function_is_leaf && !cfun->calls_alloca)
total_size = MAX (0, total_size - 16);
current_frame_info.total_size = total_size;
@@ -2978,18 +2980,15 @@ ia64_initial_elimination_offset (int from, int to)
switch (to)
{
case HARD_FRAME_POINTER_REGNUM:
- if (current_function_is_leaf)
- offset = -current_frame_info.total_size;
- else
- offset = -(current_frame_info.total_size
- - crtl->outgoing_args_size - 16);
+ offset = -current_frame_info.total_size;
+ if (!current_function_is_leaf || cfun->calls_alloca)
+ offset += 16 + crtl->outgoing_args_size;
break;
case STACK_POINTER_REGNUM:
- if (current_function_is_leaf)
- offset = 0;
- else
- offset = 16 + crtl->outgoing_args_size;
+ offset = 0;
+ if (!current_function_is_leaf || cfun->calls_alloca)
+ offset += 16 + crtl->outgoing_args_size;
break;
default:
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 509e37f0440..1a87adcd6ac 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -4851,12 +4851,9 @@ pa_issue_rate (void)
-/* Return any length adjustment needed by INSN which already has its length
- computed as LENGTH. Return zero if no adjustment is necessary.
-
- For the PA: function calls, millicode calls, and backwards short
- conditional branches with unfilled delay slots need an adjustment by +1
- (to account for the NOP which will be inserted into the instruction stream).
+/* Return any length plus adjustment needed by INSN which already has
+ its length computed as LENGTH. Return LENGTH if no adjustment is
+ necessary.
Also compute the length of an inline block move here as it is too
complicated to express as a length attribute in pa.md. */
@@ -4865,19 +4862,40 @@ pa_adjust_insn_length (rtx insn, int length)
{
rtx pat = PATTERN (insn);
+ /* If length is negative or undefined, provide initial length. */
+ if ((unsigned int) length >= INT_MAX)
+ {
+ if (GET_CODE (pat) == SEQUENCE)
+ insn = XVECEXP (pat, 0, 0);
+
+ switch (get_attr_type (insn))
+ {
+ case TYPE_MILLI:
+ length = pa_attr_length_millicode_call (insn);
+ break;
+ case TYPE_CALL:
+ length = pa_attr_length_call (insn, 0);
+ break;
+ case TYPE_SIBCALL:
+ length = pa_attr_length_call (insn, 1);
+ break;
+ case TYPE_DYNCALL:
+ length = pa_attr_length_indirect_call (insn);
+ break;
+ case TYPE_SH_FUNC_ADRS:
+ length = pa_attr_length_millicode_call (insn) + 20;
+ break;
+ default:
+ gcc_unreachable ();
+ }
+ }
+
/* Jumps inside switch tables which have unfilled delay slots need
adjustment. */
if (GET_CODE (insn) == JUMP_INSN
&& GET_CODE (pat) == PARALLEL
&& get_attr_type (insn) == TYPE_BTABLE_BRANCH)
- return 4;
- /* Millicode insn with an unfilled delay slot. */
- else if (GET_CODE (insn) == INSN
- && GET_CODE (pat) != SEQUENCE
- && GET_CODE (pat) != USE
- && GET_CODE (pat) != CLOBBER
- && get_attr_type (insn) == TYPE_MILLI)
- return 4;
+ length += 4;
/* Block move pattern. */
else if (GET_CODE (insn) == INSN
&& GET_CODE (pat) == PARALLEL
@@ -4886,7 +4904,7 @@ pa_adjust_insn_length (rtx insn, int length)
&& GET_CODE (XEXP (XVECEXP (pat, 0, 0), 1)) == MEM
&& GET_MODE (XEXP (XVECEXP (pat, 0, 0), 0)) == BLKmode
&& GET_MODE (XEXP (XVECEXP (pat, 0, 0), 1)) == BLKmode)
- return compute_movmem_length (insn) - 4;
+ length += compute_movmem_length (insn) - 4;
/* Block clear pattern. */
else if (GET_CODE (insn) == INSN
&& GET_CODE (pat) == PARALLEL
@@ -4894,7 +4912,7 @@ pa_adjust_insn_length (rtx insn, int length)
&& GET_CODE (XEXP (XVECEXP (pat, 0, 0), 0)) == MEM
&& XEXP (XVECEXP (pat, 0, 0), 1) == const0_rtx
&& GET_MODE (XEXP (XVECEXP (pat, 0, 0), 0)) == BLKmode)
- return compute_clrmem_length (insn) - 4;
+ length += compute_clrmem_length (insn) - 4;
/* Conditional branch with an unfilled delay slot. */
else if (GET_CODE (insn) == JUMP_INSN && ! simplejump_p (insn))
{
@@ -4903,11 +4921,11 @@ pa_adjust_insn_length (rtx insn, int length)
&& length == 4
&& JUMP_LABEL (insn) != NULL_RTX
&& ! forward_branch_p (insn))
- return 4;
+ length += 4;
else if (GET_CODE (pat) == PARALLEL
&& get_attr_type (insn) == TYPE_PARALLEL_BRANCH
&& length == 4)
- return 4;
+ length += 4;
/* Adjust dbra insn with short backwards conditional branch with
unfilled delay slot -- only for case where counter is in a
general register register. */
@@ -4917,11 +4935,9 @@ pa_adjust_insn_length (rtx insn, int length)
&& ! FP_REG_P (XEXP (XVECEXP (pat, 0, 1), 0))
&& length == 4
&& ! forward_branch_p (insn))
- return 4;
- else
- return 0;
+ length += 4;
}
- return 0;
+ return length;
}
/* Implement the TARGET_PRINT_OPERAND_PUNCT_VALID_P hook. */
@@ -7481,15 +7497,13 @@ pa_output_millicode_call (rtx insn, rtx call_dest)
/* Handle the common case where we are sure that the branch will
reach the beginning of the $CODE$ subspace. The within reach
- form of the $$sh_func_adrs call has a length of 28. Because
- it has an attribute type of multi, it never has a nonzero
- sequence length. The length of the $$sh_func_adrs is the same
- as certain out of reach PIC calls to other routines. */
+ form of the $$sh_func_adrs call has a length of 28. Because it
+ has an attribute type of sh_func_adrs, it never has a nonzero
+ sequence length (i.e., the delay slot is never filled). */
if (!TARGET_LONG_CALLS
- && ((seq_length == 0
- && (attr_length == 12
- || (attr_length == 28 && get_attr_type (insn) == TYPE_MULTI)))
- || (seq_length != 0 && attr_length == 8)))
+ && (attr_length == 8
+ || (attr_length == 28
+ && get_attr_type (insn) == TYPE_SH_FUNC_ADRS)))
{
output_asm_insn ("{bl|b,l} %0,%2", xoperands);
}
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index d977c64fdb2..7a1a6fa7e09 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -1273,8 +1273,8 @@ do { \
/* Handling the special cases is going to get too complicated for a macro,
just call `pa_adjust_insn_length' to do the real work. */
-#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
- LENGTH += pa_adjust_insn_length (INSN, LENGTH);
+#define ADJUST_INSN_LENGTH(INSN, LENGTH) \
+ ((LENGTH) = pa_adjust_insn_length ((INSN), (LENGTH)))
/* Millicode insns are actually function calls with some special
constraints on arguments and register usage.
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 057eef0b4b7..570245bd4db 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -81,7 +81,7 @@
;; type "binary" insns have two input operands (1,2) and one output (0)
(define_attr "type"
- "move,unary,binary,shift,nullshift,compare,load,store,uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,fpload,fpstore,fpalu,fpcc,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,milli,parallel_branch,fpstore_load,store_fpload"
+ "move,unary,binary,shift,nullshift,compare,load,store,uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,fpload,fpstore,fpalu,fpcc,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,milli,sh_func_adrs,parallel_branch,fpstore_load,store_fpload"
(const_string "binary"))
(define_attr "pa_combine_type"
@@ -124,7 +124,7 @@
;; For conditional branches. Frame related instructions are not allowed
;; because they confuse the unwind support.
(define_attr "in_branch_delay" "false,true"
- (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch")
+ (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch")
(eq_attr "length" "4")
(not (match_test "RTX_FRAME_RELATED_P (insn)")))
(const_string "true")
@@ -133,7 +133,7 @@
;; Disallow instructions which use the FPU since they will tie up the FPU
;; even if the instruction is nullified.
(define_attr "in_nullified_branch_delay" "false,true"
- (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,parallel_branch")
+ (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,parallel_branch")
(eq_attr "length" "4")
(not (match_test "RTX_FRAME_RELATED_P (insn)")))
(const_string "true")
@@ -142,7 +142,7 @@
;; For calls and millicode calls. Allow unconditional branches in the
;; delay slot.
(define_attr "in_call_delay" "false,true"
- (cond [(and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch")
+ (cond [(and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch")
(eq_attr "length" "4")
(not (match_test "RTX_FRAME_RELATED_P (insn)")))
(const_string "true")
@@ -157,6 +157,10 @@
(define_delay (eq_attr "type" "call")
[(eq_attr "in_call_delay" "true") (nil) (nil)])
+;; Sibcall delay slot description.
+(define_delay (eq_attr "type" "sibcall")
+ [(eq_attr "in_call_delay" "true") (nil) (nil)])
+
;; Millicode call delay slot description.
(define_delay (eq_attr "type" "milli")
[(eq_attr "in_call_delay" "true") (nil) (nil)])
@@ -611,7 +615,7 @@
;; to assume have zero latency.
(define_insn_reservation "Z3" 0
(and
- (eq_attr "type" "!load,fpload,store,fpstore,uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch,fpcc,fpalu,fpmulsgl,fpmuldbl,fpsqrtsgl,fpsqrtdbl,fpdivsgl,fpdivdbl,fpstore_load,store_fpload")
+ (eq_attr "type" "!load,fpload,store,fpstore,uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch,fpcc,fpalu,fpmulsgl,fpmuldbl,fpsqrtsgl,fpsqrtdbl,fpdivsgl,fpdivdbl,fpstore_load,store_fpload")
(eq_attr "cpu" "8000"))
"inm_8000,rnm_8000")
@@ -619,7 +623,7 @@
;; retirement unit.
(define_insn_reservation "Z4" 0
(and
- (eq_attr "type" "uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch")
+ (eq_attr "type" "uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch")
(eq_attr "cpu" "8000"))
"inm0_8000+inm1_8000,rnm0_8000+rnm1_8000")
@@ -5336,7 +5340,9 @@
"!TARGET_64BIT"
"* return pa_output_mul_insn (0, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
[(set (reg:SI 29) (mult:SI (reg:SI 26) (reg:SI 25)))
@@ -5347,7 +5353,9 @@
"TARGET_64BIT"
"* return pa_output_mul_insn (0, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "muldi3"
[(set (match_operand:DI 0 "register_operand" "")
@@ -5438,7 +5446,9 @@
"*
return pa_output_div_insn (operands, 0, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
[(set (reg:SI 29)
@@ -5452,7 +5462,9 @@
"*
return pa_output_div_insn (operands, 0, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "udivsi3"
[(set (reg:SI 26) (match_operand:SI 1 "move_src_operand" ""))
@@ -5495,7 +5507,9 @@
"*
return pa_output_div_insn (operands, 1, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
[(set (reg:SI 29)
@@ -5509,7 +5523,9 @@
"*
return pa_output_div_insn (operands, 1, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "modsi3"
[(set (reg:SI 26) (match_operand:SI 1 "move_src_operand" ""))
@@ -5548,7 +5564,9 @@
"*
return pa_output_mod_insn (0, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
[(set (reg:SI 29) (mod:SI (reg:SI 26) (reg:SI 25)))
@@ -5561,7 +5579,9 @@
"*
return pa_output_mod_insn (0, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "umodsi3"
[(set (reg:SI 26) (match_operand:SI 1 "move_src_operand" ""))
@@ -5600,7 +5620,9 @@
"*
return pa_output_mod_insn (1, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
[(set (reg:SI 29) (umod:SI (reg:SI 26) (reg:SI 25)))
@@ -5613,7 +5635,9 @@
"*
return pa_output_mod_insn (1, insn);"
[(set_attr "type" "milli")
- (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_millicode_call (insn)")))])
;;- and instructions
;; We define DImode `and` so with DImode `not` we can get
@@ -7189,7 +7213,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_call (insn, operands[0], 0);
}"
[(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_symref_pic"
[(set (match_operand:SI 2 "register_operand" "=&r") (reg:SI 19))
@@ -7266,7 +7292,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_call (insn, operands[0], 0);
}"
[(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 0)")))])
;; This pattern is split if it is necessary to save and restore the
;; PIC register.
@@ -7351,7 +7379,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_call (insn, operands[0], 0);
}"
[(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_reg"
[(call (mem:SI (reg:SI 22))
@@ -7365,7 +7395,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22));
}"
[(set_attr "type" "dyncall")
- (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
;; PIC register.
@@ -7443,7 +7475,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22));
}"
[(set_attr "type" "dyncall")
- (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
;; PIC register.
@@ -7527,7 +7561,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_indirect_call (insn, operands[0]);
}"
[(set_attr "type" "dyncall")
- (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 12)]
+ (symbol_ref "pa_attr_length_indirect_call (insn)")))])
(define_expand "call_value"
[(parallel [(set (match_operand 0 "" "")
@@ -7653,7 +7689,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_call (insn, operands[1], 0);
}"
[(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_val_symref_pic"
[(set (match_operand:SI 3 "register_operand" "=&r") (reg:SI 19))
@@ -7736,7 +7774,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_call (insn, operands[1], 0);
}"
[(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 0)")))])
;; This pattern is split if it is necessary to save and restore the
;; PIC register.
@@ -7827,7 +7867,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_call (insn, operands[1], 0);
}"
[(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_val_reg"
[(set (match_operand 0 "" "")
@@ -7842,7 +7884,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22));
}"
[(set_attr "type" "dyncall")
- (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
;; PIC register.
@@ -7926,7 +7970,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22));
}"
[(set_attr "type" "dyncall")
- (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
;; PIC register.
@@ -8016,7 +8062,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
return pa_output_indirect_call (insn, operands[1]);
}"
[(set_attr "type" "dyncall")
- (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))])
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 12)]
+ (symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; Call subroutine returning any type.
@@ -8109,8 +8157,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
pa_output_arg_descriptor (insn);
return pa_output_call (insn, operands[0], 1);
}"
- [(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))])
+ [(set_attr "type" "sibcall")
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_insn "sibcall_internal_symref_64bit"
[(call (mem:SI (match_operand 0 "call_operand_address" ""))
@@ -8124,8 +8174,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
pa_output_arg_descriptor (insn);
return pa_output_call (insn, operands[0], 1);
}"
- [(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))])
+ [(set_attr "type" "sibcall")
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_expand "sibcall_value"
[(set (match_operand 0 "" "")
@@ -8193,8 +8245,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
pa_output_arg_descriptor (insn);
return pa_output_call (insn, operands[1], 1);
}"
- [(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))])
+ [(set_attr "type" "sibcall")
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_insn "sibcall_value_internal_symref_64bit"
[(set (match_operand 0 "" "")
@@ -8209,8 +8263,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
pa_output_arg_descriptor (insn);
return pa_output_call (insn, operands[1], 1);
}"
- [(set_attr "type" "call")
- (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))])
+ [(set_attr "type" "sibcall")
+ (set (attr "length")
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_insn "nop"
[(const_int 0)]
@@ -9246,10 +9302,11 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
gen_rtx_SYMBOL_REF (SImode,
\"$$sh_func_adrs\"));
}"
- [(set_attr "type" "multi")
+ [(set_attr "type" "sh_func_adrs")
(set (attr "length")
- (plus (symbol_ref "pa_attr_length_millicode_call (insn)")
- (const_int 20)))])
+ (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 28)]
+ (plus (symbol_ref "pa_attr_length_millicode_call (insn)")
+ (const_int 20))))])
;; On the PA, the PIC register is call clobbered, so it must
;; be saved & restored around calls by the caller. If the call
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index f0780c61ab5..181c9cd0fe2 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -9662,47 +9662,39 @@
;; the constant into an FP register, since it will probably be used there.
;; The "??" is a kludge until we can figure out a more reasonable way
;; of handling these non-offsettable values.
+
+;; The move constraints are ordered to prefer floating point registers before
+;; general purpose registers to avoid doing a store and a load to get the value
+;; into a floating point register when it is needed for a floating point
+;; operation. Prefer traditional floating point registers over VSX registers,
+;; since the D-form version of the memory instructions does not need a GPR for
+;; reloading.
+
(define_insn "*movdf_hardfloat32"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,ws,?wa,ws,?wa,Z,?Z,d,d,m,wa,!r,!r,!r")
- (match_operand:DF 1 "input_operand" "r,m,r,ws,wa,Z,Z,ws,wa,d,m,d,j,G,H,F"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=m,d,d,ws,?wa,Z,?Z,ws,?wa,wa,Y,??r,!r,!r,!r,!r")
+ (match_operand:DF 1 "input_operand" "d,m,d,Z,Z,ws,wa,ws,wa,j,r,Y,r,G,H,F"))]
"! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT
&& (gpc_reg_operand (operands[0], DFmode)
|| gpc_reg_operand (operands[1], DFmode))"
- "*
-{
- switch (which_alternative)
- {
- default:
- gcc_unreachable ();
- case 0:
- case 1:
- case 2:
- return \"#\";
- case 3:
- case 4:
- return \"xxlor %x0,%x1,%x1\";
- case 5:
- case 6:
- return \"lxsd%U1x %x0,%y1\";
- case 7:
- case 8:
- return \"stxsd%U0x %x1,%y0\";
- case 9:
- return \"fmr %0,%1\";
- case 10:
- return \"lfd%U1%X1 %0,%1\";
- case 11:
- return \"stfd%U0%X0 %1,%0\";
- case 12:
- return \"xxlxor %x0,%x0,%x0\";
- case 13:
- case 14:
- case 15:
- return \"#\";
- }
-}"
- [(set_attr "type" "two,load,store,fp,fp,fpload,fpload,fpstore,fpstore,fp,fpload,fpstore,vecsimple,*,*,*")
- (set_attr "length" "8,16,16,4,4,4,4,4,4,4,4,4,4,8,12,16")])
+ "@
+ stfd%U0%X0 %1,%0
+ lfd%U1%X1 %0,%1
+ fmr %0,%1
+ lxsd%U1x %x0,%y1
+ lxsd%U1x %x0,%y1
+ stxsd%U0x %x1,%y0
+ stxsd%U0x %x1,%y0
+ xxlor %x0,%x1,%x1
+ xxlor %x0,%x1,%x1
+ xxlxor %x0,%x0,%x0
+ #
+ #
+ #
+ #
+ #
+ #"
+ [(set_attr "type" "fpstore,fpload,fp,fpload,fpload,fpstore,fpstore,vecsimple,vecsimple,vecsimple,store,load,two,fp,fp,*")
+ (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8,8,8,8,12,16")])
(define_insn "*movdf_softfloat32"
[(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r")
@@ -9774,33 +9766,33 @@
; ld/std require word-aligned displacements -> 'Y' constraint.
; List Y->r and r->Y before r->r for reload.
(define_insn "*movdf_hardfloat64"
- [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,!r,ws,?wa,ws,?wa,Z,?Z,d,d,m,wa,*c*l,!r,*h,!r,!r,!r")
- (match_operand:DF 1 "input_operand" "r,Y,r,ws,wa,Z,Z,ws,wa,d,m,d,j,r,h,0,G,H,F"))]
+ [(set (match_operand:DF 0 "nonimmediate_operand" "=m,d,d,Y,??r,!r,ws,?wa,Z,?Z,ws,?wa,wa,*c*l,!r,*h,!r,!r,!r")
+ (match_operand:DF 1 "input_operand" "d,m,d,r,Y,r,Z,Z,ws,wa,ws,wa,j,r,h,0,G,H,F"))]
"TARGET_POWERPC64 && !TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS
&& TARGET_DOUBLE_FLOAT
&& (gpc_reg_operand (operands[0], DFmode)
|| gpc_reg_operand (operands[1], DFmode))"
"@
+ stfd%U0%X0 %1,%0
+ lfd%U1%X1 %0,%1
+ fmr %0,%1
std%U0%X0 %1,%0
ld%U1%X1 %0,%1
mr %0,%1
- xxlor %x0,%x1,%x1
- xxlor %x0,%x1,%x1
lxsd%U1x %x0,%y1
lxsd%U1x %x0,%y1
stxsd%U0x %x1,%y0
stxsd%U0x %x1,%y0
- fmr %0,%1
- lfd%U1%X1 %0,%1
- stfd%U0%X0 %1,%0
+ xxlor %x0,%x1,%x1
+ xxlor %x0,%x1,%x1
xxlxor %x0,%x0,%x0
mt%0 %1
mf%1 %0
- {cror 0,0,0|nop}
+ nop
#
#
#"
- [(set_attr "type" "store,load,*,fp,fp,fpload,fpload,fpstore,fpstore,fp,fpload,fpstore,vecsimple,mtjmpr,mfjmpr,*,*,*,*")
+ [(set_attr "type" "fpstore,fpload,fp,store,load,*,fpload,fpload,fpstore,fpstore,vecsimple,vecsimple,vecsimple,mtjmpr,mfjmpr,*,*,*,*")
(set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,12,16")])
(define_insn "*movdf_softfloat64"
diff --git a/gcc/config/sparc/sol2.h b/gcc/config/sparc/sol2.h
index ba2ec35e20a..90dfd89a134 100644
--- a/gcc/config/sparc/sol2.h
+++ b/gcc/config/sparc/sol2.h
@@ -136,9 +136,9 @@ along with GCC; see the file COPYING3. If not see
#undef CPP_CPU64_DEFAULT_SPEC
#define CPP_CPU64_DEFAULT_SPEC ""
#undef ASM_CPU32_DEFAULT_SPEC
-#define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusb"
+#define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plus" AS_NIAGARA3_FLAG
#undef ASM_CPU64_DEFAULT_SPEC
-#define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG "b"
+#define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG AS_NIAGARA3_FLAG
#undef ASM_CPU_DEFAULT_SPEC
#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC
#endif
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index a1919b4e7e7..93c09388243 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -1742,10 +1742,10 @@ extern int sparc_indent_opcode;
#define TARGET_SUN_TLS TARGET_TLS
#define TARGET_GNU_TLS 0
-#ifndef HAVE_AS_FMAF_HPC_VIS3
-#define AS_NIAGARA3_FLAG "b"
-#else
+#ifdef HAVE_AS_FMAF_HPC_VIS3
#define AS_NIAGARA3_FLAG "d"
+#else
+#define AS_NIAGARA3_FLAG "b"
#endif
/* The number of Pmode words for the setjmp buffer. */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d125ab37cf4..73241eb5901 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,48 @@
+2012-11-29 Jason Merrill <jason@redhat.com>
+
+ PR c++/53137
+ * pt.c (tsubst_expr) [DECL_EXPR]: Set LAMBDA_EXPR_THIS_CAPTURE here.
+ (tsubst_copy_and_build) [LAMBDA_EXPR]: And clear it here.
+ (instantiate_class_template_1): Not here.
+
+ PR c++/53862
+ * pt.c (tsubst_arg_types): Add "end" parameter.
+ (check_undeduced_parms): Use it.
+
+ PR c++/53039
+ * pt.c (arg_from_parm_pack_p): Go back to using same_type_p or
+ cp_tree_equal.
+
+ * cp-tree.h (TEMPLATE_PARM_NUM_SIBLINGS): Remove.
+ (struct template_parm_index_s): Remove num_siblings.
+ * pt.c (fixup_template_parms, fixup_template_parm_index): Remove.
+ (fixup_template_type_parm_type): Remove.
+ (build_template_parm_index): Remove num_siblings parm.
+ (process_template_parm): Likewise.
+ * parser.c (cp_parser_template_parameter_list): Adjust.
+ * tree.c (cp_tree_equal): Don't compare num_siblings.
+ * typeck.c (comp_template_parms_position): Likewise.
+
+ PR c++/50852
+ PR c++/53039
+ * tree.c (strip_typedefs_expr): New.
+ * cp-tree.h: Declare it.
+ * pt.c (convert_template_argument, unify): Use it.
+ * parser.c (cp_parser_template_declaration_after_export): Don't call
+ fixup_template_parms.
+
+2012-11-29 Kai Tietz <ktietz@redhat.com>
+
+ PR target/53912
+ * class.c (dump_class_hierarchy_r): Cast from pointer via uintptr_t.
+ (dump_vtable): Likewise.
+
+2012-11-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/55446
+ * init.c (build_vec_init): Do not early return error_mark_mode
+ when integer_all_onesp (maxindex).
+
2012-11-05 Jakub Jelinek <jakub@redhat.com>
Backported from mainline
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 633bff3390d..ce7798a8fdd 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -7536,9 +7536,9 @@ dump_class_hierarchy_r (FILE *stream,
int i;
indented = maybe_indent_hierarchy (stream, indent, 0);
- fprintf (stream, "%s (0x%lx) ",
+ fprintf (stream, "%s (0x" HOST_WIDE_INT_PRINT_HEX ") ",
type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER),
- (unsigned long) binfo);
+ (HOST_WIDE_INT) (uintptr_t) binfo);
if (binfo != igo)
{
fprintf (stream, "alternative-path\n");
@@ -7560,10 +7560,10 @@ dump_class_hierarchy_r (FILE *stream,
if (BINFO_PRIMARY_P (binfo))
{
indented = maybe_indent_hierarchy (stream, indent + 3, indented);
- fprintf (stream, " primary-for %s (0x%lx)",
+ fprintf (stream, " primary-for %s (0x" HOST_WIDE_INT_PRINT_HEX ")",
type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)),
TFF_PLAIN_IDENTIFIER),
- (unsigned long)BINFO_INHERITANCE_CHAIN (binfo));
+ (HOST_WIDE_INT) (uintptr_t) BINFO_INHERITANCE_CHAIN (binfo));
}
if (BINFO_LOST_PRIMARY_P (binfo))
{
@@ -7696,7 +7696,8 @@ dump_vtable (tree t, tree binfo, tree vtable)
if (ctor_vtbl_p)
{
if (!BINFO_VIRTUAL_P (binfo))
- fprintf (stream, " (0x%lx instance)", (unsigned long)binfo);
+ fprintf (stream, " (0x" HOST_WIDE_INT_PRINT_HEX " instance)",
+ (HOST_WIDE_INT) (uintptr_t) binfo);
fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER));
}
fprintf (stream, "\n");
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 3126963919a..0981cb88dff 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -248,7 +248,6 @@ struct GTY(()) template_parm_index_s {
int index;
int level;
int orig_level;
- int num_siblings;
tree decl;
};
typedef struct template_parm_index_s template_parm_index;
@@ -646,8 +645,9 @@ enum cp_lambda_default_capture_mode_type {
#define LAMBDA_EXPR_CAPTURE_LIST(NODE) \
(((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->capture_list)
-/* During parsing of the lambda, the node in the capture-list that holds
- the 'this' capture. */
+/* During parsing of the lambda-introducer, the node in the capture-list
+ that holds the 'this' capture. During parsing of the body, the
+ capture proxy for that node. */
#define LAMBDA_EXPR_THIS_CAPTURE(NODE) \
(((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->this_capture)
@@ -4515,9 +4515,6 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, TYPENAME_FLAG };
((template_parm_index*)TEMPLATE_PARM_INDEX_CHECK (NODE))
#define TEMPLATE_PARM_IDX(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->index)
#define TEMPLATE_PARM_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->level)
-/* The Number of sibling parms this template parm has. */
-#define TEMPLATE_PARM_NUM_SIBLINGS(NODE) \
- (TEMPLATE_PARM_INDEX_CAST (NODE)->num_siblings)
#define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
#define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
#define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
@@ -5288,9 +5285,8 @@ extern void append_type_to_template_for_access_check (tree, tree, tree,
extern tree splice_late_return_type (tree, tree);
extern bool is_auto (const_tree);
extern tree process_template_parm (tree, location_t, tree,
- bool, bool, unsigned);
+ bool, bool);
extern tree end_template_parm_list (tree);
-void fixup_template_parms (void);
extern void end_template_decl (void);
extern tree maybe_update_decl_type (tree, tree);
extern bool check_default_tmpl_args (tree, tree, int, int, int);
@@ -5663,6 +5659,7 @@ extern bool type_has_nontrivial_copy_init (const_tree);
extern bool class_tmpl_impl_spec_p (const_tree);
extern int zero_init_p (const_tree);
extern tree strip_typedefs (tree);
+extern tree strip_typedefs_expr (tree);
extern tree copy_binfo (tree, tree, tree,
tree *, int);
extern int member_p (const_tree);
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index a84d1f97a0d..483752abd09 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -3151,8 +3151,7 @@ build_vec_init (tree base, tree maxindex, tree init,
if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype))
maxindex = array_type_nelts (atype);
- if (maxindex == NULL_TREE || maxindex == error_mark_node
- || integer_all_onesp (maxindex))
+ if (maxindex == NULL_TREE || maxindex == error_mark_node)
return error_mark_node;
if (explicit_value_init_p)
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index a7018d423d3..26205e21c83 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -11967,8 +11967,7 @@ cp_parser_template_parameter_list (cp_parser* parser)
parm_loc,
parameter,
is_non_type,
- is_parameter_pack,
- 0);
+ is_parameter_pack);
else
{
tree err_parm = build_tree_list (parameter, parameter);
@@ -21134,7 +21133,6 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
{
/* Parse the template parameters. */
parameter_list = cp_parser_template_parameter_list (parser);
- fixup_template_parms ();
}
/* Get the deferred access checks from the parameter list. These
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 0c512393d38..f2a869c3da1 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -148,7 +148,7 @@ static tree convert_template_argument (tree, tree, tree,
static int for_each_template_parm (tree, tree_fn_t, void*,
struct pointer_set_t*, bool);
static tree expand_template_argument_pack (tree);
-static tree build_template_parm_index (int, int, int, int, tree, tree);
+static tree build_template_parm_index (int, int, int, tree, tree);
static bool inline_needs_template_parms (tree);
static void push_inline_template_parms_recursive (tree, int);
static tree retrieve_local_specialization (tree);
@@ -172,7 +172,7 @@ static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
static void regenerate_decl_from_template (tree, tree);
static tree most_specialized_class (tree, tree, tsubst_flags_t);
static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
-static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree);
+static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
static bool check_specialization_scope (void);
static tree process_partial_specialization (tree);
@@ -205,8 +205,6 @@ static tree listify_autos (tree, tree);
static tree template_parm_to_arg (tree t);
static bool arg_from_parm_pack_p (tree, tree);
static tree current_template_args (void);
-static tree fixup_template_type_parm_type (tree, int);
-static tree fixup_template_parm_index (tree, tree, int);
static tree tsubst_template_parm (tree, tree, tsubst_flags_t);
/* Make the current scope suitable for access checking when we are
@@ -3430,14 +3428,12 @@ check_template_shadow (tree decl)
}
/* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL,
- ORIG_LEVEL, DECL, and TYPE. NUM_SIBLINGS is the total number of
- template parameters. */
+ ORIG_LEVEL, DECL, and TYPE. */
static tree
build_template_parm_index (int index,
int level,
int orig_level,
- int num_siblings,
tree decl,
tree type)
{
@@ -3445,7 +3441,6 @@ build_template_parm_index (int index,
TEMPLATE_PARM_IDX (t) = index;
TEMPLATE_PARM_LEVEL (t) = level;
TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level;
- TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings;
TEMPLATE_PARM_DECL (t) = decl;
TREE_TYPE (t) = type;
TREE_CONSTANT (t) = TREE_CONSTANT (decl);
@@ -3511,7 +3506,6 @@ reduce_template_parm_level (tree index, tree type, int levels, tree args,
t = build_template_parm_index (TEMPLATE_PARM_IDX (index),
TEMPLATE_PARM_LEVEL (index) - levels,
TEMPLATE_PARM_ORIG_LEVEL (index),
- TEMPLATE_PARM_NUM_SIBLINGS (index),
decl, type);
TEMPLATE_PARM_DESCENDANTS (index) = t;
TEMPLATE_PARM_PARAMETER_PACK (t)
@@ -3539,8 +3533,7 @@ reduce_template_parm_level (tree index, tree type, int levels, tree args,
tree
process_template_parm (tree list, location_t parm_loc, tree parm,
- bool is_non_type, bool is_parameter_pack,
- unsigned num_template_parms)
+ bool is_non_type, bool is_parameter_pack)
{
tree decl = 0;
tree defval;
@@ -3615,7 +3608,6 @@ process_template_parm (tree list, location_t parm_loc, tree parm,
DECL_INITIAL (parm) = DECL_INITIAL (decl)
= build_template_parm_index (idx, processing_template_decl,
processing_template_decl,
- num_template_parms,
decl, TREE_TYPE (parm));
TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))
@@ -3649,7 +3641,6 @@ process_template_parm (tree list, location_t parm_loc, tree parm,
TEMPLATE_TYPE_PARM_INDEX (t)
= build_template_parm_index (idx, processing_template_decl,
processing_template_decl,
- num_template_parms,
decl, TREE_TYPE (parm));
TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack;
TYPE_CANONICAL (t) = canonical_type_parameter (t);
@@ -3689,305 +3680,6 @@ end_template_parm_list (tree parms)
return saved_parmlist;
}
-/* Create a new type almost identical to TYPE but which has the
- following differences:
-
- 1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of
- template sibling parameters of T.
-
- 2/ T has a new canonical type that matches the new number
- of sibling parms.
-
- 3/ From now on, T is going to be what lookups referring to the
- name of TYPE will return. No lookup should return TYPE anymore.
-
- NUM_PARMS is the new number of sibling parms TYPE belongs to.
-
- This is a subroutine of fixup_template_parms. */
-
-static tree
-fixup_template_type_parm_type (tree type, int num_parms)
-{
- tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx;
- tree t;
- /* This is the decl which name is inserted into the symbol table for
- the template parm type. So whenever we lookup the type name, this
- is the DECL we get. */
- tree decl;
-
- /* Do not fix up the type twice. */
- if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0)
- return type;
-
- t = copy_type (type);
- decl = TYPE_NAME (t);
-
- TYPE_MAIN_VARIANT (t) = t;
- TYPE_NEXT_VARIANT (t)= NULL_TREE;
- TYPE_POINTER_TO (t) = 0;
- TYPE_REFERENCE_TO (t) = 0;
-
- idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx),
- TEMPLATE_PARM_LEVEL (orig_idx),
- TEMPLATE_PARM_ORIG_LEVEL (orig_idx),
- num_parms,
- decl, t);
- TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx);
- TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx);
- TEMPLATE_TYPE_PARM_INDEX (t) = idx;
-
- TYPE_STUB_DECL (t) = decl;
- TEMPLATE_TYPE_DECL (t) = decl;
- if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)
- TREE_TYPE (DECL_TEMPLATE_RESULT (decl)) = t;
-
- /* Update the type associated to the type name stored in the symbol
- table. Now, whenever the type name is looked up, the resulting
- type is properly fixed up. */
- TREE_TYPE (decl) = t;
-
- TYPE_CANONICAL (t) = canonical_type_parameter (t);
-
- return t;
-}
-
-/* Create and return a new TEMPLATE_PARM_INDEX that is almost
- identical to I, but that is fixed up as to:
-
- 1/ carry the number of sibling parms (NUM_PARMS) of the template
- parm represented by I.
-
- 2/ replace all references to template parm types declared before I
- (in the same template parm list as I) by references to template
- parm types contained in ARGS. ARGS should contain the list of
- template parms that have been fixed up so far, in a form suitable
- to be passed to tsubst.
-
- This is a subroutine of fixup_template_parms. */
-
-static tree
-fixup_template_parm_index (tree i, tree args, int num_parms)
-{
- tree index, decl, type;
-
- if (i == NULL_TREE
- || TREE_CODE (i) != TEMPLATE_PARM_INDEX
- /* Do not fix up the index twice. */
- || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0))
- return i;
-
- decl = TEMPLATE_PARM_DECL (i);
- type = TREE_TYPE (decl);
-
- index = build_template_parm_index (TEMPLATE_PARM_IDX (i),
- TEMPLATE_PARM_LEVEL (i),
- TEMPLATE_PARM_ORIG_LEVEL (i),
- num_parms,
- decl, type);
-
- TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i);
- TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i);
-
- type = tsubst (type, args, tf_none, NULL_TREE);
-
- TREE_TYPE (decl) = type;
- TREE_TYPE (index) = type;
-
- return index;
-}
-
-/*
- This is a subroutine of fixup_template_parms.
-
- It computes the canonical type of the type of the template
- parameter PARM_DESC and update all references to that type so that
- they use the newly computed canonical type. No access check is
- performed during the fixup. PARM_DESC is a TREE_LIST which
- TREE_VALUE is the template parameter and its TREE_PURPOSE is the
- default argument of the template parm if any. IDX is the index of
- the template parameter, starting at 0. NUM_PARMS is the number of
- template parameters in the set PARM_DESC belongs to. ARGLIST is a
- TREE_VEC containing the full set of template parameters in a form
- suitable to be passed to substs functions as their ARGS
- argument. This is what current_template_args returns for a given
- template. The innermost vector of args in ARGLIST is the set of
- template parms that have been fixed up so far. This function adds
- the fixed up parameter into that vector. */
-
-static void
-fixup_template_parm (tree parm_desc,
- int idx,
- int num_parms,
- tree arglist)
-{
- tree parm = TREE_VALUE (parm_desc);
- tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist);
-
- push_deferring_access_checks (dk_no_check);
-
- if (TREE_CODE (parm) == TYPE_DECL)
- {
- /* PARM is a template type parameter. Fix up its type, add
- the fixed-up template parm to the vector of fixed-up
- template parms so far, and substitute the fixed-up
- template parms into the default argument of this
- parameter. */
- tree t =
- fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
- TREE_TYPE (parm) = t;
-
- TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc);
- }
- else if (TREE_CODE (parm) == TEMPLATE_DECL)
- {
- /* PARM is a template template parameter. This is going to
- be interesting. */
- tree tparms, targs, innermost_args, t;
- int j;
-
- /* First, fix up the parms of the template template parm
- because the parms are involved in defining the new canonical
- type of the template template parm. */
-
- /* So we need to substitute the template parm types that have
- been fixed up so far into the template parms of this template
- template parm. E.g, consider this:
-
- template<class T, template<T u> class TT> class S;
-
- In this case we want to substitute T into the
- template parameters of TT.
-
- So let's walk the template parms of PARM here, and
- tsubst ARGLIST into into each of the template
- parms. */
-
- /* For this substitution we need to build the full set of
- template parameters and use that as arguments for the
- tsubsting function. */
- tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm));
-
- /* This will contain the innermost parms of PARM into which
- we have substituted so far. */
- innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms));
- targs = add_to_template_args (arglist, innermost_args);
- for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j)
- {
- tree parameter;
-
- parameter = TREE_VEC_ELT (tparms, j);
-
- /* INNERMOST_ARGS needs to have at least the same number
- of elements as the index PARAMETER, ortherwise
- tsubsting into PARAMETER will result in partially
- instantiating it, reducing its tempate parm
- level. Let's tactically fill INNERMOST_ARGS for that
- purpose. */
- TREE_VEC_ELT (innermost_args, j) =
- template_parm_to_arg (parameter);
-
- fixup_template_parm (parameter, j,
- TREE_VEC_LENGTH (tparms),
- targs);
- }
-
- /* Now fix up the type of the template template parm. */
-
- t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms);
- TREE_TYPE (parm) = t;
-
- TREE_VEC_ELT (fixedup_args, idx) =
- template_parm_to_arg (parm_desc);
- }
- else if (TREE_CODE (parm) == PARM_DECL)
- {
- /* PARM is a non-type template parameter. We need to:
-
- * Fix up its TEMPLATE_PARM_INDEX to make it carry the
- proper number of sibling parameters.
-
- * Make lookups of the template parameter return a reference
- to the fixed-up index. No lookup should return references
- to the former index anymore.
-
- * Substitute the template parms that got fixed up so far
-
- * into the type of PARM. */
-
- tree index = DECL_INITIAL (parm);
-
- /* PUSHED_DECL is the decl added to the symbol table with
- the name of the parameter. E,g:
-
- template<class T, T u> //#0
- auto my_function(T t) -> decltype(u); //#1
-
- Here, when looking up u at //#1, we get the decl of u
- resulting from the declaration in #0. This is what
- PUSHED_DECL is. We need to replace the reference to the
- old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the
- fixed-up TEMPLATE_PARM_INDEX. */
- tree pushed_decl = TEMPLATE_PARM_DECL (index);
-
- /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must
- fixup the type of PUSHED_DECL as well and luckily
- fixup_template_parm_index does it for us too. */
- tree fixed_up_index =
- fixup_template_parm_index (index, arglist, num_parms);
-
- DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index;
-
- /* Add this fixed up PARM to the template parms we've fixed
- up so far and use that to substitute the fixed-up
- template parms into the type of PARM. */
- TREE_VEC_ELT (fixedup_args, idx) =
- template_parm_to_arg (parm_desc);
- TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist,
- tf_none, NULL_TREE);
- }
-
- TREE_PURPOSE (parm_desc) =
- tsubst_template_arg (TREE_PURPOSE (parm_desc),
- arglist, tf_none, parm);
-
- pop_deferring_access_checks ();
-}
-
-/* Walk the current template parms and properly compute the canonical
- types of the dependent types created during
- cp_parser_template_parameter_list. */
-
-void
-fixup_template_parms (void)
-{
- tree arglist;
- tree parameter_vec;
- tree fixedup_args;
- int i, num_parms;
-
- parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms);
- if (parameter_vec == NULL_TREE)
- return;
-
- num_parms = TREE_VEC_LENGTH (parameter_vec);
-
- /* This vector contains the current innermost template parms that
- have been fixed up so far. The form of FIXEDUP_ARGS is suitable
- to be passed to tsubst* functions as their ARGS argument. */
- fixedup_args = make_tree_vec (num_parms);
-
- /* This vector contains the full set of template parms in a form
- suitable to be passed to substs functions as their ARGS
- argument. */
- arglist = current_template_args ();
- arglist = add_outermost_template_args (arglist, fixedup_args);
-
- /* Let's do the proper fixup now. */
- for (i = 0; i < num_parms; ++i)
- fixup_template_parm (TREE_VEC_ELT (parameter_vec, i),
- i, num_parms, arglist);
-}
-
/* end_template_decl is called after a template declaration is seen. */
void
@@ -4091,34 +3783,13 @@ arg_from_parm_pack_p (tree arg_pack, tree parm_pack)
{
tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0);
tree pattern = PACK_EXPANSION_PATTERN (expansion);
- /* So we have an argument_pack<P...>. We want to test if P
- is actually PARM_PACK. We will not use cp_tree_equal to
- test P and PARM_PACK because during type fixup (by
- fixup_template_parm) P can be a pre-fixup version of a
- type and PARM_PACK be its post-fixup version.
- cp_tree_equal would consider them as different even
- though we would want to consider them compatible for our
- precise purpose here.
-
- Thus we are going to consider that P and PARM_PACK are
- compatible if they have the same DECL. */
- if ((/* If ARG_PACK is a type parameter pack named by the
- same DECL as parm_pack ... */
- (TYPE_P (pattern)
- && TYPE_P (parm_pack)
- && TYPE_NAME (pattern) == TYPE_NAME (parm_pack))
- /* ... or if PARM_PACK is a non-type parameter named by the
- same DECL as ARG_PACK. Note that PARM_PACK being a
- non-type parameter means it's either a PARM_DECL or a
- TEMPLATE_PARM_INDEX. */
- || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX
- && ((TREE_CODE (parm_pack) == PARM_DECL
- && (TEMPLATE_PARM_DECL (pattern)
- == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack))))
- || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX
- && (TEMPLATE_PARM_DECL (pattern)
- == TEMPLATE_PARM_DECL (parm_pack))))))
- && template_parameter_pack_p (pattern))
+ if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack))
+ || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern)))
+ /* The argument pack that the parameter maps to is just an
+ expansion of the parameter itself, such as one would
+ find in the implicit typedef of a class inside the
+ class itself. Consider this parameter "unsubstituted",
+ so that we will maintain the outer pack expansion. */
return true;
}
return false;
@@ -6609,7 +6280,7 @@ convert_template_argument (tree parm,
argument specification is valid. */
val = convert_nontype_argument (t, orig_arg, complain);
else
- val = orig_arg;
+ val = strip_typedefs_expr (orig_arg);
if (val == NULL_TREE)
val = error_mark_node;
@@ -9195,13 +8866,8 @@ instantiate_class_template_1 (tree type)
LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
}
- LAMBDA_EXPR_THIS_CAPTURE (lambda)
- = lookup_field_1 (type, get_identifier ("__this"), false);
-
instantiate_decl (decl, false, false);
maybe_add_lambda_conv_op (type);
-
- LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
}
else
gcc_assert (errorcount);
@@ -10867,11 +10533,14 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
return r;
}
-/* Substitute into the ARG_TYPES of a function type. */
+/* Substitute into the ARG_TYPES of a function type.
+ If END is a TREE_CHAIN, leave it and any following types
+ un-substituted. */
static tree
tsubst_arg_types (tree arg_types,
tree args,
+ tree end,
tsubst_flags_t complain,
tree in_decl)
{
@@ -10881,11 +10550,11 @@ tsubst_arg_types (tree arg_types,
tree expanded_args = NULL_TREE;
tree default_arg;
- if (!arg_types || arg_types == void_list_node)
+ if (!arg_types || arg_types == void_list_node || arg_types == end)
return arg_types;
remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types),
- args, complain, in_decl);
+ args, end, complain, in_decl);
if (remaining_arg_types == error_mark_node)
return error_mark_node;
@@ -11010,7 +10679,7 @@ tsubst_function_type (tree t,
}
/* Substitute the argument types. */
- arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args,
+ arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE,
complain, in_decl);
if (arg_types == error_mark_node)
return error_mark_node;
@@ -12930,6 +12599,12 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl,
else if (is_capture_proxy (DECL_EXPR_DECL (t)))
{
DECL_CONTEXT (decl) = current_function_decl;
+ if (DECL_NAME (decl) == this_identifier)
+ {
+ tree lam = DECL_CONTEXT (current_function_decl);
+ lam = CLASSTYPE_LAMBDA_EXPR (lam);
+ LAMBDA_EXPR_THIS_CAPTURE (lam) = decl;
+ }
insert_capture_proxy (decl);
}
else
@@ -14431,6 +14106,7 @@ tsubst_copy_and_build (tree t,
wait until after we finish instantiating the type. */
LAMBDA_EXPR_CAPTURE_LIST (r)
= RECUR (LAMBDA_EXPR_CAPTURE_LIST (t));
+ LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE;
return build_lambda_object (r);
}
@@ -16592,6 +16268,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict,
&& !TEMPLATE_PARM_PARAMETER_PACK (parm))
return unify_parameter_pack_mismatch (explain_p, parm, arg);
+ arg = strip_typedefs_expr (arg);
TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg;
return unify_success (explain_p);
@@ -17079,12 +16756,9 @@ check_undeduced_parms (tree targs, tree args, tree end)
}
if (found)
{
- for (; args != end; args = TREE_CHAIN (args))
- {
- tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE);
- if (substed == error_mark_node)
- return true;
- }
+ tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE);
+ if (substed == error_mark_node)
+ return true;
}
return false;
}
@@ -20325,7 +19999,7 @@ make_auto (void)
TYPE_STUB_DECL (au) = TYPE_NAME (au);
TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index
(0, processing_template_decl + 1, processing_template_decl + 1,
- 0, TYPE_NAME (au), NULL_TREE);
+ TYPE_NAME (au), NULL_TREE);
TYPE_CANONICAL (au) = canonical_type_parameter (au);
DECL_ARTIFICIAL (TYPE_NAME (au)) = 1;
SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au));
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 2878ba57689..499b1e3c9f2 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -1097,7 +1097,7 @@ cv_unqualified (tree type)
* If T is a type that needs structural equality
its TYPE_CANONICAL (T) will be NULL.
* TYPE_CANONICAL (T) desn't carry type attributes
- and looses template parameter names. */
+ and loses template parameter names. */
tree
strip_typedefs (tree t)
@@ -1187,6 +1187,16 @@ strip_typedefs (tree t)
TYPENAME_TYPE_FULLNAME (t),
typename_type, tf_none);
break;
+ case DECLTYPE_TYPE:
+ result = strip_typedefs_expr (DECLTYPE_TYPE_EXPR (t));
+ if (result == DECLTYPE_TYPE_EXPR (t))
+ return t;
+ else
+ result = (finish_decltype_type
+ (result,
+ DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t),
+ tf_none));
+ break;
default:
break;
}
@@ -1208,6 +1218,186 @@ strip_typedefs (tree t)
return cp_build_qualified_type (result, cp_type_quals (t));
}
+/* Like strip_typedefs above, but works on expressions, so that in
+
+ template<class T> struct A
+ {
+ typedef T TT;
+ B<sizeof(TT)> b;
+ };
+
+ sizeof(TT) is replaced by sizeof(T). */
+
+tree
+strip_typedefs_expr (tree t)
+{
+ unsigned i,n;
+ tree r, type, *ops;
+ enum tree_code code;
+
+ if (t == NULL_TREE || t == error_mark_node)
+ return t;
+
+ if (DECL_P (t) || CONSTANT_CLASS_P (t))
+ return t;
+
+ /* Some expressions have type operands, so let's handle types here rather
+ than check TYPE_P in multiple places below. */
+ if (TYPE_P (t))
+ return strip_typedefs (t);
+
+ code = TREE_CODE (t);
+ switch (code)
+ {
+ case IDENTIFIER_NODE:
+ case TEMPLATE_PARM_INDEX:
+ case OVERLOAD:
+ case BASELINK:
+ case ARGUMENT_PACK_SELECT:
+ return t;
+
+ case TRAIT_EXPR:
+ {
+ tree type1 = strip_typedefs (TRAIT_EXPR_TYPE1 (t));
+ tree type2 = strip_typedefs (TRAIT_EXPR_TYPE2 (t));
+ if (type1 == TRAIT_EXPR_TYPE1 (t)
+ && type2 == TRAIT_EXPR_TYPE2 (t))
+ return t;
+ r = copy_node (t);
+ TRAIT_EXPR_TYPE1 (t) = type1;
+ TRAIT_EXPR_TYPE2 (t) = type2;
+ return r;
+ }
+
+ case TREE_LIST:
+ {
+ VEC(tree,gc) *vec = make_tree_vector ();
+ bool changed = false;
+ tree it;
+ for (it = t; it; it = TREE_CHAIN (it))
+ {
+ tree val = strip_typedefs_expr (TREE_VALUE (t));
+ VEC_safe_push (tree, gc, vec, val);
+ if (val != TREE_VALUE (t))
+ changed = true;
+ gcc_assert (TREE_PURPOSE (it) == NULL_TREE);
+ }
+ if (changed)
+ {
+ r = NULL_TREE;
+ FOR_EACH_VEC_ELT_REVERSE (tree, vec, i, it)
+ r = tree_cons (NULL_TREE, it, r);
+ }
+ else
+ r = t;
+ release_tree_vector (vec);
+ return r;
+ }
+
+ case TREE_VEC:
+ {
+ bool changed = false;
+ VEC(tree,gc)* vec = make_tree_vector ();
+ n = TREE_VEC_LENGTH (t);
+ VEC_reserve (tree, gc, vec, n);
+ for (i = 0; i < n; ++i)
+ {
+ tree op = strip_typedefs_expr (TREE_VEC_ELT (t, i));
+ VEC_quick_push (tree, vec, op);
+ if (op != TREE_VEC_ELT (t, i))
+ changed = true;
+ }
+ if (changed)
+ {
+ r = copy_node (t);
+ for (i = 0; i < n; ++i)
+ TREE_VEC_ELT (r, i) = VEC_index (tree, vec, i);
+ }
+ else
+ r = t;
+ release_tree_vector (vec);
+ return r;
+ }
+
+ case CONSTRUCTOR:
+ {
+ bool changed = false;
+ VEC(constructor_elt,gc) *vec
+ = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t));
+ n = CONSTRUCTOR_NELTS (t);
+ type = strip_typedefs (TREE_TYPE (t));
+ for (i = 0; i < n; ++i)
+ {
+ constructor_elt *e = VEC_index (constructor_elt, vec, i);
+ tree op = strip_typedefs_expr (e->value);
+ if (op != e->value)
+ {
+ changed = true;
+ e->value = op;
+ }
+ gcc_checking_assert (e->index == strip_typedefs_expr (e->index));
+ }
+
+ if (!changed && type == TREE_TYPE (t))
+ {
+ VEC_free (constructor_elt, gc, vec);
+ return t;
+ }
+ else
+ {
+ r = copy_node (t);
+ TREE_TYPE (r) = type;
+ CONSTRUCTOR_ELTS (r) = vec;
+ return r;
+ }
+ }
+
+ case LAMBDA_EXPR:
+ gcc_unreachable ();
+
+ default:
+ break;
+ }
+
+ gcc_assert (EXPR_P (t));
+
+ n = TREE_OPERAND_LENGTH (t);
+ ops = XALLOCAVEC (tree, n);
+ type = TREE_TYPE (t);
+
+ switch (code)
+ {
+ CASE_CONVERT:
+ case IMPLICIT_CONV_EXPR:
+ case DYNAMIC_CAST_EXPR:
+ case STATIC_CAST_EXPR:
+ case CONST_CAST_EXPR:
+ case REINTERPRET_CAST_EXPR:
+ case CAST_EXPR:
+ case NEW_EXPR:
+ type = strip_typedefs (type);
+ /* fallthrough */
+
+ default:
+ for (i = 0; i < n; ++i)
+ ops[i] = strip_typedefs_expr (TREE_OPERAND (t, i));
+ break;
+ }
+
+ /* If nothing changed, return t. */
+ for (i = 0; i < n; ++i)
+ if (ops[i] != TREE_OPERAND (t, i))
+ break;
+ if (i == n && type == TREE_TYPE (t))
+ return t;
+
+ r = copy_node (t);
+ TREE_TYPE (r) = type;
+ for (i = 0; i < n; ++i)
+ TREE_OPERAND (r, i) = ops[i];
+ return r;
+}
+
/* Makes a copy of BINFO and TYPE, which is to be inherited into a
graph dominated by T. If BINFO is NULL, TYPE is a dependent base,
and we do a shallow copy. If BINFO is non-NULL, we do a deep copy.
@@ -2381,9 +2571,6 @@ cp_tree_equal (tree t1, tree t2)
BASELINK_FUNCTIONS (t2)));
case TEMPLATE_PARM_INDEX:
- if (TEMPLATE_PARM_NUM_SIBLINGS (t1)
- != TEMPLATE_PARM_NUM_SIBLINGS (t2))
- return false;
return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
&& TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
&& (TEMPLATE_PARM_PARAMETER_PACK (t1)
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 96b7d4e4419..17b6e604dbf 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -1137,12 +1137,6 @@ comp_template_parms_position (tree t1, tree t2)
index1 = TEMPLATE_TYPE_PARM_INDEX (TYPE_MAIN_VARIANT (t1));
index2 = TEMPLATE_TYPE_PARM_INDEX (TYPE_MAIN_VARIANT (t2));
- /* If T1 and T2 belong to template parm lists of different size,
- let's assume they are different. */
- if (TEMPLATE_PARM_NUM_SIBLINGS (index1)
- != TEMPLATE_PARM_NUM_SIBLINGS (index2))
- return false;
-
/* Then compare their relative position. */
if (TEMPLATE_PARM_IDX (index1) != TEMPLATE_PARM_IDX (index2)
|| TEMPLATE_PARM_LEVEL (index1) != TEMPLATE_PARM_LEVEL (index2)
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 598873aea11..b74ea7acb72 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -4436,9 +4436,9 @@ releases mishandled unaligned relocations on @code{sparc-*-*} targets.
@end html
@heading @anchor{sparc64-x-solaris2}sparc64-*-solaris2*
-When configuring the GNU Multiple Precision Library (GMP) or the
-MPFR library, the canonical target triplet must be specified as
-the @command{build} parameter on the configure line. For example
+When configuring the GNU Multiple Precision Library (GMP), the MPFR
+library or the MPC library, the canonical target triplet must be specified
+as the @command{build} parameter on the configure line. For example
on a Solaris 9 system:
@smallexample
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 3636a2f34ee..d5fd2a42752 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -6026,10 +6026,11 @@ fold_binary_op_with_conditional_arg (location_t loc,
}
/* This transformation is only worthwhile if we don't have to wrap ARG
- in a SAVE_EXPR and the operation can be simplified on at least one
- of the branches once its pushed inside the COND_EXPR. */
+ in a SAVE_EXPR and the operation can be simplified without recursing
+ on at least one of the branches once its pushed inside the COND_EXPR. */
if (!TREE_CONSTANT (arg)
&& (TREE_SIDE_EFFECTS (arg)
+ || TREE_CODE (arg) == COND_EXPR || TREE_CODE (arg) == VEC_COND_EXPR
|| TREE_CONSTANT (true_value) || TREE_CONSTANT (false_value)))
return NULL_TREE;
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 688f5723821..e2766538360 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,23 @@
+2012-11-24 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/55314
+ Backport from trunk
+ * resolve.c (resolve_allocate_deallocate): Compare all
+ subscripts when deciding if to reject a (de)allocate
+ statement.
+
+2012-11-23 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/55352
+ * trans-decl.c (generate_local_decl): Don't warn for explicitly imported
+ but unused module variables which are in a namelist or common block.
+
+2012-11-06 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/54917
+ * target-memory.c (gfc_target_expr_size,gfc_target_interpret_expr):
+ Handle BT_CLASS.
+
2012-10-14 Janus Weil <janus@gcc.gnu.org>
PR fortran/54784
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 33913aa8634..bbc1c2208fb 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -7280,8 +7280,8 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn)
}
}
- /* Check that an allocate-object appears only once in the statement.
- FIXME: Checking derived types is disabled. */
+ /* Check that an allocate-object appears only once in the statement. */
+
for (p = code->ext.alloc.list; p; p = p->next)
{
pe = p->expr;
@@ -7329,11 +7329,18 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn)
if (pr->next && qr->next)
{
+ int i;
gfc_array_ref *par = &(pr->u.ar);
gfc_array_ref *qar = &(qr->u.ar);
- if (gfc_dep_compare_expr (par->start[0],
- qar->start[0]) != 0)
- break;
+
+ for (i=0; i<par->dimen; i++)
+ {
+ if ((par->start[i] != NULL
+ || qar->start[i] != NULL)
+ && gfc_dep_compare_expr (par->start[i],
+ qar->start[i]) != 0)
+ goto break_label;
+ }
}
}
else
@@ -7345,6 +7352,8 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn)
pr = pr->next;
qr = qr->next;
}
+ break_label:
+ ;
}
}
}
diff --git a/gcc/fortran/target-memory.c b/gcc/fortran/target-memory.c
index 63878959b47..213ee52d307 100644
--- a/gcc/fortran/target-memory.c
+++ b/gcc/fortran/target-memory.c
@@ -120,6 +120,7 @@ gfc_target_expr_size (gfc_expr *e)
case BT_HOLLERITH:
return e->representation.length;
case BT_DERIVED:
+ case BT_CLASS:
{
/* Determine type size without clobbering the typespec for ISO C
binding types. */
@@ -563,6 +564,9 @@ gfc_target_interpret_expr (unsigned char *buffer, size_t buffer_size,
gfc_interpret_character (buffer, buffer_size, result);
break;
+ case BT_CLASS:
+ result->ts = CLASS_DATA (result)->ts;
+ /* Fall through. */
case BT_DERIVED:
result->representation.length =
gfc_interpret_derived (buffer, buffer_size, result);
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index e497fd6ede3..f225ab3b8c0 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -4586,22 +4586,25 @@ generate_local_decl (gfc_symbol * sym)
}
/* Warn for unused variables, but not if they're inside a common
- block, a namelist, or are use-associated. */
+ block or a namelist. */
else if (warn_unused_variable
- && !(sym->attr.in_common || sym->attr.use_assoc || sym->mark
- || sym->attr.in_namelist))
+ && !(sym->attr.in_common || sym->mark || sym->attr.in_namelist))
{
- gfc_warning ("Unused variable '%s' declared at %L", sym->name,
- &sym->declared_at);
- if (sym->backend_decl != NULL_TREE)
- TREE_NO_WARNING(sym->backend_decl) = 1;
- }
- else if (warn_unused_variable && sym->attr.use_only)
- {
- gfc_warning ("Unused module variable '%s' which has been explicitly "
- "imported at %L", sym->name, &sym->declared_at);
- if (sym->backend_decl != NULL_TREE)
- TREE_NO_WARNING(sym->backend_decl) = 1;
+ if (sym->attr.use_only)
+ {
+ gfc_warning ("Unused module variable '%s' which has been "
+ "explicitly imported at %L", sym->name,
+ &sym->declared_at);
+ if (sym->backend_decl != NULL_TREE)
+ TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
+ else if (!sym->attr.use_assoc)
+ {
+ gfc_warning ("Unused variable '%s' declared at %L",
+ sym->name, &sym->declared_at);
+ if (sym->backend_decl != NULL_TREE)
+ TREE_NO_WARNING(sym->backend_decl) = 1;
+ }
}
/* For variable length CHARACTER parameters, the PARM_DECL already
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 6f149bb402f..0fdc51a74f9 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -1658,6 +1658,10 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap)
{
bitmap_iterator bi;
unsigned bb_index;
+ rtx x_addr;
+
+ x_addr = get_addr (XEXP (x, 0));
+ x_addr = canon_rtx (x_addr);
/* First handle all the blocks with calls. We don't need to
do any list walking for them. */
@@ -1666,27 +1670,27 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap)
RESET_BIT (bmap[bb_index], indx);
}
- /* Now iterate over the blocks which have memory modifications
- but which do not have any calls. */
- EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set,
- blocks_with_calls,
- 0, bb_index, bi)
- {
- VEC (modify_pair,heap) *list
- = canon_modify_mem_list[bb_index];
- modify_pair *pair;
- unsigned ix;
+ /* Now iterate over the blocks which have memory modifications
+ but which do not have any calls. */
+ EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set,
+ blocks_with_calls,
+ 0, bb_index, bi)
+ {
+ VEC (modify_pair,heap) *list
+ = canon_modify_mem_list[bb_index];
+ modify_pair *pair;
+ unsigned ix;
- FOR_EACH_VEC_ELT_REVERSE (modify_pair, list, ix, pair)
- {
- rtx dest = pair->dest;
- rtx dest_addr = pair->dest_addr;
+ FOR_EACH_VEC_ELT_REVERSE (modify_pair, list, ix, pair)
+ {
+ rtx dest = pair->dest;
+ rtx dest_addr = pair->dest_addr;
- if (canon_true_dependence (dest, GET_MODE (dest),
- dest_addr, x, NULL_RTX))
- RESET_BIT (bmap[bb_index], indx);
- }
- }
+ if (canon_true_dependence (dest, GET_MODE (dest),
+ dest_addr, x, x_addr))
+ RESET_BIT (bmap[bb_index], indx);
+ }
+ }
}
x = XEXP (x, 0);
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
index 3ff64ffdd7d..f0a4d81c785 100644
--- a/gcc/ggc-common.c
+++ b/gcc/ggc-common.c
@@ -308,7 +308,7 @@ struct ptr_data
enum gt_types_enum type;
};
-#define POINTER_HASH(x) (hashval_t)((long)x >> 3)
+#define POINTER_HASH(x) (hashval_t)((intptr_t)x >> 3)
/* Register an object in the hash table. */
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 5e4bd23db51..0210ccfedb9 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -572,7 +572,7 @@ gimplify_and_update_call_from_tree (gimple_stmt_iterator *si_p, tree expr)
unlink_stmt_vdef (stmt);
release_defs (stmt);
}
- gsi_remove (si_p, true);
+ gsi_replace (si_p, gimple_build_nop (), true);
return;
}
}
diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc
index 3fa1cd6bc23..e16cd84d0a0 100644
--- a/gcc/go/gofrontend/expressions.cc
+++ b/gcc/go/gofrontend/expressions.cc
@@ -89,10 +89,11 @@ Expression::do_traverse(Traverse*)
// expression is being discarded. By default, we give an error.
// Expressions with side effects override.
-void
+bool
Expression::do_discarding_value()
{
this->unused_value_error();
+ return false;
}
// This virtual function is called to export expressions. This will
@@ -109,7 +110,7 @@ Expression::do_export(Export*) const
void
Expression::unused_value_error()
{
- error_at(this->location(), "value computed is not used");
+ this->report_error(_("value computed is not used"));
}
// Note that this expression is an error. This is called by children
@@ -789,9 +790,9 @@ class Error_expression : public Expression
return true;
}
- void
+ bool
do_discarding_value()
- { }
+ { return true; }
Type*
do_type()
@@ -1152,9 +1153,9 @@ class Sink_expression : public Expression
{ }
protected:
- void
+ bool
do_discarding_value()
- { }
+ { return true; }
Type*
do_type();
@@ -5323,13 +5324,19 @@ Binary_expression::do_numeric_constant_value(Numeric_constant* nc) const
// Note that the value is being discarded.
-void
+bool
Binary_expression::do_discarding_value()
{
if (this->op_ == OPERATOR_OROR || this->op_ == OPERATOR_ANDAND)
- this->right_->discarding_value();
+ {
+ this->right_->discarding_value();
+ return true;
+ }
else
- this->unused_value_error();
+ {
+ this->unused_value_error();
+ return false;
+ }
}
// Get type.
@@ -6528,7 +6535,7 @@ class Builtin_call_expression : public Call_expression
bool
do_numeric_constant_value(Numeric_constant*) const;
- void
+ bool
do_discarding_value();
Type*
@@ -7330,7 +7337,7 @@ Builtin_call_expression::do_numeric_constant_value(Numeric_constant* nc) const
// discarding the value of an ordinary function call, but we do for
// builtin functions, purely for consistency with the gc compiler.
-void
+bool
Builtin_call_expression::do_discarding_value()
{
switch (this->code_)
@@ -7351,7 +7358,7 @@ Builtin_call_expression::do_discarding_value()
case BUILTIN_OFFSETOF:
case BUILTIN_SIZEOF:
this->unused_value_error();
- break;
+ return false;
case BUILTIN_CLOSE:
case BUILTIN_COPY:
@@ -7360,7 +7367,7 @@ Builtin_call_expression::do_discarding_value()
case BUILTIN_PRINT:
case BUILTIN_PRINTLN:
case BUILTIN_RECOVER:
- break;
+ return true;
}
}
@@ -8506,6 +8513,16 @@ Call_expression::do_lower(Gogo* gogo, Named_object* function,
return Expression::make_cast(this->fn_->type(), this->args_->front(),
loc);
+ // Because do_type will return an error type and thus prevent future
+ // errors, check for that case now to ensure that the error gets
+ // reported.
+ if (this->get_function_type() == NULL)
+ {
+ if (!this->fn_->type()->is_error())
+ this->report_error(_("expected function"));
+ return Expression::make_error(loc);
+ }
+
// Recognize a call to a builtin function.
Func_expression* fne = this->fn_->func_expression();
if (fne != NULL
@@ -9195,6 +9212,9 @@ Call_expression::do_get_tree(Translate_context* context)
}
}
+ if (func == NULL)
+ fn = save_expr(fn);
+
tree ret = build_call_array(excess_type != NULL_TREE ? excess_type : rettype,
fn, nargs, args);
delete[] args;
@@ -9228,6 +9248,24 @@ Call_expression::do_get_tree(Translate_context* context)
if (this->results_ != NULL)
ret = this->set_results(context, ret);
+ // We can't unwind the stack past a call to nil, so we need to
+ // insert an explicit check so that the panic can be recovered.
+ if (func == NULL)
+ {
+ tree compare = fold_build2_loc(location.gcc_location(), EQ_EXPR,
+ boolean_type_node, fn,
+ fold_convert_loc(location.gcc_location(),
+ TREE_TYPE(fn),
+ null_pointer_node));
+ tree crash = build3_loc(location.gcc_location(), COND_EXPR,
+ void_type_node, compare,
+ gogo->runtime_error(RUNTIME_ERROR_NIL_DEREFERENCE,
+ location),
+ NULL_TREE);
+ ret = fold_build2_loc(location.gcc_location(), COMPOUND_EXPR,
+ TREE_TYPE(ret), crash, ret);
+ }
+
this->tree_ = ret;
return ret;
@@ -14079,7 +14117,7 @@ Numeric_constant::check_int_type(Integer_type* type, bool issue_error,
bool
Numeric_constant::check_float_type(Float_type* type, bool issue_error,
- Location location) const
+ Location location)
{
mpfr_t val;
switch (this->classification_)
@@ -14132,6 +14170,29 @@ Numeric_constant::check_float_type(Float_type* type, bool issue_error,
}
ret = exp <= max_exp;
+
+ if (ret)
+ {
+ // Round the constant to the desired type.
+ mpfr_t t;
+ mpfr_init(t);
+ switch (type->bits())
+ {
+ case 32:
+ mpfr_set_prec(t, 24);
+ break;
+ case 64:
+ mpfr_set_prec(t, 53);
+ break;
+ default:
+ go_unreachable();
+ }
+ mpfr_set(t, val, GMP_RNDN);
+ mpfr_set(val, t, GMP_RNDN);
+ mpfr_clear(t);
+
+ this->set_float(type, val);
+ }
}
mpfr_clear(val);
@@ -14146,7 +14207,7 @@ Numeric_constant::check_float_type(Float_type* type, bool issue_error,
bool
Numeric_constant::check_complex_type(Complex_type* type, bool issue_error,
- Location location) const
+ Location location)
{
if (type->is_abstract())
return true;
@@ -14165,46 +14226,77 @@ Numeric_constant::check_complex_type(Complex_type* type, bool issue_error,
}
mpfr_t real;
+ mpfr_t imag;
switch (this->classification_)
{
case NC_INT:
case NC_RUNE:
mpfr_init_set_z(real, this->u_.int_val, GMP_RNDN);
+ mpfr_init_set_ui(imag, 0, GMP_RNDN);
break;
case NC_FLOAT:
mpfr_init_set(real, this->u_.float_val, GMP_RNDN);
+ mpfr_init_set_ui(imag, 0, GMP_RNDN);
break;
case NC_COMPLEX:
- if (!mpfr_nan_p(this->u_.complex_val.imag)
- && !mpfr_inf_p(this->u_.complex_val.imag)
- && !mpfr_zero_p(this->u_.complex_val.imag))
- {
- if (mpfr_get_exp(this->u_.complex_val.imag) > max_exp)
- {
- if (issue_error)
- error_at(location, "complex imaginary part overflow");
- return false;
- }
- }
mpfr_init_set(real, this->u_.complex_val.real, GMP_RNDN);
+ mpfr_init_set(imag, this->u_.complex_val.imag, GMP_RNDN);
break;
default:
go_unreachable();
}
- bool ret;
- if (mpfr_nan_p(real) || mpfr_inf_p(real) || mpfr_zero_p(real))
- ret = true;
- else
- ret = mpfr_get_exp(real) <= max_exp;
+ bool ret = true;
+ if (!mpfr_nan_p(real)
+ && !mpfr_inf_p(real)
+ && !mpfr_zero_p(real)
+ && mpfr_get_exp(real) > max_exp)
+ {
+ if (issue_error)
+ error_at(location, "complex real part overflow");
+ ret = false;
+ }
- mpfr_clear(real);
+ if (!mpfr_nan_p(imag)
+ && !mpfr_inf_p(imag)
+ && !mpfr_zero_p(imag)
+ && mpfr_get_exp(imag) > max_exp)
+ {
+ if (issue_error)
+ error_at(location, "complex imaginary part overflow");
+ ret = false;
+ }
- if (!ret && issue_error)
- error_at(location, "complex real part overflow");
+ if (ret)
+ {
+ // Round the constant to the desired type.
+ mpfr_t t;
+ mpfr_init(t);
+ switch (type->bits())
+ {
+ case 64:
+ mpfr_set_prec(t, 24);
+ break;
+ case 128:
+ mpfr_set_prec(t, 53);
+ break;
+ default:
+ go_unreachable();
+ }
+ mpfr_set(t, real, GMP_RNDN);
+ mpfr_set(real, t, GMP_RNDN);
+ mpfr_set(t, imag, GMP_RNDN);
+ mpfr_set(imag, t, GMP_RNDN);
+ mpfr_clear(t);
+
+ this->set_complex(type, real, imag);
+ }
+
+ mpfr_clear(real);
+ mpfr_clear(imag);
return ret;
}
diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h
index eea141fe776..1b74b801748 100644
--- a/gcc/go/gofrontend/expressions.h
+++ b/gcc/go/gofrontend/expressions.h
@@ -360,10 +360,11 @@ class Expression
// This is called if the value of this expression is being
// discarded. This issues warnings about computed values being
- // unused.
- void
+ // unused. This returns true if all is well, false if it issued an
+ // error message.
+ bool
discarding_value()
- { this->do_discarding_value(); }
+ { return this->do_discarding_value(); }
// Return whether this is an error expression.
bool
@@ -689,7 +690,7 @@ class Expression
{ return false; }
// Called by the parser if the value is being discarded.
- virtual void
+ virtual bool
do_discarding_value();
// Child class holds type.
@@ -1205,7 +1206,7 @@ class Binary_expression : public Expression
bool
do_numeric_constant_value(Numeric_constant*) const;
- void
+ bool
do_discarding_value();
Type*
@@ -1373,9 +1374,9 @@ class Call_expression : public Expression
virtual Expression*
do_lower(Gogo*, Named_object*, Statement_inserter*, int);
- void
+ bool
do_discarding_value()
- { }
+ { return true; }
virtual Type*
do_type();
@@ -2051,9 +2052,9 @@ class Receive_expression : public Expression
do_traverse(Traverse* traverse)
{ return Expression::traverse(&this->channel_, traverse); }
- void
+ bool
do_discarding_value()
- { }
+ { return true; }
Type*
do_type();
@@ -2219,10 +2220,10 @@ class Numeric_constant
check_int_type(Integer_type*, bool, Location) const;
bool
- check_float_type(Float_type*, bool, Location) const;
+ check_float_type(Float_type*, bool, Location);
bool
- check_complex_type(Complex_type*, bool, Location) const;
+ check_complex_type(Complex_type*, bool, Location);
// The kinds of constants.
enum Classification
diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc
index ab2bb7cf29d..c65325d016e 100644
--- a/gcc/go/gofrontend/parse.cc
+++ b/gcc/go/gofrontend/parse.cc
@@ -2955,6 +2955,8 @@ Parse::primary_expr(bool may_be_sink, bool may_be_composite_lit,
this->advance_token();
Expression* expr = this->expression(PRECEDENCE_NORMAL, false, true,
NULL);
+ if (this->peek_token()->is_op(OPERATOR_COMMA))
+ this->advance_token();
if (this->peek_token()->is_op(OPERATOR_ELLIPSIS))
{
error_at(this->location(),
diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc
index af34670aee0..58057f84a56 100644
--- a/gcc/go/gofrontend/statements.cc
+++ b/gcc/go/gofrontend/statements.cc
@@ -2006,6 +2006,8 @@ Thunk_statement::do_determine_types()
void
Thunk_statement::do_check_types(Gogo*)
{
+ if (!this->call_->discarding_value())
+ return;
Call_expression* ce = this->call_->call_expression();
if (ce == NULL)
{
@@ -2471,11 +2473,15 @@ Thunk_statement::build_thunk(Gogo* gogo, const std::string& thunk_name)
Expression_statement* es =
static_cast<Expression_statement*>(call_statement);
Call_expression* ce = es->expr()->call_expression();
- go_assert(ce != NULL);
- if (may_call_recover)
- ce->set_is_deferred();
- if (recover_arg != NULL)
- ce->set_recover_arg(recover_arg);
+ if (ce == NULL)
+ go_assert(saw_errors());
+ else
+ {
+ if (may_call_recover)
+ ce->set_is_deferred();
+ if (recover_arg != NULL)
+ ce->set_recover_arg(recover_arg);
+ }
}
// That is all the thunk has to do.
diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc
index 90856a0c05d..795a1b51026 100644
--- a/gcc/go/gofrontend/types.cc
+++ b/gcc/go/gofrontend/types.cc
@@ -54,8 +54,7 @@ get_backend_interface_fields(Gogo* gogo, Interface_type* type,
// Class Type.
Type::Type(Type_classification classification)
- : classification_(classification), btype_is_placeholder_(false),
- btype_(NULL), type_descriptor_var_(NULL)
+ : classification_(classification), btype_(NULL), type_descriptor_var_(NULL)
{
}
@@ -919,11 +918,7 @@ Btype*
Type::get_backend(Gogo* gogo)
{
if (this->btype_ != NULL)
- {
- if (this->btype_is_placeholder_ && gogo->named_types_are_converted())
- this->finish_backend(gogo);
- return this->btype_;
- }
+ return this->btype_;
if (this->forward_declaration_type() != NULL
|| this->named_type() != NULL)
@@ -937,20 +932,36 @@ Type::get_backend(Gogo* gogo)
// that. There is no need to use the hash table for named types, as
// named types are only identical to themselves.
- std::pair<Type*, Btype*> val(this, NULL);
+ std::pair<Type*, Type_btype_entry> val;
+ val.first = this;
+ val.second.btype = NULL;
+ val.second.is_placeholder = false;
std::pair<Type_btypes::iterator, bool> ins =
Type::type_btypes.insert(val);
- if (!ins.second && ins.first->second != NULL)
+ if (!ins.second && ins.first->second.btype != NULL)
{
- if (gogo != NULL && gogo->named_types_are_converted())
- this->btype_ = ins.first->second;
- return ins.first->second;
+ // Note that GOGO can be NULL here, but only when the GCC
+ // middle-end is asking for a frontend type. That will only
+ // happen for simple types, which should never require
+ // placeholders.
+ if (!ins.first->second.is_placeholder)
+ this->btype_ = ins.first->second.btype;
+ else if (gogo->named_types_are_converted())
+ {
+ this->finish_backend(gogo, ins.first->second.btype);
+ ins.first->second.is_placeholder = false;
+ }
+
+ return ins.first->second.btype;
}
Btype* bt = this->get_btype_without_hash(gogo);
- if (ins.first->second == NULL)
- ins.first->second = bt;
+ if (ins.first->second.btype == NULL)
+ {
+ ins.first->second.btype = bt;
+ ins.first->second.is_placeholder = false;
+ }
else
{
// We have already created a backend representation for this
@@ -958,10 +969,9 @@ Type::get_backend(Gogo* gogo)
// a named type which in turns uses an identical unnamed type.
// Use the tree we created earlier and ignore the one we just
// built.
- bt = ins.first->second;
- if (gogo == NULL || !gogo->named_types_are_converted())
- return bt;
- this->btype_ = bt;
+ if (this->btype_ == bt)
+ this->btype_ = ins.first->second.btype;
+ bt = ins.first->second.btype;
}
return bt;
@@ -1028,6 +1038,37 @@ Type::get_backend_placeholder(Gogo* gogo)
// These are simple types that can just be created directly.
return this->get_backend(gogo);
+ case TYPE_MAP:
+ case TYPE_CHANNEL:
+ // All maps and channels have the same backend representation.
+ return this->get_backend(gogo);
+
+ case TYPE_NAMED:
+ case TYPE_FORWARD:
+ // Named types keep track of their own dependencies and manage
+ // their own placeholders.
+ return this->get_backend(gogo);
+
+ case TYPE_INTERFACE:
+ if (this->interface_type()->is_empty())
+ return Interface_type::get_backend_empty_interface_type(gogo);
+ break;
+
+ default:
+ break;
+ }
+
+ std::pair<Type*, Type_btype_entry> val;
+ val.first = this;
+ val.second.btype = NULL;
+ val.second.is_placeholder = false;
+ std::pair<Type_btypes::iterator, bool> ins =
+ Type::type_btypes.insert(val);
+ if (!ins.second && ins.first->second.btype != NULL)
+ return ins.first->second.btype;
+
+ switch (this->classification_)
+ {
case TYPE_FUNCTION:
{
Location loc = this->function_type()->location();
@@ -1070,37 +1111,36 @@ Type::get_backend_placeholder(Gogo* gogo)
}
break;
- case TYPE_MAP:
- case TYPE_CHANNEL:
- // All maps and channels have the same backend representation.
- return this->get_backend(gogo);
-
case TYPE_INTERFACE:
- if (this->interface_type()->is_empty())
- return Interface_type::get_backend_empty_interface_type(gogo);
- else
- {
- std::vector<Backend::Btyped_identifier> bfields;
- get_backend_interface_fields(gogo, this->interface_type(), true,
- &bfields);
- bt = gogo->backend()->struct_type(bfields);
- }
+ {
+ go_assert(!this->interface_type()->is_empty());
+ std::vector<Backend::Btyped_identifier> bfields;
+ get_backend_interface_fields(gogo, this->interface_type(), true,
+ &bfields);
+ bt = gogo->backend()->struct_type(bfields);
+ }
break;
- case TYPE_NAMED:
- case TYPE_FORWARD:
- // Named types keep track of their own dependencies and manage
- // their own placeholders.
- return this->get_backend(gogo);
-
case TYPE_SINK:
case TYPE_CALL_MULTIPLE_RESULT:
+ /* Note that various classifications were handled in the earlier
+ switch. */
default:
go_unreachable();
}
- this->btype_ = bt;
- this->btype_is_placeholder_ = true;
+ if (ins.first->second.btype == NULL)
+ {
+ ins.first->second.btype = bt;
+ ins.first->second.is_placeholder = true;
+ }
+ else
+ {
+ // A placeholder for this type got created along the way. Use
+ // that one and ignore the one we just built.
+ bt = ins.first->second.btype;
+ }
+
return bt;
}
@@ -1108,12 +1148,8 @@ Type::get_backend_placeholder(Gogo* gogo)
// using a placeholder type.
void
-Type::finish_backend(Gogo* gogo)
+Type::finish_backend(Gogo* gogo, Btype *placeholder)
{
- go_assert(this->btype_ != NULL);
- if (!this->btype_is_placeholder_)
- return;
-
switch (this->classification_)
{
case TYPE_ERROR:
@@ -1129,7 +1165,7 @@ Type::finish_backend(Gogo* gogo)
case TYPE_FUNCTION:
{
Btype* bt = this->do_get_backend(gogo);
- if (!gogo->backend()->set_placeholder_function_type(this->btype_, bt))
+ if (!gogo->backend()->set_placeholder_function_type(placeholder, bt))
go_assert(saw_errors());
}
break;
@@ -1137,7 +1173,7 @@ Type::finish_backend(Gogo* gogo)
case TYPE_POINTER:
{
Btype* bt = this->do_get_backend(gogo);
- if (!gogo->backend()->set_placeholder_pointer_type(this->btype_, bt))
+ if (!gogo->backend()->set_placeholder_pointer_type(placeholder, bt))
go_assert(saw_errors());
}
break;
@@ -1174,7 +1210,7 @@ Type::finish_backend(Gogo* gogo)
go_unreachable();
}
- this->btype_is_placeholder_ = false;
+ this->btype_ = placeholder;
}
// Return a pointer to the type descriptor for this type.
@@ -2391,7 +2427,7 @@ class Error_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
Btype*
@@ -2429,7 +2465,7 @@ class Void_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
Btype*
@@ -2467,7 +2503,7 @@ class Boolean_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return true; }
Btype*
@@ -2966,8 +3002,8 @@ String_type::do_get_backend(Gogo* gogo)
// backend representation, so force it to be finished now.
if (!gogo->named_types_are_converted())
{
- pb->get_backend_placeholder(gogo);
- pb->finish_backend(gogo);
+ Btype* bt = pb->get_backend_placeholder(gogo);
+ pb->finish_backend(gogo, bt);
}
fields[0].name = "__data";
@@ -3090,7 +3126,7 @@ class Sink_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
Btype*
@@ -3968,7 +4004,7 @@ class Nil_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
Btype*
@@ -4019,7 +4055,7 @@ class Call_multiple_result_type : public Type
}
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
Btype*
@@ -4296,7 +4332,7 @@ Struct_type::struct_has_hidden_fields(const Named_type* within,
// comparisons.
bool
-Struct_type::do_compare_is_identity(Gogo* gogo) const
+Struct_type::do_compare_is_identity(Gogo* gogo)
{
const Struct_field_list* fields = this->fields_;
if (fields == NULL)
@@ -4328,6 +4364,16 @@ Struct_type::do_compare_is_identity(Gogo* gogo) const
return false;
offset += field_size;
}
+
+ unsigned int struct_size;
+ if (!this->backend_type_size(gogo, &struct_size))
+ return false;
+ if (offset != struct_size)
+ {
+ // Trailing padding may not be zero when on the stack.
+ return false;
+ }
+
return true;
}
@@ -5272,7 +5318,7 @@ Array_type::do_verify()
// Whether we can use memcmp to compare this array.
bool
-Array_type::do_compare_is_identity(Gogo* gogo) const
+Array_type::do_compare_is_identity(Gogo* gogo)
{
if (this->length_ == NULL)
return false;
@@ -7967,7 +8013,7 @@ Named_type::do_has_pointer() const
// function.
bool
-Named_type::do_compare_is_identity(Gogo* gogo) const
+Named_type::do_compare_is_identity(Gogo* gogo)
{
// We don't use this->seen_ here because compare_is_identity may
// call base() later, and that will mess up if seen_ is set here.
diff --git a/gcc/go/gofrontend/types.h b/gcc/go/gofrontend/types.h
index cced68ddd68..bdda7a4280e 100644
--- a/gcc/go/gofrontend/types.h
+++ b/gcc/go/gofrontend/types.h
@@ -576,7 +576,7 @@ class Type
// identity function which gets nothing but a pointer to the value
// and a size.
bool
- compare_is_identity(Gogo* gogo) const
+ compare_is_identity(Gogo* gogo)
{ return this->do_compare_is_identity(gogo); }
// Return a hash code for this type for the method hash table.
@@ -869,7 +869,7 @@ class Type
// Finish the backend representation of a placeholder.
void
- finish_backend(Gogo*);
+ finish_backend(Gogo*, Btype*);
// Build a type descriptor entry for this type. Return a pointer to
// it. The location is the location which causes us to need the
@@ -950,7 +950,7 @@ class Type
{ return false; }
virtual bool
- do_compare_is_identity(Gogo*) const = 0;
+ do_compare_is_identity(Gogo*) = 0;
virtual unsigned int
do_hash_for_method(Gogo*) const;
@@ -1191,10 +1191,18 @@ class Type
Btype*
get_btype_without_hash(Gogo*);
+ // A backend type that may be a placeholder.
+ struct Type_btype_entry
+ {
+ Btype *btype;
+ bool is_placeholder;
+ };
+
// A mapping from Type to Btype*, used to ensure that the backend
- // representation of identical types is identical.
- typedef Unordered_map_hash(const Type*, Btype*, Type_hash_identical,
- Type_identical) Type_btypes;
+ // representation of identical types is identical. This is only
+ // used for unnamed types.
+ typedef Unordered_map_hash(const Type*, Type_btype_entry,
+ Type_hash_identical, Type_identical) Type_btypes;
static Type_btypes type_btypes;
@@ -1211,9 +1219,6 @@ class Type
// The type classification.
Type_classification classification_;
- // Whether btype_ is a placeholder type used while named types are
- // being converted.
- bool btype_is_placeholder_;
// The backend representation of the type, once it has been
// determined.
Btype* btype_;
@@ -1458,7 +1463,7 @@ class Integer_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return true; }
unsigned int
@@ -1535,7 +1540,7 @@ class Float_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
unsigned int
@@ -1604,7 +1609,7 @@ class Complex_type : public Type
protected:
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
unsigned int
@@ -1664,7 +1669,7 @@ class String_type : public Type
{ return true; }
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
Btype*
@@ -1778,7 +1783,7 @@ class Function_type : public Type
{ return true; }
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
unsigned int
@@ -1853,7 +1858,7 @@ class Pointer_type : public Type
{ return true; }
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return true; }
unsigned int
@@ -2139,7 +2144,7 @@ class Struct_type : public Type
do_has_pointer() const;
bool
- do_compare_is_identity(Gogo*) const;
+ do_compare_is_identity(Gogo*);
unsigned int
do_hash_for_method(Gogo*) const;
@@ -2272,7 +2277,7 @@ class Array_type : public Type
}
bool
- do_compare_is_identity(Gogo*) const;
+ do_compare_is_identity(Gogo*);
unsigned int
do_hash_for_method(Gogo*) const;
@@ -2365,7 +2370,7 @@ class Map_type : public Type
{ return true; }
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
unsigned int
@@ -2451,7 +2456,7 @@ class Channel_type : public Type
{ return true; }
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return true; }
unsigned int
@@ -2582,7 +2587,7 @@ class Interface_type : public Type
{ return true; }
bool
- do_compare_is_identity(Gogo*) const
+ do_compare_is_identity(Gogo*)
{ return false; }
unsigned int
@@ -2865,7 +2870,7 @@ class Named_type : public Type
do_has_pointer() const;
bool
- do_compare_is_identity(Gogo*) const;
+ do_compare_is_identity(Gogo*);
unsigned int
do_hash_for_method(Gogo*) const;
@@ -2949,7 +2954,7 @@ class Named_type : public Type
// function exits.
mutable bool seen_;
// Like seen_, but used only by do_compare_is_identity.
- mutable bool seen_in_compare_is_identity_;
+ bool seen_in_compare_is_identity_;
// Like seen_, but used only by do_get_backend.
bool seen_in_get_backend_;
};
@@ -3004,7 +3009,7 @@ class Forward_declaration_type : public Type
{ return this->real_type()->has_pointer(); }
bool
- do_compare_is_identity(Gogo* gogo) const
+ do_compare_is_identity(Gogo* gogo)
{ return this->real_type()->compare_is_identity(gogo); }
unsigned int
diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c
index 668a5ce9163..8c504c28639 100644
--- a/gcc/lto-opts.c
+++ b/gcc/lto-opts.c
@@ -93,6 +93,20 @@ lto_write_options (void)
{
struct cl_decoded_option *option = &save_decoded_options[i];
+ /* Skip explicitly some common options that we do not need. */
+ switch (option->opt_index)
+ {
+ case OPT_dumpbase:
+ case OPT_SPECIAL_unknown:
+ case OPT_SPECIAL_ignore:
+ case OPT_SPECIAL_program_name:
+ case OPT_SPECIAL_input_file:
+ continue;
+
+ default:
+ break;
+ }
+
/* Skip frontend and driver specific options here. */
if (!(cl_options[option->opt_index].flags & (CL_COMMON|CL_TARGET|CL_LTO)))
continue;
@@ -108,17 +122,6 @@ lto_write_options (void)
if (cl_options[option->opt_index].flags & (CL_DRIVER|CL_WARNING))
continue;
- /* Skip explicitly some common options that we do not need. */
- switch (option->opt_index)
- {
- case OPT_dumpbase:
- case OPT_SPECIAL_input_file:
- continue;
-
- default:
- break;
- }
-
for (j = 0; j < option->canonical_option_num_elements; ++j)
append_to_collect_gcc_options (&temporary_obstack, &first_p,
option->canonical_option[j]);
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 1c9aa833dbc..fcc9b724641 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -393,6 +393,12 @@ merge_and_complain (struct cl_decoded_option **decoded_options,
struct cl_decoded_option *foption = &fdecoded_options[i];
switch (foption->opt_index)
{
+ case OPT_SPECIAL_unknown:
+ case OPT_SPECIAL_ignore:
+ case OPT_SPECIAL_program_name:
+ case OPT_SPECIAL_input_file:
+ break;
+
default:
if (!(cl_options[foption->opt_index].flags & CL_TARGET))
break;
diff --git a/gcc/pointer-set.c b/gcc/pointer-set.c
index b57c404f6a1..ebad5dbf5b3 100644
--- a/gcc/pointer-set.c
+++ b/gcc/pointer-set.c
@@ -64,7 +64,7 @@ hash1 (const void *p, unsigned long max, unsigned long logmax)
#endif
const unsigned long shift = HOST_BITS_PER_LONG - logmax;
- return ((A * (unsigned long) p) >> shift) & (max - 1);
+ return ((A * (uintptr_t) p) >> shift) & (max - 1);
}
/* Allocate an empty pointer set. */
diff --git a/gcc/prefix.c b/gcc/prefix.c
index 369ede70309..c7003f8c674 100644
--- a/gcc/prefix.c
+++ b/gcc/prefix.c
@@ -157,12 +157,12 @@ lookup_key (char *key)
}
size = 32;
- dst = xmalloc (size);
+ dst = XNEWVEC (char, size);
res = RegQueryValueExA (reg_key, key, 0, &type, (LPBYTE) dst, &size);
if (res == ERROR_MORE_DATA && type == REG_SZ)
{
- dst = xrealloc (dst, size);
+ dst = XRESIZEVEC (char, dst, size);
res = RegQueryValueExA (reg_key, key, 0, &type, (LPBYTE) dst, &size);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8e2c69b73bd..feed2684d8f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,96 @@
+2012-12-03 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2012-09-24 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/53663
+ * gcc.dg/torture/pr53663-1.c: New testcase.
+ * gcc.dg/torture/pr53663-2.c: Likewise.
+ * gcc.dg/torture/pr53663-3.c: Likewise.
+
+2012-12-03 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2012-12-03 Marek Polacek <polacek@redhat.com>
+
+ PR c/55570
+ * gcc.dg/pr55570.c: New test.
+
+2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * gcc.dg/torture/pr54920.c: Add "-fno-common" option on hppa*-*-hpux*.
+
+2012-11-29 Jason Merrill <jason@redhat.com>
+
+ PR c++/53862
+ * g++.dg/cpp0x/variadic134.C: New.
+
+ PR c++/53858
+ * g++.dg/cpp0x/alias-decl-20.C: New.
+
+ PR c++/50852
+ * g++.dg/template/typedef39.C: New.
+
+ PR c++/53039
+ * g++.dg/cpp0x/variadic133.C: New.
+ * g++.dg/template/param1.C: Adjust.
+
+2012-11-27 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/55331
+ * g++.dg/opt/pr55331.C: New testcase.
+
+2012-11-26 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2012-10-12 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/54894
+ * gcc.dg/torture/pr54894.c: New testcase.
+
+ 2012-10-02 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/54735
+ * g++.dg/torture/pr54735.C: New testcase.
+
+2012-11-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/55446
+ * g++.dg/init/new41.C: New.
+
+2012-11-24 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ PR fortran/55314
+ Backport from trunk
+ * gfortran.dg/allocate_error_4.f90: New test.
+
+2012-11-23 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/55352
+ * gfortran.dg/namelist_76.f90: New.
+
+2012-11-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backported from mainline
+ 2012-11-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR middle-end/55142
+ * gcc.target/i386/pr55142-1.c: New file.
+ * gcc.target/i386/pr55142-2.c: Likewise.
+
+2012-11-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/stack_check3.ad[sb]: New test.
+
+2012-11-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc.c-torture/compile/20121107-1.c: New test.
+
+2012-11-06 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/54917
+ * gfortran.dg/transfer_class_1.f90: New.
+
2012-11-05 Eric Botcazou <ebotcazou@adacore.com>
* g++.dg/torture/20121105-1.C: New test.
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C
new file mode 100644
index 00000000000..078d257187a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C
@@ -0,0 +1,9 @@
+// PR c++/53858
+// { dg-do compile { target c++11 } }
+
+template <typename T> struct s0 { typedef T tdef0; };
+template <typename T> struct s1 { typedef T tdef1; };
+template <typename T> using us1 = typename s1<T>::tdef1;
+template <typename T, typename TT = typename us1<T>::tdef0> struct s2 {};
+
+int main () { return 0; }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C
new file mode 100644
index 00000000000..acf4eaa7fcb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C
@@ -0,0 +1,32 @@
+// PR c++/53137
+// { dg-options -std=c++11 }
+
+template <typename STORE>
+void getParent(STORE& tStore)
+{
+}
+
+struct Store
+{
+ template <typename CheckParentFunc>
+ void updateChildCommon(CheckParentFunc c)
+ {
+ c();
+ }
+
+ template <typename T>
+ int& getStore();
+
+ template <typename T>
+ void updateChild(const T& obj)
+ {
+ updateChildCommon([this] () { getParent(getStore<T>()); });
+ }
+
+ void update(int obj);
+};
+
+void Store::update(int obj)
+{
+ updateChild(obj);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic133.C b/gcc/testsuite/g++.dg/cpp0x/variadic133.C
new file mode 100644
index 00000000000..0265f0991c1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic133.C
@@ -0,0 +1,46 @@
+// PR c++/53039
+// { dg-do compile { target c++11 } }
+
+template <class, class>
+struct is_convertible
+{
+ static const bool value = true;
+};
+
+template<bool, class T>
+struct enable_if
+{
+ typedef T type;
+};
+
+template <bool...>
+struct Xs
+{
+ static const bool value = true;
+};
+
+template<typename... BTs>
+ class BType
+ {
+ template <typename... BUs,
+ typename enable_if<
+ Xs<is_convertible<BUs, BTs>::value...>::value,
+ bool>::type = false>
+ void fooX(BUs&&...);
+ };
+
+template <typename... ATs>
+ struct AType
+ {
+ template <typename... AUs,
+ typename enable_if<
+ Xs<is_convertible<AUs, ATs>::value...>::value,
+ bool>::type = false>
+ void foo(AUs&&...);
+ };
+
+int main()
+{
+ AType<int, int> t;
+ t.foo(1, 1);
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic134.C b/gcc/testsuite/g++.dg/cpp0x/variadic134.C
new file mode 100644
index 00000000000..d4181b02c8e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic134.C
@@ -0,0 +1,17 @@
+// PR c++/53862
+// { dg-do compile { target c++11 } }
+
+typedef unsigned long size_t;
+
+template<typename> struct is_scalar { static const bool value = true; };
+template<bool, typename T> struct enable_if { typedef T type; };
+
+template <size_t N, typename... Args>
+void f(Args...) {}
+
+template <size_t N, typename T, typename... Args>
+typename enable_if<is_scalar<T>::value, void>::type f(T, Args...) {}
+
+int main() {
+ f<1>(1);
+}
diff --git a/gcc/testsuite/g++.dg/init/new41.C b/gcc/testsuite/g++.dg/init/new41.C
new file mode 100644
index 00000000000..0559b1dac58
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/new41.C
@@ -0,0 +1,22 @@
+// PR c++/55446
+// { dg-do run }
+
+struct S
+{
+ S() { }
+};
+
+int n = 1;
+
+void* operator new[](__SIZE_TYPE__)
+{
+ n = -1;
+ return &n;
+}
+
+int main()
+{
+ new S[0];
+ if (n != -1)
+ __builtin_abort();
+}
diff --git a/gcc/testsuite/g++.dg/opt/pr55331.C b/gcc/testsuite/g++.dg/opt/pr55331.C
new file mode 100644
index 00000000000..4717db8091f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr55331.C
@@ -0,0 +1,14 @@
+// PR tree-optimization/55331
+// { dg-do compile }
+// { dg-options "-O2 -fno-tree-fre" }
+
+struct A {};
+
+void
+foo (A *p, bool x)
+{
+ A a;
+ char *e = (char *) (&a + 1);
+ if (x)
+ __builtin_memmove (p, &a, e - (char *) &a);
+}
diff --git a/gcc/testsuite/g++.dg/template/param1.C b/gcc/testsuite/g++.dg/template/param1.C
index a8c3791254f..e3784736fc4 100644
--- a/gcc/testsuite/g++.dg/template/param1.C
+++ b/gcc/testsuite/g++.dg/template/param1.C
@@ -2,11 +2,11 @@
// Origin: Volker Reichelt <reichelt@igpm.rwth-aachen.de>
// { dg-do compile }
-template<int> struct A // { dg-error "declaration" }
+template<int> struct A
{
A();
};
-template<int N, char> A<N>::A() {} // { dg-error "invalid use of incomplete type" }
+template<int N, char> A<N>::A() {} // { dg-error "got 2 template parameters|1 required" }
A<0> a;
diff --git a/gcc/testsuite/g++.dg/template/typedef39.C b/gcc/testsuite/g++.dg/template/typedef39.C
new file mode 100644
index 00000000000..85e8ddc4081
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/typedef39.C
@@ -0,0 +1,15 @@
+// PR c++/50852
+
+template<int d> class A;
+template<class T> struct B {typedef int K;typedef int L;};
+template<class U,class V> struct C
+{
+ typedef typename U::L X;
+ typedef A<X::a-1> W;
+};
+template<class U,int d> struct D
+{
+ typedef typename U::L X;
+ typedef A<X::a-1> W; // { dg-error "not a member" }
+};
+template class D<B<A<1> >,3>;
diff --git a/gcc/testsuite/g++.dg/torture/pr54735.C b/gcc/testsuite/g++.dg/torture/pr54735.C
new file mode 100644
index 00000000000..0604ec5179b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr54735.C
@@ -0,0 +1,179 @@
+// { dg-do compile }
+
+class Gmpfr
+{};
+class M : Gmpfr
+{
+public:
+ Gmpfr infconst;
+ M(int);
+};
+template<typename>struct A;
+template<typename, int, int, int = 0 ? : 0, int = 0, int = 0>class N;
+template<typename>class O;
+template<typename>struct B;
+struct C
+{
+ enum
+ { value };
+};
+class D
+{
+public:
+ enum
+ { ret };
+};
+struct F
+{
+ enum
+ { ret = 0 ? : 0 };
+};
+template<typename Derived>struct G
+{
+ typedef O<Derived>type;
+};
+struct H
+{
+ void operator * ();
+};
+struct I
+{
+ enum
+ { RequireInitialization = C::value ? : 0, ReadCost };
+};
+template<typename Derived>struct J
+{
+ enum
+ { ret = A<Derived>::InnerStrideAtCompileTime };
+};
+template<typename Derived>struct K
+{
+ enum
+ { ret = A<Derived>::OuterStrideAtCompileTime };
+};
+template<typename Derived>class P : H
+{
+public:
+ using H::operator *;
+ typedef typename A<Derived>::Scalar Scalar;
+ enum
+ { RowsAtCompileTime =
+ A<Derived>::RowsAtCompileTime, ColsAtCompileTime =
+ A<Derived>::ColsAtCompileTime, SizeAtCompileTime =
+ F::ret, MaxRowsAtCompileTime =
+ A<Derived>::MaxRowsAtCompileTime, MaxColsAtCompileTime =
+ A<Derived>::MaxColsAtCompileTime, MaxSizeAtCompileTime =
+ F::ret, Flags =
+ A<Derived>::Flags ? : 0 ? : 0, CoeffReadCost =
+ A<Derived>::CoeffReadCost, InnerStrideAtCompileTime =
+ J<Derived>::ret, OuterStrideAtCompileTime = K<Derived>::ret };
+ B<Derived> operator << (const Scalar&);
+};
+
+template<typename Derived>class O : public P<Derived>
+{};
+
+template<int _Cols>class L
+{
+public:
+
+ int cols()
+ {
+ return _Cols;
+ }
+};
+template<typename Derived>class Q : public G<Derived>::type
+{
+public:
+ typedef typename G<Derived>::type Base;
+ typedef typename A<Derived>::Index Index;
+ typedef typename A<Derived>::Scalar Scalar;
+ L<Base::ColsAtCompileTime> m_storage;
+ Index cols()
+ {
+ return m_storage.cols();
+ }
+
+ Scalar& coeffRef(Index,
+ Index);
+};
+
+template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows,
+ int _MaxCols>struct A<N<_Scalar, _Rows, _Cols, _Options, _MaxRows,
+ _MaxCols> >
+{
+ typedef _Scalar Scalar;
+ typedef int Index;
+ enum
+ { RowsAtCompileTime, ColsAtCompileTime =
+ _Cols, MaxRowsAtCompileTime, MaxColsAtCompileTime, Flags =
+ D::ret, CoeffReadCost =
+ I::ReadCost, InnerStrideAtCompileTime, OuterStrideAtCompileTime =
+ 0 ? : 0 };
+};
+template<typename _Scalar, int, int _Cols, int, int,
+ int>class N : public Q<N<_Scalar, 0, _Cols> >
+{
+public:
+ Q<N> Base;
+ template<typename T0, typename T1>N(const T0&,
+ const T1&);
+};
+void
+__assert_fail(int)
+throw() __attribute__((__noreturn__));
+template<typename XprType>struct B
+{
+ typedef typename XprType::Scalar Scalar;
+ typedef typename XprType::Index Index;
+ B(XprType & p1, const Scalar &) : m_xpr(p1), m_col(),
+ m_currentBlockRows(1)
+ {} B& operator, (const Scalar&)
+ {
+ Index a;
+
+ if (m_col == m_xpr.cols())
+ {
+ m_col = 0;
+ m_currentBlockRows = 1;
+ a && "Too " ? static_cast<void>(0) : __assert_fail(0);
+ }
+ m_col < m_xpr.cols()
+ && "Too " ? static_cast<void>(0) : __assert_fail(1);
+ m_currentBlockRows ? static_cast<void>(0) : __assert_fail(4);
+ m_xpr.coeffRef(0, m_col++) = 0;
+ return *this;
+ }
+ ~B()
+ {
+ 1 + m_currentBlockRows && m_col
+ && "Too " ? static_cast<void>(0) : __assert_fail(0);
+ }
+
+ XprType& m_xpr;
+ Index m_col;
+ Index m_currentBlockRows;
+};
+
+template<typename Derived>B<Derived>P<
+ Derived >::operator << (const Scalar&)
+{
+ return B<Derived>(*static_cast<Derived *>(this), 0);
+}
+
+template<class NT, int s>void
+ check_()
+{
+ N<NT, 0, s>m(0, 0);
+ m << 0, 0, 0, 0;
+}
+
+template<class NT>void check()
+{
+ check_<NT, 3>();
+}
+
+int main()
+{
+ check<M>();
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/20121107-1.c b/gcc/testsuite/gcc.c-torture/compile/20121107-1.c
new file mode 100644
index 00000000000..a86206702af
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20121107-1.c
@@ -0,0 +1,14 @@
+/* PR middle-end/55219 */
+/* Testcase by Markus Trippelsdorf <markus@trippelsdorf.de> */
+
+int x, c, d, e, f, g, h, i;
+double j;
+const int k;
+const enum { B } a;
+void
+fn1 (void)
+{
+ h = (g ? c : g ? f : g ? e : g ? i : g ? f : g ? e : g ? d : x)
+ + (a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a
+ ? j : a ? : 0 ? : a ? : a ? : a ? : a ? : a ? : a ? k : a ? : x);
+}
diff --git a/gcc/testsuite/gcc.dg/pr55570.c b/gcc/testsuite/gcc.dg/pr55570.c
new file mode 100644
index 00000000000..903bb033df9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr55570.c
@@ -0,0 +1,4 @@
+/* PR c/55570 */
+/* { dg-do compile } */
+
+char array[16] __attribute__((aligned (SOME_NOT_DEFINED_MACRO))); /* { dg-error "requested alignment is not an integer constant" } */
diff --git a/gcc/testsuite/gcc.dg/torture/pr53663-1.c b/gcc/testsuite/gcc.dg/torture/pr53663-1.c
new file mode 100644
index 00000000000..3392ddecb51
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr53663-1.c
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+union u
+{
+ int i;
+ _Bool b;
+};
+
+void f(union u * vp, union u v)
+{
+ *vp = v;
+}
+
+int main()
+{
+ union u v;
+ union u v1;
+ union u v2;
+
+ v.i = 10;
+ f(&v1, v);
+
+ v.b = 0;
+ f(&v2, v);
+ if (v2.b != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr53663-2.c b/gcc/testsuite/gcc.dg/torture/pr53663-2.c
new file mode 100644
index 00000000000..9589a9e2054
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr53663-2.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+union u
+{
+ int i;
+ short f;
+} v;
+
+short foo (short *f)
+{
+ *f = 1;
+ v.i = 0;
+ v.f = 0;
+ return *f;
+}
+
+int main()
+{
+ if (foo (&v.f) != 0)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr53663-3.c b/gcc/testsuite/gcc.dg/torture/pr53663-3.c
new file mode 100644
index 00000000000..96af5db10ac
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr53663-3.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+
+extern void abort (void);
+
+union u
+{
+ int i;
+ float f;
+} v;
+
+float foo (float *f)
+{
+ *f = 1;
+ v.i = 0;
+ v.f = 0.;
+ return *f;
+}
+
+int main()
+{
+ if (foo (&v.f) != 0.)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr54894.c b/gcc/testsuite/gcc.dg/torture/pr54894.c
new file mode 100644
index 00000000000..277e371de62
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr54894.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+
+typedef unsigned long long uint64_t;
+
+#define n 4096
+double A[n][n] __attribute__((aligned(16)));
+double B[n][n] __attribute__((aligned(16)));
+double C[n][n] __attribute__((aligned(16)));
+
+#define tilesize 128
+
+typedef double adouble __attribute__((__aligned__(16)));
+
+void foo ()
+{
+ int ih, jh, kh, il, kl, jl;
+ for (ih = 0; ih < n; ih += tilesize)
+ for (jh = 0; jh < n; jh += tilesize)
+ for (kh = 0; kh < n; kh += tilesize)
+ for (il = 0; il < tilesize; ++il)
+ {
+ adouble *Ap = (adouble *)&A[ih+il][kh];
+ for (kl = 0; kl < tilesize; ++kl)
+ for (jl = 0; jl < tilesize; ++jl)
+ C[ih+il][jh+jl] += Ap[kl] * B[kh+kl][jh+jl];
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr54920.c b/gcc/testsuite/gcc.dg/torture/pr54920.c
index d1622f765a7..6b99e9ed2eb 100644
--- a/gcc/testsuite/gcc.dg/torture/pr54920.c
+++ b/gcc/testsuite/gcc.dg/torture/pr54920.c
@@ -1,4 +1,5 @@
/* { dg-do compile } */
+/* { dg-options "-fno-common" { target { hppa*-*-hpux* } } } */
typedef short __v8hi __attribute__ ((__vector_size__ (16)));
typedef long long __m128i __attribute__ ((__vector_size__ (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr55142-1.c b/gcc/testsuite/gcc.target/i386/pr55142-1.c
new file mode 100644
index 00000000000..28375b54765
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr55142-1.c
@@ -0,0 +1,34 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-require-effective-target fpic } */
+/* { dg-options "-O2 -mx32 -fpic" } */
+
+typedef int int32_t;
+typedef unsigned int uint32_t;
+typedef int32_t Elf32_Sword;
+typedef struct
+{
+ Elf32_Sword d_tag;
+} Elf32_Dyn;
+struct link_map
+{
+ Elf32_Dyn *l_ld;
+ Elf32_Dyn *l_info[34];
+};
+extern struct link_map _dl_rtld_map __attribute__ ((visibility ("hidden")));
+static void elf_get_dynamic_info (struct link_map *l)
+{
+ Elf32_Dyn *dyn = l->l_ld;
+ Elf32_Dyn **info;
+ info = l->l_info;
+ while (dyn->d_tag != 0)
+ {
+ if ((uint32_t) (0x6ffffeff - dyn->d_tag) < 11)
+ info[0x6ffffeff - dyn->d_tag + 12] = dyn;
+ ++dyn;
+ }
+}
+void
+foo (void)
+{
+ elf_get_dynamic_info (&_dl_rtld_map);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr55142-2.c b/gcc/testsuite/gcc.target/i386/pr55142-2.c
new file mode 100644
index 00000000000..9daae9dca95
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr55142-2.c
@@ -0,0 +1,33 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-require-effective-target fpic } */
+/* { dg-options "-O3 -mx32 -fpic" } */
+/* { dg-final { scan-assembler-not "movl\[\\t \]*%.*,\[\\t \]*-1073742592\\(%r(.x|.i|.p|\[1-9\]*)\\)" } } */
+
+typedef int int32_t;
+typedef unsigned int uint32_t;
+typedef uint32_t Elf32_Word;
+typedef int32_t Elf32_Sword;
+typedef uint32_t Elf32_Addr;
+typedef struct {
+ Elf32_Sword d_tag;
+ union {
+ Elf32_Word d_val;
+ Elf32_Addr d_ptr;
+ } d_un;
+} Elf32_Dyn;
+struct link_map {
+ Elf32_Dyn *l_ld;
+ Elf32_Dyn *l_info[34 + 16 + 3 + 12 + 11];
+};
+void
+elf_get_dynamic_info (struct link_map *l)
+{
+ Elf32_Dyn *dyn = l->l_ld;
+ Elf32_Dyn **info = l->l_info;
+ typedef Elf32_Word d_tag_utype;
+ while (dyn->d_tag != 0) {
+ if ((d_tag_utype) (0x6ffffeff - dyn->d_tag) < 11)
+ info[(0x6ffffeff - dyn->d_tag) + 34 + 16 + 3 + 12] = dyn;
+ ++dyn;
+ }
+}
diff --git a/gcc/testsuite/gfortran.dg/allocate_error_4.f90 b/gcc/testsuite/gfortran.dg/allocate_error_4.f90
new file mode 100644
index 00000000000..6652b472f49
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/allocate_error_4.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! PR fortran/55314 - the second allocate statement was rejected.
+
+program main
+ implicit none
+ integer :: max_nb
+ type comm_mask
+ integer(4), pointer :: mask(:)
+ end type comm_mask
+ type (comm_mask), allocatable, save :: encode(:,:)
+ max_nb=2
+ allocate( encode(1:1,1:max_nb))
+ allocate( encode(1,1)%mask(1),encode(1,2)%mask(1))
+ deallocate( encode(1,1)%mask,encode(1,2)%mask)
+ allocate( encode(1,1)%mask(1),encode(1,1)%mask(1)) ! { dg-error "also appears at" }
+end program main
diff --git a/gcc/testsuite/gfortran.dg/namelist_76.f90 b/gcc/testsuite/gfortran.dg/namelist_76.f90
new file mode 100644
index 00000000000..acb3b2f6561
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_76.f90
@@ -0,0 +1,28 @@
+! { dg-do compile }
+!
+! PR 55352: [4.7/4.8 Regression] Erroneous gfortran warning of unused module variable when variable is only used in namelist
+!
+! Contributed by <AstroFloyd@gmail.com>
+
+module data
+ implicit none
+ integer :: a
+end module data
+
+program test
+ use data, only: a
+ implicit none
+ a = 1
+ call write_data()
+end program test
+
+subroutine write_data()
+ use data, only: a
+ implicit none
+ namelist /write_data_list/ a
+ open(unit=10,form='formatted',status='replace',action='write',file='test.dat')
+ write(10, nml=write_data_list)
+ close(10)
+end subroutine write_data
+
+! { dg-final { cleanup-modules "data" } }
diff --git a/gcc/testsuite/gfortran.dg/transfer_class_1.f90 b/gcc/testsuite/gfortran.dg/transfer_class_1.f90
new file mode 100644
index 00000000000..00b3a2405f3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/transfer_class_1.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+! { dg-options "-Wsurprising" }
+!
+! PR 54917: [4.7/4.8 Regression] [OOP] TRANSFER on polymorphic variable causes ICE
+!
+! Contributed by Sean Santos <quantheory@gmail.com>
+
+subroutine test_routine1(arg)
+ implicit none
+ type test_type
+ integer :: test_comp
+ end type
+ class(test_type) :: arg
+ integer :: i
+ i = transfer(arg, 1)
+end subroutine
diff --git a/gcc/testsuite/stack_check3.adb b/gcc/testsuite/stack_check3.adb
new file mode 100644
index 00000000000..734ed422733
--- /dev/null
+++ b/gcc/testsuite/stack_check3.adb
@@ -0,0 +1,36 @@
+-- { dg-do compile }
+-- { dg-options "-O -fstack-check" }
+
+package body Stack_Check3 is
+
+ type Int_Arr is array (1 .. 34) of Integer;
+
+ type Rec (D : Boolean := False) is
+ record
+ case D is
+ when True => IA : Int_Arr;
+ when False => null;
+ end case;
+ end record;
+
+ type Rec_Arr is array (1 .. 256) of Rec;
+
+ protected Prot_Arr is
+ procedure Reset;
+ private
+ A : Rec_Arr;
+ end Prot_Arr;
+
+ protected body Prot_Arr is
+ procedure Reset is
+ begin
+ A := (others => (D => False));
+ end Reset;
+ end Prot_Arr;
+
+ procedure Reset is
+ begin
+ Prot_Arr.Reset;
+ end Reset;
+
+end Stack_Check3;
diff --git a/gcc/testsuite/stack_check3.ads b/gcc/testsuite/stack_check3.ads
new file mode 100644
index 00000000000..869c418839e
--- /dev/null
+++ b/gcc/testsuite/stack_check3.ads
@@ -0,0 +1,5 @@
+package Stack_Check3 is
+
+ procedure Reset;
+
+end Stack_Check3;
diff --git a/gcc/toplev.c b/gcc/toplev.c
index c145af48fb9..6f1da41b761 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1494,12 +1494,15 @@ process_options (void)
/* If the user specifically requested variable tracking with tagging
uninitialized variables, we need to turn on variable tracking.
(We already determined above that variable tracking is feasible.) */
- if (flag_var_tracking_uninit)
+ if (flag_var_tracking_uninit == 1)
flag_var_tracking = 1;
if (flag_var_tracking == AUTODETECT_VALUE)
flag_var_tracking = optimize >= 1;
+ if (flag_var_tracking_uninit == AUTODETECT_VALUE)
+ flag_var_tracking_uninit = flag_var_tracking;
+
if (flag_var_tracking_assignments == AUTODETECT_VALUE)
flag_var_tracking_assignments = flag_var_tracking
&& !(flag_selective_scheduling || flag_selective_scheduling2);
diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c
index 3e89cdf11f3..2882611c5bf 100644
--- a/gcc/tree-dump.c
+++ b/gcc/tree-dump.c
@@ -169,7 +169,8 @@ void
dump_pointer (dump_info_p di, const char *field, void *ptr)
{
dump_maybe_newline (di);
- fprintf (di->stream, "%-4s: %-8lx ", field, (unsigned long) ptr);
+ fprintf (di->stream, "%-4s: %-8" HOST_WIDE_INT_PRINT "x ", field,
+ (unsigned HOST_WIDE_INT) (uintptr_t) ptr);
di->column += 15;
}
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index 8d58e9c88fc..24d4bcd4b42 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -4981,6 +4981,13 @@ execute_pre (bool do_fre)
todo |= tail_merge_optimize (todo);
free_scc_vn ();
+ /* Tail merging invalidates the virtual SSA web, together with
+ cfg-cleanup opportunities exposed by PRE this will wreck the
+ SSA updating machinery. So make sure to run update-ssa
+ manually, before eventually scheduling cfg-cleanup as part of
+ the todo. */
+ update_ssa (TODO_update_ssa_only_virtuals);
+
return todo;
}
@@ -5014,8 +5021,7 @@ struct gimple_opt_pass pass_pre =
0, /* properties_provided */
0, /* properties_destroyed */
TODO_rebuild_alias, /* todo_flags_start */
- TODO_update_ssa_only_virtuals | TODO_ggc_collect
- | TODO_verify_ssa /* todo_flags_finish */
+ TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */
}
};
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index f7a0b53e8e0..c2bd59d6416 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -1484,7 +1484,8 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_)
/* 3) Assignment from a constant. We can use folds native encode/interpret
routines to extract the assigned bits. */
- else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
+ else if (vn_walk_kind == VN_WALKREWRITE
+ && CHAR_BIT == 8 && BITS_PER_UNIT == 8
&& ref->size == maxsize
&& maxsize % BITS_PER_UNIT == 0
&& offset % BITS_PER_UNIT == 0
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 20690e67961..705f4f3a510 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -5793,11 +5793,6 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
&& GET_MODE_CLASS (inner_mode) != MODE_FLOAT)
return NULL_TREE;
- /* We can't build a vector type of elements with alignment bigger than
- their size. */
- if (nbytes < TYPE_ALIGN_UNIT (scalar_type))
- return NULL_TREE;
-
/* For vector types of elements whose mode precision doesn't
match their types precision we use a element type of mode
precision. The vectorization routines will have to make sure
@@ -5814,11 +5809,21 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
When the component mode passes the above test simply use a type
corresponding to that mode. The theory is that any use that
would cause problems with this will disable vectorization anyway. */
- if (!SCALAR_FLOAT_TYPE_P (scalar_type)
- && !INTEGRAL_TYPE_P (scalar_type)
- && !POINTER_TYPE_P (scalar_type))
+ else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
+ && !INTEGRAL_TYPE_P (scalar_type)
+ && !POINTER_TYPE_P (scalar_type))
+ scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
+
+ /* We can't build a vector type of elements with alignment bigger than
+ their size. */
+ else if (nbytes < TYPE_ALIGN_UNIT (scalar_type))
scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
+ /* If we felt back to using the mode fail if there was
+ no scalar type for it. */
+ if (scalar_type == NULL_TREE)
+ return NULL_TREE;
+
/* If no size was supplied use the mode the target prefers. Otherwise
lookup a vector mode of the specified size. */
if (size == 0)
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index c91be9a1c29..d204c767221 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,14 @@
+2012-12-04 Richard Henderson <rth@redhat.com>
+
+ PR bootstrap/55571
+ * Makefile.in (libgcc_s.so): Depend on and link with libgcc.a.
+
+2012-11-28 Richard Henderson <rth@redhat.com>
+
+ PR libgcc/48076
+ * emutls.c (__emutls_get_address): Avoid race condition between
+ obj->loc.offset read and emutls_key initialization.
+
2012-11-04 Uros Bizjak <ubizjak@gmail.com>
PR target/55175
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index f38d5b4a250..e1cac49b386 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -918,7 +918,7 @@ libgcc-std.ver: $(srcdir)/libgcc-std.ver.in
sed -e 's/__PFX__/$(LIBGCC_VER_GNU_PREFIX)/g' \
-e 's/__FIXPTPFX__/$(LIBGCC_VER_FIXEDPOINT_GNU_PREFIX)/g' < $< > $@
-libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts)
+libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts) libgcc.a
# @multilib_flags@ is still needed because this may use
# $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly.
# @multilib_dir@ is not really necessary, but sometimes it has
@@ -926,7 +926,7 @@ libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts)
$(mkinstalldirs) $(MULTIDIR)
$(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \
@multilib_dir@,$(MULTIDIR),$(subst \
- @shlib_objs@,$(objects),$(subst \
+ @shlib_objs@,$(objects) libgcc.a,$(subst \
@shlib_base_name@,libgcc_s,$(subst \
@shlib_map_file@,$(mapfile),$(subst \
@shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \
diff --git a/libgcc/emutls.c b/libgcc/emutls.c
index 22ea4403edb..f1b653b7d54 100644
--- a/libgcc/emutls.c
+++ b/libgcc/emutls.c
@@ -136,7 +136,7 @@ __emutls_get_address (struct __emutls_object *obj)
#ifndef __GTHREADS
abort ();
#else
- pointer offset = obj->loc.offset;
+ pointer offset = __atomic_load_n (&obj->loc.offset, __ATOMIC_ACQUIRE);
if (__builtin_expect (offset == 0, 0))
{
@@ -147,7 +147,7 @@ __emutls_get_address (struct __emutls_object *obj)
if (offset == 0)
{
offset = ++emutls_size;
- obj->loc.offset = offset;
+ __atomic_store_n (&obj->loc.offset, offset, __ATOMIC_RELEASE);
}
__gthread_mutex_unlock (&emutls_mutex);
}
diff --git a/libgo/go/reflect/type.go b/libgo/go/reflect/type.go
index 93021bae263..f2675c5784c 100644
--- a/libgo/go/reflect/type.go
+++ b/libgo/go/reflect/type.go
@@ -1230,8 +1230,19 @@ func directlyAssignable(T, V *commonType) bool {
for i := range t.fields {
tf := &t.fields[i]
vf := &v.fields[i]
- if tf.name != vf.name || tf.pkgPath != vf.pkgPath ||
- tf.typ != vf.typ || tf.tag != vf.tag || tf.offset != vf.offset {
+ if tf.name != vf.name && (tf.name == nil || vf.name == nil || *tf.name != *vf.name) {
+ return false
+ }
+ if tf.pkgPath != vf.pkgPath && (tf.pkgPath == nil || vf.pkgPath == nil || *tf.pkgPath != *vf.pkgPath) {
+ return false
+ }
+ if tf.typ != vf.typ {
+ return false
+ }
+ if tf.tag != vf.tag && (tf.tag == nil || vf.tag == nil || *tf.tag != *vf.tag) {
+ return false
+ }
+ if tf.offset != vf.offset {
return false
}
}
diff --git a/libgo/go/reflect/value.go b/libgo/go/reflect/value.go
index b25e5c73d1a..5d0890016ed 100644
--- a/libgo/go/reflect/value.go
+++ b/libgo/go/reflect/value.go
@@ -841,7 +841,7 @@ func valueInterface(v Value, safe bool) interface{} {
eface.typ = v.typ.runtimeType()
eface.word = v.iword()
- if v.flag&flagIndir != 0 && v.typ.size > ptrSize {
+ if v.flag&flagIndir != 0 && v.kind() != Ptr && v.kind() != UnsafePointer {
// eface.word is a pointer to the actual data,
// which might be changed. We need to return
// a pointer to unchanging data, so make a copy.
diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go
index 8d7da192514..23164042ed9 100644
--- a/libgo/go/syscall/libcall_linux.go
+++ b/libgo/go/syscall/libcall_linux.go
@@ -310,11 +310,13 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i
var lroff _loff_t
var plroff *_loff_t
if roff != nil {
+ lroff = _loff_t(*roff)
plroff = &lroff
}
var lwoff _loff_t
var plwoff *_loff_t
if woff != nil {
+ lwoff = _loff_t(*woff)
plwoff = &lwoff
}
n, err = splice(rfd, plroff, wfd, plwoff, len, flags)
diff --git a/libgo/go/syscall/socket.go b/libgo/go/syscall/socket.go
index 973759086ce..d11d6cd7534 100644
--- a/libgo/go/syscall/socket.go
+++ b/libgo/go/syscall/socket.go
@@ -87,12 +87,16 @@ func (sa *SockaddrUnix) sockaddr() (*RawSockaddrAny, Socklen_t, error) {
for i := 0; i < n; i++ {
sa.raw.Path[i] = int8(name[i])
}
+ // length is family (uint16), name, NUL.
+ sl := 2 + Socklen_t(n) + 1
if sa.raw.Path[0] == '@' {
sa.raw.Path[0] = 0
+ // Don't count trailing NUL for abstract address.
+ sl--
}
// length is family (uint16), name, NUL.
- return (*RawSockaddrAny)(unsafe.Pointer(&sa.raw)), 2 + Socklen_t(n) + 1, nil
+ return (*RawSockaddrAny)(unsafe.Pointer(&sa.raw)), sl, nil
}
func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
diff --git a/libgo/go/syscall/socket_linux.go b/libgo/go/syscall/socket_linux.go
index 42ab2185084..224ca55ae21 100644
--- a/libgo/go/syscall/socket_linux.go
+++ b/libgo/go/syscall/socket_linux.go
@@ -103,7 +103,7 @@ func (sa *RawSockaddrUnix) getLen() (int, error) {
// to be uninterpreted fixed-size binary blobs--but
// everyone uses this convention.
n := 0
- for n < len(sa.Path) - 3 && sa.Path[n] != 0 {
+ for n < len(sa.Path) && sa.Path[n] != 0 {
n++
}
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
index 12e0310bb43..606a46324ff 100755
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -168,6 +168,12 @@ enum {
#ifdef TIOCGWINSZ
TIOCGWINSZ_val = TIOCGWINSZ,
#endif
+#ifdef TIOCNOTTY
+ TIOCNOTTY_val = TIOCNOTTY,
+#endif
+#ifdef TIOCSCTTY
+ TIOCSCTTY_val = TIOCSCTTY,
+#endif
};
EOF
@@ -714,6 +720,16 @@ if ! grep '^const TIOCGWINSZ' ${OUT} >/dev/null 2>&1; then
echo 'const TIOCGWINSZ = _TIOCGWINSZ_val' >> ${OUT}
fi
fi
+if ! grep '^const TIOCNOTTY' ${OUT} >/dev/null 2>&1; then
+ if grep '^const _TIOCNOTTY_val' ${OUT} >/dev/null 2>&1; then
+ echo 'const TIOCNOTTY = _TIOCNOTTY_val' >> ${OUT}
+ fi
+fi
+if ! grep '^const TIOCSCTTY' ${OUT} >/dev/null 2>&1; then
+ if grep '^const _TIOCSCTTY_val' ${OUT} >/dev/null 2>&1; then
+ echo 'const TIOCSCTTY = _TIOCSCTTY_val' >> ${OUT}
+ fi
+fi
# The ioctl flags for terminal control
grep '^const _TC[GS]ET' gen-sysinfo.go | \
diff --git a/libgo/runtime/print.c b/libgo/runtime/print.c
index 5a8e47e5373..fcf57ea4144 100644
--- a/libgo/runtime/print.c
+++ b/libgo/runtime/print.c
@@ -17,7 +17,10 @@ gwrite(const void *v, int32 n)
G* g = runtime_g();
if(g == nil || g->writebuf == nil) {
- runtime_write(2, v, n);
+ // Avoid -D_FORTIFY_SOURCE problems.
+ int rv __attribute__((unused));
+
+ rv = runtime_write(2, v, n);
return;
}
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 11845a9bd12..25a5994469f 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,9 @@
+2012-11-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR libgomp/55411
+ * team.c (gomp_free_thread): Decrease gomp_managed_threads
+ if pool had any threads_used.
+
2012-09-20 Release Manager
* GCC 4.7.2 released.
diff --git a/libgomp/team.c b/libgomp/team.c
index 633902ca567..110bd47116b 100644
--- a/libgomp/team.c
+++ b/libgomp/team.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011
+/* Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011, 2012
Free Software Foundation, Inc.
Contributed by Richard Henderson <rth@redhat.com>.
@@ -232,6 +232,15 @@ gomp_free_thread (void *arg __attribute__((unused)))
gomp_barrier_wait (&pool->threads_dock);
/* Now it is safe to destroy the barrier and free the pool. */
gomp_barrier_destroy (&pool->threads_dock);
+
+#ifdef HAVE_SYNC_BUILTINS
+ __sync_fetch_and_add (&gomp_managed_threads,
+ 1L - pool->threads_used);
+#else
+ gomp_mutex_lock (&gomp_remaining_threads_lock);
+ gomp_managed_threads -= pool->threads_used - 1L;
+ gomp_mutex_unlock (&gomp_remaining_threads_lock);
+#endif
}
free (pool->threads);
if (pool->last_team)
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 11cf39b26e6..ecf623bfed4 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,66 @@
+2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR libstdc++/55503
+ * testsuite/30_threads/condition_variable/members/53841.cc: Add
+ hppa*-hp-hpux11* to -pthread dg-options.
+
+2012-11-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/55413
+ * include/bits/hashtable.h (_Hashtable<>::_M_rehash_aux): Initialize
+ __bbegin_bkt and __prev_bkt to avoid uninitialized warnings.
+ * testsuite/23_containers/unordered_set/instantiation_neg.cc: Adjust
+ dg-error line number.
+
+2012-11-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/53841
+ * include/std/condition_variable (condition_variable::wait_until):
+ Handle clocks with higher resolution than __clock_t.
+ * testsuite/30_threads/condition_variable/members/53841.cc: New.
+
+2012-11-14 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ PR libstdc++/55320
+ * include/std/functional (function::function(F)): Set _M_manager after
+ operations that could throw.
+ (_Function_base::_Ref_manager::_M_init_functor): Use addressof.
+ * include/tr1/functional
+ (_Function_base::_Ref_manager::_M_init_functor): Use addressof.
+ (_Function_base::_Base_manager::_M_get_pointer): Likewise.
+ * testsuite/20_util/function/cons/55320.cc: New.
+ * testsuite/20_util/function/cons/addressof.cc: New.
+ * testsuite/20_util/bind/ref_neg.cc: Adjust dg-error line numbers.
+ * testsuite/tr1/3_function_objects/function/10.cc: New.
+
+2012-11-12 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (atomic_future): Remove declaration of
+ non-standard name.
+
+2012-11-08 François Dumont <fdumont@gcc.gnu.org>
+
+ PR libstdc++/54075
+ * include/bits/hashtable.h (_Hashtable<>::rehash): Reset hash
+ policy state if no rehash.
+ * testsuite/23_containers/unordered_set/modifiers/reserve.cc
+ (test02): New.
+
+2012-11-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/profile/iterator_tracker.h (operator++): Fix returning
+ dangling reference.
+ (operator--): Likewise.
+
+2012-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/20_util/shared_ptr/cons/55123.cc: Remove duplicate
+ include.
+
+2012-11-06 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * testsuite/*: Fix copying permission statements.
+
2012-11-05 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/28811
@@ -81,10 +144,10 @@
2012-10-29 Jonathan Wakely <jwakely.gcc@gmail.com>
- PR libstdc++/55123
- * include/bits/shared_ptr_base.h (__shared_count::_S_create_from_up):
- Do not instantiate allocator with element_type.
- * testsuite/20_util/shared_ptr/cons/55123.cc: New.
+ PR libstdc++/55123
+ * include/bits/shared_ptr_base.h (__shared_count::_S_create_from_up):
+ Do not instantiate allocator with element_type.
+ * testsuite/20_util/shared_ptr/cons/55123.cc: New.
2012-10-10 Andrew MacLeod <amacleod@redhat.com>
diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h
index 929f0bb790a..b58189f9685 100644
--- a/libstdc++-v3/include/bits/hashtable.h
+++ b/libstdc++-v3/include/bits/hashtable.h
@@ -1,7 +1,6 @@
// hashtable.h header -*- C++ -*-
-// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012
-// Free Software Foundation, Inc.
+// Copyright (C) 2007-2012 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
@@ -1597,6 +1596,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// level.
_M_rehash_policy._M_prev_resize = 0;
}
+ else
+ // No rehash, restore previous state to keep a consistent state.
+ _M_rehash_policy._M_reset(__saved_state);
}
template<typename _Key, typename _Value,
@@ -1634,7 +1636,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Bucket* __new_buckets = _M_allocate_buckets(__n);
_Node* __p = _M_begin();
_M_before_begin._M_nxt = nullptr;
- std::size_t __bbegin_bkt;
+ std::size_t __bbegin_bkt = 0;
while (__p)
{
_Node* __next = __p->_M_next();
@@ -1675,8 +1677,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Node* __p = _M_begin();
_M_before_begin._M_nxt = nullptr;
- std::size_t __bbegin_bkt;
- std::size_t __prev_bkt;
+ std::size_t __bbegin_bkt = 0;
+ std::size_t __prev_bkt = 0;
_Node* __prev_p = nullptr;
bool __check_bucket = false;
@@ -1704,8 +1706,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
if (__check_bucket)
{
- // Check if we shall update the next bucket because of insertions
- // into __prev_bkt bucket.
+ // Check if we shall update the next bucket because of
+ // insertions into __prev_bkt bucket.
if (__prev_p->_M_nxt)
{
std::size_t __next_bkt
diff --git a/libstdc++-v3/include/profile/iterator_tracker.h b/libstdc++-v3/include/profile/iterator_tracker.h
index 733429daad3..91f733cf757 100644
--- a/libstdc++-v3/include/profile/iterator_tracker.h
+++ b/libstdc++-v3/include/profile/iterator_tracker.h
@@ -93,7 +93,7 @@ namespace __profile
return *this;
}
- __iterator_tracker&
+ __iterator_tracker
operator++(int)
{
_M_ds->_M_profile_iterate();
@@ -110,7 +110,7 @@ namespace __profile
return *this;
}
- __iterator_tracker&
+ __iterator_tracker
operator--(int)
{
_M_ds->_M_profile_iterate(1);
diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable
index 0a85e1a3e20..60c72bacff0 100644
--- a/libstdc++-v3/include/std/condition_variable
+++ b/libstdc++-v3/include/std/condition_variable
@@ -107,8 +107,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// DR 887 - Sync unknown clock to known clock.
const typename _Clock::time_point __c_entry = _Clock::now();
const __clock_t::time_point __s_entry = __clock_t::now();
- const chrono::nanoseconds __delta = __atime - __c_entry;
- const __clock_t::time_point __s_atime = __s_entry + __delta;
+ const auto __delta = __atime - __c_entry;
+ const auto __s_atime = __s_entry + __delta;
return __wait_until_impl(__lock, __s_atime);
}
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index 4be1bc793f3..782400b39c6 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -1,7 +1,7 @@
// <functional> -*- C++ -*-
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-// 2011 Free Software Foundation, Inc.
+// 2011, 2012 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
@@ -1872,8 +1872,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
static void
_M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f)
{
- // TBD: Use address_of function instead.
- _Base::_M_init_functor(__functor, &__f.get());
+ _Base::_M_init_functor(__functor, std::__addressof(__f.get()));
}
};
@@ -2295,9 +2294,9 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
if (_My_handler::_M_not_empty_function(__f))
{
+ _My_handler::_M_init_functor(_M_functor, std::move(__f));
_M_invoker = &_My_handler::_M_invoke;
_M_manager = &_My_handler::_M_manager;
- _My_handler::_M_init_functor(_M_functor, std::move(__f));
}
}
diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index 22fd36a6fce..98c7b843812 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -113,9 +113,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Res>
class shared_future;
- template<typename _Res>
- class atomic_future;
-
template<typename _Signature>
class packaged_task;
diff --git a/libstdc++-v3/include/tr1/functional b/libstdc++-v3/include/tr1/functional
index ff2bd2a7134..ef1461b694c 100644
--- a/libstdc++-v3/include/tr1/functional
+++ b/libstdc++-v3/include/tr1/functional
@@ -1,6 +1,6 @@
// TR1 functional header -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011
+// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -1616,7 +1616,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_get_pointer(const _Any_data& __source)
{
const _Functor* __ptr =
- __stored_locally? &__source._M_access<_Functor>()
+ __stored_locally? std::__addressof(__source._M_access<_Functor>())
/* have stored a pointer */ : __source._M_access<_Functor*>();
return const_cast<_Functor*>(__ptr);
}
@@ -1745,8 +1745,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static void
_M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f)
{
- // TBD: Use address_of function instead.
- _Base::_M_init_functor(__functor, &__f.get());
+ _Base::_M_init_functor(__functor, std::__addressof(__f.get()));
}
};
diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
index f4bf96bb3ef..ba5a0d4909d 100644
--- a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
+++ b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
index fa2123114d5..2bc87b1615e 100644
--- a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc
@@ -1,4 +1,4 @@
-// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011, 2012 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
@@ -15,7 +15,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// 20.7.11 Function template bind
+// 20.8.9 Function template bind
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
diff --git a/libstdc++-v3/testsuite/20_util/function/cons/55320.cc b/libstdc++-v3/testsuite/20_util/function/cons/55320.cc
new file mode 100644
index 00000000000..611e8acbbf4
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/cons/55320.cc
@@ -0,0 +1,46 @@
+// Copyright (C) 2012 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/>.
+
+// libstdc++/55320
+
+// { dg-options "-std=gnu++0x" }
+
+#include <functional>
+#include <testsuite_hooks.h>
+
+struct X
+{
+ X() { ++count; }
+ X(const X&) { throw 1; }
+ ~X() { --count; }
+ void operator()() { }
+ static int count;
+};
+
+int X::count = 0;
+
+int main()
+{
+ try
+ {
+ std::function<void()> f = X();
+ }
+ catch (int)
+ {
+ VERIFY( X::count == 0 );
+ }
+}
diff --git a/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc b/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
new file mode 100644
index 00000000000..25b6fb84bec
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2012 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/>.
+
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+#include <functional>
+
+struct F
+{
+ void operator()() { }
+ void operator&() const { }
+};
+
+void test01()
+{
+ F f;
+ std::function<void()> f1 = f;
+ std::function<void()> f2 = std::ref(f);
+}
+
+int main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
index 35b517e8863..6628d4bf16e 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc
@@ -22,8 +22,6 @@
// libstdc++/55123
-#include <memory>
-
void f() {
std::unique_ptr<const int> y;
std::shared_ptr<const int> x = std::move(y);
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
index 5d1ba942d54..788f7b17279 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
index fc11a74eba9..1a29613f4fe 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
index 666445a152d..cd0d4eb51fb 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
index 9fce4403ddf..88f7c0ab08e 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc
index 458bf53e2c5..2a0a1bc6365 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc
index e300b092389..b58332c014a 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc
index 4b3814f3b12..08b91e5937c 100644
--- a/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/array/range_access.cc b/libstdc++-v3/testsuite/23_containers/array/range_access.cc
index 77d036276fb..fb691d0d80e 100644
--- a/libstdc++-v3/testsuite/23_containers/array/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
index 6e34f0bff41..c5d70dcf704 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
index b7e12b3d1c7..23d4dfc7021 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
index 5f7fac6df4a..4cd5564560b 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
index d996ed6d1b0..7c758895453 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
index 4798e93e077..702acfe34cc 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
index 0f9eb458581..7dec2a4b49a 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
index c12282b7168..eb447274b5d 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
index 572b9ee331b..6197731cb78 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
index a19d47a869e..3d23719ca68 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
index 6f45a73a77a..ca7b5f7e6e6 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
index 3fccff43451..f385661f2c8 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
index 54e3527a8b8..f037791346b 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
index 42470342e6c..3cf4288f42b 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
index 590fad669bc..ce7bb859745 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
index 23ea900b87d..57e0e2f532e 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
index f2cd59370a2..8f36076194c 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
index 6e243359505..2efaa74cac8 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
index 70a0a345688..b17707e6160 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
index 9e4b3d49933..087abcecdbb 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
index 6aabbea6085..46a74da5f9f 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
index 29c418a08dd..a057c9cfa70 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
index 9390827c086..49a48f74d8f 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
index 77dcb750eb7..a1ff667f586 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
index 42fe2023423..3d25787dee3 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
index 08d49a54ab3..84d39ae993a 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
index db9fd5e093c..18e1670cc31 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
index 4ad698f3c95..325028c72a4 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
index 4a93666b224..6238f6f8fd6 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
index 4cc1cfcf78d..e19be90ebdb 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
index 3ee7f689aeb..d0cee48b2b2 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
index 6a7fcfb22c2..54556232294 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
index 55e50dc0511..1e63e90a5c1 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
index 4c161906e0a..9582a8b3ec1 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
index 486bfcf0724..85884c0af05 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
index 18b6f3c0541..09ad6aa6ed3 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
index b6ae3f3795c..b6c6e35eb8a 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
index cade58f7dac..349be4c2eb3 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
index 10444f0500c..554ac030dfb 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
index 65190789cc7..26a422665c1 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
index e160381a776..43a11be2856 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
index 4a9e3644527..31eaaa5a460 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
index 32a7db3eaa7..fe12af9aa63 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
index f227daa1f3e..f112bc2d89f 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
index 3bf61aad9fa..6c09065e553 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
index 1291a269044..55d1634c400 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
index 2b8e3c74d4f..082d2adbbcb 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
index bad78e26509..fd71cb63143 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
index 378cd9f0b1e..350b8286ca1 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
index cb6c29ac8d1..3b0e8dc7255 100644
--- a/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/1.h b/libstdc++-v3/testsuite/23_containers/list/capacity/1.h
index 4a2f2bc06a2..408e0786c52 100644
--- a/libstdc++-v3/testsuite/23_containers/list/capacity/1.h
+++ b/libstdc++-v3/testsuite/23_containers/list/capacity/1.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
index f2f51f22352..d8c88b526b0 100644
--- a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
index cf8c20a6578..4d56b154ab1 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
index 2d7e45bb1ed..2abc063e1b1 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
index c055f70bc74..dea0d4c44cf 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
index ee9b54923df..1879ed2e5ae 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
index e95f797cb51..b25467bdb19 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
index 8454c3f46fa..990cf227cfa 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
index 64602ac4c1b..c4017db49a9 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
index eb286e0f54d..6fbcf6c1723 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
index aebbe0ba537..772128d95bf 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/1.cc b/libstdc++-v3/testsuite/23_containers/list/operations/1.cc
index 2c98213e2a5..48c7d908cf6 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/1.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/1.h b/libstdc++-v3/testsuite/23_containers/list/operations/1.h
index 2f3f9df9465..601c5e77260 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/1.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/1.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2.cc b/libstdc++-v3/testsuite/23_containers/list/operations/2.cc
index 100066fc29b..7cd57622019 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/2.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2.h b/libstdc++-v3/testsuite/23_containers/list/operations/2.h
index 8eb3da4e780..6db3333bd08 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/2.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/2.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
index faaf2f765b1..6d744a0151c 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3.cc b/libstdc++-v3/testsuite/23_containers/list/operations/3.cc
index 53570b4a694..1ed46b21dc6 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/3.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/3.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3.h b/libstdc++-v3/testsuite/23_containers/list/operations/3.h
index 4d28daea12b..9181e7ea9fc 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/3.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/3.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
index 0598cfb225b..37a480606ff 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/4.cc b/libstdc++-v3/testsuite/23_containers/list/operations/4.cc
index a220b9b331f..4e14f1ae62a 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/4.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/4.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/4.h b/libstdc++-v3/testsuite/23_containers/list/operations/4.h
index 0a3ea4d234d..6502827470c 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/4.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/4.h
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc b/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
index a61071acc10..7e6c9c4f12d 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/5.cc b/libstdc++-v3/testsuite/23_containers/list/operations/5.cc
index ad99c27ae42..bcfbb81b77e 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/5.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/5.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/5.h b/libstdc++-v3/testsuite/23_containers/list/operations/5.h
index 2b54d5195ff..0820e8a6952 100644
--- a/libstdc++-v3/testsuite/23_containers/list/operations/5.h
+++ b/libstdc++-v3/testsuite/23_containers/list/operations/5.h
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/list/range_access.cc b/libstdc++-v3/testsuite/23_containers/list/range_access.cc
index afe148d9e66..768bd638a68 100644
--- a/libstdc++-v3/testsuite/23_containers/list/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
index 41e43c6688a..303160801aa 100644
--- a/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/map/range_access.cc b/libstdc++-v3/testsuite/23_containers/map/range_access.cc
index 2fb7f4ac943..1e4e3c18780 100644
--- a/libstdc++-v3/testsuite/23_containers/map/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
index 8ec893114dc..a8e407daf90 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
index da4c77b4aca..0f1c5bc5384 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
index 84372de8078..0a05f83c521 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
index b8e3accce6c..d3fb95ea2a1 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
index a0ab5405116..7d9bccd0f05 100644
--- a/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/set/range_access.cc b/libstdc++-v3/testsuite/23_containers/set/range_access.cc
index ffbda4e93fe..b1c33b773ef 100644
--- a/libstdc++-v3/testsuite/23_containers/set/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc
index c509a34afee..d651732a66f 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc
index 4a6847e5c0b..089cf512d99 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
index b41b6a5b3ee..1555c48963c 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc
index bf05fab0d28..c75ed9b09aa 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc
index 704f5998c0d..ed05d208f5b 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc
index 4e2920c2437..7950713a7e0 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc
index 634bd9d3b68..456074e30d1 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
index f95a6681b1b..bfc8ac1c4d2 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc
index 242642f2bba..c65b17d3309 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc
index 0ea3e5bf0c8..2c8b4e6cc91 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
index 137b0d6d2e9..ac0fdaa2cc3 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc
index 5dced4cd1a6..e661ee401fb 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc
index b8957c31813..3a6984c4500 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
@@ -19,7 +19,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// { dg-error "static assertion failed" "" { target *-*-* } 186 }
+// { dg-error "static assertion failed" "" { target *-*-* } 185 }
#include <unordered_set>
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
index aba6f771d81..41f428a51db 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc
@@ -40,8 +40,28 @@ void test01()
}
}
+void test02()
+{
+ const int N = 1000;
+
+ typedef std::unordered_set<int> Set;
+ Set s;
+ s.reserve(N);
+ s.reserve(N);
+
+ std::size_t bkts = s.bucket_count();
+ for (int i = 0; i != N; ++i)
+ {
+ s.insert(i);
+ // As long as we insert less than the reserved number of elements we
+ // shouldn't experiment any rehash.
+ VERIFY( s.bucket_count() == bkts );
+ }
+}
+
int main()
{
test01();
+ test02();
return 0;
}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
index c18b0598464..a1c0c8474e0 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
index ea116c364af..2bb738afd91 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
index 067e57a5e26..9053b000e4d 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
index 760f10c7e85..7cfa4ad474b 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
index cd5a6a42483..f6d0e15eddd 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
index fc591997318..5cd3d0e1314 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
index 7f6f9f252a3..c48e474e938 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
index af6460a2bf0..72fac56c2b2 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
index 2a737891b0a..482166cab29 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc
index 81cd55a8f27..2cc5a7d0cee 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
index 0a10959b240..cbcbf614496 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/24_iterators/range_access.cc b/libstdc++-v3/testsuite/24_iterators/range_access.cc
index 3bd1d2e5da3..e2e37e34c68 100644
--- a/libstdc++-v3/testsuite/24_iterators/range_access.cc
+++ b/libstdc++-v3/testsuite/24_iterators/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/1.cc
index 92c5adebc72..d73c15427ff 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/2.cc
index 9a6e3036e2f..08d3f59949a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/2.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/3.cc
index 5822b783d07..29caf3ae9a0 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/3.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc b/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
index ebc8d9c54a4..612eb48724e 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/4.cc
index e3de207f57b..885561a2bf4 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/4.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
index 5d100e8714d..172c2aed2b5 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
index e07c4920cd2..4781ba1de3a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
index aef55f1a049..ab66f725142 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
index d1beb445744..201e2787192 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
index 37eb415352c..d8f5dbfc61b 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
index 7b36e26f957..62ecf686ddf 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
index c378c571fb7..655b3242dc0 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
index f4d8b8b8256..d7871320b07 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
index 016f241ddbd..ac50b87de3c 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
index ad3aae527d8..56a5cdef631 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
index 57405cc80e8..211de81293d 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
index aaf50064f16..2f697b0b357 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
index ce820bb2c7f..85c5db792a2 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
index c59fdb5b67e..8d3411badf7 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
index b12e4b85189..75d139b8ffa 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
index d6759fab58c..21a95a076fb 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc
index 6803f964467..d6f0630a740 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
index 6c22ba672ac..2db2479bd53 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/fill/4.cc b/libstdc++-v3/testsuite/25_algorithms/fill/4.cc
index bf7094e9279..838a71720e5 100644
--- a/libstdc++-v3/testsuite/25_algorithms/fill/4.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/fill/4.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc b/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
index edabe1fcc29..78a3c231227 100644
--- a/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
index 25206629a42..fca18d9161a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
index 695fe46d416..1a4b339d78c 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
index 235a6338387..8dc5742b3b1 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
index 161b2250e7e..9251d611776 100644
--- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/1.cc b/libstdc++-v3/testsuite/25_algorithms/heap/1.cc
index 49d3dee1a8b..1683a83f78f 100644
--- a/libstdc++-v3/testsuite/25_algorithms/heap/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/heap/1.cc
@@ -8,7 +8,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
index 1506b5f72f7..b16667911c7 100644
--- a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc b/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
index 86eefbee63c..562ab466ae7 100644
--- a/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
index 954a65dfa66..605fc45ce72 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
index 7c612e659d5..e4cc7a06762 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
index 41339b85bf3..87efdeff383 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
index 1c3d7aa31d1..cb756ca4f86 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/move/1.cc b/libstdc++-v3/testsuite/25_algorithms/move/1.cc
index b577cfa5d6d..65c42d12d65 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
index 0e0debf7baa..a97dfc01113 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc b/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
index 436ccb03124..21120046641 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
index 9a8ba71206f..f695a6d720c 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/partition/1.cc b/libstdc++-v3/testsuite/25_algorithms/partition/1.cc
index 0ea55ef3d81..bbad940a413 100644
--- a/libstdc++-v3/testsuite/25_algorithms/partition/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/partition/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
index 925811bd61b..94ef5a980fe 100644
--- a/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc
index 022a1b29af5..de6b4765b16 100644
--- a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc
index 57b3f17f01d..e5183011493 100644
--- a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
index 7ca9ea4d56c..a77e8893840 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
index 95d50061879..6a98a72ac22 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc
index c5f95f36779..7a3d214e33e 100644
--- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc
@@ -9,7 +9,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
index be08d0298d3..10f67dac866 100644
--- a/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
+++ b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/28_regex/range_access.cc b/libstdc++-v3/testsuite/28_regex/range_access.cc
index 0bd620f0bd5..b913bc47c0b 100644
--- a/libstdc++-v3/testsuite/28_regex/range_access.cc
+++ b/libstdc++-v3/testsuite/28_regex/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
new file mode 100644
index 00000000000..f91509c492a
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
@@ -0,0 +1,50 @@
+// { dg-do compile }
+// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* powerpc-ibm-aix* hppa*-hp-hpux11* } }
+// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
+// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2012 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/>.
+
+// PR libstdc++/53841
+
+#include <chrono>
+#include <mutex>
+#include <condition_variable>
+
+namespace ch = std::chrono;
+
+struct FPClock : ch::system_clock
+{
+ typedef double rep;
+ typedef std::ratio<1> period;
+ typedef ch::duration<rep, period> duration;
+ typedef ch::time_point<FPClock> time_point;
+
+ static time_point now()
+ { return time_point(duration(system_clock::now().time_since_epoch())); }
+};
+
+void f()
+{
+ std::mutex mx;
+ std::unique_lock<std::mutex> l(mx);
+ std::condition_variable cv;
+ cv.wait_until(l, FPClock::now());
+}
diff --git a/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc b/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
index 337df66706f..b572f1eb7a1 100644
--- a/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
index e6737de0e31..bed965a5e56 100644
--- a/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc
@@ -11,7 +11,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc b/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
index db0bc03f096..94dce3787f6 100644
--- a/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc b/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
index 83edbe11a8c..d23a882de3e 100644
--- a/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/ext/vstring/range_access.cc b/libstdc++-v3/testsuite/ext/vstring/range_access.cc
index 32322924709..f734e92c72b 100644
--- a/libstdc++-v3/testsuite/ext/vstring/range_access.cc
+++ b/libstdc++-v3/testsuite/ext/vstring/range_access.cc
@@ -10,7 +10,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc b/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
index c7dbdc006c2..461dfc044ad 100644
--- a/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
+++ b/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc b/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
index 4318bd4f460..35d5d79dec9 100644
--- a/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
+++ b/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc
new file mode 100644
index 00000000000..ca29e3cc3fb
--- /dev/null
+++ b/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc
@@ -0,0 +1,41 @@
+// Copyright (C) 2012 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/>.
+
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+#include <tr1/functional>
+
+struct F
+{
+ void operator()() { }
+ void operator&() const { }
+};
+
+void test01()
+{
+ F f;
+ std::tr1::function<void()> f1 = f;
+ std::tr1::function<void()> f2 = std::tr1::ref(f);
+}
+
+int main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
index 5d2927077e7..08d87f2df27 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
index 4f1b060f800..970593e0d6e 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
index 2a74c3c3629..a0b3fd85c4f 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
index 0831bd5295d..63abcd41e91 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc
@@ -7,7 +7,7 @@
// any later version.
// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without Pred the implied warranty of
+// 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.