summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--ChangeLog.MELT4
-rwxr-xr-xconfig.guess7
-rwxr-xr-xconfig.sub11
-rw-r--r--gcc/ChangeLog323
-rw-r--r--gcc/ChangeLog.graphite17
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/builtins.c2
-rw-r--r--gcc/c-common.h16
-rw-r--r--gcc/c-omp.c2
-rw-r--r--gcc/c-parser.c4
-rw-r--r--gcc/c-typeck.c26
-rw-r--r--gcc/cfgexpand.c29
-rw-r--r--gcc/cgraph.c49
-rw-r--r--gcc/cgraph.h5
-rw-r--r--gcc/config/arm/arm.md2
-rw-r--r--gcc/config/arm/bpabi-v6m.S45
-rw-r--r--gcc/config/arm/bpabi.S50
-rw-r--r--gcc/config/arm/lib1funcs.asm151
-rw-r--r--gcc/config/i386/i386-builtin-types.def5
-rw-r--r--gcc/config/i386/i386-modes.def1
-rw-r--r--gcc/config/i386/i386.c91
-rw-r--r--gcc/config/i386/i386.h13
-rw-r--r--gcc/config/i386/i386.md217
-rw-r--r--gcc/config/i386/lwpintrin.h75
-rw-r--r--gcc/config/i386/sse.md133
-rw-r--r--gcc/config/i386/sync.md106
-rw-r--r--gcc/config/rs6000/rs6000-c.c4
-rw-r--r--gcc/config/rs6000/rs6000.md3
-rw-r--r--gcc/cp/ChangeLog78
-rw-r--r--gcc/cp/Make-lang.in2
-rw-r--r--gcc/cp/call.c44
-rw-r--r--gcc/cp/class.c16
-rw-r--r--gcc/cp/cp-tree.h7
-rw-r--r--gcc/cp/decl.c28
-rw-r--r--gcc/cp/except.c4
-rw-r--r--gcc/cp/init.c18
-rw-r--r--gcc/cp/parser.c2
-rw-r--r--gcc/cp/pt.c128
-rw-r--r--gcc/cp/rtti.c6
-rw-r--r--gcc/cp/semantics.c4
-rw-r--r--gcc/cp/tree.c4
-rw-r--r--gcc/cp/typeck.c59
-rw-r--r--gcc/cp/typeck2.c4
-rw-r--r--gcc/doc/c-tree.texi12
-rw-r--r--gcc/doc/extend.texi24
-rw-r--r--gcc/doc/install.texi2
-rw-r--r--gcc/doc/invoke.texi20
-rw-r--r--gcc/doc/md.texi2
-rw-r--r--gcc/doc/options.texi2
-rw-r--r--gcc/doc/plugins.texi4
-rw-r--r--gcc/doc/rtl.texi7
-rw-r--r--gcc/doc/tm.texi4
-rw-r--r--gcc/dwarf2out.c241
-rw-r--r--gcc/except.c4
-rw-r--r--gcc/except.h3
-rw-r--r--gcc/expr.c1
-rw-r--r--gcc/fortran/ChangeLog39
-rw-r--r--gcc/fortran/expr.c61
-rw-r--r--gcc/fortran/gfc-internals.texi2
-rw-r--r--gcc/fortran/gfortran.texi2
-rw-r--r--gcc/fortran/invoke.texi2
-rw-r--r--gcc/fortran/resolve.c36
-rw-r--r--gcc/fortran/trans-expr.c4
-rw-r--r--gcc/gimple.c2
-rw-r--r--gcc/gimple.h1
-rw-r--r--gcc/graphite-sese-to-poly.c46
-rw-r--r--gcc/intl.c17
-rw-r--r--gcc/intl.h2
-rw-r--r--gcc/ipa-pure-const.c34
-rw-r--r--gcc/ipa.c17
-rw-r--r--gcc/langhooks.c2
-rw-r--r--gcc/lto-cgraph.c13
-rw-r--r--gcc/lto-streamer-in.c8
-rw-r--r--gcc/lto-streamer-out.c8
-rw-r--r--gcc/lto/ChangeLog5
-rw-r--r--gcc/lto/lto-lang.c10
-rw-r--r--gcc/lto/lto.c2
-rw-r--r--gcc/objc/ChangeLog5
-rw-r--r--gcc/objc/objc-act.c7
-rw-r--r--gcc/opts.c4
-rw-r--r--gcc/po/ChangeLog8
-rw-r--r--gcc/po/zh_CN.po1588
-rw-r--r--gcc/testsuite/ChangeLog179
-rw-r--r--gcc/testsuite/ada/acats/norun.lst2
-rwxr-xr-xgcc/testsuite/ada/acats/run_all.sh3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/explicit4.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic31.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic98.C411
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/const1.C8
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C4
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C4
-rw-r--r--gcc/testsuite/g++.dg/ext/attrib33.C1
-rw-r--r--gcc/testsuite/g++.dg/ext/ms-1.C2
-rw-r--r--gcc/testsuite/g++.dg/ext/vla8.C15
-rw-r--r--gcc/testsuite/g++.dg/opt/dtor3.C11
-rw-r--r--gcc/testsuite/g++.dg/other/error20.C2
-rw-r--r--gcc/testsuite/g++.dg/other/error31.C2
-rw-r--r--gcc/testsuite/g++.dg/other/i386-2.C8
-rw-r--r--gcc/testsuite/g++.dg/other/i386-3.C8
-rw-r--r--gcc/testsuite/g++.dg/other/i386-5.C6
-rw-r--r--gcc/testsuite/g++.dg/other/i386-6.C8
-rw-r--r--gcc/testsuite/g++.dg/parse/crash5.C2
-rw-r--r--gcc/testsuite/g++.dg/parse/error19.C2
-rw-r--r--gcc/testsuite/g++.dg/rtti/typeid6.C2
-rw-r--r--gcc/testsuite/g++.dg/template/crash37.C2
-rw-r--r--gcc/testsuite/g++.dg/template/instantiate5.C2
-rw-r--r--gcc/testsuite/g++.dg/template/local6.C2
-rw-r--r--gcc/testsuite/g++.dg/template/ptrmem4.C2
-rw-r--r--gcc/testsuite/g++.dg/template/qualttp5.C2
-rw-r--r--gcc/testsuite/g++.dg/torture/pr41183.C30
-rw-r--r--gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/misc6.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/overload1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.brendan/overload4.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/conversion11.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.jason/scoping10.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/arg11.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/arm9.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/enum4.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.law/operators9.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/net31.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p11110.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p2431.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p438.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.mike/p9068.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.niklas/t120.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.niklas/t121.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/crash24.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/expr1.C2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/pmf3.C2
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20091215-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c8
-rw-r--r--gcc/testsuite/gcc.dg/debug/tls-1.c19
-rw-r--r--gcc/testsuite/gcc.dg/graphite/pr42284.c27
-rw-r--r--gcc/testsuite/gcc.dg/lto/20091216-1_0.c9
-rw-r--r--gcc/testsuite/gcc.target/arm/pr41679.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/pr32280-1.c18
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-12.c6
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-13.c23
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-14.c16
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-22.c22
-rw-r--r--gcc/testsuite/gcc.target/i386/sse-23.c51
-rw-r--r--gcc/testsuite/gfortran.dg/auto_char_len_1.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/auto_char_len_2.f9025
-rw-r--r--gcc/testsuite/gfortran.dg/auto_char_len_4.f9017
-rw-r--r--gcc/testsuite/gfortran.dg/boz_15.f9010
-rw-r--r--gcc/testsuite/gfortran.dg/dynamic_dispatch_6.f0369
-rw-r--r--gcc/testsuite/gfortran.dg/function_kinds_5.f902
-rw-r--r--gcc/testsuite/gfortran.dg/graphite/pr42185.f9027
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic_std_1.f902
-rw-r--r--gcc/testsuite/gfortran.dg/iso_c_binding_init_expr.f0311
-rw-r--r--gcc/testsuite/gfortran.dg/selected_char_kind_3.f902
-rw-r--r--gcc/testsuite/objc/execute/forward-1.x19
-rw-r--r--gcc/tree-chrec.c2
-rw-r--r--gcc/tree-data-ref.c64
-rw-r--r--gcc/tree-data-ref.h1
-rw-r--r--gcc/tree.c42
-rw-r--r--gcc/var-tracking.c154
-rw-r--r--libffi/ChangeLog4
-rw-r--r--libffi/testsuite/libffi.call/ffitest.h5
-rw-r--r--libgomp/ChangeLog5
-rw-r--r--libgomp/testsuite/libgomp.graphite/force-parallel-2.c4
-rw-r--r--libjava/ChangeLog6
-rwxr-xr-xlibjava/configure30
-rw-r--r--libjava/configure.ac15
-rw-r--r--libstdc++-v3/ChangeLog231
-rw-r--r--libstdc++-v3/config/abi/pre/gnu.ver129
-rwxr-xr-xlibstdc++-v3/configure53
-rw-r--r--libstdc++-v3/configure.ac20
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml7
-rw-r--r--libstdc++-v3/doc/xml/manual/test.xml340
-rw-r--r--libstdc++-v3/include/bits/algorithmfwd.h14
-rw-r--r--libstdc++-v3/include/bits/functexcept.h4
-rw-r--r--libstdc++-v3/include/bits/stl_algo.h3
-rw-r--r--libstdc++-v3/include/bits/stl_algobase.h3
-rw-r--r--libstdc++-v3/include/bits/stl_deque.h14
-rw-r--r--libstdc++-v3/include/ext/throw_allocator.h449
-rw-r--r--libstdc++-v3/include/std/functional33
-rw-r--r--libstdc++-v3/include/std/future46
-rw-r--r--libstdc++-v3/src/functexcept.cc8
-rw-r--r--libstdc++-v3/src/locale_init.cc20
-rw-r--r--libstdc++-v3/src/thread.cc3
-rw-r--r--libstdc++-v3/testsuite/20_util/function/assign/move_target.cc47
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cons/move_target.cc46
-rw-r--r--libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/1_c++0x.cc25
-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.h4
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/exception/basic.cc40
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/exception/generation_prohibited.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/exception/propagation_consistent.cc34
-rw-r--r--libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1_c++0x.cc25
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/shared_future/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_future/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/30_threads/unique_future/cons/copy_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/forced_error/cons_virtual_derivation.cc (renamed from libstdc++-v3/testsuite/ext/forced_exception_error/cons_virtual_derivation.cc)2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc3
-rw-r--r--libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc2
-rw-r--r--libstdc++-v3/testsuite/ext/throw_value/cons.cc43
-rw-r--r--libstdc++-v3/testsuite/util/exception/safety.h1066
-rw-r--r--libstdc++-v3/testsuite/util/regression/basic_type.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/common_type.hpp2
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h2
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc32
-rw-r--r--libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc20
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_container_traits.h131
236 files changed, 6446 insertions, 2368 deletions
diff --git a/ChangeLog b/ChangeLog
index c895b85d4b8..d513945a749 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-12-18 Ben Elliston <bje@au.ibm.com>
+
+ * config.sub, config.guess: Update from upstream sources.
+
2009-12-07 Shujing Zhao <pearly.zhao@oracle.com>
* MAINTAINERS (Write After Approval): Add myself.
diff --git a/ChangeLog.MELT b/ChangeLog.MELT
index ef24f82c150..19e47fdd69c 100644
--- a/ChangeLog.MELT
+++ b/ChangeLog.MELT
@@ -1,4 +1,8 @@
+2009-12-18 Basile Starynkevitch <basile@starynkevitch.net>
+
+ MELT branch merged with trunk rev 155344
+
2009-12-14 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 155213
diff --git a/config.guess b/config.guess
index d53e309f4b9..64cae2741b9 100755
--- a/config.guess
+++ b/config.guess
@@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Free Software Foundation, Inc.
-timestamp='2009-11-19'
+timestamp='2009-12-13'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -57,7 +57,7 @@ GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -333,6 +333,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
eval $set_cc_for_build
SUN_ARCH="i386"
diff --git a/config.sub b/config.sub
index 17c91458a8a..110a68e347e 100755
--- a/config.sub
+++ b/config.sub
@@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Free Software Foundation, Inc.
-timestamp='2009-11-07'
+timestamp='2009-12-13'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -76,7 +76,7 @@ version="\
GNU config.sub ($timestamp)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -1256,6 +1256,9 @@ case $os in
# First match some system type aliases
# that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
;;
@@ -1277,8 +1280,8 @@ case $os in
# -sysv* is not here because it comes later, after sysvr4.
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -kopensolaris* \
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+ | -sym* | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d9079c3aa87..c74baf6b393 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,322 @@
+2009-12-17 Jakub Jelinek <jakub@redhat.com>
+
+ * dwarf2out.c (loc_descriptor): For SYMBOL_REFs and LABEL_REFs
+ use DW_OP_addr+DW_OP_stack_value instead of DW_OP_implicit_value.
+ (add_const_value_attribute): For CONST_STRING, SYMBOL_REFs and
+ LABEL_REFs use DW_OP_addr+DW_OP_stack_value DW_AT_location instead of
+ DW_AT_const_value.
+
+2009-12-17 Alexandre Oliva <aoliva@redhat.com>
+
+ PR debug/41679
+ * var-tracking.c (count_uses): Count MO_VAL_USE of original
+ MO_VAL_SET value for COND_EXEC.
+ (add_stores): Handle conditional stores.
+
+ PR debug/41679
+ * var-tracking.c (use_type): Remove indirection from loc.
+ (count_uses): Dereference incoming loc early.
+ (add_uses): Dereference incoming loc early.
+
+ PR debug/41679
+ * var-tracking.c (add_stores): Avoid value mode mismatch for
+ promoted declarations.
+
+2009-12-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/42386
+ * ipa.c (function_and_variable_visibility): Clear same_comdat_group
+ links of DECL_EXTERNAL nodes.
+
+2009-12-17 Sandra Loosemore <sandra@codesourcery.com>
+
+ * doc/rtl.texi (Vector Operations): Clarify vec_select result mode.
+
+2009-12-17 Julian Brown <julian@codesourcery.com>
+
+ * config/arm/bpabi-v6m.S (test_div_by_zero): New macro.
+ (aeabi_ldivmod, aeabi_uldivmod): Use above macro.
+ * config/arm/bpabi.S (test_div_by_zero): New macro.
+ (aeabi_ldivmod, aeabi_uldivmod): Use above macro.
+ * config/arm/lib1funcs.asm (ARM_LDIV0): Tail-call int div-by-zero
+ handler for EABI. Add signed/unsigned argument, pass correct value
+ to that handler.
+ (THUMB_LDIV0): Same, for Thumb.
+ (DIV_FUNC_END): Add signed argument.
+ (WEAK): New macro (for EABI).
+ (__udivsi3, __umodsi3): Add unsigned argument to DIV_FUNC_END. For
+ __udivsi3, add entry point which skips division-by-zero test.
+ (__divsi3, __modsi3): Add signed argument to DIV_FUNC_END.
+ (__aeabi_uidivmod, __aeabi_idivmod): Check for division by zero.
+ Call __udivsi3 or __divsi3 via entry points which skip
+ division-by-zero tests.
+ (__div0): Rename to __aeabi_idiv0, __aeabi_ldiv0 for EABI, and
+ declare those names weak.
+
+2009-12-17 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/42397
+ * builtins.c (get_object_alignment): Properly deal with
+ a CONST_DECL base.
+ * expr.c (emit_block_move_hints): Assert the alignment makes
+ sense.
+
+2009-12-17 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/32280
+ * config/i386/i386-modes.def (V1TI): New vector mode.
+ * config/i386/i386.h (VALID_SSE_REG_MODE): Add V1TImode.
+ (SSE_REG_MODE_P): Ditto.
+ * config/i386/sse.md (SSEMODE16): New mode iterator.
+ (AVXMODE16): Ditto.
+ (avxvecmode): Handle V1TI mode.
+ (*avx_mov<mode>_internal): Use AVXMODE16 instead of AVXMODE.
+ (mov<mode>): Use SSEMODE16 instead of SSEMODE.
+ (*mov<mode>_internal): Ditto.
+ (push<mode>1): Ditto.
+ (movmisalign<mode>): Ditto.
+ (sse2_ashlv1ti): Rename from sse2_ashlti.
+ (sse2_lshrv1ti): Rename from sse2_lshrti.
+ (*avx_ashlv1ti): Rename from *avx_ashlti and move from i386.md.
+ (*avx_lshrv1ti): Rename from *avx_lshrti and move from i386.md.
+ (vec_shl_<mode>): Convert operands to V1TImode and use V1TI shift.
+ (vec_shr_<mode>): Ditto.
+ (*sse2_mulv4si3): Update for renamed sse2_ashlv1ti3.
+ (udot_prodv4si): Ditto.
+ * config/i386/i386.c (classify_argument): Handle V1TImode.
+ (function_arg_advance_32): Ditto.
+ (function_arg_32): Ditto.
+ (ix86_expand_sse4_unpack): Convert operands to V1TImode and update
+ for renamed gen_sse2_lshrv1ti3.
+ (ix86_expand_args_builtin) <V2DI_FTYPE_V2DI_INT_CONVERT>: Set rmode
+ to V1TImode.
+ (struct builtin_description) <__builtin_ia32_pslldqi128>: Update
+ for renamed sse2_ashlv1ti3.
+ <__builtin_ia32_psrldqi128>: Update for renamed sse2_lshrv1ti3.
+
+ Revert:
+ 2007-06-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/32280
+ * config/i386/sse.md ("sse2_ashlti", "sse2_lshrti3"): Move ...
+ * config/i386/i386.md ("sse2_ashlti", "sse2_lshrti3"): ... to here.
+
+2009-12-17 Richard Earnshaw <rearnsha@arm.com>
+
+ PR target/42372
+ * arm.md (pic_add_dot_plus_eight): Change output constraint from
+ update to write.
+
+2009-12-17 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
+ Update build_indirect_ref calls.
+
+2009-12-17 Uros Bizjak <ubizjak@gmail.com>
+
+ * config/i386/sync.md (IMODE): Remove mode iterator.
+ (modesuffix): Remove mode attribute.
+ (modeconstraint): Ditto.
+ (immconstraint): Ditto.
+ (*sync_compare_and_swap<mode>): Use SWI mode iterator instead of
+ IMODE mode iterator, imodesuffix mode attribute instead of modesuffix,
+ <r> mode attribute instead of modeconstraint and <i> mode attribute
+ instead of immconstraint.
+ (sync_double_compare_and_swap<mode>): Ditto.
+ (sync_old_add<mode>): Ditto.
+ (sync_lock_test_and_set<mode>): Ditto.
+ (sync_add<mode>): Ditto.
+ (sync_sub<mode>): Ditto.
+ (sync_and<mode>): Ditto.
+ (sync_ior<mode>): Ditto.
+ (sync_xor<mode>): Ditto.
+ (sync_<code><mode>): Macroize insn pattern from
+ sync_{and,ior,xor}<mode> using any_logic code iterator.
+
+2009-12-17 Shujing Zhao <pearly.zhao@oracle.com>
+
+ PR c/40885
+ * c-common.h (ref_operator): New type.
+ (build_indirect_ref): Adjust prototype with new argument.
+ * c-typeck.c (build_indirect_ref): Accept ref_operator as argument and
+ emit the diagnostics for easy translation.
+ (build_array_ref): Update calls to build_indirect_ref.
+ * c-omp.c (c_finish_omp_atomic): Likewise.
+ * c-parser.c (c_parser_unary_expression,
+ c_parser_postfix_expression_after_primary): Likewise.
+
+2009-12-16 Richard Guenther <rguenther@suse.de>
+
+ PR lto/42392
+ * langhooks.c (lhd_begin_section): Make sure to switch back
+ to the text section, not some random one.
+
+2009-12-16 Jakub Jelinek <jakub@redhat.com>
+
+ * tree-chrec.c (chrec_convert_1): Only fold (T2)(t +- x) to
+ (T2)t +- (T2)x if only integer types are involved.
+
+2009-12-16 Ben Elliston <bje@au.ibm.com>
+
+ * tree-data-ref.h (dot_rdg): Remove prototype.
+ * tree-data-ref.c (dog_rdg_1, dot_rdg): Remove.
+
+2009-12-16 Kazu Hirata <kazu@codesourcery.com>
+
+ * doc/invoke.texi, doc/options.texi, doc/plugins.texi,
+ doc/tm.texi: Fix typos.
+
+2009-12-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * doc/extend.texi (Function Attributes, Extended Asm):
+ Replace TABs with spaces.
+ * doc/md.texi (Standard Names): Likewise.
+ * doc/plugins.texi (Plugins): Likewise.
+
+ * doc/c-tree.texi (Expression trees): Use @itemx for all but
+ the first item for merged items.
+ * doc/extend.texi (Variable Attributes): Likewise.
+ * doc/install.texi (Configuration): Likewise.
+ * doc/invoke.texi (RS/6000 and PowerPC Options, RX Options):
+ Likewise.
+
+2009-12-15 Richard Guenther <rguenther@suse.de>
+
+ * tree.c (free_lang_data_in_binfo): Do not free BINFO_OFFSET
+ and BINFO_VPTR_FIELD.
+ (free_lang_data_in_type): Do not free TYPE_STUB_DECL if we
+ generate debug information.
+ (free_lang_data_in_decl): Do not free DECL_SIZE_UNIT,
+ DECL_SIZE, DECL_FIELD_OFFSET and DECL_FCONTEXT.
+ (free_lang_data): Do not disable debuginfo.
+ * lto-streamer-out.c (write_symbol_vec): Deal with
+ non-constant DECL_SIZE.
+ (pack_ts_base_value_fields): Write types with false
+ TREE_ASM_WRITTEN.
+ (lto_output_ts_type_tree_pointers): Stream TYPE_STUB_DECL.
+ * lto-streamer-in.c (lto_input_ts_type_tree_pointers): Stream
+ TYPE_STUB_DECL.
+ * dwarf2out.c (add_pure_or_virtual_attribute): Check for
+ DECL_CONTEXT.
+ (gen_type_die_for_member): Test for TYPE_STUB_DECL.
+ * opts.c (decode_options): Do not disable var-tracking for lto.
+ * doc/invoke.texi (-flto): Document -flto vs. -g experimental
+ status.
+ (-fwhopr): Document experimental status.
+
+2009-12-15 Aldy Hernandez <aldyh@redhat.com>
+
+ PR graphite/42185
+ * graphite-sese-to-poly.c (is_reduction_operation_p): Assert that
+ we are a GIMPLE_ASSIGN. Do not calculate rhs code twice.
+ (follow_ssa_with_commutative_ops): Return NULL on non assignment.
+
+2009-12-15 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/rs6000/rs6000.md (probe_stack): Use an enclosing SET.
+
+2009-12-15 Richard Guenther <rguenther@suse.de>
+
+ * gimple.h (compare_field_offset): Declare.
+ * gimple.c (compare_field_offset): Export.
+ * lto-streamer-in.c (input_gimple_stmt): Use compare_field_offset.
+
+2009-12-15 Richard Guenther <rguenther@suse.de>
+
+ * lto-cgraph.c (lto_output_node): Also stream the alias
+ for regular aliases.
+ (input_node): Likewise.
+
+2009-12-15 Paolo Bonzini <bonzini@gnu.org>
+ Shujing Zhao <pearly.zhao@oracle.com>
+
+ * intl.c (get_spaces): New.
+ * intl.h (get_spaces): New.
+
+2009-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/42369
+ * config/i386/i386.c (ix86_expand_special_args_builtin): Avoid
+ using switch with CODE_FOR_lwp_lwp* cases.
+
+ * config/i386/i386-builtin-types.def (PVOID_FTYPE_VOID): Use
+ DEF_FUNCTION_TYPE (PVOID) instead of DEF_FUNCTION_TYPE (PVOID, VOID).
+
+2009-12-14 Eric Botcazou <ebotcazou@adacore.com>
+
+ * cfgexpand.c (expand_debug_expr) <INDIRECT_REF>: Remove overzealous
+ assertion and useless code.
+ <TARGET_MEM_REF>: Likewise.
+
+2009-12-14 Alexandre Oliva <aoliva@redhat.com>
+
+ PR debug/41473
+ * dwarf2out.c (AT_loc_list_ptr): New.
+ (resolve_addr): Remove unresolved attributes and loc_list entries.
+
+ PR debug/41473
+ * dwarf2out.c (add_var_loc_to_decl): Don't drop initial empty
+ locations.
+ (new_loc_list): Drop gensym arg. Move generation of ll_symbol...
+ (gen_llsym): ... here. New function.
+ (add_loc_descr_to_loc_list): Removed.
+ (loc_descriptor): Infer mode from CONST_DOUBLEs and CONST_VECTORs.
+ (single_element_loc_list): Removed.
+ (dw_loc_list): Don't create entries without a location. Don't
+ special-case the first node of the list, only single nodes.
+ (single_element_loc_list_p): Simplify.
+ (loc_list_from_tree): Don't use DECL_RTL if loc_list is nonempty.
+ (add_location_or_const_value_attribute): Test var loc for NULL.
+ (convert_cfa_to_fb_loc_list): Adjust calls to new new_loc_list,
+ call gen_llsym if needed.
+
+2009-12-14 Jakub Jelinek <jakub@redhat.com>
+
+ * cgraph.h (cgraph_set_nothrow_flag, cgraph_set_readonly_flag,
+ cgraph_set_pure_flag, cgraph_set_looping_const_or_pure_flag): New
+ prototypes.
+ * cgraph.c (cgraph_set_nothrow_flag, cgraph_set_readonly_flag,
+ cgraph_set_pure_flag, cgraph_set_looping_const_or_pure_flag): New
+ functions.
+ * except.h (set_nothrow_function_flags): Remove prototype.
+ * except.c (set_nothrow_function_flags): Use cgraph_set_nothrow_flag.
+ Make static.
+ * ipa-pure-const.c (propagate): Use cgraph_set_nothrow_flag,
+ cgraph_set_readonly_flag, cgraph_set_pure_flag
+ and cgraph_set_looping_const_or_pure_flag.
+ (local_pure_const): Likewise.
+
+2009-12-14 Jakub Jelinek <jakub@redhat.com>
+ Sebastian Pop <sebastian.pop@amd.com>
+
+ * config/i386/i386-builtin-types.def (PVOID): Declared.
+ (VOID_FTYPE_PVOID): Declared.
+ (PVOID_FTYPE_VOID): Declared.
+ (UCHAR_FTYPE_USHORT_UINT_USHORT): Removed.
+ (VOID_FTYPE_USHORT_UINT_USHORT): Removed.
+ * config/i386/i386.c (IX86_BUILTIN_LLWPCB16, IX86_BUILTIN_LLWPCB32,
+ IX86_BUILTIN_LLWPCB64, IX86_BUILTIN_SLWPCB16, IX86_BUILTIN_SLWPCB32,
+ IX86_BUILTIN_SLWPCB64, IX86_BUILTIN_LWPVAL16, IX86_BUILTIN_LWPINS16):
+ Removed.
+ (IX86_BUILTIN_LLWPCB, IX86_BUILTIN_SLWPCB): New.
+ (bdesc_special_args): Adjust declaration of __builtin_ia32_llwpcb,
+ __builtin_ia32_slwpcb, __builtin_ia32_lwpval32,
+ __builtin_ia32_lwpval64, __builtin_ia32_lwpins32, and
+ __builtin_ia32_lwpins64.
+ (ix86_expand_special_args_builtin): Handle VOID_FTYPE_PVOID.
+ Do not handle VOID_FTYPE_USHORT_UINT_USHORT and
+ UCHAR_FTYPE_USHORT_UINT_USHORT. Warn when the third operand is
+ not an immediate. Also handle builtin functions with 3 arguments.
+ (ix86_expand_builtin): Handle IX86_BUILTIN_LLWPCB and
+ IX86_BUILTIN_SLWPCB.
+ * config/i386/i386.md (UNSPEC_LLWP_INTRINSIC, UNSPEC_SLWP_INTRINSIC):
+ Renamed UNSPECV_LLWP_INTRINSIC and UNSPECV_SLWP_INTRINSIC.
+ (memory attribute): Handle lwp.
+ (lwp*): Rewrite all the insn patterns for LWP.
+ * config/i386/lwpintrin.h (__llwpcb16, __llwpcb32, __llwpcb64,
+ __slwpcb16, __slwpcb32, __slwpcb64, __lwpval16, __lwpins16): Removed.
+ (__llwpcb, __slwpcb): New.
+
2009-12-14 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
* dominance.c (set_immediate_dominator): Don't mark as inline.
@@ -40,7 +359,7 @@
(divmodhi4): Ditto.
(udivmodhi4): Ditto.
(divmodsi4): Ditto.
- (udivmodsi4): Ditto.
+ (udivmodsi4): Ditto.
2009-12-13 Richard Guenther <rguenther@suse.de>
@@ -187,7 +506,7 @@
* builtins.c (do_mpc_ckconv): Pass the component type to
real_from_mpfr().
-
+
2009-12-09 Xinliang David Li <davidxl@google.com>
PR tree-optimization/42337
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index a9197a56d67..9974d1934af 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,20 @@
+2009-12-12 Sebastian Pop <sebpop@gmail.com>
+
+ PR middle-end/42284
+ * graphite-sese-to-poly.c (rewrite_close_phi_out_of_ssa): Call
+ insert_out_of_ssa_copy_on_edge for anything else than SSA_NAMEs.
+ (detect_commutative_reduction_arg): Simplified.
+ (detect_commutative_reduction): Early return when the argument of
+ the close phi is not of an SSA_NAME.
+
+ * testsuite/gcc.dg/graphite/pr42284.c: New.
+
+2009-12-11 Alexander Monakov <amonakov@ispras.ru>
+
+ * dbgcnt.def (graphite_scop): New counter.
+ * graphite.c: Include dbgcnt.h
+ (graphite_transform_loops): Use new counter to limit transformations.
+
2009-12-08 Sebastian Pop <sebpop@gmail.com>
PR middle-end/42285
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 04be6cb2235..53c837de054 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20091214
+20091218
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 75a7e10ea6d..53d74a25b17 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -323,6 +323,8 @@ get_object_alignment (tree exp, unsigned int align, unsigned int max_align)
offset = next_offset;
}
}
+ if (TREE_CODE (exp) == CONST_DECL)
+ exp = DECL_INITIAL (exp);
if (DECL_P (exp))
align = MIN (inner, DECL_ALIGN (exp));
#ifdef CONSTANT_ALIGNMENT
diff --git a/gcc/c-common.h b/gcc/c-common.h
index 5830d7b9335..6f8d832d455 100644
--- a/gcc/c-common.h
+++ b/gcc/c-common.h
@@ -391,6 +391,20 @@ extern c_language_kind c_language;
#define c_dialect_cxx() ((c_language & clk_cxx) != 0)
#define c_dialect_objc() ((c_language & clk_objc) != 0)
+/* The various name of operator that appears in error messages. */
+typedef enum ref_operator {
+ /* NULL */
+ RO_NULL,
+ /* array indexing */
+ RO_ARRAY_INDEXING,
+ /* unary * */
+ RO_UNARY_STAR,
+ /* -> */
+ RO_ARROW,
+ /* implicit conversion */
+ RO_IMPLICIT_CONVERSION
+} ref_operator;
+
/* Information about a statement tree. */
struct GTY(()) stmt_tree_s {
@@ -448,7 +462,7 @@ extern tree pushdecl_top_level (tree);
extern tree pushdecl (tree);
extern tree build_modify_expr (location_t, tree, tree, enum tree_code,
location_t, tree, tree);
-extern tree build_indirect_ref (location_t, tree, const char *);
+extern tree build_indirect_ref (location_t, tree, ref_operator);
extern int c_expand_decl (tree);
diff --git a/gcc/c-omp.c b/gcc/c-omp.c
index 6f1cb99720e..eb6f3ef78de 100644
--- a/gcc/c-omp.c
+++ b/gcc/c-omp.c
@@ -145,7 +145,7 @@ c_finish_omp_atomic (location_t loc, enum tree_code code, tree lhs, tree rhs)
DECL_CONTEXT (var) = current_function_decl;
addr = build4 (TARGET_EXPR, TREE_TYPE (addr), var, addr, NULL, NULL);
}
- lhs = build_indirect_ref (loc, addr, NULL);
+ lhs = build_indirect_ref (loc, addr, RO_NULL);
/* There are lots of warnings, errors, and conversions that need to happen
in the course of interpreting a statement. Use the normal mechanisms
diff --git a/gcc/c-parser.c b/gcc/c-parser.c
index 37f77963513..bf66a584ba8 100644
--- a/gcc/c-parser.c
+++ b/gcc/c-parser.c
@@ -5102,7 +5102,7 @@ c_parser_unary_expression (c_parser *parser)
exp_loc = c_parser_peek_token (parser)->location;
op = c_parser_cast_expression (parser, NULL);
op = default_function_array_conversion (exp_loc, op);
- ret.value = build_indirect_ref (op_loc, op.value, "unary *");
+ ret.value = build_indirect_ref (op_loc, op.value, RO_UNARY_STAR);
return ret;
case CPP_PLUS:
if (!c_dialect_objc () && !in_system_header)
@@ -5947,7 +5947,7 @@ c_parser_postfix_expression_after_primary (c_parser *parser,
expr.value = build_component_ref (op_loc,
build_indirect_ref (op_loc,
expr.value,
- "->"),
+ RO_ARROW),
ident);
expr.original_code = ERROR_MARK;
if (TREE_CODE (expr.value) != COMPONENT_REF)
diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c
index 184b4063709..dbaddd68466 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -2107,7 +2107,7 @@ build_component_ref (location_t loc, tree datum, tree component)
LOC is the location to use for the generated tree. */
tree
-build_indirect_ref (location_t loc, tree ptr, const char *errorstring)
+build_indirect_ref (location_t loc, tree ptr, ref_operator errstring)
{
tree pointer = default_conversion (ptr);
tree type = TREE_TYPE (pointer);
@@ -2165,8 +2165,26 @@ build_indirect_ref (location_t loc, tree ptr, const char *errorstring)
}
}
else if (TREE_CODE (pointer) != ERROR_MARK)
- error_at (loc,
- "invalid type argument of %qs (have %qT)", errorstring, type);
+ switch (errstring)
+ {
+ case RO_ARRAY_INDEXING:
+ error_at (loc,
+ "invalid type argument of array indexing (have %qT)",
+ type);
+ break;
+ case RO_UNARY_STAR:
+ error_at (loc,
+ "invalid type argument of unary %<*%> (have %qT)",
+ type);
+ break;
+ case RO_ARROW:
+ error_at (loc,
+ "invalid type argument of %<->%> (have %qT)",
+ type);
+ break;
+ default:
+ gcc_unreachable ();
+ }
return error_mark_node;
}
@@ -2301,7 +2319,7 @@ build_array_ref (location_t loc, tree array, tree index)
return build_indirect_ref
(loc, build_binary_op (loc, PLUS_EXPR, ar, index, 0),
- "array indexing");
+ RO_ARRAY_INDEXING);
}
}
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 4245d0f7a7f..08b211e5244 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -2186,7 +2186,6 @@ expand_debug_expr (tree exp)
int unsignedp = TYPE_UNSIGNED (TREE_TYPE (exp));
addr_space_t as;
enum machine_mode address_mode;
- enum machine_mode pointer_mode;
switch (TREE_CODE_CLASS (TREE_CODE (exp)))
{
@@ -2382,17 +2381,15 @@ expand_debug_expr (tree exp)
return NULL;
if (POINTER_TYPE_P (TREE_TYPE (exp)))
- as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
+ {
+ as = TYPE_ADDR_SPACE (TREE_TYPE (TREE_TYPE (exp)));
+ address_mode = targetm.addr_space.address_mode (as);
+ }
else
- as = ADDR_SPACE_GENERIC;
-
- address_mode = targetm.addr_space.address_mode (as);
- pointer_mode = targetm.addr_space.pointer_mode (as);
-
- gcc_assert (GET_MODE (op0) == address_mode
- || GET_MODE (op0) == pointer_mode
- || GET_CODE (op0) == CONST_INT
- || GET_CODE (op0) == CONST_DOUBLE);
+ {
+ as = ADDR_SPACE_GENERIC;
+ address_mode = Pmode;
+ }
if (TREE_CODE (exp) == ALIGN_INDIRECT_REF)
{
@@ -2412,19 +2409,11 @@ expand_debug_expr (tree exp)
return NULL;
op0 = expand_debug_expr
- (tree_mem_ref_addr (build_pointer_type (TREE_TYPE (exp)),
- exp));
+ (tree_mem_ref_addr (build_pointer_type (TREE_TYPE (exp)), exp));
if (!op0)
return NULL;
as = TYPE_ADDR_SPACE (TREE_TYPE (exp));
- address_mode = targetm.addr_space.address_mode (as);
- pointer_mode = targetm.addr_space.pointer_mode (as);
-
- gcc_assert (GET_MODE (op0) == address_mode
- || GET_MODE (op0) == pointer_mode
- || GET_CODE (op0) == CONST_INT
- || GET_CODE (op0) == CONST_DOUBLE);
op0 = gen_rtx_MEM (mode, op0);
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 0ed097a8b0b..fc7ba1a50ba 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -2208,4 +2208,53 @@ cgraph_make_node_local (struct cgraph_node *node)
}
}
+/* Set TREE_NOTHROW on NODE's decl and on same_body aliases of NODE
+ if any to NOTHROW. */
+
+void
+cgraph_set_nothrow_flag (struct cgraph_node *node, bool nothrow)
+{
+ struct cgraph_node *alias;
+ TREE_NOTHROW (node->decl) = nothrow;
+ for (alias = node->same_body; alias; alias = alias->next)
+ TREE_NOTHROW (alias->decl) = nothrow;
+}
+
+/* Set TREE_READONLY on NODE's decl and on same_body aliases of NODE
+ if any to READONLY. */
+
+void
+cgraph_set_readonly_flag (struct cgraph_node *node, bool readonly)
+{
+ struct cgraph_node *alias;
+ TREE_READONLY (node->decl) = readonly;
+ for (alias = node->same_body; alias; alias = alias->next)
+ TREE_READONLY (alias->decl) = readonly;
+}
+
+/* Set DECL_PURE_P on NODE's decl and on same_body aliases of NODE
+ if any to PURE. */
+
+void
+cgraph_set_pure_flag (struct cgraph_node *node, bool pure)
+{
+ struct cgraph_node *alias;
+ DECL_PURE_P (node->decl) = pure;
+ for (alias = node->same_body; alias; alias = alias->next)
+ DECL_PURE_P (alias->decl) = pure;
+}
+
+/* Set DECL_LOOPING_CONST_OR_PURE_P on NODE's decl and on
+ same_body aliases of NODE if any to LOOPING_CONST_OR_PURE. */
+
+void
+cgraph_set_looping_const_or_pure_flag (struct cgraph_node *node,
+ bool looping_const_or_pure)
+{
+ struct cgraph_node *alias;
+ DECL_LOOPING_CONST_OR_PURE_P (node->decl) = looping_const_or_pure;
+ for (alias = node->same_body; alias; alias = alias->next)
+ DECL_LOOPING_CONST_OR_PURE_P (alias->decl) = looping_const_or_pure;
+}
+
#include "gt-cgraph.h"
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 268e6d442f3..867a68aaf30 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -475,6 +475,11 @@ struct cgraph_node * cgraph_create_virtual_clone (struct cgraph_node *old_node,
VEC(ipa_replace_map_p,gc)* tree_map,
bitmap args_to_skip);
+void cgraph_set_nothrow_flag (struct cgraph_node *, bool);
+void cgraph_set_readonly_flag (struct cgraph_node *, bool);
+void cgraph_set_pure_flag (struct cgraph_node *, bool);
+void cgraph_set_looping_const_or_pure_flag (struct cgraph_node *, bool);
+
/* In cgraphunit.c */
void cgraph_finalize_function (tree, bool);
void cgraph_mark_if_needed (tree);
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index 994029239a0..367b00d70a6 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -5292,7 +5292,7 @@
)
(define_insn "tls_load_dot_plus_eight"
- [(set (match_operand:SI 0 "register_operand" "+r")
+ [(set (match_operand:SI 0 "register_operand" "=r")
(mem:SI (unspec:SI [(match_operand:SI 1 "register_operand" "r")
(const_int 8)
(match_operand 2 "" "")]
diff --git a/gcc/config/arm/bpabi-v6m.S b/gcc/config/arm/bpabi-v6m.S
index 77018e15478..75d50d967a7 100644
--- a/gcc/config/arm/bpabi-v6m.S
+++ b/gcc/config/arm/bpabi-v6m.S
@@ -69,9 +69,52 @@ FUNC_START aeabi_ulcmp
#endif /* L_aeabi_ulcmp */
+.macro test_div_by_zero signed
+ cmp yyh, #0
+ bne 7f
+ cmp yyl, #0
+ bne 7f
+ cmp xxh, #0
+ bne 2f
+ cmp xxl, #0
+2:
+ .ifc \signed, unsigned
+ beq 3f
+ mov xxh, #0
+ mvn xxh, xxh @ 0xffffffff
+ mov xxl, xxh
+3:
+ .else
+ beq 5f
+ blt 6f
+ mov xxl, #0
+ mvn xxl, xxl @ 0xffffffff
+ lsr xxh, xxl, #1 @ 0x7fffffff
+ b 5f
+6: mov xxh, #0x80
+ lsl xxh, xxh, #24 @ 0x80000000
+ mov xxl, #0
+5:
+ .endif
+ @ tailcalls are tricky on v6-m.
+ push {r0, r1, r2}
+ ldr r0, 1f
+ adr r1, 1f
+ add r0, r1
+ str r0, [sp, #8]
+ @ We know we are not on armv4t, so pop pc is safe.
+ pop {r0, r1, pc}
+ .align 2
+1:
+ .word __aeabi_ldiv0 - 1b
+7:
+.endm
+
#ifdef L_aeabi_ldivmod
FUNC_START aeabi_ldivmod
+ test_div_by_zero signed
+
push {r0, r1}
mov r0, sp
push {r0, lr}
@@ -89,6 +132,8 @@ FUNC_START aeabi_ldivmod
#ifdef L_aeabi_uldivmod
FUNC_START aeabi_uldivmod
+ test_div_by_zero unsigned
+
push {r0, r1}
mov r0, sp
push {r0, lr}
diff --git a/gcc/config/arm/bpabi.S b/gcc/config/arm/bpabi.S
index 850381e4af6..ccc569e9821 100644
--- a/gcc/config/arm/bpabi.S
+++ b/gcc/config/arm/bpabi.S
@@ -64,9 +64,57 @@ ARM_FUNC_START aeabi_ulcmp
#endif /* L_aeabi_ulcmp */
+.macro test_div_by_zero signed
+/* Tail-call to divide-by-zero handlers which may be overridden by the user,
+ so unwinding works properly. */
+#if defined(__thumb2__)
+ cbnz yyh, 1f
+ cbnz yyl, 1f
+ cmp xxh, #0
+ do_it eq
+ cmpeq xxl, #0
+ .ifc \signed, unsigned
+ beq 2f
+ mov xxh, #0xffffffff
+ mov xxl, xxh
+2:
+ .else
+ do_it lt, t
+ movlt xxl, #0
+ movlt xxh, #0x80000000
+ do_it gt, t
+ movgt xxh, #0x7fffffff
+ movgt xxl, #0xffffffff
+ .endif
+ b SYM (__aeabi_ldiv0) __PLT__
+1:
+#else
+ /* Note: Thumb-1 code calls via an ARM shim on processors which
+ support ARM mode. */
+ cmp yyh, #0
+ cmpeq yyl, #0
+ bne 2f
+ cmp xxh, #0
+ cmpeq xxl, #0
+ .ifc \signed, unsigned
+ movne xxh, #0xffffffff
+ movne xxl, #0xffffffff
+ .else
+ movlt xxh, #0x80000000
+ movlt xxl, #0
+ movgt xxh, #0x7fffffff
+ movgt xxl, #0xffffffff
+ .endif
+ b SYM (__aeabi_ldiv0) __PLT__
+2:
+#endif
+.endm
+
#ifdef L_aeabi_ldivmod
ARM_FUNC_START aeabi_ldivmod
+ test_div_by_zero signed
+
sub sp, sp, #8
#if defined(__thumb2__)
mov ip, sp
@@ -85,6 +133,8 @@ ARM_FUNC_START aeabi_ldivmod
#ifdef L_aeabi_uldivmod
ARM_FUNC_START aeabi_uldivmod
+ test_div_by_zero unsigned
+
sub sp, sp, #8
#if defined(__thumb2__)
mov ip, sp
diff --git a/gcc/config/arm/lib1funcs.asm b/gcc/config/arm/lib1funcs.asm
index 9f7cc63e469..1035a3cecad 100644
--- a/gcc/config/arm/lib1funcs.asm
+++ b/gcc/config/arm/lib1funcs.asm
@@ -265,16 +265,91 @@ LSYM(Lend_fde):
.endm
#endif
-.macro ARM_LDIV0 name
+#ifdef __ARM_EABI__
+.macro ARM_LDIV0 name signed
+ cmp r0, #0
+ .ifc \signed, unsigned
+ movne r0, #0xffffffff
+ .else
+ movgt r0, #0x7fffffff
+ movlt r0, #0x80000000
+ .endif
+ b SYM (__aeabi_idiv0) __PLT__
+.endm
+#else
+.macro ARM_LDIV0 name signed
str lr, [sp, #-8]!
98: cfi_push 98b - __\name, 0xe, -0x8, 0x8
bl SYM (__div0) __PLT__
mov r0, #0 @ About as wrong as it could be.
RETLDM unwind=98b
.endm
+#endif
-.macro THUMB_LDIV0 name
+#ifdef __ARM_EABI__
+.macro THUMB_LDIV0 name signed
+#if defined(__ARM_ARCH_6M__)
+ .ifc \signed, unsigned
+ cmp r0, #0
+ beq 1f
+ mov r0, #0
+ mvn r0, r0 @ 0xffffffff
+1:
+ .else
+ cmp r0, #0
+ beq 2f
+ blt 3f
+ mov r0, #0
+ mvn r0, r0
+ lsr r0, r0, #1 @ 0x7fffffff
+ b 2f
+3: mov r0, #0x80
+ lsl r0, r0, #24 @ 0x80000000
+2:
+ .endif
+ push {r0, r1, r2}
+ ldr r0, 4f
+ adr r1, 4f
+ add r0, r1
+ str r0, [sp, #8]
+ @ We know we are not on armv4t, so pop pc is safe.
+ pop {r0, r1, pc}
+ .align 2
+4:
+ .word __aeabi_idiv0 - 4b
+#elif defined(__thumb2__)
+ .syntax unified
+ .ifc \signed, unsigned
+ cbz r0, 1f
+ mov r0, #0xffffffff
+1:
+ .else
+ cmp r0, #0
+ do_it gt
+ movgt r0, #0x7fffffff
+ do_it lt
+ movlt r0, #0x80000000
+ .endif
+ b.w SYM(__aeabi_idiv0) __PLT__
+#else
+ .align 2
+ bx pc
+ nop
+ .arm
+ cmp r0, #0
+ .ifc \signed, unsigned
+ movne r0, #0xffffffff
+ .else
+ movgt r0, #0x7fffffff
+ movlt r0, #0x80000000
+ .endif
+ b SYM(__aeabi_idiv0) __PLT__
+ .thumb
+#endif
+.endm
+#else
+.macro THUMB_LDIV0 name signed
push { r1, lr }
98: cfi_push 98b - __\name, 0xe, -0x4, 0x8
bl SYM (__div0)
@@ -286,18 +361,19 @@ LSYM(Lend_fde):
pop { r1, pc }
#endif
.endm
+#endif
.macro FUNC_END name
SIZE (__\name)
.endm
-.macro DIV_FUNC_END name
+.macro DIV_FUNC_END name signed
cfi_start __\name, LSYM(Lend_div0)
LSYM(Ldiv0):
#ifdef __thumb__
- THUMB_LDIV0 \name
+ THUMB_LDIV0 \name \signed
#else
- ARM_LDIV0 \name
+ ARM_LDIV0 \name \signed
#endif
cfi_end LSYM(Lend_div0)
FUNC_END \name
@@ -422,6 +498,12 @@ SYM (__\name):
#define yyl r2
#endif
+#ifdef __ARM_EABI__
+.macro WEAK name
+ .weak SYM (__\name)
+.endm
+#endif
+
#ifdef __thumb__
/* Register aliases. */
@@ -842,6 +924,7 @@ LSYM(Lgot_result):
cmp divisor, #0
beq LSYM(Ldiv0)
+LSYM(udivsi3_skip_div0_test):
mov curbit, #1
mov result, #0
@@ -860,6 +943,9 @@ LSYM(Lgot_result):
ARM_FUNC_START udivsi3
ARM_FUNC_ALIAS aeabi_uidiv udivsi3
+ /* Note: if called via udivsi3_skip_div0_test, this will unnecessarily
+ check for division-by-zero a second time. */
+LSYM(udivsi3_skip_div0_test):
subs r2, r1, #1
do_it eq
RETc(eq)
@@ -886,20 +972,24 @@ LSYM(Lgot_result):
#endif /* ARM version */
- DIV_FUNC_END udivsi3
+ DIV_FUNC_END udivsi3 unsigned
#if defined(__ARM_ARCH_6M__)
FUNC_START aeabi_uidivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
push {r0, r1, lr}
- bl SYM(__udivsi3)
+ bl LSYM(udivsi3_skip_div0_test)
POP {r1, r2, r3}
mul r2, r0
sub r1, r1, r2
bx r3
#else
ARM_FUNC_START aeabi_uidivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
stmfd sp!, { r0, r1, lr }
- bl SYM(__udivsi3)
+ bl LSYM(udivsi3_skip_div0_test)
ldmfd sp!, { r1, r2, lr }
mul r3, r2, r0
sub r1, r1, r3
@@ -946,7 +1036,7 @@ LSYM(Lover10):
#endif /* ARM version. */
- DIV_FUNC_END umodsi3
+ DIV_FUNC_END umodsi3 unsigned
#endif /* L_umodsi3 */
/* ------------------------------------------------------------------------ */
@@ -959,7 +1049,7 @@ LSYM(Lover10):
cmp divisor, #0
beq LSYM(Ldiv0)
-
+LSYM(divsi3_skip_div0_test):
push { work }
mov work, dividend
eor work, divisor @ Save the sign of the result.
@@ -994,8 +1084,9 @@ LSYM(Lover12):
ARM_FUNC_ALIAS aeabi_idiv divsi3
cmp r1, #0
- eor ip, r0, r1 @ save the sign of the result.
beq LSYM(Ldiv0)
+LSYM(divsi3_skip_div0_test):
+ eor ip, r0, r1 @ save the sign of the result.
do_it mi
rsbmi r1, r1, #0 @ loops below use unsigned.
subs r2, r1, #1 @ division by 1 or -1 ?
@@ -1037,20 +1128,24 @@ LSYM(Lover12):
#endif /* ARM version */
- DIV_FUNC_END divsi3
+ DIV_FUNC_END divsi3 signed
#if defined(__ARM_ARCH_6M__)
FUNC_START aeabi_idivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
push {r0, r1, lr}
- bl SYM(__divsi3)
+ bl LSYM(divsi3_skip_div0_test)
POP {r1, r2, r3}
mul r2, r0
sub r1, r1, r2
bx r3
#else
ARM_FUNC_START aeabi_idivmod
+ cmp r1, #0
+ beq LSYM(Ldiv0)
stmfd sp!, { r0, r1, lr }
- bl SYM(__divsi3)
+ bl LSYM(divsi3_skip_div0_test)
ldmfd sp!, { r1, r2, lr }
mul r3, r2, r0
sub r1, r1, r3
@@ -1116,21 +1211,25 @@ LSYM(Lover12):
#endif /* ARM version */
- DIV_FUNC_END modsi3
+ DIV_FUNC_END modsi3 signed
#endif /* L_modsi3 */
/* ------------------------------------------------------------------------ */
#ifdef L_dvmd_tls
- FUNC_START div0
- FUNC_ALIAS aeabi_idiv0 div0
- FUNC_ALIAS aeabi_ldiv0 div0
-
+#ifdef __ARM_EABI__
+ WEAK aeabi_idiv0
+ WEAK aeabi_ldiv0
+ FUNC_START aeabi_idiv0
+ FUNC_START aeabi_ldiv0
RET
-
FUNC_END aeabi_ldiv0
FUNC_END aeabi_idiv0
+#else
+ FUNC_START div0
+ RET
FUNC_END div0
+#endif
#endif /* L_divmodsi_tools */
/* ------------------------------------------------------------------------ */
@@ -1140,14 +1239,26 @@ LSYM(Lover12):
/* Constant taken from <asm/signal.h>. */
#define SIGFPE 8
+#ifdef __ARM_EABI__
+ WEAK aeabi_idiv0
+ WEAK aeabi_ldiv0
+ ARM_FUNC_START aeabi_idiv0
+ ARM_FUNC_START aeabi_ldiv0
+#else
ARM_FUNC_START div0
+#endif
do_push {r1, lr}
mov r0, #SIGFPE
bl SYM(raise) __PLT__
RETLDM r1
+#ifdef __ARM_EABI__
+ FUNC_END aeabi_ldiv0
+ FUNC_END aeabi_idiv0
+#else
FUNC_END div0
+#endif
#endif /* L_dvmd_lnx */
#ifdef L_clear_cache
diff --git a/gcc/config/i386/i386-builtin-types.def b/gcc/config/i386/i386-builtin-types.def
index e9e4d0c4c83..5fec96443a6 100644
--- a/gcc/config/i386/i386-builtin-types.def
+++ b/gcc/config/i386/i386-builtin-types.def
@@ -104,6 +104,7 @@ DEF_POINTER_TYPE (PCDOUBLE, DOUBLE, CONST)
DEF_POINTER_TYPE (PCFLOAT, FLOAT, CONST)
DEF_POINTER_TYPE (PCHAR, CHAR)
DEF_POINTER_TYPE (PCVOID, VOID, CONST)
+DEF_POINTER_TYPE (PVOID, VOID)
DEF_POINTER_TYPE (PDOUBLE, DOUBLE)
DEF_POINTER_TYPE (PFLOAT, FLOAT)
DEF_POINTER_TYPE (PINT, INT)
@@ -128,6 +129,7 @@ DEF_FUNCTION_TYPE (FLOAT128)
DEF_FUNCTION_TYPE (UINT64)
DEF_FUNCTION_TYPE (UNSIGNED)
DEF_FUNCTION_TYPE (VOID)
+DEF_FUNCTION_TYPE (PVOID)
DEF_FUNCTION_TYPE (FLOAT, FLOAT)
DEF_FUNCTION_TYPE (FLOAT128, FLOAT128)
@@ -195,6 +197,7 @@ DEF_FUNCTION_TYPE (V8SF, V8SI)
DEF_FUNCTION_TYPE (V8SI, V4SI)
DEF_FUNCTION_TYPE (V8SI, V8SF)
DEF_FUNCTION_TYPE (VOID, PCVOID)
+DEF_FUNCTION_TYPE (VOID, PVOID)
DEF_FUNCTION_TYPE (VOID, UNSIGNED)
DEF_FUNCTION_TYPE (DI, V2DI, INT)
@@ -301,7 +304,6 @@ DEF_FUNCTION_TYPE (VOID, UNSIGNED, UNSIGNED)
DEF_FUNCTION_TYPE (INT, V16QI, V16QI, INT)
DEF_FUNCTION_TYPE (UCHAR, UINT, UINT, UINT)
DEF_FUNCTION_TYPE (UCHAR, UINT64, UINT, UINT)
-DEF_FUNCTION_TYPE (UCHAR, USHORT, UINT, USHORT)
DEF_FUNCTION_TYPE (V16HI, V16HI, V16HI, V16HI)
DEF_FUNCTION_TYPE (V16QI, V16QI, QI, INT)
DEF_FUNCTION_TYPE (V16QI, V16QI, V16QI, INT)
@@ -343,7 +345,6 @@ DEF_FUNCTION_TYPE (VOID, PV4SF, V4SF, V4SF)
DEF_FUNCTION_TYPE (VOID, PV8SF, V8SF, V8SF)
DEF_FUNCTION_TYPE (VOID, UINT, UINT, UINT)
DEF_FUNCTION_TYPE (VOID, UINT64, UINT, UINT)
-DEF_FUNCTION_TYPE (VOID, USHORT, UINT, USHORT)
DEF_FUNCTION_TYPE (VOID, V16QI, V16QI, PCHAR)
DEF_FUNCTION_TYPE (VOID, V8QI, V8QI, PCHAR)
DEF_FUNCTION_TYPE (V2DF, V2DF, V2DF, V2DI)
diff --git a/gcc/config/i386/i386-modes.def b/gcc/config/i386/i386-modes.def
index f2e06ee248f..c1e82cc6d79 100644
--- a/gcc/config/i386/i386-modes.def
+++ b/gcc/config/i386/i386-modes.def
@@ -80,6 +80,7 @@ VECTOR_MODES (FLOAT, 8); /* V4HF V2SF */
VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */
VECTOR_MODES (FLOAT, 32); /* V16HF V8SF V4DF */
VECTOR_MODES (FLOAT, 64); /* V32HF V16SF V8DF */
+VECTOR_MODE (INT, TI, 1); /* V1TI */
VECTOR_MODE (INT, DI, 1); /* V1DI */
VECTOR_MODE (INT, SI, 1); /* V1SI */
VECTOR_MODE (INT, QI, 2); /* V2QI */
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 0e58a176a82..dfe12dee4f9 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -5346,7 +5346,7 @@ classify_argument (enum machine_mode mode, const_tree type,
}
/* for V1xx modes, just use the base mode */
- if (VECTOR_MODE_P (mode) && mode != V1DImode
+ if (VECTOR_MODE_P (mode) && mode != V1DImode && mode != V1TImode
&& GET_MODE_SIZE (GET_MODE_INNER (mode)) == bytes)
mode = GET_MODE_INNER (mode);
@@ -5470,6 +5470,7 @@ classify_argument (enum machine_mode mode, const_tree type,
classes[0] = X86_64_SSE_CLASS;
classes[1] = X86_64_SSEUP_CLASS;
return 2;
+ case V1TImode:
case V1DImode:
case V2SFmode:
case V2SImode:
@@ -5814,6 +5815,7 @@ function_arg_advance_32 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
case V4HImode:
case V2SImode:
case V2SFmode:
+ case V1TImode:
case V1DImode:
if (!type || !AGGREGATE_TYPE_P (type))
{
@@ -6001,6 +6003,7 @@ function_arg_32 (CUMULATIVE_ARGS *cum, enum machine_mode mode,
case V4HImode:
case V2SImode:
case V2SFmode:
+ case V1TImode:
case V1DImode:
if (!type || !AGGREGATE_TYPE_P (type))
{
@@ -16391,9 +16394,9 @@ ix86_expand_sse4_unpack (rtx operands[2], bool unsigned_p, bool high_p)
{
/* Shift higher 8 bytes to lower 8 bytes. */
src = gen_reg_rtx (imode);
- emit_insn (gen_sse2_lshrti3 (gen_lowpart (TImode, src),
- gen_lowpart (TImode, operands[1]),
- GEN_INT (64)));
+ emit_insn (gen_sse2_lshrv1ti3 (gen_lowpart (V1TImode, src),
+ gen_lowpart (V1TImode, operands[1]),
+ GEN_INT (64)));
}
else
src = operands[1];
@@ -21251,16 +21254,10 @@ enum ix86_builtins
IX86_BUILTIN_VPCOMTRUEQ,
/* LWP instructions. */
- IX86_BUILTIN_LLWPCB16,
- IX86_BUILTIN_LLWPCB32,
- IX86_BUILTIN_LLWPCB64,
- IX86_BUILTIN_SLWPCB16,
- IX86_BUILTIN_SLWPCB32,
- IX86_BUILTIN_SLWPCB64,
- IX86_BUILTIN_LWPVAL16,
+ IX86_BUILTIN_LLWPCB,
+ IX86_BUILTIN_SLWPCB,
IX86_BUILTIN_LWPVAL32,
IX86_BUILTIN_LWPVAL64,
- IX86_BUILTIN_LWPINS16,
IX86_BUILTIN_LWPINS32,
IX86_BUILTIN_LWPINS64,
@@ -21532,20 +21529,12 @@ static const struct builtin_description bdesc_special_args[] =
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_maskstorepd256, "__builtin_ia32_maskstorepd256", IX86_BUILTIN_MASKSTOREPD256, UNKNOWN, (int) VOID_FTYPE_PV4DF_V4DF_V4DF },
{ OPTION_MASK_ISA_AVX, CODE_FOR_avx_maskstoreps256, "__builtin_ia32_maskstoreps256", IX86_BUILTIN_MASKSTOREPS256, UNKNOWN, (int) VOID_FTYPE_PV8SF_V8SF_V8SF },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_llwpcbhi1, "__builtin_ia32_llwpcb16", IX86_BUILTIN_LLWPCB16, UNKNOWN, (int) VOID_FTYPE_VOID },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_llwpcbsi1, "__builtin_ia32_llwpcb32", IX86_BUILTIN_LLWPCB32, UNKNOWN, (int) VOID_FTYPE_VOID },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_llwpcbdi1, "__builtin_ia32_llwpcb64", IX86_BUILTIN_LLWPCB64, UNKNOWN, (int) VOID_FTYPE_VOID },
-
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_slwpcbhi1, "__builtin_ia32_slwpcb16", IX86_BUILTIN_SLWPCB16, UNKNOWN, (int) VOID_FTYPE_VOID },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_slwpcbsi1, "__builtin_ia32_slwpcb32", IX86_BUILTIN_SLWPCB32, UNKNOWN, (int) VOID_FTYPE_VOID },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_slwpcbdi1, "__builtin_ia32_slwpcb64", IX86_BUILTIN_SLWPCB64, UNKNOWN, (int) VOID_FTYPE_VOID },
-
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpvalhi3, "__builtin_ia32_lwpval16", IX86_BUILTIN_LWPVAL16, UNKNOWN, (int) VOID_FTYPE_USHORT_UINT_USHORT },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpvalsi3, "__builtin_ia32_lwpval32", IX86_BUILTIN_LWPVAL64, UNKNOWN, (int) VOID_FTYPE_UINT_UINT_UINT },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpvaldi3, "__builtin_ia32_lwpval64", IX86_BUILTIN_LWPVAL64, UNKNOWN, (int) VOID_FTYPE_UINT64_UINT_UINT },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpinshi3, "__builtin_ia32_lwpins16", IX86_BUILTIN_LWPINS16, UNKNOWN, (int) UCHAR_FTYPE_USHORT_UINT_USHORT },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpinssi3, "__builtin_ia32_lwpins32", IX86_BUILTIN_LWPINS64, UNKNOWN, (int) UCHAR_FTYPE_UINT_UINT_UINT },
- { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpinsdi3, "__builtin_ia32_lwpins64", IX86_BUILTIN_LWPINS64, UNKNOWN, (int) UCHAR_FTYPE_UINT64_UINT_UINT },
+ { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_llwpcb, "__builtin_ia32_llwpcb", IX86_BUILTIN_LLWPCB, UNKNOWN, (int) VOID_FTYPE_PVOID },
+ { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_slwpcb, "__builtin_ia32_slwpcb", IX86_BUILTIN_SLWPCB, UNKNOWN, (int) PVOID_FTYPE_VOID },
+ { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpvalsi3, "__builtin_ia32_lwpval32", IX86_BUILTIN_LWPVAL32, UNKNOWN, (int) VOID_FTYPE_UINT_UINT_UINT },
+ { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpvaldi3, "__builtin_ia32_lwpval64", IX86_BUILTIN_LWPVAL64, UNKNOWN, (int) VOID_FTYPE_UINT64_UINT_UINT },
+ { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpinssi3, "__builtin_ia32_lwpins32", IX86_BUILTIN_LWPINS32, UNKNOWN, (int) UCHAR_FTYPE_UINT_UINT_UINT },
+ { OPTION_MASK_ISA_LWP, CODE_FOR_lwp_lwpinsdi3, "__builtin_ia32_lwpins64", IX86_BUILTIN_LWPINS64, UNKNOWN, (int) UCHAR_FTYPE_UINT64_UINT_UINT },
};
@@ -21900,7 +21889,7 @@ static const struct builtin_description bdesc_args[] =
{ OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_cvtsd2ss, "__builtin_ia32_cvtsd2ss", IX86_BUILTIN_CVTSD2SS, UNKNOWN, (int) V4SF_FTYPE_V4SF_V2DF },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_cvtss2sd, "__builtin_ia32_cvtss2sd", IX86_BUILTIN_CVTSS2SD, UNKNOWN, (int) V2DF_FTYPE_V2DF_V4SF },
- { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_ashlti3, "__builtin_ia32_pslldqi128", IX86_BUILTIN_PSLLDQI128, UNKNOWN, (int) V2DI_FTYPE_V2DI_INT_CONVERT },
+ { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_ashlv1ti3, "__builtin_ia32_pslldqi128", IX86_BUILTIN_PSLLDQI128, UNKNOWN, (int) V2DI_FTYPE_V2DI_INT_CONVERT },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_ashlv8hi3, "__builtin_ia32_psllwi128", IX86_BUILTIN_PSLLWI128, UNKNOWN, (int) V8HI_FTYPE_V8HI_SI_COUNT },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_ashlv4si3, "__builtin_ia32_pslldi128", IX86_BUILTIN_PSLLDI128, UNKNOWN, (int) V4SI_FTYPE_V4SI_SI_COUNT },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_ashlv2di3, "__builtin_ia32_psllqi128", IX86_BUILTIN_PSLLQI128, UNKNOWN, (int) V2DI_FTYPE_V2DI_SI_COUNT },
@@ -21908,7 +21897,7 @@ static const struct builtin_description bdesc_args[] =
{ OPTION_MASK_ISA_SSE2, CODE_FOR_ashlv4si3, "__builtin_ia32_pslld128", IX86_BUILTIN_PSLLD128, UNKNOWN, (int) V4SI_FTYPE_V4SI_V4SI_COUNT },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_ashlv2di3, "__builtin_ia32_psllq128", IX86_BUILTIN_PSLLQ128, UNKNOWN, (int) V2DI_FTYPE_V2DI_V2DI_COUNT },
- { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_lshrti3, "__builtin_ia32_psrldqi128", IX86_BUILTIN_PSRLDQI128, UNKNOWN, (int) V2DI_FTYPE_V2DI_INT_CONVERT },
+ { OPTION_MASK_ISA_SSE2, CODE_FOR_sse2_lshrv1ti3, "__builtin_ia32_psrldqi128", IX86_BUILTIN_PSRLDQI128, UNKNOWN, (int) V2DI_FTYPE_V2DI_INT_CONVERT },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_lshrv8hi3, "__builtin_ia32_psrlwi128", IX86_BUILTIN_PSRLWI128, UNKNOWN, (int) V8HI_FTYPE_V8HI_SI_COUNT },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_lshrv4si3, "__builtin_ia32_psrldi128", IX86_BUILTIN_PSRLDI128, UNKNOWN, (int) V4SI_FTYPE_V4SI_SI_COUNT },
{ OPTION_MASK_ISA_SSE2, CODE_FOR_lshrv2di3, "__builtin_ia32_psrlqi128", IX86_BUILTIN_PSRLQI128, UNKNOWN, (int) V2DI_FTYPE_V2DI_SI_COUNT },
@@ -23506,7 +23495,7 @@ ix86_expand_args_builtin (const struct builtin_description *d,
break;
case V2DI_FTYPE_V2DI_INT_CONVERT:
nargs = 2;
- rmode = V2DImode;
+ rmode = V1TImode;
nargs_constant = 1;
break;
case V8HI_FTYPE_V8HI_INT:
@@ -23734,7 +23723,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
{
rtx op;
enum machine_mode mode;
- } args[2];
+ } args[3];
enum insn_code icode = d->icode;
bool last_arg_constant = false;
const struct insn_data *insn_p = &insn_data[icode];
@@ -23761,6 +23750,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
case V4DF_FTYPE_PCV2DF:
case V4DF_FTYPE_PCDOUBLE:
case V2DF_FTYPE_PCDOUBLE:
+ case VOID_FTYPE_PVOID:
nargs = 1;
klass = load;
memory = 0;
@@ -23804,15 +23794,14 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
/* Reserve memory operand for target. */
memory = ARRAY_SIZE (args);
break;
- case VOID_FTYPE_USHORT_UINT_USHORT:
case VOID_FTYPE_UINT_UINT_UINT:
case VOID_FTYPE_UINT64_UINT_UINT:
- case UCHAR_FTYPE_USHORT_UINT_USHORT:
case UCHAR_FTYPE_UINT_UINT_UINT:
case UCHAR_FTYPE_UINT64_UINT_UINT:
nargs = 3;
- klass = store;
- memory = 0;
+ klass = load;
+ memory = ARRAY_SIZE (args);
+ last_arg_constant = true;
break;
default:
gcc_unreachable ();
@@ -23850,12 +23839,16 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
if (last_arg_constant && (i + 1) == nargs)
{
if (!match)
- switch (icode)
- {
- default:
+ {
+ if (icode == CODE_FOR_lwp_lwpvalsi3
+ || icode == CODE_FOR_lwp_lwpinssi3
+ || icode == CODE_FOR_lwp_lwpvaldi3
+ || icode == CODE_FOR_lwp_lwpinsdi3)
+ error ("the last argument must be a 32-bit immediate");
+ else
error ("the last argument must be an 8-bit immediate");
- return const0_rtx;
- }
+ return const0_rtx;
+ }
}
else
{
@@ -23893,6 +23886,9 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
case 2:
pat = GEN_FCN (icode) (target, args[0].op, args[1].op);
break;
+ case 3:
+ pat = GEN_FCN (icode) (target, args[0].op, args[1].op, args[2].op);
+ break;
default:
gcc_unreachable ();
}
@@ -24205,6 +24201,23 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
return target;
}
+ case IX86_BUILTIN_LLWPCB:
+ arg0 = CALL_EXPR_ARG (exp, 0);
+ op0 = expand_normal (arg0);
+ icode = CODE_FOR_lwp_llwpcb;
+ if (! (*insn_data[icode].operand[0].predicate) (op0, Pmode))
+ op0 = copy_to_mode_reg (Pmode, op0);
+ emit_insn (gen_lwp_llwpcb (op0));
+ return 0;
+
+ case IX86_BUILTIN_SLWPCB:
+ icode = CODE_FOR_lwp_slwpcb;
+ if (!target
+ || ! (*insn_data[icode].operand[0].predicate) (target, Pmode))
+ target = gen_reg_rtx (Pmode);
+ emit_insn (gen_lwp_slwpcb (target));
+ return target;
+
default:
break;
}
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 860d234efbd..962a14c8005 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1013,7 +1013,8 @@ enum target_cpu_default
|| (MODE) == V2DImode || (MODE) == DFmode)
#define VALID_SSE_REG_MODE(MODE) \
- ((MODE) == TImode || (MODE) == V4SFmode || (MODE) == V4SImode \
+ ((MODE) == V1TImode || (MODE) == TImode \
+ || (MODE) == V4SFmode || (MODE) == V4SImode \
|| (MODE) == SFmode || (MODE) == TFmode)
#define VALID_MMX_REG_MODE_3DNOW(MODE) \
@@ -1051,11 +1052,11 @@ enum target_cpu_default
/* Return true for modes passed in SSE registers. */
#define SSE_REG_MODE_P(MODE) \
- ((MODE) == TImode || (MODE) == V16QImode || (MODE) == TFmode \
- || (MODE) == V8HImode || (MODE) == V2DFmode || (MODE) == V2DImode \
- || (MODE) == V4SFmode || (MODE) == V4SImode || (MODE) == V32QImode \
- || (MODE) == V16HImode || (MODE) == V8SImode || (MODE) == V4DImode \
- || (MODE) == V8SFmode || (MODE) == V4DFmode)
+ ((MODE) == V1TImode || (MODE) == TImode || (MODE) == V16QImode \
+ || (MODE) == TFmode || (MODE) == V8HImode || (MODE) == V2DFmode \
+ || (MODE) == V2DImode || (MODE) == V4SFmode || (MODE) == V4SImode \
+ || (MODE) == V32QImode || (MODE) == V16HImode || (MODE) == V8SImode \
+ || (MODE) == V4DImode || (MODE) == V8SFmode || (MODE) == V4DFmode)
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index a4e688a8d14..b4a8a83064b 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -204,10 +204,6 @@
(UNSPEC_XOP_TRUEFALSE 152)
(UNSPEC_XOP_PERMUTE 153)
(UNSPEC_FRCZ 154)
- (UNSPEC_LLWP_INTRINSIC 155)
- (UNSPEC_SLWP_INTRINSIC 156)
- (UNSPECV_LWPVAL_INTRINSIC 157)
- (UNSPECV_LWPINS_INTRINSIC 158)
; For AES support
(UNSPEC_AESENC 159)
@@ -251,7 +247,11 @@
(UNSPECV_RDTSC 18)
(UNSPECV_RDTSCP 19)
(UNSPECV_RDPMC 20)
- (UNSPECV_VSWAPMOV 21)
+ (UNSPECV_VSWAPMOV 21)
+ (UNSPECV_LLWP_INTRINSIC 22)
+ (UNSPECV_SLWP_INTRINSIC 23)
+ (UNSPECV_LWPVAL_INTRINSIC 24)
+ (UNSPECV_LWPINS_INTRINSIC 25)
])
;; Constants to represent pcomtrue/pcomfalse variants
@@ -578,7 +578,7 @@
;; if the instruction is complex.
(define_attr "memory" "none,load,store,both,unknown"
- (cond [(eq_attr "type" "other,multi,str")
+ (cond [(eq_attr "type" "other,multi,str,lwp")
(const_string "unknown")
(eq_attr "type" "lea,fcmov,fpspc")
(const_string "none")
@@ -717,10 +717,8 @@
(umax "maxu") (umin "minu")])
(define_code_attr maxminfprefix [(smax "max") (smin "min")])
-;; Mapping of parallel logic operators
+;; Mapping of logic operators
(define_code_iterator any_logic [and ior xor])
-
-;; Mapping of parallel logic operators
(define_code_iterator any_or [ior xor])
;; Base name for insn mnemonic.
@@ -9680,37 +9678,6 @@
"TARGET_64BIT"
"ix86_expand_binary_operator (ASHIFT, TImode, operands); DONE;")
-;; This pattern must be defined before *ashlti3_1 to prevent
-;; combine pass from converting sse2_ashlti3 to *ashlti3_1.
-
-(define_insn "*avx_ashlti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (ashift:TI (match_operand:TI 1 "register_operand" "x")
- (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
- "TARGET_AVX"
-{
- operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
- return "vpslldq\t{%2, %1, %0|%0, %1, %2}";
-}
- [(set_attr "type" "sseishft")
- (set_attr "prefix" "vex")
- (set_attr "length_immediate" "1")
- (set_attr "mode" "TI")])
-
-(define_insn "sse2_ashlti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (ashift:TI (match_operand:TI 1 "register_operand" "0")
- (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
- "TARGET_SSE2"
-{
- operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
- return "pslldq\t{%2, %0|%0, %2}";
-}
- [(set_attr "type" "sseishft")
- (set_attr "prefix_data16" "1")
- (set_attr "length_immediate" "1")
- (set_attr "mode" "TI")])
-
(define_insn "*ashlti3_1"
[(set (match_operand:TI 0 "register_operand" "=&r,r")
(ashift:TI (match_operand:TI 1 "reg_or_pm1_operand" "n,0")
@@ -11534,37 +11501,6 @@
"TARGET_64BIT"
"ix86_expand_binary_operator (LSHIFTRT, TImode, operands); DONE;")
-;; This pattern must be defined before *lshrti3_1 to prevent
-;; combine pass from converting sse2_lshrti3 to *lshrti3_1.
-
-(define_insn "*avx_lshrti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (lshiftrt:TI (match_operand:TI 1 "register_operand" "x")
- (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
- "TARGET_AVX"
-{
- operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
- return "vpsrldq\t{%2, %1, %0|%0, %1, %2}";
-}
- [(set_attr "type" "sseishft")
- (set_attr "prefix" "vex")
- (set_attr "length_immediate" "1")
- (set_attr "mode" "TI")])
-
-(define_insn "sse2_lshrti3"
- [(set (match_operand:TI 0 "register_operand" "=x")
- (lshiftrt:TI (match_operand:TI 1 "register_operand" "0")
- (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
- "TARGET_SSE2"
-{
- operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
- return "psrldq\t{%2, %0|%0, %2}";
-}
- [(set_attr "type" "sseishft")
- (set_attr "prefix_data16" "1")
- (set_attr "length_immediate" "1")
- (set_attr "mode" "TI")])
-
(define_insn "*lshrti3_1"
[(set (match_operand:TI 0 "register_operand" "=r")
(lshiftrt:TI (match_operand:TI 1 "register_operand" "0")
@@ -20835,113 +20771,86 @@
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(define_insn "lwp_llwpcbhi1"
- [(unspec [(match_operand:HI 0 "register_operand" "r")]
- UNSPEC_LLWP_INTRINSIC)]
- "TARGET_LWP"
- "llwpcb\t%0"
- [(set_attr "type" "lwp")
- (set_attr "mode" "HI")])
-
-(define_insn "lwp_llwpcbsi1"
- [(unspec [(match_operand:SI 0 "register_operand" "r")]
- UNSPEC_LLWP_INTRINSIC)]
+(define_expand "lwp_llwpcb"
+ [(unspec_volatile [(match_operand 0 "register_operand" "r")]
+ UNSPECV_LLWP_INTRINSIC)]
"TARGET_LWP"
- "llwpcb\t%0"
- [(set_attr "type" "lwp")
- (set_attr "mode" "SI")])
+ "")
-(define_insn "lwp_llwpcbdi1"
- [(unspec [(match_operand:DI 0 "register_operand" "r")]
- UNSPEC_LLWP_INTRINSIC)]
+(define_insn "*lwp_llwpcb<mode>1"
+ [(unspec_volatile [(match_operand:P 0 "register_operand" "r")]
+ UNSPECV_LLWP_INTRINSIC)]
"TARGET_LWP"
"llwpcb\t%0"
[(set_attr "type" "lwp")
- (set_attr "mode" "DI")])
-
-(define_insn "lwp_slwpcbhi1"
- [(unspec [(match_operand:HI 0 "register_operand" "r")]
- UNSPEC_SLWP_INTRINSIC)]
- "TARGET_LWP"
- "slwpcb\t%0"
- [(set_attr "type" "lwp")
- (set_attr "mode" "HI")])
+ (set_attr "mode" "<MODE>")
+ (set_attr "length" "5")])
-(define_insn "lwp_slwpcbsi1"
- [(unspec [(match_operand:SI 0 "register_operand" "r")]
- UNSPEC_SLWP_INTRINSIC)]
+(define_expand "lwp_slwpcb"
+ [(set (match_operand 0 "register_operand" "=r")
+ (unspec_volatile [(const_int 0)] UNSPECV_SLWP_INTRINSIC))]
"TARGET_LWP"
- "slwpcb\t%0"
- [(set_attr "type" "lwp")
- (set_attr "mode" "SI")])
-
-(define_insn "lwp_slwpcbdi1"
- [(unspec [(match_operand:DI 0 "register_operand" "r")]
- UNSPEC_SLWP_INTRINSIC)]
+ {
+ if (TARGET_64BIT)
+ emit_insn (gen_lwp_slwpcbdi (operands[0]));
+ else
+ emit_insn (gen_lwp_slwpcbsi (operands[0]));
+ DONE;
+ })
+
+(define_insn "lwp_slwpcb<mode>"
+ [(set (match_operand:P 0 "register_operand" "=r")
+ (unspec_volatile:P [(const_int 0)] UNSPECV_SLWP_INTRINSIC))]
"TARGET_LWP"
"slwpcb\t%0"
[(set_attr "type" "lwp")
- (set_attr "mode" "DI")])
-
-(define_insn "lwp_lwpvalhi3"
- [(unspec_volatile [(match_operand:HI 0 "register_operand" "r")
- (match_operand:SI 1 "nonimmediate_operand" "rm")
- (match_operand:HI 2 "const_int_operand" "")]
- UNSPECV_LWPVAL_INTRINSIC)]
- "TARGET_LWP"
- "lwpval\t{%2, %1, %0|%0, %1, %2}"
- [(set_attr "type" "lwp")
- (set_attr "mode" "HI")])
+ (set_attr "mode" "<MODE>")
+ (set_attr "length" "5")])
-(define_insn "lwp_lwpvalsi3"
- [(unspec_volatile [(match_operand:SI 0 "register_operand" "r")
- (match_operand:SI 1 "nonimmediate_operand" "rm")
- (match_operand:SI 2 "const_int_operand" "")]
+(define_expand "lwp_lwpval<mode>3"
+ [(unspec_volatile [(match_operand:SWI48 1 "register_operand" "r")
+ (match_operand:SI 2 "nonimmediate_operand" "rm")
+ (match_operand:SI 3 "const_int_operand" "i")]
UNSPECV_LWPVAL_INTRINSIC)]
"TARGET_LWP"
- "lwpval\t{%2, %1, %0|%0, %1, %2}"
- [(set_attr "type" "lwp")
- (set_attr "mode" "SI")])
+ "/* Avoid unused variable warning. */
+ (void) operand0;")
-(define_insn "lwp_lwpvaldi3"
- [(unspec_volatile [(match_operand:DI 0 "register_operand" "r")
- (match_operand:SI 1 "nonimmediate_operand" "rm")
- (match_operand:SI 2 "const_int_operand" "")]
+(define_insn "*lwp_lwpval<mode>3_1"
+ [(unspec_volatile [(match_operand:SWI48 0 "register_operand" "r")
+ (match_operand:SI 1 "nonimmediate_operand" "rm")
+ (match_operand:SI 2 "const_int_operand" "i")]
UNSPECV_LWPVAL_INTRINSIC)]
"TARGET_LWP"
"lwpval\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "type" "lwp")
- (set_attr "mode" "DI")])
-
-(define_insn "lwp_lwpinshi3"
- [(unspec_volatile [(match_operand:HI 0 "register_operand" "r")
- (match_operand:SI 1 "nonimmediate_operand" "rm")
- (match_operand:HI 2 "const_int_operand" "")]
- UNSPECV_LWPINS_INTRINSIC)]
- "TARGET_LWP"
- "lwpins\t{%2, %1, %0|%0, %1, %2}"
- [(set_attr "type" "lwp")
- (set_attr "mode" "HI")])
+ (set_attr "mode" "<MODE>")
+ (set (attr "length")
+ (symbol_ref "ix86_attr_length_address_default (insn) + 9"))])
-(define_insn "lwp_lwpinssi3"
- [(unspec_volatile [(match_operand:SI 0 "register_operand" "r")
- (match_operand:SI 1 "nonimmediate_operand" "rm")
- (match_operand:SI 2 "const_int_operand" "")]
- UNSPECV_LWPINS_INTRINSIC)]
+(define_expand "lwp_lwpins<mode>3"
+ [(set (reg:CCC FLAGS_REG)
+ (unspec_volatile:CCC [(match_operand:SWI48 1 "register_operand" "r")
+ (match_operand:SI 2 "nonimmediate_operand" "rm")
+ (match_operand:SI 3 "const_int_operand" "i")]
+ UNSPECV_LWPINS_INTRINSIC))
+ (set (match_operand:QI 0 "nonimmediate_operand" "=qm")
+ (eq:QI (reg:CCC FLAGS_REG) (const_int 0)))]
"TARGET_LWP"
- "lwpins\t{%2, %1, %0|%0, %1, %2}"
- [(set_attr "type" "lwp")
- (set_attr "mode" "SI")])
+ "")
-(define_insn "lwp_lwpinsdi3"
- [(unspec_volatile [(match_operand:DI 0 "register_operand" "r")
- (match_operand:SI 1 "nonimmediate_operand" "rm")
- (match_operand:SI 2 "const_int_operand" "")]
- UNSPECV_LWPINS_INTRINSIC)]
+(define_insn "*lwp_lwpins<mode>3_1"
+ [(set (reg:CCC FLAGS_REG)
+ (unspec_volatile:CCC [(match_operand:SWI48 0 "register_operand" "r")
+ (match_operand:SI 1 "nonimmediate_operand" "rm")
+ (match_operand:SI 2 "const_int_operand" "i")]
+ UNSPECV_LWPINS_INTRINSIC))]
"TARGET_LWP"
"lwpins\t{%2, %1, %0|%0, %1, %2}"
[(set_attr "type" "lwp")
- (set_attr "mode" "DI")])
+ (set_attr "mode" "<MODE>")
+ (set (attr "length")
+ (symbol_ref "ix86_attr_length_address_default (insn) + 9"))])
(include "mmx.md")
(include "sse.md")
diff --git a/gcc/config/i386/lwpintrin.h b/gcc/config/i386/lwpintrin.h
index e5137ec24f4..954b039e542 100644
--- a/gcc/config/i386/lwpintrin.h
+++ b/gcc/config/i386/lwpintrin.h
@@ -33,77 +33,68 @@
#else
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__llwpcb16 (void *pcbAddress)
+__llwpcb (void *pcbAddress)
{
- __builtin_ia32_llwpcb16 (pcbAddress);
-}
-
-extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__llwpcb32 (void *pcbAddress)
-{
- __builtin_ia32_llwpcb32 (pcbAddress);
-}
-
-extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__llwpcb64 (void *pcbAddress)
-{
- __builtin_ia32_llwpcb64 (pcbAddress);
-}
-
-extern __inline void * __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__slwpcb16 (void)
-{
- return __builtin_ia32_slwpcb16 ();
-}
-
-extern __inline void * __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__slwpcb32 (void)
-{
- return __builtin_ia32_slwpcb32 ();
+ __builtin_ia32_llwpcb (pcbAddress);
}
extern __inline void * __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__slwpcb64 (void)
+__slwpcb (void)
{
- return __builtin_ia32_slwpcb64 ();
+ return __builtin_ia32_slwpcb ();
}
-extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__lwpval16 (unsigned short data2, unsigned int data1, unsigned short flags)
-{
- __builtin_ia32_lwpval16 (data2, data1, flags);
-}
-/*
+#ifdef __OPTIMIZE__
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__lwpval32 (unsigned int data2, unsigned int data1, unsigned int flags)
{
__builtin_ia32_lwpval32 (data2, data1, flags);
}
+#ifdef __x86_64__
extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__lwpval64 (unsigned __int64 data2, unsigned int data1, unsigned int flags)
+__lwpval64 (unsigned long long data2, unsigned int data1, unsigned int flags)
{
__builtin_ia32_lwpval64 (data2, data1, flags);
}
+#endif
+#else
+#define __lwpval32(D2, D1, F) \
+ (__builtin_ia32_lwpval32 ((unsigned int) (D2), (unsigned int) (D1), \
+ (unsigned int) (F)))
+#ifdef __x86_64__
+#define __lwpval64(D2, D1, F) \
+ (__builtin_ia32_lwpval64 ((unsigned long long) (D2), (unsigned int) (D1), \
+ (unsigned int) (F)))
+#endif
+#endif
-extern __inline unsigned char __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__lwpins16 (unsigned short data2, unsigned int data1, unsigned short flags)
-{
- return __builtin_ia32_lwpins16 (data2, data1, flags);
-}
+#ifdef __OPTIMIZE__
extern __inline unsigned char __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__lwpins32 (unsigned int data2, unsigned int data1, unsigned int flags)
{
return __builtin_ia32_lwpins32 (data2, data1, flags);
}
+#ifdef __x86_64__
extern __inline unsigned char __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-__lwpins64 (unsigned __int64 data2, unsigned int data1, unsigned int flags)
+__lwpins64 (unsigned long long data2, unsigned int data1, unsigned int flags)
{
return __builtin_ia32_lwpins64 (data2, data1, flags);
}
-*/
+#endif
+#else
+#define __lwpins32(D2, D1, F) \
+ (__builtin_ia32_lwpins32 ((unsigned int) (D2), (unsigned int) (D1), \
+ (unsigned int) (F)))
+#ifdef __x86_64__
+#define __lwpins64(D2, D1, F) \
+ (__builtin_ia32_lwpins64 ((unsigned long long) (D2), (unsigned int) (D1), \
+ (unsigned int) (F)))
+#endif
+#endif
+
#endif /* __LWP__ */
#endif /* _LWPINTRIN_H_INCLUDED */
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 24d66357be8..9bbea8031a5 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -19,12 +19,12 @@
;; <http://www.gnu.org/licenses/>.
-;; 16 byte integral modes handled by SSE, minus TImode, which gets
-;; special-cased for TARGET_64BIT.
+;; 16 byte integral modes handled by SSE
(define_mode_iterator SSEMODEI [V16QI V8HI V4SI V2DI])
;; All 16-byte vector modes handled by SSE
(define_mode_iterator SSEMODE [V16QI V8HI V4SI V2DI V4SF V2DF])
+(define_mode_iterator SSEMODE16 [V16QI V8HI V4SI V2DI V1TI V4SF V2DF])
;; 32 byte integral vector modes handled by AVX
(define_mode_iterator AVX256MODEI [V32QI V16HI V8SI V4DI])
@@ -39,7 +39,10 @@
(define_mode_iterator AVXMODEDI [V4DI V2DI])
;; All vector modes handled by AVX
-(define_mode_iterator AVXMODE [V16QI V8HI V4SI V2DI V4SF V2DF V32QI V16HI V8SI V4DI V8SF V4DF])
+(define_mode_iterator AVXMODE
+ [V16QI V8HI V4SI V2DI V4SF V2DF V32QI V16HI V8SI V4DI V8SF V4DF])
+(define_mode_iterator AVXMODE16
+ [V16QI V8HI V4SI V2DI V1TI V4SF V2DF V32QI V16HI V8SI V4DI V8SF V4DF])
;; Mix-n-match
(define_mode_iterator SSEMODE12 [V16QI V8HI])
@@ -121,9 +124,9 @@
;; Mapping for AVX
(define_mode_attr avxvecmode
- [(V16QI "TI") (V8HI "TI") (V4SI "TI") (V2DI "TI") (V4SF "V4SF")
- (V2DF "V2DF") (V32QI "OI") (V16HI "OI") (V8SI "OI") (V4DI "OI")
- (V8SF "V8SF") (V4DF "V4DF")])
+ [(V16QI "TI") (V8HI "TI") (V4SI "TI") (V2DI "TI") (V1TI "TI")
+ (V4SF "V4SF") (V8SF "V8SF") (V2DF "V2DF") (V4DF "V4DF")
+ (V32QI "OI") (V16HI "OI") (V8SI "OI") (V4DI "OI")])
(define_mode_attr avxvecpsmode
[(V16QI "V4SF") (V8HI "V4SF") (V4SI "V4SF") (V2DI "V4SF")
(V32QI "V8SF") (V16HI "V8SF") (V8SI "V8SF") (V4DI "V8SF")])
@@ -172,8 +175,8 @@
})
(define_insn "*avx_mov<mode>_internal"
- [(set (match_operand:AVXMODE 0 "nonimmediate_operand" "=x,x ,m")
- (match_operand:AVXMODE 1 "nonimmediate_or_sse_const_operand" "C ,xm,x"))]
+ [(set (match_operand:AVXMODE16 0 "nonimmediate_operand" "=x,x ,m")
+ (match_operand:AVXMODE16 1 "nonimmediate_or_sse_const_operand" "C ,xm,x"))]
"TARGET_AVX
&& (register_operand (operands[0], <MODE>mode)
|| register_operand (operands[1], <MODE>mode))"
@@ -207,8 +210,8 @@
;; This is essential for maintaining stable calling conventions.
(define_expand "mov<mode>"
- [(set (match_operand:SSEMODE 0 "nonimmediate_operand" "")
- (match_operand:SSEMODE 1 "nonimmediate_operand" ""))]
+ [(set (match_operand:SSEMODE16 0 "nonimmediate_operand" "")
+ (match_operand:SSEMODE16 1 "nonimmediate_operand" ""))]
"TARGET_SSE"
{
ix86_expand_vector_move (<MODE>mode, operands);
@@ -216,8 +219,8 @@
})
(define_insn "*mov<mode>_internal"
- [(set (match_operand:SSEMODE 0 "nonimmediate_operand" "=x,x ,m")
- (match_operand:SSEMODE 1 "nonimmediate_or_sse_const_operand" "C ,xm,x"))]
+ [(set (match_operand:SSEMODE16 0 "nonimmediate_operand" "=x,x ,m")
+ (match_operand:SSEMODE16 1 "nonimmediate_or_sse_const_operand" "C ,xm,x"))]
"TARGET_SSE
&& (register_operand (operands[0], <MODE>mode)
|| register_operand (operands[1], <MODE>mode))"
@@ -326,7 +329,7 @@
})
(define_expand "push<mode>1"
- [(match_operand:SSEMODE 0 "register_operand" "")]
+ [(match_operand:SSEMODE16 0 "register_operand" "")]
"TARGET_SSE"
{
ix86_expand_push (<MODE>mode, operands[0]);
@@ -343,8 +346,8 @@
})
(define_expand "movmisalign<mode>"
- [(set (match_operand:SSEMODE 0 "nonimmediate_operand" "")
- (match_operand:SSEMODE 1 "nonimmediate_operand" ""))]
+ [(set (match_operand:SSEMODE16 0 "nonimmediate_operand" "")
+ (match_operand:SSEMODE16 1 "nonimmediate_operand" ""))]
"TARGET_SSE"
{
ix86_expand_vector_move_misalign (<MODE>mode, operands);
@@ -5537,12 +5540,12 @@
/* Shift both input vectors down one element, so that elements 3
and 1 are now in the slots for elements 2 and 0. For K8, at
least, this is faster than using a shuffle. */
- emit_insn (gen_sse2_lshrti3 (gen_lowpart (TImode, t2),
- gen_lowpart (TImode, op1),
- thirtytwo));
- emit_insn (gen_sse2_lshrti3 (gen_lowpart (TImode, t3),
- gen_lowpart (TImode, op2),
- thirtytwo));
+ emit_insn (gen_sse2_lshrv1ti3 (gen_lowpart (V1TImode, t2),
+ gen_lowpart (V1TImode, op1),
+ thirtytwo));
+ emit_insn (gen_sse2_lshrv1ti3 (gen_lowpart (V1TImode, t3),
+ gen_lowpart (V1TImode, op2),
+ thirtytwo));
/* Multiply elements 3 and 1. */
emit_insn (gen_sse2_umulv2siv2di3 (gen_lowpart (V2DImode, t4),
t2, t3));
@@ -5837,12 +5840,12 @@
t2 = gen_reg_rtx (V4SImode);
t3 = gen_reg_rtx (V4SImode);
- emit_insn (gen_sse2_lshrti3 (gen_lowpart (TImode, t2),
- gen_lowpart (TImode, operands[1]),
- GEN_INT (32)));
- emit_insn (gen_sse2_lshrti3 (gen_lowpart (TImode, t3),
- gen_lowpart (TImode, operands[2]),
- GEN_INT (32)));
+ emit_insn (gen_sse2_lshrv1ti3 (gen_lowpart (V1TImode, t2),
+ gen_lowpart (V1TImode, operands[1]),
+ GEN_INT (32)));
+ emit_insn (gen_sse2_lshrv1ti3 (gen_lowpart (V1TImode, t3),
+ gen_lowpart (V1TImode, operands[2]),
+ GEN_INT (32)));
t4 = gen_reg_rtx (V2DImode);
emit_insn (gen_sse2_umulv2siv2di3 (t4, t2, t3));
@@ -5881,6 +5884,21 @@
(const_string "0")))
(set_attr "mode" "TI")])
+(define_insn "*avx_lshrv1ti3"
+ [(set (match_operand:V1TI 0 "register_operand" "=x")
+ (lshiftrt:V1TI
+ (match_operand:V1TI 1 "register_operand" "x")
+ (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
+ "TARGET_AVX"
+{
+ operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
+ return "vpsrldq\t{%2, %1, %0|%0, %1, %2}";
+}
+ [(set_attr "type" "sseishft")
+ (set_attr "prefix" "vex")
+ (set_attr "length_immediate" "1")
+ (set_attr "mode" "TI")])
+
(define_insn "*avx_lshr<mode>3"
[(set (match_operand:SSEMODE248 0 "register_operand" "=x")
(lshiftrt:SSEMODE248
@@ -5896,6 +5914,21 @@
(const_string "0")))
(set_attr "mode" "TI")])
+(define_insn "sse2_lshrv1ti3"
+ [(set (match_operand:V1TI 0 "register_operand" "=x")
+ (lshiftrt:V1TI
+ (match_operand:V1TI 1 "register_operand" "0")
+ (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
+ "TARGET_SSE2"
+{
+ operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
+ return "psrldq\t{%2, %0|%0, %2}";
+}
+ [(set_attr "type" "sseishft")
+ (set_attr "prefix_data16" "1")
+ (set_attr "length_immediate" "1")
+ (set_attr "mode" "TI")])
+
(define_insn "lshr<mode>3"
[(set (match_operand:SSEMODE248 0 "register_operand" "=x")
(lshiftrt:SSEMODE248
@@ -5911,6 +5944,20 @@
(const_string "0")))
(set_attr "mode" "TI")])
+(define_insn "*avx_ashlv1ti3"
+ [(set (match_operand:V1TI 0 "register_operand" "=x")
+ (ashift:V1TI (match_operand:V1TI 1 "register_operand" "x")
+ (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
+ "TARGET_AVX"
+{
+ operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
+ return "vpslldq\t{%2, %1, %0|%0, %1, %2}";
+}
+ [(set_attr "type" "sseishft")
+ (set_attr "prefix" "vex")
+ (set_attr "length_immediate" "1")
+ (set_attr "mode" "TI")])
+
(define_insn "*avx_ashl<mode>3"
[(set (match_operand:SSEMODE248 0 "register_operand" "=x")
(ashift:SSEMODE248
@@ -5926,6 +5973,20 @@
(const_string "0")))
(set_attr "mode" "TI")])
+(define_insn "sse2_ashlv1ti3"
+ [(set (match_operand:V1TI 0 "register_operand" "=x")
+ (ashift:V1TI (match_operand:V1TI 1 "register_operand" "0")
+ (match_operand:SI 2 "const_0_to_255_mul_8_operand" "n")))]
+ "TARGET_SSE2"
+{
+ operands[2] = GEN_INT (INTVAL (operands[2]) / 8);
+ return "pslldq\t{%2, %0|%0, %2}";
+}
+ [(set_attr "type" "sseishft")
+ (set_attr "prefix_data16" "1")
+ (set_attr "length_immediate" "1")
+ (set_attr "mode" "TI")])
+
(define_insn "ashl<mode>3"
[(set (match_operand:SSEMODE248 0 "register_operand" "=x")
(ashift:SSEMODE248
@@ -5943,22 +6004,24 @@
(define_expand "vec_shl_<mode>"
[(set (match_operand:SSEMODEI 0 "register_operand" "")
- (ashift:TI (match_operand:SSEMODEI 1 "register_operand" "")
- (match_operand:SI 2 "const_0_to_255_mul_8_operand" "")))]
+ (ashift:V1TI
+ (match_operand:SSEMODEI 1 "register_operand" "")
+ (match_operand:SI 2 "const_0_to_255_mul_8_operand" "")))]
"TARGET_SSE2"
{
- operands[0] = gen_lowpart (TImode, operands[0]);
- operands[1] = gen_lowpart (TImode, operands[1]);
+ operands[0] = gen_lowpart (V1TImode, operands[0]);
+ operands[1] = gen_lowpart (V1TImode, operands[1]);
})
(define_expand "vec_shr_<mode>"
[(set (match_operand:SSEMODEI 0 "register_operand" "")
- (lshiftrt:TI (match_operand:SSEMODEI 1 "register_operand" "")
- (match_operand:SI 2 "const_0_to_255_mul_8_operand" "")))]
+ (lshiftrt:V1TI
+ (match_operand:SSEMODEI 1 "register_operand" "")
+ (match_operand:SI 2 "const_0_to_255_mul_8_operand" "")))]
"TARGET_SSE2"
{
- operands[0] = gen_lowpart (TImode, operands[0]);
- operands[1] = gen_lowpart (TImode, operands[1]);
+ operands[0] = gen_lowpart (V1TImode, operands[0]);
+ operands[1] = gen_lowpart (V1TImode, operands[1]);
})
(define_insn "*avx_<code><mode>3"
diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md
index 7167a71932a..0df85c73037 100644
--- a/gcc/config/i386/sync.md
+++ b/gcc/config/i386/sync.md
@@ -18,13 +18,9 @@
;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
-(define_mode_iterator IMODE [QI HI SI (DI "TARGET_64BIT")])
-(define_mode_attr modesuffix [(QI "b") (HI "w") (SI "l") (DI "q")])
-(define_mode_attr modeconstraint [(QI "q") (HI "r") (SI "r") (DI "r")])
-(define_mode_attr immconstraint [(QI "i") (HI "i") (SI "i") (DI "e")])
-
-(define_mode_iterator CASMODE [QI HI SI (DI "TARGET_64BIT || TARGET_CMPXCHG8B")
- (TI "TARGET_64BIT && TARGET_CMPXCHG16B")])
+(define_mode_iterator CASMODE
+ [QI HI SI (DI "TARGET_64BIT || TARGET_CMPXCHG8B")
+ (TI "TARGET_64BIT && TARGET_CMPXCHG16B")])
(define_mode_iterator DCASMODE
[(DI "!TARGET_64BIT && TARGET_CMPXCHG8B && !flag_pic")
(TI "TARGET_64BIT && TARGET_CMPXCHG16B")])
@@ -105,21 +101,21 @@
})
(define_insn "*sync_compare_and_swap<mode>"
- [(set (match_operand:IMODE 0 "register_operand" "=a")
- (match_operand:IMODE 1 "memory_operand" "+m"))
+ [(set (match_operand:SWI 0 "register_operand" "=a")
+ (match_operand:SWI 1 "memory_operand" "+m"))
(set (match_dup 1)
- (unspec_volatile:IMODE
+ (unspec_volatile:SWI
[(match_dup 1)
- (match_operand:IMODE 2 "register_operand" "a")
- (match_operand:IMODE 3 "register_operand" "<modeconstraint>")]
+ (match_operand:SWI 2 "register_operand" "a")
+ (match_operand:SWI 3 "register_operand" "<r>")]
UNSPECV_CMPXCHG))
(set (reg:CCZ FLAGS_REG)
(compare:CCZ
- (unspec_volatile:IMODE
+ (unspec_volatile:SWI
[(match_dup 1) (match_dup 2) (match_dup 3)] UNSPECV_CMPXCHG)
(match_dup 2)))]
"TARGET_CMPXCHG"
- "lock{%;| }cmpxchg{<modesuffix>}\t{%3, %1|%1, %3}")
+ "lock{%;| }cmpxchg{<imodesuffix>}\t{%3, %1|%1, %3}")
(define_insn "sync_double_compare_and_swap<mode>"
[(set (match_operand:DCASMODE 0 "register_operand" "=A")
@@ -169,31 +165,31 @@
"xchg{l}\t%%ebx, %3\;lock{%;| }cmpxchg8b\t%1\;xchg{l}\t%%ebx, %3")
(define_insn "sync_old_add<mode>"
- [(set (match_operand:IMODE 0 "register_operand" "=<modeconstraint>")
- (unspec_volatile:IMODE
- [(match_operand:IMODE 1 "memory_operand" "+m")] UNSPECV_XCHG))
+ [(set (match_operand:SWI 0 "register_operand" "=<r>")
+ (unspec_volatile:SWI
+ [(match_operand:SWI 1 "memory_operand" "+m")] UNSPECV_XCHG))
(set (match_dup 1)
- (plus:IMODE (match_dup 1)
- (match_operand:IMODE 2 "register_operand" "0")))
+ (plus:SWI (match_dup 1)
+ (match_operand:SWI 2 "register_operand" "0")))
(clobber (reg:CC FLAGS_REG))]
"TARGET_XADD"
- "lock{%;| }xadd{<modesuffix>}\t{%0, %1|%1, %0}")
+ "lock{%;| }xadd{<imodesuffix>}\t{%0, %1|%1, %0}")
;; Recall that xchg implicitly sets LOCK#, so adding it again wastes space.
(define_insn "sync_lock_test_and_set<mode>"
- [(set (match_operand:IMODE 0 "register_operand" "=<modeconstraint>")
- (unspec_volatile:IMODE
- [(match_operand:IMODE 1 "memory_operand" "+m")] UNSPECV_XCHG))
+ [(set (match_operand:SWI 0 "register_operand" "=<r>")
+ (unspec_volatile:SWI
+ [(match_operand:SWI 1 "memory_operand" "+m")] UNSPECV_XCHG))
(set (match_dup 1)
- (match_operand:IMODE 2 "register_operand" "0"))]
+ (match_operand:SWI 2 "register_operand" "0"))]
""
- "xchg{<modesuffix>}\t{%1, %0|%0, %1}")
+ "xchg{<imodesuffix>}\t{%1, %0|%0, %1}")
(define_insn "sync_add<mode>"
- [(set (match_operand:IMODE 0 "memory_operand" "+m")
- (unspec_volatile:IMODE
- [(plus:IMODE (match_dup 0)
- (match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
+ [(set (match_operand:SWI 0 "memory_operand" "+m")
+ (unspec_volatile:SWI
+ [(plus:SWI (match_dup 0)
+ (match_operand:SWI 1 "nonmemory_operand" "<r><i>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""
@@ -201,19 +197,19 @@
if (TARGET_USE_INCDEC)
{
if (operands[1] == const1_rtx)
- return "lock{%;| }inc{<modesuffix>}\t%0";
+ return "lock{%;| }inc{<imodesuffix>}\t%0";
if (operands[1] == constm1_rtx)
- return "lock{%;| }dec{<modesuffix>}\t%0";
+ return "lock{%;| }dec{<imodesuffix>}\t%0";
}
- return "lock{%;| }add{<modesuffix>}\t{%1, %0|%0, %1}";
+ return "lock{%;| }add{<imodesuffix>}\t{%1, %0|%0, %1}";
})
(define_insn "sync_sub<mode>"
- [(set (match_operand:IMODE 0 "memory_operand" "+m")
- (unspec_volatile:IMODE
- [(minus:IMODE (match_dup 0)
- (match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
+ [(set (match_operand:SWI 0 "memory_operand" "+m")
+ (unspec_volatile:SWI
+ [(minus:SWI (match_dup 0)
+ (match_operand:SWI 1 "nonmemory_operand" "<r><i>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""
@@ -221,40 +217,20 @@
if (TARGET_USE_INCDEC)
{
if (operands[1] == const1_rtx)
- return "lock{%;| }dec{<modesuffix>}\t%0";
+ return "lock{%;| }dec{<imodesuffix>}\t%0";
if (operands[1] == constm1_rtx)
- return "lock{%;| }inc{<modesuffix>}\t%0";
+ return "lock{%;| }inc{<imodesuffix>}\t%0";
}
- return "lock{%;| }sub{<modesuffix>}\t{%1, %0|%0, %1}";
+ return "lock{%;| }sub{<imodesuffix>}\t{%1, %0|%0, %1}";
})
-(define_insn "sync_ior<mode>"
- [(set (match_operand:IMODE 0 "memory_operand" "+m")
- (unspec_volatile:IMODE
- [(ior:IMODE (match_dup 0)
- (match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
- UNSPECV_LOCK))
- (clobber (reg:CC FLAGS_REG))]
- ""
- "lock{%;| }or{<modesuffix>}\t{%1, %0|%0, %1}")
-
-(define_insn "sync_and<mode>"
- [(set (match_operand:IMODE 0 "memory_operand" "+m")
- (unspec_volatile:IMODE
- [(and:IMODE (match_dup 0)
- (match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
- UNSPECV_LOCK))
- (clobber (reg:CC FLAGS_REG))]
- ""
- "lock{%;| }and{<modesuffix>}\t{%1, %0|%0, %1}")
-
-(define_insn "sync_xor<mode>"
- [(set (match_operand:IMODE 0 "memory_operand" "+m")
- (unspec_volatile:IMODE
- [(xor:IMODE (match_dup 0)
- (match_operand:IMODE 1 "nonmemory_operand" "<modeconstraint><immconstraint>"))]
+(define_insn "sync_<code><mode>"
+ [(set (match_operand:SWI 0 "memory_operand" "+m")
+ (unspec_volatile:SWI
+ [(any_logic:SWI (match_dup 0)
+ (match_operand:SWI 1 "nonmemory_operand" "<r><i>"))]
UNSPECV_LOCK))
(clobber (reg:CC FLAGS_REG))]
""
- "lock{%;| }xor{<modesuffix>}\t{%1, %0|%0, %1}")
+ "lock{%;| }<logicprefix>{<imodesuffix>}\t{%1, %0|%0, %1}")
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c
index 94354528ebf..da5a360665a 100644
--- a/gcc/config/rs6000/rs6000-c.c
+++ b/gcc/config/rs6000/rs6000-c.c
@@ -3365,7 +3365,7 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
stmt = build_unary_op (loc, ADDR_EXPR, stmt, 0);
stmt = convert (innerptrtype, stmt);
stmt = build_binary_op (loc, PLUS_EXPR, stmt, arg2, 1);
- stmt = build_indirect_ref (loc, stmt, NULL);
+ stmt = build_indirect_ref (loc, stmt, RO_NULL);
return stmt;
}
@@ -3444,7 +3444,7 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
stmt = build_unary_op (loc, ADDR_EXPR, stmt, 0);
stmt = convert (innerptrtype, stmt);
stmt = build_binary_op (loc, PLUS_EXPR, stmt, arg2, 1);
- stmt = build_indirect_ref (loc, stmt, NULL);
+ stmt = build_indirect_ref (loc, stmt, RO_NULL);
stmt = build2 (MODIFY_EXPR, TREE_TYPE (stmt), stmt,
convert (TREE_TYPE (stmt), arg0));
stmt = build2 (COMPOUND_EXPR, arg1_type, stmt, decl);
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 5e959db7ebc..f30cb38d246 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -12552,7 +12552,8 @@
"")
(define_insn "probe_stack"
- [(unspec [(match_operand 0 "memory_operand" "=m")] UNSPEC_PROBE_STACK)]
+ [(set (match_operand 0 "memory_operand" "=m")
+ (unspec [(const_int 0)] UNSPEC_PROBE_STACK))]
""
"{st%U0%X0|stw%U0%X0} 0,%0"
[(set_attr "type" "store")
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e51641b51a2..1b7411b835e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,81 @@
+2009-12-18 Shujing Zhao <pearly.zhao@oracle.com>
+
+ PR c++/31665
+ * decl.c (duplicate_decls, grokdeclarator): Put the diagnostics in
+ full sentences for easy translation and wrapped into G_().
+ * typeck.c (build_x_unary_op): Likewise.
+
+2009-12-17 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * call.c (build_over_call, build_java_interface_fn_ref): Update
+ cp_build_indirect_ref calls.
+ * typeck2.c (build_m_component_ref): Likewise.
+
+2009-12-17 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * typeck.c (build_indirect_ref): Update the argument.
+ (build_x_indirect_ref): Likewise.
+ (cp_build_indirect_ref): Update the argument and emit the diagnostics
+ for easy translation.
+ (build_class_member_access_expr, build_array_ref,
+ get_member_function_from_ptrfunc): Update calls.
+ * cp-tree.h (build_x_indirect_ref, cp_build_indirect_ref): Update
+ prototypes.
+ * call.c (build_new_op, convert_like_real, build_x_va_arg,
+ build_over_call): Update calls.
+ * class.c (build_base_path, build_simple_base_path, build_vfn_ref):
+ Likewise.
+ * decl.c (start_preparsed_function): Likewise.
+ * except.c (expand_start_catch_block, build_throw): Likewise.
+ * init.c (emit_mem_initializers, expand_virtual_init,
+ expand_virtual_init, build_new_1, build_vec_init, build_delete,
+ build_vec_delete): Likewise.
+ * parser.c (cp_parser_unary_expression): Likewise.
+ * pt.c (tsubst_copy_and_build): Likewise.
+ * rtti.c (build_headof, get_tinfo_decl_dynamic, get_typeid): Likewise.
+ * semantics.c (finish_non_static_data_member, thisify_lambda_field):
+ Likewise.
+ * tree.c (build_dummy_object, stabilize_expr): Likewise.
+ * typeck2.c (build_x_arrow): Likewise.
+
+2009-12-16 Jason Merrill <jason@redhat.com>
+
+ PR c++/42387
+ * decl.c (compute_array_index_type): Mark a VLA as dependent.
+
+2009-12-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/42358
+ * pt.c (iterative_hash_template_arg): Completely ignore
+ ARGUMENT_PACK_SELECT.
+
+2009-12-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/41183
+ * cp-tree.h (current_class_ptr): Give NULL even when cfun
+ has NULL cfun->language.
+
+2009-12-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/42364
+ * pt.c (function_parameter_expanded_from_pack_p): Don't require
+ a pack to have a name.
+ (tsubst_decl): Do typedef magic after applying attributes.
+
+2009-12-15 Paolo Bonzini <bonzini@gnu.org>
+ Shujing Zhao <pearly.zhao@oracle.com>
+
+ * Makefile.in (cp/pt.o): Depend on intl.h
+ * call.c (print_z_candidates): Make loop more compact,
+ choose head string depending on number of candidates,
+ extract creation of spaces string to intl.c.
+ * pt.c (print_overloaded_functions): Replace with...
+ (print_candidates_1): ... this rewrite.
+ (print_candidates): Rewrite to call print_candidates_1.
+ (most_specialized_class): Make loop more compact,
+ choose head string depending on number of candidates,
+ and size indents depending on translations.
+
2009-12-11 Jason Merrill <jason@redhat.com>
PR c++/42219
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index 913993ac36f..9b134edee61 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -292,7 +292,7 @@ cp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(RTL_H) $(FLAGS_H) $(EXPR_H) \
toplev.h except.h $(TM_P_H)
cp/pt.o: cp/pt.c $(CXX_TREE_H) $(TM_H) cp/decl.h cp/cp-objcp-common.h \
toplev.h $(RTL_H) except.h $(TREE_INLINE_H) pointer-set.h gt-cp-pt.h \
- vecprim.h
+ vecprim.h intl.h
cp/error.o: cp/error.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) \
$(FLAGS_H) $(REAL_H) $(LANGHOOKS_DEF_H) $(CXX_PRETTY_PRINT_H)
cp/repo.o: cp/repo.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) \
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index a6041f5596f..0ed338301c5 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -2730,6 +2730,7 @@ print_z_candidates (struct z_candidate *candidates)
const char *str;
struct z_candidate *cand1;
struct z_candidate **cand2;
+ char *spaces;
if (!candidates)
return;
@@ -2770,25 +2771,14 @@ print_z_candidates (struct z_candidate *candidates)
}
}
- str = _("candidates are:");
- print_z_candidate (str, candidates);
- if (candidates->next)
+ str = candidates->next ? _("candidates are:") : _("candidate is:");
+ spaces = NULL;
+ for (; candidates; candidates = candidates->next)
{
- /* Indent successive candidates by the width of the translation
- of the above string. */
- size_t len = gcc_gettext_width (str) + 1;
- char *spaces = (char *) alloca (len);
- memset (spaces, ' ', len-1);
- spaces[len - 1] = '\0';
-
- candidates = candidates->next;
- do
- {
- print_z_candidate (spaces, candidates);
- candidates = candidates->next;
- }
- while (candidates);
+ print_z_candidate (spaces ? spaces : str, candidates);
+ spaces = spaces ? spaces : get_spaces (str);
}
+ free (spaces);
}
/* USER_SEQ is a user-defined conversion sequence, beginning with a
@@ -4474,7 +4464,7 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
return cp_build_modify_expr (arg1, code2, arg2, complain);
case INDIRECT_REF:
- return cp_build_indirect_ref (arg1, "unary *", complain);
+ return cp_build_indirect_ref (arg1, RO_UNARY_STAR, complain);
case TRUTH_ANDIF_EXPR:
case TRUTH_ORIF_EXPR:
@@ -4519,7 +4509,7 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
return build_array_ref (input_location, arg1, arg2);
case MEMBER_REF:
- return build_m_component_ref (cp_build_indirect_ref (arg1, NULL,
+ return build_m_component_ref (cp_build_indirect_ref (arg1, RO_NULL,
complain),
arg2);
@@ -5034,7 +5024,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
expr = convert_to_base (expr, build_pointer_type (totype),
!c_cast_p, /*nonnull=*/true);
- expr = cp_build_indirect_ref (expr, "implicit conversion", complain);
+ expr = cp_build_indirect_ref (expr, RO_IMPLICIT_CONVERSION, complain);
return expr;
}
@@ -5252,7 +5242,7 @@ build_x_va_arg (tree expr, tree type)
error ("cannot receive objects of non-trivially-copyable type %q#T "
"through %<...%>; ", type);
expr = convert (build_pointer_type (type1), null_node);
- expr = cp_build_indirect_ref (expr, NULL, tf_warning_or_error);
+ expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
return expr;
}
@@ -5749,7 +5739,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
if (targ)
arg = targ;
else
- arg = cp_build_indirect_ref (arg, 0, complain);
+ arg = cp_build_indirect_ref (arg, RO_NULL, complain);
if (TREE_CODE (arg) == TARGET_EXPR
&& TARGET_EXPR_LIST_INIT_P (arg))
@@ -5784,7 +5774,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
|| (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
&& !move_fn_p (fn)))
{
- tree to = stabilize_reference (cp_build_indirect_ref (fa, 0,
+ tree to = stabilize_reference (cp_build_indirect_ref (fa, RO_NULL,
complain));
val = build2 (INIT_EXPR, DECL_CONTEXT (fn), to, arg);
@@ -5796,14 +5786,14 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
&& TYPE_HAS_TRIVIAL_ASSIGN_REF (DECL_CONTEXT (fn)))
{
tree to = stabilize_reference
- (cp_build_indirect_ref (argarray[0], 0, complain));
+ (cp_build_indirect_ref (argarray[0], RO_NULL, complain));
tree type = TREE_TYPE (to);
tree as_base = CLASSTYPE_AS_BASE (type);
tree arg = argarray[1];
if (tree_int_cst_equal (TYPE_SIZE (type), TYPE_SIZE (as_base)))
{
- arg = cp_build_indirect_ref (arg, 0, complain);
+ arg = cp_build_indirect_ref (arg, RO_NULL, complain);
val = build2 (MODIFY_EXPR, TREE_TYPE (to), to, arg);
}
else
@@ -5836,7 +5826,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
t = convert (TREE_TYPE (arg0), t);
if (test)
t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
- val = cp_build_indirect_ref (t, 0, complain);
+ val = cp_build_indirect_ref (t, RO_NULL, complain);
TREE_NO_WARNING (val) = 1;
}
@@ -5944,7 +5934,7 @@ build_java_interface_fn_ref (tree fn, tree instance)
/* Look up the pointer to the runtime java.lang.Class object for `instance'.
This is the first entry in the vtable. */
- klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, 0,
+ klass_ref = build_vtbl_ref (cp_build_indirect_ref (instance, RO_NULL,
tf_warning_or_error),
integer_zero_node);
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index fff438033d3..16d566682a6 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -297,7 +297,7 @@ build_base_path (enum tree_code code,
{
expr = build_nop (build_pointer_type (target_type), expr);
if (!want_pointer)
- expr = build_indirect_ref (EXPR_LOCATION (expr), expr, NULL);
+ expr = build_indirect_ref (EXPR_LOCATION (expr), expr, RO_NULL);
return expr;
}
@@ -343,7 +343,7 @@ build_base_path (enum tree_code code,
interesting to the optimizers anyway. */
&& !has_empty)
{
- expr = cp_build_indirect_ref (expr, NULL, tf_warning_or_error);
+ expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
expr = build_simple_base_path (expr, binfo);
if (want_pointer)
expr = build_address (expr);
@@ -368,11 +368,11 @@ build_base_path (enum tree_code code,
t = TREE_TYPE (TYPE_VFIELD (current_class_type));
t = build_pointer_type (t);
v_offset = convert (t, current_vtt_parm);
- v_offset = cp_build_indirect_ref (v_offset, NULL,
+ v_offset = cp_build_indirect_ref (v_offset, RO_NULL,
tf_warning_or_error);
}
else
- v_offset = build_vfield_ref (cp_build_indirect_ref (expr, NULL,
+ v_offset = build_vfield_ref (cp_build_indirect_ref (expr, RO_NULL,
tf_warning_or_error),
TREE_TYPE (TREE_TYPE (expr)));
@@ -381,7 +381,7 @@ build_base_path (enum tree_code code,
v_offset = build1 (NOP_EXPR,
build_pointer_type (ptrdiff_type_node),
v_offset);
- v_offset = cp_build_indirect_ref (v_offset, NULL, tf_warning_or_error);
+ v_offset = cp_build_indirect_ref (v_offset, RO_NULL, tf_warning_or_error);
TREE_CONSTANT (v_offset) = 1;
offset = convert_to_integer (ptrdiff_type_node,
@@ -424,7 +424,7 @@ build_base_path (enum tree_code code,
null_test = NULL;
if (!want_pointer)
- expr = cp_build_indirect_ref (expr, NULL, tf_warning_or_error);
+ expr = cp_build_indirect_ref (expr, RO_NULL, tf_warning_or_error);
out:
if (null_test)
@@ -458,7 +458,7 @@ build_simple_base_path (tree expr, tree binfo)
in the back end. */
temp = unary_complex_lvalue (ADDR_EXPR, expr);
if (temp)
- expr = cp_build_indirect_ref (temp, NULL, tf_warning_or_error);
+ expr = cp_build_indirect_ref (temp, RO_NULL, tf_warning_or_error);
return expr;
}
@@ -646,7 +646,7 @@ build_vfn_ref (tree instance_ptr, tree idx)
{
tree aref;
- aref = build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr, 0,
+ aref = build_vtbl_ref_1 (cp_build_indirect_ref (instance_ptr, RO_NULL,
tf_warning_or_error),
idx);
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index eb7f06d33bb..469dcecb184 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -1026,7 +1026,8 @@ struct GTY(()) language_function {
expression for `*this'. */
#define current_class_ptr \
- (cfun ? cp_function_chain->x_current_class_ptr : NULL_TREE)
+ (cfun && cp_function_chain \
+ ? cp_function_chain->x_current_class_ptr : NULL_TREE)
#define current_class_ref \
(cfun ? cp_function_chain->x_current_class_ref : NULL_TREE)
@@ -5296,9 +5297,9 @@ extern tree build_class_member_access_expr (tree, tree, tree, bool,
tsubst_flags_t);
extern tree finish_class_member_access_expr (tree, tree, bool,
tsubst_flags_t);
-extern tree build_x_indirect_ref (tree, const char *,
+extern tree build_x_indirect_ref (tree, ref_operator,
tsubst_flags_t);
-extern tree cp_build_indirect_ref (tree, const char *,
+extern tree cp_build_indirect_ref (tree, ref_operator,
tsubst_flags_t);
extern tree build_array_ref (location_t, tree, tree);
extern tree get_member_function_from_ptrfunc (tree *, tree);
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 5b37ef7e710..3c9649d2a27 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -1180,9 +1180,10 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
bad choice of name. */
if (! TREE_PUBLIC (newdecl))
{
- warning (OPT_Wshadow, "shadowing %s function %q#D",
- DECL_BUILT_IN (olddecl) ? "built-in" : "library",
- olddecl);
+ warning (OPT_Wshadow,
+ DECL_BUILT_IN (olddecl)
+ ? G_("shadowing built-in function %q#D")
+ : G_("shadowing library function %q#D"), olddecl);
/* Discard the old built-in function. */
return NULL_TREE;
}
@@ -1253,9 +1254,10 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
olddecl);
}
else
- warning (OPT_Wshadow, "shadowing %s function %q#D",
- DECL_BUILT_IN (olddecl) ? "built-in" : "library",
- olddecl);
+ warning (OPT_Wshadow,
+ DECL_BUILT_IN (olddecl)
+ ? G_("shadowing built-in function %q#D")
+ : G_("shadowing library function %q#D"), olddecl);
}
else
/* Discard the old built-in function. */
@@ -7270,11 +7272,8 @@ compute_array_index_type (tree name, tree size)
structural equality checks. */
itype = build_index_type (build_min (MINUS_EXPR, sizetype,
size, integer_one_node));
- if (!TREE_SIDE_EFFECTS (size))
- {
- TYPE_DEPENDENT_P (itype) = 1;
- TYPE_DEPENDENT_P_VALID (itype) = 1;
- }
+ TYPE_DEPENDENT_P (itype) = 1;
+ TYPE_DEPENDENT_P_VALID (itype) = 1;
SET_TYPE_STRUCTURAL_EQUALITY (itype);
return itype;
}
@@ -8619,8 +8618,9 @@ grokdeclarator (const cp_declarator *declarator,
if (TREE_CODE (type) == FUNCTION_TYPE
&& cp_type_quals (type) != TYPE_UNQUALIFIED)
- error ("cannot declare %s to qualified function type %qT",
- declarator->kind == cdk_reference ? "reference" : "pointer",
+ error (declarator->kind == cdk_reference
+ ? G_("cannot declare reference to qualified function type %qT")
+ : G_("cannot declare pointer to qualified function type %qT"),
type);
if (declarator->kind == cdk_reference)
@@ -11919,7 +11919,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags)
gcc_assert (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE);
cp_function_chain->x_current_class_ref
- = cp_build_indirect_ref (t, NULL, tf_warning_or_error);
+ = cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
cp_function_chain->x_current_class_ptr = t;
/* Constructors and destructors need to know whether they're "in
diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 66dc14eaefb..83164c86a7e 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -442,7 +442,7 @@ expand_start_catch_block (tree decl)
fold_build1_loc (input_location,
NEGATE_EXPR, sizetype,
TYPE_SIZE_UNIT (TREE_TYPE (exp))));
- exp = cp_build_indirect_ref (exp, NULL, tf_warning_or_error);
+ exp = cp_build_indirect_ref (exp, RO_NULL, tf_warning_or_error);
initialize_handler_parm (decl, exp);
return type;
}
@@ -718,7 +718,7 @@ build_throw (tree exp)
allocate_expr = get_target_expr (allocate_expr);
ptr = TARGET_EXPR_SLOT (allocate_expr);
object = build_nop (build_pointer_type (temp_type), ptr);
- object = cp_build_indirect_ref (object, NULL, tf_warning_or_error);
+ object = cp_build_indirect_ref (object, RO_NULL, tf_warning_or_error);
elided = (TREE_CODE (exp) == TARGET_EXPR);
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index e6397446b02..1bd80ffa0f8 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -834,7 +834,7 @@ emit_mem_initializers (tree mem_inits)
base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
subobject, 1);
expand_aggr_init_1 (subobject, NULL_TREE,
- cp_build_indirect_ref (base_addr, NULL,
+ cp_build_indirect_ref (base_addr, RO_NULL,
tf_warning_or_error),
arguments,
LOOKUP_NORMAL,
@@ -918,7 +918,7 @@ expand_virtual_init (tree binfo, tree decl)
TREE_TYPE (vtt_parm),
vtt_parm,
vtt_index);
- vtbl2 = cp_build_indirect_ref (vtbl2, NULL, tf_warning_or_error);
+ vtbl2 = cp_build_indirect_ref (vtbl2, RO_NULL, tf_warning_or_error);
vtbl2 = convert (TREE_TYPE (vtbl), vtbl2);
/* The actual initializer is the VTT value only in the subobject
@@ -933,7 +933,7 @@ expand_virtual_init (tree binfo, tree decl)
}
/* Compute the location of the vtpr. */
- vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, NULL,
+ vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, RO_NULL,
tf_warning_or_error),
TREE_TYPE (binfo));
gcc_assert (vtbl_ptr != error_mark_node);
@@ -2055,7 +2055,7 @@ build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
alloc_node, cookie_ptr);
size_ptr_type = build_pointer_type (sizetype);
cookie_ptr = fold_convert (size_ptr_type, cookie_ptr);
- cookie = cp_build_indirect_ref (cookie_ptr, NULL, complain);
+ cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
@@ -2067,7 +2067,7 @@ build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
NEGATE_EXPR, sizetype,
size_in_bytes (sizetype)));
- cookie = cp_build_indirect_ref (cookie_ptr, NULL, complain);
+ cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
cookie = build2 (MODIFY_EXPR, sizetype, cookie,
size_in_bytes (elt_type));
cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
@@ -2154,7 +2154,7 @@ build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
}
else
{
- init_expr = cp_build_indirect_ref (data_addr, NULL, complain);
+ init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
if (TYPE_NEEDS_CONSTRUCTING (type) && !explicit_value_init_p)
{
@@ -2949,7 +2949,7 @@ build_vec_init (tree base, tree maxindex, tree init,
{
atype = build_pointer_type (atype);
stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
- stmt_expr = cp_build_indirect_ref (stmt_expr, NULL, complain);
+ stmt_expr = cp_build_indirect_ref (stmt_expr, RO_NULL, complain);
TREE_NO_WARNING (stmt_expr) = 1;
}
@@ -3144,7 +3144,7 @@ build_delete (tree type, tree addr, special_function_kind auto_delete,
/*alloc_fn=*/NULL_TREE);
}
- expr = build_dtor_call (cp_build_indirect_ref (addr, NULL,
+ expr = build_dtor_call (cp_build_indirect_ref (addr, RO_NULL,
tf_warning_or_error),
auto_delete, flags);
if (do_delete)
@@ -3298,7 +3298,7 @@ build_vec_delete (tree base, tree maxindex,
size_ptr_type,
fold_convert (size_ptr_type, base),
cookie_addr);
- maxindex = cp_build_indirect_ref (cookie_addr, NULL, tf_warning_or_error);
+ maxindex = cp_build_indirect_ref (cookie_addr, RO_NULL, tf_warning_or_error);
}
else if (TREE_CODE (type) == ARRAY_TYPE)
{
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index f65dda48cc7..ee4fece6818 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -5628,7 +5628,7 @@ cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p,
{
case INDIRECT_REF:
non_constant_p = "%<*%>";
- expression = build_x_indirect_ref (cast_expression, "unary *",
+ expression = build_x_indirect_ref (cast_expression, RO_UNARY_STAR,
tf_warning_or_error);
break;
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 6f76d46d527..395a026311c 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see
#include "tm.h"
#include "obstack.h"
#include "tree.h"
+#include "intl.h"
#include "pointer-set.h"
#include "flags.h"
#include "c-common.h"
@@ -1456,6 +1457,11 @@ iterative_hash_template_arg (tree arg, hashval_t val)
if (!TYPE_P (arg))
STRIP_NOPS (arg);
+ if (TREE_CODE (arg) == ARGUMENT_PACK_SELECT)
+ /* We can get one of these when re-hashing a previous entry in the middle
+ of substituting into a pack expansion. Just look through it. */
+ arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
+
code = TREE_CODE (arg);
tclass = TREE_CODE_CLASS (code);
@@ -1481,11 +1487,6 @@ iterative_hash_template_arg (tree arg, hashval_t val)
case EXPR_PACK_EXPANSION:
return iterative_hash_template_arg (PACK_EXPANSION_PATTERN (arg), val);
- case ARGUMENT_PACK_SELECT:
- /* We can get one of these when re-hashing a previous entry in the middle
- of substituting into a pack expansion. Just look through it... */
- arg = ARGUMENT_PACK_SELECT_FROM_PACK (arg);
- /* ...and fall through. */
case TYPE_ARGUMENT_PACK:
case NONTYPE_ARGUMENT_PACK:
return iterative_hash_template_arg (ARGUMENT_PACK_ARGS (arg), val);
@@ -1646,19 +1647,52 @@ explicit_class_specialization_p (tree type)
return !uses_template_parms (CLASSTYPE_TI_ARGS (type));
}
-/* Print the list of overloaded FNS in an error message. */
+/* Print the list of functions at FNS, going through all the overloads
+ for each element of the list. Alternatively, FNS can not be a
+ TREE_LIST, in which case it will be printed together with all the
+ overloads.
+
+ MORE and *STR should respectively be FALSE and NULL when the function
+ is called from the outside. They are used internally on recursive
+ calls. print_candidates manages the two parameters and leaves NULL
+ in *STR when it ends. */
static void
-print_overloaded_functions (tree fns, const char **str)
+print_candidates_1 (tree fns, bool more, const char **str)
{
- tree fn;
+ tree fn, fn2;
+ char *spaces = NULL;
+
for (fn = fns; fn; fn = OVL_NEXT (fn))
+ if (TREE_CODE (fn) == TREE_LIST)
+ {
+ gcc_assert (!OVL_NEXT (fn) && !is_overloaded_fn (fn));
+ for (fn2 = fn; fn2 != NULL_TREE; fn2 = TREE_CHAIN (fn2))
+ print_candidates_1 (TREE_VALUE (fn2),
+ TREE_CHAIN (fn2) || more, str);
+ }
+ else
+ {
+ if (!*str)
+ {
+ /* Pick the prefix string. */
+ if (!more && !OVL_NEXT (fns))
+ {
+ error ("candidate is: %+#D", OVL_CURRENT (fn));
+ continue;
+ }
+
+ *str = _("candidates are:");
+ spaces = get_spaces (*str);
+ }
+ error ("%s %+#D", *str, OVL_CURRENT (fn));
+ *str = spaces ? spaces : *str;
+ }
+
+ if (!more)
{
- if (TREE_CODE (fn) == TREE_LIST)
- print_candidates (fn);
- else
- error ("%s %+#D", *str, OVL_CURRENT (fn));
- *str = " ";
+ free (spaces);
+ *str = NULL;
}
}
@@ -1667,16 +1701,9 @@ print_overloaded_functions (tree fns, const char **str)
void
print_candidates (tree fns)
{
- const char *str = "candidates are:";
-
- if (is_overloaded_fn (fns))
- print_overloaded_functions (fns, &str);
- else
- {
- tree fn;
- for (fn = fns; fn != NULL_TREE; fn = TREE_CHAIN (fn))
- print_overloaded_functions (TREE_VALUE (fn), &str);
- }
+ const char *str = NULL;
+ print_candidates_1 (fns, false, &str);
+ gcc_assert (str == NULL);
}
/* Returns the template (one of the functions given by TEMPLATE_ID)
@@ -2703,15 +2730,13 @@ get_function_template_decl (const_tree primary_func_tmpl_inst)
bool
function_parameter_expanded_from_pack_p (tree param_decl, tree pack)
{
- if (DECL_ARTIFICIAL (param_decl)
- || !function_parameter_pack_p (pack))
- return false;
-
- gcc_assert (DECL_NAME (param_decl) && DECL_NAME (pack));
+ if (DECL_ARTIFICIAL (param_decl)
+ || !function_parameter_pack_p (pack))
+ return false;
- /* The parameter pack and its pack arguments have the same
- DECL_PARM_INDEX. */
- return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
+ /* The parameter pack and its pack arguments have the same
+ DECL_PARM_INDEX. */
+ return DECL_PARM_INDEX (pack) == DECL_PARM_INDEX (param_decl);
}
/* Determine whether ARGS describes a variadic template args list,
@@ -9246,7 +9271,13 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
/* Create a new node for the specialization we need. */
r = copy_decl (t);
if (type == NULL_TREE)
- type = tsubst (TREE_TYPE (t), args, complain, in_decl);
+ {
+ if (is_typedef_decl (t))
+ type = DECL_ORIGINAL_TYPE (t);
+ else
+ type = TREE_TYPE (t);
+ type = tsubst (type, args, complain, in_decl);
+ }
if (TREE_CODE (r) == VAR_DECL)
{
/* Even if the original location is out of scope, the
@@ -9317,16 +9348,6 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
}
determine_visibility (r);
}
- /* Preserve a typedef that names a type. */
- else if (TREE_CODE (r) == TYPE_DECL
- && DECL_ORIGINAL_TYPE (t)
- && type != error_mark_node)
- {
- DECL_ORIGINAL_TYPE (r) = tsubst (DECL_ORIGINAL_TYPE (t),
- args, complain, in_decl);
- TREE_TYPE (r) = type = build_variant_type_copy (type);
- TYPE_NAME (type) = r;
- }
if (!local_p)
{
@@ -9364,6 +9385,14 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
apply_late_template_attributes (&r, DECL_ATTRIBUTES (r),
(int) ATTR_FLAG_TYPE_IN_PLACE,
args, complain, in_decl);
+
+ /* Preserve a typedef that names a type. */
+ if (is_typedef_decl (r))
+ {
+ DECL_ORIGINAL_TYPE (r) = NULL_TREE;
+ set_underlying_type (r);
+ }
+
layout_decl (r, 0);
}
break;
@@ -11829,7 +11858,7 @@ tsubst_copy_and_build (tree t,
r = convert_from_reference (r);
}
else
- r = build_x_indirect_ref (r, "unary *", complain);
+ r = build_x_indirect_ref (r, RO_UNARY_STAR, complain);
return r;
}
@@ -15753,13 +15782,16 @@ most_specialized_class (tree type, tree tmpl)
if (ambiguous_p)
{
- const char *str = "candidates are:";
+ const char *str;
+ char *spaces = NULL;
error ("ambiguous class template instantiation for %q#T", type);
+ str = TREE_CHAIN (list) ? _("candidates are:") : _("candidate is:");
for (t = list; t; t = TREE_CHAIN (t))
- {
- error ("%s %+#T", str, TREE_TYPE (t));
- str = " ";
- }
+ {
+ error ("%s %+#T", spaces ? spaces : str, TREE_TYPE (t));
+ spaces = spaces ? spaces : get_spaces (str);
+ }
+ free (spaces);
return error_mark_node;
}
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index 7378f89fd1a..0f7225fc542 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -188,7 +188,7 @@ build_headof (tree exp)
index = build_int_cst (NULL_TREE,
-2 * TARGET_VTABLE_DATA_ENTRY_DISTANCE);
- offset = build_vtbl_ref (cp_build_indirect_ref (exp, NULL,
+ offset = build_vtbl_ref (cp_build_indirect_ref (exp, RO_NULL,
tf_warning_or_error),
index);
@@ -277,7 +277,7 @@ get_tinfo_decl_dynamic (tree exp)
/* Otherwise return the type_info for the static type of the expr. */
t = get_tinfo_ptr (TYPE_MAIN_VARIANT (type));
- return cp_build_indirect_ref (t, NULL, tf_warning_or_error);
+ return cp_build_indirect_ref (t, RO_NULL, tf_warning_or_error);
}
static bool
@@ -483,7 +483,7 @@ get_typeid (tree type)
if (!type)
return error_mark_node;
- return cp_build_indirect_ref (get_tinfo_ptr (type), NULL,
+ return cp_build_indirect_ref (get_tinfo_ptr (type), RO_NULL,
tf_warning_or_error);
}
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 841efc8fafc..547e89934c1 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -1458,7 +1458,7 @@ finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
object = cp_build_indirect_ref (lambda_expr_this_capture
(CLASSTYPE_LAMBDA_EXPR
(TREE_TYPE (object))),
- /*errorstring=*/"",
+ RO_NULL,
/*complain=*/tf_warning_or_error);
if (current_class_ptr)
@@ -5689,7 +5689,7 @@ thisify_lambda_field (tree decl)
{
tree context = lambda_function (DECL_CONTEXT (decl));
tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
- /*errorstring*/"",
+ RO_NULL,
tf_warning_or_error);
return finish_non_static_data_member (decl, object,
/*qualifying_scope*/NULL_TREE);
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 7097f8c68b6..865abbcfdd3 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -2292,7 +2292,7 @@ tree
build_dummy_object (tree type)
{
tree decl = build1 (NOP_EXPR, build_pointer_type (type), void_zero_node);
- return cp_build_indirect_ref (decl, NULL, tf_warning_or_error);
+ return cp_build_indirect_ref (decl, RO_NULL, tf_warning_or_error);
}
/* We've gotten a reference to a member of TYPE. Return *this if appropriate,
@@ -2956,7 +2956,7 @@ stabilize_expr (tree exp, tree* initp)
exp = cp_build_unary_op (ADDR_EXPR, exp, 1, tf_warning_or_error);
init_expr = get_target_expr (exp);
exp = TARGET_EXPR_SLOT (init_expr);
- exp = cp_build_indirect_ref (exp, 0, tf_warning_or_error);
+ exp = cp_build_indirect_ref (exp, RO_NULL, tf_warning_or_error);
}
*initp = init_expr;
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 782502d2734..e001a07771f 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -2092,7 +2092,7 @@ build_class_member_access_expr (tree object, tree member,
{
tree temp = unary_complex_lvalue (ADDR_EXPR, object);
if (temp)
- object = cp_build_indirect_ref (temp, NULL, complain);
+ object = cp_build_indirect_ref (temp, RO_NULL, complain);
}
/* In [expr.ref], there is an explicit list of the valid choices for
@@ -2592,7 +2592,7 @@ build_ptrmemfunc_access_expr (tree ptrmem, tree member_name)
Must also handle REFERENCE_TYPEs for C++. */
tree
-build_x_indirect_ref (tree expr, const char *errorstring,
+build_x_indirect_ref (tree expr, ref_operator errorstring,
tsubst_flags_t complain)
{
tree orig_expr = expr;
@@ -2623,13 +2623,13 @@ build_x_indirect_ref (tree expr, const char *errorstring,
/* Helper function called from c-common. */
tree
build_indirect_ref (location_t loc __attribute__ ((__unused__)),
- tree ptr, const char *errorstring)
+ tree ptr, ref_operator errorstring)
{
return cp_build_indirect_ref (ptr, errorstring, tf_warning_or_error);
}
tree
-cp_build_indirect_ref (tree ptr, const char *errorstring,
+cp_build_indirect_ref (tree ptr, ref_operator errorstring,
tsubst_flags_t complain)
{
tree pointer, type;
@@ -2697,14 +2697,38 @@ cp_build_indirect_ref (tree ptr, const char *errorstring,
/* `pointer' won't be an error_mark_node if we were given a
pointer to member, so it's cool to check for this here. */
else if (TYPE_PTR_TO_MEMBER_P (type))
- error ("invalid use of %qs on pointer to member", errorstring);
+ switch (errorstring)
+ {
+ case RO_ARRAY_INDEXING:
+ error ("invalid use of array indexing on pointer to member");
+ break;
+ case RO_UNARY_STAR:
+ error ("invalid use of unary %<*%> on pointer to member");
+ break;
+ case RO_IMPLICIT_CONVERSION:
+ error ("invalid use of implicit conversion on pointer to member");
+ break;
+ default:
+ gcc_unreachable ();
+ }
else if (pointer != error_mark_node)
- {
- if (errorstring)
- error ("invalid type argument of %qs", errorstring);
- else
- error ("invalid type argument");
- }
+ switch (errorstring)
+ {
+ case RO_NULL:
+ error ("invalid type argument");
+ break;
+ case RO_ARRAY_INDEXING:
+ error ("invalid type argument of array indexing");
+ break;
+ case RO_UNARY_STAR:
+ error ("invalid type argument of unary %<*%>");
+ break;
+ case RO_IMPLICIT_CONVERSION:
+ error ("invalid type argument of implicit conversion");
+ break;
+ default:
+ gcc_unreachable ();
+ }
return error_mark_node;
}
@@ -2871,7 +2895,7 @@ build_array_ref (location_t loc, tree array, tree idx)
ret = cp_build_indirect_ref (cp_build_binary_op (input_location,
PLUS_EXPR, ar, ind,
tf_warning_or_error),
- "array indexing",
+ RO_ARRAY_INDEXING,
tf_warning_or_error);
protected_set_expr_location (ret, loc);
return ret;
@@ -2980,7 +3004,7 @@ get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
/* Next extract the vtable pointer from the object. */
vtbl = build1 (NOP_EXPR, build_pointer_type (vtbl_ptr_type_node),
instance_ptr);
- vtbl = cp_build_indirect_ref (vtbl, NULL, tf_warning_or_error);
+ vtbl = cp_build_indirect_ref (vtbl, RO_NULL, tf_warning_or_error);
/* If the object is not dynamic the access invokes undefined
behavior. As it is not executed in this case silence the
spurious warnings it may provoke. */
@@ -2990,7 +3014,7 @@ get_member_function_from_ptrfunc (tree *instance_ptrptr, tree function)
e2 = fold_build2_loc (input_location,
POINTER_PLUS_EXPR, TREE_TYPE (vtbl), vtbl,
fold_convert (sizetype, idx));
- e2 = cp_build_indirect_ref (e2, NULL, tf_warning_or_error);
+ e2 = cp_build_indirect_ref (e2, RO_NULL, tf_warning_or_error);
TREE_CONSTANT (e2) = 1;
/* When using function descriptors, the address of the
@@ -4337,9 +4361,10 @@ build_x_unary_op (enum tree_code code, tree xarg, tsubst_flags_t complain)
tree fn = get_first_fn (xarg);
if (DECL_CONSTRUCTOR_P (fn) || DECL_DESTRUCTOR_P (fn))
{
- const char *type =
- (DECL_CONSTRUCTOR_P (fn) ? "constructor" : "destructor");
- error ("taking address of %s %qE", type, xarg);
+ error (DECL_CONSTRUCTOR_P (fn)
+ ? G_("taking address of constructor %qE")
+ : G_("taking address of destructor %qE"),
+ xarg);
return error_mark_node;
}
}
diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
index 348c6576c11..66ff3c16264 100644
--- a/gcc/cp/typeck2.c
+++ b/gcc/cp/typeck2.c
@@ -1434,7 +1434,7 @@ build_x_arrow (tree expr)
return expr;
}
- return cp_build_indirect_ref (last_rval, NULL, tf_warning_or_error);
+ return cp_build_indirect_ref (last_rval, RO_NULL, tf_warning_or_error);
}
if (types_memoized)
@@ -1526,7 +1526,7 @@ build_m_component_ref (tree datum, tree component)
datum = build2 (POINTER_PLUS_EXPR, ptype,
fold_convert (ptype, datum),
build_nop (sizetype, component));
- return cp_build_indirect_ref (datum, 0, tf_warning_or_error);
+ return cp_build_indirect_ref (datum, RO_NULL, tf_warning_or_error);
}
else
return build2 (OFFSET_REF, type, datum, component);
diff --git a/gcc/doc/c-tree.texi b/gcc/doc/c-tree.texi
index 35498583ccd..b53f758828b 100644
--- a/gcc/doc/c-tree.texi
+++ b/gcc/doc/c-tree.texi
@@ -2871,7 +2871,7 @@ chained together. This facilitates adding new clauses during
compilation.
@item VEC_LSHIFT_EXPR
-@item VEC_RSHIFT_EXPR
+@itemx VEC_RSHIFT_EXPR
These nodes represent whole vector left and right shifts, respectively.
The first operand is the vector to shift; it will always be of vector type.
The second operand is an expression for the number of bits by which to
@@ -2879,7 +2879,7 @@ shift. Note that the result is undefined if the second operand is larger
than or equal to the first operand's type size.
@item VEC_WIDEN_MULT_HI_EXPR
-@item VEC_WIDEN_MULT_LO_EXPR
+@itemx VEC_WIDEN_MULT_LO_EXPR
These nodes represent widening vector multiplication of the high and low
parts of the two input vectors, respectively. Their operands are vectors
that contain the same number of elements (@code{N}) of the same integral type.
@@ -2891,7 +2891,7 @@ low @code{N/2} elements of the two vector are multiplied to produce the
vector of @code{N/2} products.
@item VEC_UNPACK_HI_EXPR
-@item VEC_UNPACK_LO_EXPR
+@itemx VEC_UNPACK_LO_EXPR
These nodes represent unpacking of the high and low parts of the input vector,
respectively. The single operand is a vector that contains @code{N} elements
of the same integral or floating point type. The result is a vector
@@ -2902,7 +2902,7 @@ In the case of @code{VEC_UNPACK_LO_EXPR} the low @code{N/2} elements of the
vector are extracted and widened (promoted).
@item VEC_UNPACK_FLOAT_HI_EXPR
-@item VEC_UNPACK_FLOAT_LO_EXPR
+@itemx VEC_UNPACK_FLOAT_LO_EXPR
These nodes represent unpacking of the high and low parts of the input vector,
where the values are converted from fixed point to floating point. The
single operand is a vector that contains @code{N} elements of the same
@@ -2938,13 +2938,13 @@ elements of the two vectors are merged (concatenated) to form the output
vector.
@item VEC_EXTRACT_EVEN_EXPR
-@item VEC_EXTRACT_ODD_EXPR
+@itemx VEC_EXTRACT_ODD_EXPR
These nodes represent extracting of the even/odd elements of the two input
vectors, respectively. Their operands and result are vectors that contain the
same number of elements of the same type.
@item VEC_INTERLEAVE_HIGH_EXPR
-@item VEC_INTERLEAVE_LOW_EXPR
+@itemx VEC_INTERLEAVE_LOW_EXPR
These nodes represent merging and interleaving of the high/low elements of the
two input vectors, respectively. The operands and the result are vectors that
contain the same number of elements (@code{N}) of the same type.
diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
index dd5a89c1002..59270e57852 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -2550,14 +2550,14 @@ void __attribute__ ((interrupt, use_shadow_register_set)) v1 ();
void __attribute__ ((interrupt, keep_interrupts_masked)) v2 ();
void __attribute__ ((interrupt, use_debug_exception_return)) v3 ();
void __attribute__ ((interrupt, use_shadow_register_set,
- keep_interrupts_masked)) v4 ();
+ keep_interrupts_masked)) v4 ();
void __attribute__ ((interrupt, use_shadow_register_set,
- use_debug_exception_return)) v5 ();
+ use_debug_exception_return)) v5 ();
void __attribute__ ((interrupt, keep_interrupts_masked,
- use_debug_exception_return)) v6 ();
+ use_debug_exception_return)) v6 ();
void __attribute__ ((interrupt, use_shadow_register_set,
- keep_interrupts_masked,
- use_debug_exception_return)) v7 ();
+ keep_interrupts_masked,
+ use_debug_exception_return)) v7 ();
@end smallexample
@item interrupt_handler
@@ -4235,8 +4235,8 @@ Three attributes are currently defined for the Blackfin.
@table @code
@item l1_data
-@item l1_data_A
-@item l1_data_B
+@itemx l1_data_A
+@itemx l1_data_B
@cindex @code{l1_data} variable attribute
@cindex @code{l1_data_A} variable attribute
@cindex @code{l1_data_B} variable attribute
@@ -4308,7 +4308,7 @@ allows modules to make no assumptions about where variables might be
stored.
@item io
-@item io (@var{addr})
+@itemx io (@var{addr})
Variables with the @code{io} attribute are used to address
memory-mapped peripherals. If an address is specified, the variable
is assigned that address, else it is not assigned an address (it is
@@ -4319,7 +4319,7 @@ int timer_count __attribute__((io(0x123)));
@end example
@item cb
-@item cb (@var{addr})
+@itemx cb (@var{addr})
Variables with the @code{cb} attribute are used to access the control
bus, using special instructions. @code{addr} indicates the control bus
address. Example:
@@ -5434,9 +5434,9 @@ void doit(void)
int i = 0;
asm goto ("mfsr %%r1, 123; jmp %%r1;"
".pushsection doit_table;"
- ".long %l0, %l1, %l2, %l3;"
- ".popsection"
- : : : "r1" : label1, label2, label3, label4);
+ ".long %l0, %l1, %l2, %l3;"
+ ".popsection"
+ : : : "r1" : label1, label2, label3, label4);
__builtin_unreachable ();
label1:
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 977aa80fe4d..b5bf1fd1af4 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1432,7 +1432,7 @@ increase the risk of undetected internal errors causing wrong code to be
generated.
@item --disable-stage1-checking
-@item --enable-stage1-checking
+@itemx --enable-stage1-checking
@itemx --enable-stage1-checking=@var{list}
If no @option{--enable-checking} option is specified the stage1
compiler will be built with @samp{yes} checking enabled, otherwise
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 3c77c6877f1..36461f6c00a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -7326,6 +7326,10 @@ types of hosts. The bytecode files are versioned and there is a
strict version check, so bytecode files generated in one version of
GCC will not work with an older/newer version of GCC.
+Link time optimization does not play well with generating debugging
+information. Combining @option{-flto} or @option{-fwhopr} with
+@option{-g} is experimental.
+
This option is disabled by default.
@item -fwhopr
@@ -7342,6 +7346,8 @@ that otherwise would not fit in memory. This option enables
Disabled by default.
+This option is experimental.
+
@item -fwpa
@opindex fwpa
This is an internal option used by GCC when compiling with
@@ -15071,7 +15077,7 @@ stored, which means code that walks the stack frame across interrupts or
signals may get corrupted data.
@item -mavoid-indexed-addresses
-@item -mno-avoid-indexed-addresses
+@itemx -mno-avoid-indexed-addresses
@opindex mavoid-indexed-addresses
@opindex mno-avoid-indexed-addresses
Generate code that tries to avoid (not avoid) the use of indexed load
@@ -15532,24 +15538,24 @@ held in @code{r13} are now pushed onto the stack.
Note, common variables (variables which have not been initialised) and
constants are not placed into the small data area as they are assigned
-to other sections in the output executeable.
+to other sections in the output executable.
The default value is zero, which disables this feature. Note, this
feature is not enabled by default with higher optimization levels
-(@option{-O2} etc) because of the potentially deterimental effects of
+(@option{-O2} etc) because of the potentially detrimental effects of
reserving register @code{r13}. It is up to the programmer to
experiment and discover whether this feature is of benefit to their
program.
@item -msim
-@item -mno-sim
+@itemx -mno-sim
@opindex msim
@opindex mno-sim
Use the simulator runtime. The default is to use the libgloss board
specific runtime.
@item -mas100-syntax
-@item -mno-as100-syntax
+@itemx -mno-as100-syntax
@opindex mas100-syntax
@opindex mno-as100-syntax
When generating assembler output use a syntax that is compatible with
@@ -15561,7 +15567,7 @@ default option.
@opindex mmax-constant-size
Specifies the maxium size, in bytes, of a constant that can be used as
an operand in a RX instruction. Although the RX instruction set does
-allow consants of up to 4 bytes in length to be used in instructions,
+allow constants of up to 4 bytes in length to be used in instructions,
a longer value equates to a longer instruction. Thus in some
circumstances it can be beneficial to restrict the size of constants
that are used in instructions. Constants that are too big are instead
@@ -16811,7 +16817,7 @@ that MinGW-specific thread support is to be used.
@opindex municode
This option is available for mingw-w64 targets. It specifies
that the UNICODE macro is getting pre-defined and that the
-unicode capable runtime startup code is choosen.
+unicode capable runtime startup code is chosen.
@item -mwin32
@opindex mwin32
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index 5a92a809fc6..bcdbabcafdf 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -5189,7 +5189,7 @@ A typical @code{ctrap} pattern looks like
(define_insn "ctrapsi4"
[(trap_if (match_operator 0 "trap_operator"
[(match_operand 1 "register_operand")
- (match_operand 2 "immediate_operand")])
+ (match_operand 2 "immediate_operand")])
(match_operand 3 "const_int_operand" "i"))]
""
"@dots{}")
diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi
index 2041de97353..284ea49cdfe 100644
--- a/gcc/doc/options.texi
+++ b/gcc/doc/options.texi
@@ -85,7 +85,7 @@ configurations and yet the masks always need to be defined.
@section Option properties
The second field of an option record can specify any of the following
-properties. When an option takes an argument, it is enlosed in parentheses
+properties. When an option takes an argument, it is enclosed in parentheses
following the option property name. The parser that handles option files
is quite simplistic, and will be tricked by any nested parentheses within
the argument text itself; in this case, the entire option argument can
diff --git a/gcc/doc/plugins.texi b/gcc/doc/plugins.texi
index 8aac0f7b65c..d446f9fd5c6 100644
--- a/gcc/doc/plugins.texi
+++ b/gcc/doc/plugins.texi
@@ -317,7 +317,7 @@ custom attributes.
/* Attribute handler callback */
static tree
handle_user_attribute (tree *node, tree name, tree args,
- int flags, bool *no_add_attrs)
+ int flags, bool *no_add_attrs)
@{
return NULL_TREE;
@}
@@ -399,7 +399,7 @@ When a pass is first added to one of the pass lists, the event
@section Building GCC plugins
If plugins are enabled, GCC installs the headers needed to build a
-plugin (somehwere in the installation tree, e.g. under
+plugin (somewhere in the installation tree, e.g. under
@file{/usr/local}). In particular a @file{plugin/include} directory
is installed, containing all the header files needed to build plugins.
diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi
index 4888eb3f1e1..eda42c79eae 100644
--- a/gcc/doc/rtl.texi
+++ b/gcc/doc/rtl.texi
@@ -2614,9 +2614,12 @@ a set bit indicates it is taken from @var{vec1}.
@findex vec_select
@item (vec_select:@var{m} @var{vec1} @var{selection})
This describes an operation that selects parts of a vector. @var{vec1} is
-the source vector, @var{selection} is a @code{parallel} that contains a
+the source vector, and @var{selection} is a @code{parallel} that contains a
@code{const_int} for each of the subparts of the result vector, giving the
-number of the source subpart that should be stored into it.
+number of the source subpart that should be stored into it.
+The result mode @var{m} is either the submode for a single element of
+@var{vec1} (if only one subpart is selected), or another vector mode
+with that element submode (if multiple subparts are selected).
@findex vec_concat
@item (vec_concat:@var{m} @var{vec1} @var{vec2})
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 6a2991777cf..5616b480987 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -9933,7 +9933,7 @@ contained within the @var{superset} named address space. Pointers to
a named address space that is a subset of another named address space
will be converted automatically without a cast if used together in
arithmetic operations. Pointers to a superset address space can be
-converted to pointers to a subset address space via explict casts.
+converted to pointers to a subset address space via explicit casts.
@end deftypefn
@deftypefn {Target Hook} {rtx} TARGET_ADDR_SPACE_CONVERT (rtx @var{op}, tree @var{from_type}, tree @var{to_type})
@@ -11038,7 +11038,7 @@ On some architectures it can take multiple instructions to synthesize
a constant. If there is another constant already in a register that
is close enough in value then it is preferable that the new constant
is computed from this register using immediate addition or
-substraction. We accomplish this through CSE. Besides the value of
+subtraction. We accomplish this through CSE. Besides the value of
the constant we also add a lower and an upper constant anchor to the
available expressions. These are then queried when encountering new
constants. The anchors are computed by rounding the constant up and
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index ec5298c0ccb..da0405774c6 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -6177,10 +6177,7 @@ static void gen_generic_params_dies (tree);
static void splice_child_die (dw_die_ref, dw_die_ref);
static int file_info_cmp (const void *, const void *);
static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
- const char *, const char *, unsigned);
-static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
- const char *, const char *,
- const char *);
+ const char *, const char *);
static void output_loc_list (dw_loc_list_ref);
static char *gen_internal_sym (const char *);
@@ -7214,6 +7211,13 @@ AT_loc_list (dw_attr_ref a)
return a->dw_attr_val.v.val_loc_list;
}
+static inline dw_loc_list_ref *
+AT_loc_list_ptr (dw_attr_ref a)
+{
+ gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
+ return &a->dw_attr_val.v.val_loc_list;
+}
+
/* Add an address constant attribute value to a DIE. */
static inline void
@@ -7793,8 +7797,7 @@ add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
temp->last = loc;
}
}
- /* Do not add empty location to the beginning of the list. */
- else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
+ else
{
temp->first = loc;
temp->last = loc;
@@ -10302,12 +10305,11 @@ output_die_symbol (dw_die_ref die)
}
/* Return a new location list, given the begin and end range, and the
- expression. gensym tells us whether to generate a new internal symbol for
- this location list node, which is done for the head of the list only. */
+ expression. */
static inline dw_loc_list_ref
new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
- const char *section, unsigned int gensym)
+ const char *section)
{
dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
@@ -10315,27 +10317,18 @@ new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
retlist->end = end;
retlist->expr = expr;
retlist->section = section;
- if (gensym)
- retlist->ll_symbol = gen_internal_sym ("LLST");
return retlist;
}
-/* Add a location description expression to a location list. */
+/* Generate a new internal symbol for this location list node, if it
+ hasn't got one yet. */
static inline void
-add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
- const char *begin, const char *end,
- const char *section)
+gen_llsym (dw_loc_list_ref list)
{
- dw_loc_list_ref *d;
-
- /* Find the end of the chain. */
- for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
- ;
-
- /* Add a new location list node to the list. */
- *d = new_loc_list (descr, begin, end, section, 0);
+ gcc_assert (!list->ll_symbol);
+ list->ll_symbol = gen_internal_sym ("LLST");
}
/* Output the location list given to us. */
@@ -13653,15 +13646,17 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
break;
case CONST_DOUBLE:
+ if (mode == VOIDmode)
+ mode = GET_MODE (rtl);
+
if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
{
+ gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
+
/* Note that a CONST_DOUBLE rtx could represent either an integer
or a floating-point constant. A CONST_DOUBLE is used whenever
the constant requires more than one word in order to be
adequately represented. We output CONST_DOUBLEs as blocks. */
- if (GET_MODE (rtl) != VOIDmode)
- mode = GET_MODE (rtl);
-
loc_result = new_loc_descr (DW_OP_implicit_value,
GET_MODE_SIZE (mode), 0);
if (SCALAR_FLOAT_MODE_P (mode))
@@ -13687,6 +13682,9 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
break;
case CONST_VECTOR:
+ if (mode == VOIDmode)
+ mode = GET_MODE (rtl);
+
if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
{
unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
@@ -13695,7 +13693,7 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
unsigned int i;
unsigned char *p;
- mode = GET_MODE (rtl);
+ gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
switch (GET_MODE_CLASS (mode))
{
case MODE_VECTOR_INT:
@@ -13777,10 +13775,10 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
&& (dwarf_version >= 4 || !dwarf_strict))
{
- loc_result = new_loc_descr (DW_OP_implicit_value,
- DWARF2_ADDR_SIZE, 0);
- loc_result->dw_loc_oprnd2.val_class = dw_val_class_addr;
- loc_result->dw_loc_oprnd2.v.val_addr = rtl;
+ loc_result = new_loc_descr (DW_OP_addr, 0, 0);
+ loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
+ loc_result->dw_loc_oprnd1.v.val_addr = rtl;
+ add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
VEC_safe_push (rtx, gc, used_rtx_array, rtl);
}
break;
@@ -13842,14 +13840,6 @@ decl_by_reference_p (tree decl)
&& DECL_BY_REFERENCE (decl));
}
-/* Return single element location list containing loc descr REF. */
-
-static dw_loc_list_ref
-single_element_loc_list (dw_loc_descr_ref ref)
-{
- return new_loc_list (ref, NULL, NULL, NULL, 0);
-}
-
/* Helper function for dw_loc_list. Compute proper Dwarf location descriptor
for VARLOC. */
@@ -13931,20 +13921,21 @@ dw_loc_list_1 (tree loc, rtx varloc, int want_address,
return descr;
}
-/* Return dwarf representation of location list representing for
- LOC_LIST of DECL. WANT_ADDRESS has the same meaning as in
- loc_list_from_tree function. */
+/* Return the dwarf representation of the location list LOC_LIST of
+ DECL. WANT_ADDRESS has the same meaning as in loc_list_from_tree
+ function. */
static dw_loc_list_ref
-dw_loc_list (var_loc_list * loc_list, tree decl, int want_address)
+dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
{
const char *endname, *secname;
- dw_loc_list_ref list;
rtx varloc;
enum var_init_status initialized;
struct var_loc_node *node;
dw_loc_descr_ref descr;
char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
+ dw_loc_list_ref list = NULL;
+ dw_loc_list_ref *listp = &list;
/* Now that we know what section we are using for a base,
actually construct the list of locations.
@@ -13957,26 +13948,9 @@ dw_loc_list (var_loc_list * loc_list, tree decl, int want_address)
This means we have to special case the last node, and generate
a range of [last location start, end of function label]. */
- node = loc_list->first;
secname = secname_for_decl (decl);
- if (NOTE_VAR_LOCATION_LOC (node->var_loc_note))
- initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
- else
- initialized = VAR_INIT_STATUS_INITIALIZED;
- varloc = NOTE_VAR_LOCATION (node->var_loc_note);
- descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
-
- if (loc_list && loc_list->first != loc_list->last)
- list = new_loc_list (descr, node->label, node->next->label, secname, 1);
- else
- return single_element_loc_list (descr);
- node = node->next;
-
- if (!node)
- return NULL;
-
- for (; node->next; node = node->next)
+ for (node = loc_list->first; node->next; node = node->next)
if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
{
/* The variable has a location between NODE->LABEL and
@@ -13984,28 +13958,46 @@ dw_loc_list (var_loc_list * loc_list, tree decl, int want_address)
initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
varloc = NOTE_VAR_LOCATION (node->var_loc_note);
descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
- add_loc_descr_to_loc_list (&list, descr,
- node->label, node->next->label, secname);
+ if (descr)
+ {
+ *listp = new_loc_list (descr, node->label, node->next->label,
+ secname);
+ listp = &(*listp)->dw_loc_next;
+ }
}
/* If the variable has a location at the last label
it keeps its location until the end of function. */
if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
{
- if (!current_function_decl)
- endname = text_end_label;
- else
- {
- ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
- current_function_funcdef_no);
- endname = ggc_strdup (label_id);
- }
-
initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
varloc = NOTE_VAR_LOCATION (node->var_loc_note);
descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
- add_loc_descr_to_loc_list (&list, descr, node->label, endname, secname);
+ if (descr)
+ {
+ if (!current_function_decl)
+ endname = text_end_label;
+ else
+ {
+ ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
+ current_function_funcdef_no);
+ endname = ggc_strdup (label_id);
+ }
+
+ *listp = new_loc_list (descr, node->label, endname, secname);
+ listp = &(*listp)->dw_loc_next;
+ }
}
+
+ /* Try to avoid the overhead of a location list emitting a location
+ expression instead, but only if we didn't have more than one
+ location entry in the first place. If some entries were not
+ representable, we don't want to pretend a single entry that was
+ applies to the entire scope in which the variable is
+ available. */
+ if (list && loc_list->first->next)
+ gen_llsym (list);
+
return list;
}
@@ -14015,7 +14007,8 @@ dw_loc_list (var_loc_list * loc_list, tree decl, int want_address)
static bool
single_element_loc_list_p (dw_loc_list_ref list)
{
- return (!list->dw_loc_next && !list->begin && !list->end);
+ gcc_assert (!list->dw_loc_next || list->ll_symbol);
+ return !list->ll_symbol;
}
/* To each location in list LIST add loc descr REF. */
@@ -14315,9 +14308,9 @@ loc_list_from_tree (tree loc, int want_address)
rtx rtl;
var_loc_list *loc_list = lookup_decl_loc (loc);
- if (loc_list && loc_list->first
- && (list_ret = dw_loc_list (loc_list, loc, want_address)))
+ if (loc_list && loc_list->first)
{
+ list_ret = dw_loc_list (loc_list, loc, want_address);
have_address = want_address != 0;
break;
}
@@ -14728,7 +14721,7 @@ loc_list_from_tree (tree loc, int want_address)
add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
}
if (ret)
- list_ret = single_element_loc_list (ret);
+ list_ret = new_loc_list (ret, NULL, NULL, NULL);
return list_ret;
}
@@ -15230,10 +15223,20 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
return true;
case CONST_STRING:
- resolve_one_addr (&rtl, NULL);
- add_AT_addr (die, DW_AT_const_value, rtl);
- VEC_safe_push (rtx, gc, used_rtx_array, rtl);
- return true;
+ if (dwarf_version >= 4 || !dwarf_strict)
+ {
+ dw_loc_descr_ref loc_result;
+ resolve_one_addr (&rtl, NULL);
+ rtl_addr:
+ loc_result = new_loc_descr (DW_OP_addr, 0, 0);
+ loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
+ loc_result->dw_loc_oprnd1.v.val_addr = rtl;
+ add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
+ add_AT_loc (die, DW_AT_location, loc_result);
+ VEC_safe_push (rtx, gc, used_rtx_array, rtl);
+ return true;
+ }
+ return false;
case CONST:
if (CONSTANT_P (XEXP (rtl, 0)))
@@ -15243,9 +15246,9 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
if (!const_ok_for_output (rtl))
return false;
case LABEL_REF:
- add_AT_addr (die, DW_AT_const_value, rtl);
- VEC_safe_push (rtx, gc, used_rtx_array, rtl);
- return true;
+ if (dwarf_version >= 4 || !dwarf_strict)
+ goto rtl_addr;
+ return false;
case PLUS:
/* In cases where an inlined instance of an inline function is passed
@@ -15722,15 +15725,18 @@ add_location_or_const_value_attribute (dw_die_ref die, tree decl,
a constant value. That way we are better to use add_const_value_attribute
rather than expanding constant value equivalent. */
loc_list = lookup_decl_loc (decl);
- if (loc_list && loc_list->first && loc_list->first == loc_list->last)
+ if (loc_list
+ && loc_list->first
+ && loc_list->first == loc_list->last
+ && NOTE_VAR_LOCATION (loc_list->first->var_loc_note)
+ && NOTE_VAR_LOCATION_LOC (loc_list->first->var_loc_note))
{
struct var_loc_node *node;
node = loc_list->first;
- rtl = NOTE_VAR_LOCATION (node->var_loc_note);
- if (GET_CODE (rtl) == VAR_LOCATION
- && GET_CODE (XEXP (rtl, 1)) != PARALLEL)
- rtl = XEXP (XEXP (rtl, 1), 0);
+ rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
+ if (GET_CODE (rtl) != PARALLEL)
+ rtl = XEXP (rtl, 0);
if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
&& add_const_value_attribute (die, rtl))
return true;
@@ -16017,8 +16023,7 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
if (!cfa_equal_p (&last_cfa, &next_cfa))
{
*list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
- start_label, last_label, section,
- list == NULL);
+ start_label, last_label, section);
list_tail = &(*list_tail)->dw_loc_next;
last_cfa = next_cfa;
@@ -16039,14 +16044,16 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
if (!cfa_equal_p (&last_cfa, &next_cfa))
{
*list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
- start_label, last_label, section,
- list == NULL);
+ start_label, last_label, section);
list_tail = &(*list_tail)->dw_loc_next;
start_label = last_label;
}
+
*list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
- start_label, fde->dw_fde_end, section,
- list == NULL);
+ start_label, fde->dw_fde_end, section);
+
+ if (list && list->dw_loc_next)
+ gen_llsym (list);
return list;
}
@@ -16476,7 +16483,8 @@ add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
0));
/* GNU extension: Record what type this method came from originally. */
- if (debug_info_level > DINFO_LEVEL_TERSE)
+ if (debug_info_level > DINFO_LEVEL_TERSE
+ && DECL_CONTEXT (func_decl))
add_AT_die_ref (die, DW_AT_containing_type,
lookup_type_die (DECL_CONTEXT (func_decl)));
}
@@ -17396,7 +17404,8 @@ gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
/* If we're trying to avoid duplicate debug info, we may not have
emitted the member decl for this function. Emit it now. */
- if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
+ if (TYPE_STUB_DECL (type)
+ && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
&& ! lookup_decl_die (member))
{
dw_die_ref type_die;
@@ -20978,28 +20987,48 @@ resolve_addr (dw_die_ref die)
{
dw_die_ref c;
dw_attr_ref a;
- dw_loc_list_ref curr;
+ dw_loc_list_ref *curr;
unsigned ix;
for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
switch (AT_class (a))
{
case dw_val_class_loc_list:
- for (curr = AT_loc_list (a); curr != NULL; curr = curr->dw_loc_next)
- if (!resolve_addr_in_expr (curr->expr))
- curr->expr = NULL;
+ curr = AT_loc_list_ptr (a);
+ while (*curr)
+ {
+ if (!resolve_addr_in_expr ((*curr)->expr))
+ {
+ dw_loc_list_ref next = (*curr)->dw_loc_next;
+ if (next && (*curr)->ll_symbol)
+ {
+ gcc_assert (!next->ll_symbol);
+ next->ll_symbol = (*curr)->ll_symbol;
+ }
+ *curr = next;
+ }
+ else
+ curr = &(*curr)->dw_loc_next;
+ }
+ if (!AT_loc_list (a))
+ {
+ remove_AT (die, a->dw_attr);
+ ix--;
+ }
break;
case dw_val_class_loc:
if (!resolve_addr_in_expr (AT_loc (a)))
- a->dw_attr_val.v.val_loc = NULL;
+ {
+ remove_AT (die, a->dw_attr);
+ ix--;
+ }
break;
case dw_val_class_addr:
if (a->dw_attr == DW_AT_const_value
&& resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
{
- a->dw_attr = DW_AT_location;
- a->dw_attr_val.val_class = dw_val_class_loc;
- a->dw_attr_val.v.val_loc = NULL;
+ remove_AT (die, a->dw_attr);
+ ix--;
}
break;
default:
diff --git a/gcc/except.c b/gcc/except.c
index 572aad0f842..10b547dcf3c 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -1835,7 +1835,7 @@ can_nonlocal_goto (const_rtx insn)
/* Set TREE_NOTHROW and crtl->all_throwers_are_sibcalls. */
-unsigned int
+static unsigned int
set_nothrow_function_flags (void)
{
rtx insn;
@@ -1892,7 +1892,7 @@ set_nothrow_function_flags (void)
struct cgraph_edge *e;
for (e = node->callers; e; e = e->next_caller)
e->can_throw_external = false;
- TREE_NOTHROW (current_function_decl) = 1;
+ cgraph_set_nothrow_flag (node, true);
if (dump_file)
fprintf (dump_file, "Marking function nothrow: %s\n\n",
diff --git a/gcc/except.h b/gcc/except.h
index 13aadd79ccb..99f620be0d6 100644
--- a/gcc/except.h
+++ b/gcc/except.h
@@ -228,9 +228,6 @@ extern int doing_eh (int);
loop hackery; should not be used by new code. */
extern void for_each_eh_label (void (*) (rtx));
-/* Set TREE_NOTHROW and cfun->all_throwers_are_sibcalls. */
-extern unsigned int set_nothrow_function_flags (void);
-
extern void init_eh (void);
extern void init_eh_for_function (void);
diff --git a/gcc/expr.c b/gcc/expr.c
index 13ae5fffc9f..d1cd815dd9b 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1194,6 +1194,7 @@ emit_block_move_hints (rtx x, rtx y, rtx size, enum block_op_methods method,
}
align = MIN (MEM_ALIGN (x), MEM_ALIGN (y));
+ gcc_assert (align >= BITS_PER_UNIT);
gcc_assert (MEM_P (x));
gcc_assert (MEM_P (y));
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 4fd3ff03a0a..f65bcd0c718 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,28 @@
+2009-12-17 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/42144
+ * trans-expr.c (select_class_proc): Skip abstract base types.
+
+2009-12-16 Kazu Hirata <kazu@codesourcery.com>
+
+ * gfc-internals.texi, gfortran.texi, invoke.texi: Fix typos.
+ Follow spelling conventions.
+
+2009-12-15 Tobias Burnus <burnus@net-b.de>
+ Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/41235
+ * resolve.c (resolve_global_procedure): Add check for
+ presence of an explicit interface for nonconstant,
+ nonassumed character-length functions.
+ (resolve_fl_procedure): Remove check for nonconstant
+ character-length functions.
+
+2009-12-14 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/42354
+ * expr.c (check_init_expr): Do not check for specification functions.
+
2009-12-11 Janus Weil <janus@gcc.gnu.org>
PR fortran/42257
@@ -5,13 +30,13 @@
2009-12-11 Daniel Franke <franke.daniel@gmail.com>
- PR fortran/40290
- * expr.c (gfc_type_convert_binary): Added warn-on-conversion flag,
- passed on to gfc_convert_type_warn() instead of gfc_convert_type();
- enabled warnings on all callers but ...
- * arith.c (eval_intrinsic): Disabled warnings on implicit type
- conversion.
- * gfortran.h gfc_type_convert_binary): Adjusted prototype.
+ PR fortran/40290
+ * expr.c (gfc_type_convert_binary): Added warn-on-conversion flag,
+ passed on to gfc_convert_type_warn() instead of gfc_convert_type();
+ enabled warnings on all callers but ...
+ * arith.c (eval_intrinsic): Disabled warnings on implicit type
+ conversion.
+ * gfortran.h gfc_type_convert_binary): Adjusted prototype.
2009-12-11 Janus Weil <janus@gcc.gnu.org>
diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 35918a69f9d..72420ff01b5 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -2286,40 +2286,39 @@ check_init_expr (gfc_expr *e)
case EXPR_FUNCTION:
t = FAILURE;
- if ((m = check_specification_function (e)) != MATCH_YES)
- {
- gfc_intrinsic_sym* isym;
- gfc_symbol* sym;
+ {
+ gfc_intrinsic_sym* isym;
+ gfc_symbol* sym;
- sym = e->symtree->n.sym;
- if (!gfc_is_intrinsic (sym, 0, e->where)
- || (m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES)
- {
- gfc_error ("Function '%s' in initialization expression at %L "
- "must be an intrinsic or a specification function",
- e->symtree->n.sym->name, &e->where);
- break;
- }
+ sym = e->symtree->n.sym;
+ if (!gfc_is_intrinsic (sym, 0, e->where)
+ || (m = gfc_intrinsic_func_interface (e, 0)) != MATCH_YES)
+ {
+ gfc_error ("Function '%s' in initialization expression at %L "
+ "must be an intrinsic function",
+ e->symtree->n.sym->name, &e->where);
+ break;
+ }
- if ((m = check_conversion (e)) == MATCH_NO
- && (m = check_inquiry (e, 1)) == MATCH_NO
- && (m = check_null (e)) == MATCH_NO
- && (m = check_transformational (e)) == MATCH_NO
- && (m = check_elemental (e)) == MATCH_NO)
- {
- gfc_error ("Intrinsic function '%s' at %L is not permitted "
- "in an initialization expression",
- e->symtree->n.sym->name, &e->where);
- m = MATCH_ERROR;
- }
+ if ((m = check_conversion (e)) == MATCH_NO
+ && (m = check_inquiry (e, 1)) == MATCH_NO
+ && (m = check_null (e)) == MATCH_NO
+ && (m = check_transformational (e)) == MATCH_NO
+ && (m = check_elemental (e)) == MATCH_NO)
+ {
+ gfc_error ("Intrinsic function '%s' at %L is not permitted "
+ "in an initialization expression",
+ e->symtree->n.sym->name, &e->where);
+ m = MATCH_ERROR;
+ }
- /* Try to scalarize an elemental intrinsic function that has an
- array argument. */
- isym = gfc_find_function (e->symtree->n.sym->name);
- if (isym && isym->elemental
- && (t = scalarize_intrinsic_call (e)) == SUCCESS)
- break;
- }
+ /* Try to scalarize an elemental intrinsic function that has an
+ array argument. */
+ isym = gfc_find_function (e->symtree->n.sym->name);
+ if (isym && isym->elemental
+ && (t = scalarize_intrinsic_call (e)) == SUCCESS)
+ break;
+ }
if (m == MATCH_YES)
t = gfc_simplify_expr (e, 0);
diff --git a/gcc/fortran/gfc-internals.texi b/gcc/fortran/gfc-internals.texi
index 8a55b8f5c8c..4e812103606 100644
--- a/gcc/fortran/gfc-internals.texi
+++ b/gcc/fortran/gfc-internals.texi
@@ -425,7 +425,7 @@ the type, rank and, if applicable, shape of the whole expression or expression
tree of which the current structure is the root. @code{where} is the locus of
this expression in the source code.
-Depending on the flavour of the expression being described by the object
+Depending on the flavor of the expression being described by the object
(that is, the value of its @code{expr_type} member), the corresponding structure
in the @code{value} union will usually contain additional data describing the
expression's value in a type-specific manner. The @code{ref} member is used to
diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi
index e9adb3d229b..834e524c15c 100644
--- a/gcc/fortran/gfortran.texi
+++ b/gcc/fortran/gfortran.texi
@@ -1911,7 +1911,7 @@ all C features have a Fortran equivalent or vice versa. For instance,
neither C's unsigned integers nor C's functions with variable number
of arguments have an equivalent in Fortran.
-Note that array dimensions are reversely orded in C and that arrays in
+Note that array dimensions are reversely ordered in C and that arrays in
C always start with index 0 while in Fortran they start by default with
1. Thus, an array declaration @code{A(n,m)} in Fortran matches
@code{A[m][n]} in C and accessing the element @code{A(i,j)} matches
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 68cc0128eed..47cb14950dd 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -761,7 +761,7 @@ check that the declared interfaces are consistent across program units.
Warn if @command{gfortran} finds a procedure named like an intrinsic not
available in the currently selected standard (with @option{-std}) and treats
it as @code{EXTERNAL} procedure because of this. @option{-fall-intrinsics} can
-be used to never trigger this behaviour and always link to the intrinsic
+be used to never trigger this behavior and always link to the intrinsic
regardless of the selected standard.
@item -Wsurprising
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 00bd4413529..78b0a7850d6 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1830,6 +1830,21 @@ resolve_global_procedure (gfc_symbol *sym, locus *where,
gfc_error ("The reference to function '%s' at %L either needs an "
"explicit INTERFACE or the rank is incorrect", sym->name,
where);
+
+ /* Non-assumed length character functions. */
+ if (sym->attr.function && sym->ts.type == BT_CHARACTER
+ && gsym->ns->proc_name->ts.u.cl->length != NULL)
+ {
+ gfc_charlen *cl = sym->ts.u.cl;
+
+ if (!sym->attr.entry_master && sym->attr.if_source == IFSRC_UNKNOWN
+ && cl && cl->length && cl->length->expr_type != EXPR_CONSTANT)
+ {
+ gfc_error ("Nonconstant character-length function '%s' at %L "
+ "must have an explicit interface", sym->name,
+ &sym->declared_at);
+ }
+ }
if (gfc_option.flag_whole_file == 1
|| ((gfc_option.warn_std & GFC_STD_LEGACY)
@@ -9038,23 +9053,12 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
&& resolve_charlen (cl) == FAILURE)
return FAILURE;
- if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
+ if ((!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT)
+ && sym->attr.proc == PROC_ST_FUNCTION)
{
- if (sym->attr.proc == PROC_ST_FUNCTION)
- {
- gfc_error ("Character-valued statement function '%s' at %L must "
- "have constant length", sym->name, &sym->declared_at);
- return FAILURE;
- }
-
- if (sym->attr.external && sym->formal == NULL
- && cl && cl->length && cl->length->expr_type != EXPR_CONSTANT)
- {
- gfc_error ("Automatic character length function '%s' at %L must "
- "have an explicit interface", sym->name,
- &sym->declared_at);
- return FAILURE;
- }
+ gfc_error ("Character-valued statement function '%s' at %L must "
+ "have constant length", sym->name, &sym->declared_at);
+ return FAILURE;
}
}
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index acca306a2ff..b0c19c9627c 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -1556,6 +1556,10 @@ select_class_proc (gfc_se *se, gfc_class_esym_list *elist,
if (elist->derived == NULL)
goto free_elist;
+ /* Skip abstract base types. */
+ if (elist->derived->attr.abstract)
+ goto free_elist;
+
/* Run through the chain picking up all the cases that call the
same procedure. */
tmp_elist = elist;
diff --git a/gcc/gimple.c b/gcc/gimple.c
index a04683a87ac..02d8cc4a5df 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -3171,7 +3171,7 @@ compare_type_names_p (tree t1, tree t2, bool for_completion_p)
/* Return true if the field decls F1 and F2 are at the same offset. */
-static bool
+bool
compare_field_offset (tree f1, tree f2)
{
if (DECL_OFFSET_ALIGN (f1) == DECL_OFFSET_ALIGN (f2))
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 7872d9e30e5..8bddb2a38b7 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -921,6 +921,7 @@ extern bool is_gimple_call_addr (tree);
extern tree get_call_expr_in (tree t);
extern void recalculate_side_effects (tree);
+extern bool compare_field_offset (tree, tree);
extern tree gimple_register_type (tree);
extern void print_gimple_types_stats (void);
extern void free_gimple_type_tables (void);
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 37b20354d6f..370bbff5ddd 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -2186,7 +2186,11 @@ rewrite_close_phi_out_of_ssa (gimple_stmt_iterator *psi)
gimple stmt = gimple_build_assign (res, zero_dim_array);
tree arg = gimple_phi_arg_def (phi, 0);
- insert_out_of_ssa_copy (zero_dim_array, arg);
+ if (TREE_CODE (arg) == SSA_NAME)
+ insert_out_of_ssa_copy (zero_dim_array, arg);
+ else
+ insert_out_of_ssa_copy_on_edge (single_pred_edge (gimple_bb (phi)),
+ zero_dim_array, arg);
remove_phi_node (psi, false);
gsi_insert_before (&gsi, stmt, GSI_NEW_STMT);
@@ -2458,9 +2462,14 @@ split_reduction_stmt (gimple stmt)
static inline bool
is_reduction_operation_p (gimple stmt)
{
+ enum tree_code code;
+
+ gcc_assert (is_gimple_assign (stmt));
+ code = gimple_assign_rhs_code (stmt);
+
return flag_associative_math
- && commutative_tree_code (gimple_assign_rhs_code (stmt))
- && associative_tree_code (gimple_assign_rhs_code (stmt));
+ && commutative_tree_code (code)
+ && associative_tree_code (code);
}
/* Returns true when PHI contains an argument ARG. */
@@ -2496,6 +2505,9 @@ follow_ssa_with_commutative_ops (tree arg, tree lhs)
return NULL;
}
+ if (!is_gimple_assign (stmt))
+ return NULL;
+
if (gimple_num_ops (stmt) == 2)
return follow_ssa_with_commutative_ops (gimple_assign_rhs1 (stmt), lhs);
@@ -2511,7 +2523,7 @@ follow_ssa_with_commutative_ops (tree arg, tree lhs)
}
/* Detect commutative and associative scalar reductions starting at
- the STMT. */
+ the STMT. Return the phi node of the reduction cycle, or NULL. */
static gimple
detect_commutative_reduction_arg (tree lhs, gimple stmt, tree arg,
@@ -2520,18 +2532,16 @@ detect_commutative_reduction_arg (tree lhs, gimple stmt, tree arg,
{
gimple phi = follow_ssa_with_commutative_ops (arg, lhs);
- if (phi)
- {
- VEC_safe_push (gimple, heap, *in, stmt);
- VEC_safe_push (gimple, heap, *out, stmt);
- return phi;
- }
+ if (!phi)
+ return NULL;
- return NULL;
+ VEC_safe_push (gimple, heap, *in, stmt);
+ VEC_safe_push (gimple, heap, *out, stmt);
+ return phi;
}
/* Detect commutative and associative scalar reductions starting at
- the STMT. */
+ the STMT. Return the phi node of the reduction cycle, or NULL. */
static gimple
detect_commutative_reduction_assign (gimple stmt, VEC (gimple, heap) **in,
@@ -2619,7 +2629,8 @@ initial_value_for_loop_phi (gimple phi)
}
/* Detect commutative and associative scalar reductions starting at
- the loop closed phi node CLOSE_PHI. */
+ the loop closed phi node CLOSE_PHI. Return the phi node of the
+ reduction cycle, or NULL. */
static gimple
detect_commutative_reduction (gimple stmt, VEC (gimple, heap) **in,
@@ -2628,8 +2639,13 @@ detect_commutative_reduction (gimple stmt, VEC (gimple, heap) **in,
if (scalar_close_phi_node_p (stmt))
{
tree arg = gimple_phi_arg_def (stmt, 0);
- gimple def = SSA_NAME_DEF_STMT (arg);
- gimple loop_phi = detect_commutative_reduction (def, in, out);
+ gimple def, loop_phi;
+
+ if (TREE_CODE (arg) != SSA_NAME)
+ return NULL;
+
+ def = SSA_NAME_DEF_STMT (arg);
+ loop_phi = detect_commutative_reduction (def, in, out);
if (loop_phi)
{
diff --git a/gcc/intl.c b/gcc/intl.c
index 5b486151dcd..63de3ec4d83 100644
--- a/gcc/intl.c
+++ b/gcc/intl.c
@@ -120,3 +120,20 @@ gcc_gettext_width (const char *msgstr)
#endif
#endif /* ENABLE_NLS */
+
+/* Return the indent for successive lines, using the width of
+ the STR. STR must have been translated already. The string
+ must be freed by the caller. */
+
+char *
+get_spaces (const char *str)
+{
+ size_t len = gcc_gettext_width (str);
+ char *spaces = XNEWVEC(char, len + 1);
+ memset (spaces, ' ', len);
+ spaces[len] = '\0';
+ return spaces;
+}
+
+
+
diff --git a/gcc/intl.h b/gcc/intl.h
index 902e7ae423c..2df9b178c00 100644
--- a/gcc/intl.h
+++ b/gcc/intl.h
@@ -54,6 +54,8 @@ extern size_t gcc_gettext_width (const char *);
# define G_(gmsgid) gmsgid
#endif
+extern char *get_spaces (const char *);
+
extern const char *open_quote;
extern const char *close_quote;
extern const char *locale_encoding;
diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index 7ee9f5dcf37..31883a22afd 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -941,8 +941,8 @@ propagate (void)
fprintf (dump_file, "Function found to be %sconst: %s\n",
this_looping ? "looping " : "",
cgraph_node_name (w));
- TREE_READONLY (w->decl) = 1;
- DECL_LOOPING_CONST_OR_PURE_P (w->decl) = this_looping;
+ cgraph_set_readonly_flag (w, true);
+ cgraph_set_looping_const_or_pure_flag (w, this_looping);
break;
case IPA_PURE:
@@ -950,8 +950,8 @@ propagate (void)
fprintf (dump_file, "Function found to be %spure: %s\n",
this_looping ? "looping " : "",
cgraph_node_name (w));
- DECL_PURE_P (w->decl) = 1;
- DECL_LOOPING_CONST_OR_PURE_P (w->decl) = this_looping;
+ cgraph_set_pure_flag (w, true);
+ cgraph_set_looping_const_or_pure_flag (w, this_looping);
break;
default:
@@ -1032,7 +1032,7 @@ propagate (void)
if (!can_throw && !TREE_NOTHROW (w->decl))
{
struct cgraph_edge *e;
- TREE_NOTHROW (w->decl) = true;
+ cgraph_set_nothrow_flag (w, true);
for (e = w->callers; e; e = e->next_caller)
e->can_throw_external = false;
if (dump_file)
@@ -1110,6 +1110,7 @@ local_pure_const (void)
{
bool changed = false;
funct_state l;
+ struct cgraph_node *node;
/* Because we do not schedule pass_fixup_cfg over whole program after early optimizations
we must not promote functions that are called by already processed functions. */
@@ -1120,23 +1121,23 @@ local_pure_const (void)
fprintf (dump_file, "Function called in recursive cycle; ignoring\n");
return 0;
}
- if (cgraph_function_body_availability (cgraph_node (current_function_decl))
- <= AVAIL_OVERWRITABLE)
+ node = cgraph_node (current_function_decl);
+ if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
{
if (dump_file)
fprintf (dump_file, "Function has wrong visibility; ignoring\n");
return 0;
}
- l = analyze_function (cgraph_node (current_function_decl), false);
+ l = analyze_function (node, false);
switch (l->pure_const_state)
{
case IPA_CONST:
if (!TREE_READONLY (current_function_decl))
{
- TREE_READONLY (current_function_decl) = 1;
- DECL_LOOPING_CONST_OR_PURE_P (current_function_decl) = l->looping;
+ cgraph_set_readonly_flag (node, true);
+ cgraph_set_looping_const_or_pure_flag (node, l->looping);
changed = true;
if (dump_file)
fprintf (dump_file, "Function found to be %sconst: %s\n",
@@ -1147,7 +1148,7 @@ local_pure_const (void)
else if (DECL_LOOPING_CONST_OR_PURE_P (current_function_decl)
&& !l->looping)
{
- DECL_LOOPING_CONST_OR_PURE_P (current_function_decl) = false;
+ cgraph_set_looping_const_or_pure_flag (node, false);
changed = true;
if (dump_file)
fprintf (dump_file, "Function found to be non-looping: %s\n",
@@ -1159,8 +1160,8 @@ local_pure_const (void)
case IPA_PURE:
if (!TREE_READONLY (current_function_decl))
{
- DECL_PURE_P (current_function_decl) = 1;
- DECL_LOOPING_CONST_OR_PURE_P (current_function_decl) = l->looping;
+ cgraph_set_pure_flag (node, true);
+ cgraph_set_looping_const_or_pure_flag (node, l->looping);
changed = true;
if (dump_file)
fprintf (dump_file, "Function found to be %spure: %s\n",
@@ -1171,7 +1172,7 @@ local_pure_const (void)
else if (DECL_LOOPING_CONST_OR_PURE_P (current_function_decl)
&& !l->looping)
{
- DECL_LOOPING_CONST_OR_PURE_P (current_function_decl) = false;
+ cgraph_set_looping_const_or_pure_flag (node, false);
changed = true;
if (dump_file)
fprintf (dump_file, "Function found to be non-looping: %s\n",
@@ -1187,9 +1188,8 @@ local_pure_const (void)
{
struct cgraph_edge *e;
- TREE_NOTHROW (current_function_decl) = true;
- for (e = cgraph_node (current_function_decl)->callers;
- e; e = e->next_caller)
+ cgraph_set_nothrow_flag (node, true);
+ for (e = node->callers; e; e = e->next_caller)
e->can_throw_external = false;
changed = true;
if (dump_file)
diff --git a/gcc/ipa.c b/gcc/ipa.c
index b1844db256e..1230448ecbf 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -370,6 +370,23 @@ function_and_variable_visibility (bool whole_program)
happy. Clear the flag here to avoid confusion in middle-end. */
if (DECL_COMDAT (node->decl) && !TREE_PUBLIC (node->decl))
DECL_COMDAT (node->decl) = 0;
+ /* For external decls stop tracking same_comdat_group, it doesn't matter
+ what comdat group they are in when they won't be emitted in this TU,
+ and simplifies later passes. */
+ if (node->same_comdat_group && DECL_EXTERNAL (node->decl))
+ {
+ struct cgraph_node *n = node, *next;
+ do
+ {
+ /* If at least one of same comdat group functions is external,
+ all of them have to be, otherwise it is a front-end bug. */
+ gcc_assert (DECL_EXTERNAL (n->decl));
+ next = n->same_comdat_group;
+ n->same_comdat_group = NULL;
+ n = next;
+ }
+ while (n != node);
+ }
gcc_assert ((!DECL_WEAK (node->decl) && !DECL_COMDAT (node->decl))
|| TREE_PUBLIC (node->decl) || DECL_EXTERNAL (node->decl));
if (cgraph_externally_visible_p (node, whole_program))
diff --git a/gcc/langhooks.c b/gcc/langhooks.c
index 8505ec40b98..92eacd465e0 100644
--- a/gcc/langhooks.c
+++ b/gcc/langhooks.c
@@ -604,6 +604,8 @@ lhd_begin_section (const char *name)
/* Save the old section so we can restore it in lto_end_asm_section. */
gcc_assert (!saved_section);
saved_section = in_section;
+ if (!saved_section)
+ saved_section = text_section;
/* Create a new section and switch to it. */
section = get_section (name, SECTION_DEBUG, NULL);
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index e02999d98a1..e3deb9c8b06 100644
--- a/gcc/lto-cgraph.c
+++ b/gcc/lto-cgraph.c
@@ -340,7 +340,11 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
alias->thunk.alias);
}
else
- lto_output_uleb128_stream (ob->main_stream, 0);
+ {
+ lto_output_uleb128_stream (ob->main_stream, 0);
+ lto_output_fn_decl_index (ob->decl_state, ob->main_stream,
+ alias->thunk.alias);
+ }
alias = alias->previous;
}
while (alias);
@@ -630,7 +634,12 @@ input_node (struct lto_file_decl_data *file_data,
alias_decl = lto_file_decl_data_get_fn_decl (file_data, decl_index);
type = lto_input_uleb128 (ib);
if (!type)
- cgraph_same_body_alias (alias_decl, fn_decl);
+ {
+ tree real_alias;
+ decl_index = lto_input_uleb128 (ib);
+ real_alias = lto_file_decl_data_get_fn_decl (file_data, decl_index);
+ cgraph_same_body_alias (alias_decl, real_alias);
+ }
else
{
HOST_WIDE_INT fixed_offset = lto_input_uleb128 (ib);
diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index 9f831a85409..c390f272b08 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -1082,12 +1082,7 @@ input_gimple_stmt (struct lto_input_block *ib, struct data_in *data_in,
{
if (tem == field
|| (TREE_TYPE (tem) == TREE_TYPE (field)
- && (DECL_FIELD_OFFSET (tem)
- == DECL_FIELD_OFFSET (field))
- && (DECL_FIELD_BIT_OFFSET (tem)
- == DECL_FIELD_BIT_OFFSET (field))
- && (DECL_OFFSET_ALIGN (tem)
- == DECL_OFFSET_ALIGN (field))))
+ && compare_field_offset (tem, field)))
break;
}
/* In case of type mismatches across units we can fail
@@ -2167,6 +2162,7 @@ lto_input_ts_type_tree_pointers (struct lto_input_block *ib,
TYPE_BINFO (expr) = lto_input_tree (ib, data_in);
TYPE_CONTEXT (expr) = lto_input_tree (ib, data_in);
TYPE_CANONICAL (expr) = lto_input_tree (ib, data_in);
+ TYPE_STUB_DECL (expr) = lto_input_tree (ib, data_in);
}
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index 920cd270865..c489e429011 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -342,7 +342,8 @@ pack_ts_base_value_fields (struct bitpack_d *bp, tree expr)
bp_pack_value (bp, DECL_UNSIGNED (expr), 1);
else if (TYPE_P (expr))
bp_pack_value (bp, TYPE_UNSIGNED (expr), 1);
- bp_pack_value (bp, TREE_ASM_WRITTEN (expr), 1);
+ /* We write debug info two times, do not confuse the second one. */
+ bp_pack_value (bp, TYPE_P (expr) ? 0 : TREE_ASM_WRITTEN (expr), 1);
bp_pack_value (bp, TREE_NO_WARNING (expr), 1);
bp_pack_value (bp, TREE_USED (expr), 1);
bp_pack_value (bp, TREE_NOTHROW (expr), 1);
@@ -966,6 +967,7 @@ lto_output_ts_type_tree_pointers (struct output_block *ob, tree expr,
lto_output_tree_or_ref (ob, TYPE_BINFO (expr), ref_p);
lto_output_tree_or_ref (ob, TYPE_CONTEXT (expr), ref_p);
lto_output_tree_or_ref (ob, TYPE_CANONICAL (expr), ref_p);
+ lto_output_tree_or_ref (ob, TYPE_STUB_DECL (expr), ref_p);
}
@@ -2335,7 +2337,9 @@ write_symbol_vec (struct lto_streamer_cache_d *cache,
break;
}
- if (kind == GCCPK_COMMON && DECL_SIZE (t))
+ if (kind == GCCPK_COMMON
+ && DECL_SIZE (t)
+ && TREE_CODE (DECL_SIZE (t)) == INTEGER_CST)
size = (((uint64_t) TREE_INT_CST_HIGH (DECL_SIZE (t))) << 32)
| TREE_INT_CST_LOW (DECL_SIZE (t));
else
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index f6760172331..04807e30026 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,8 @@
+2009-12-15 Richard Guenther <rguenther@suse.de>
+
+ * lto.c (lto_fixup_field_decl): Fixup DECL_FIELD_OFFSET.
+ (lto_post_options): Do not disable debuginfo.
+
2009-12-14 Dmitry Gorbachev <d.g.gorbachev@gmail.com>
* Make-lang.in ($(LTO_EXE)): Use $(LINKER).
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index 4c187b5091e..970265c2a74 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -646,16 +646,6 @@ lto_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED)
static bool
lto_post_options (const char **pfilename ATTRIBUTE_UNUSED)
{
- /* FIXME lto: We have stripped enough type and other
- debugging information out of the IR that it may
- appear ill-formed to dwarf2out, etc. We must not
- attempt to generate debug info in lto1. A more
- graceful solution would disable the option flags
- rather than ignoring them, but we'd also have to
- worry about default debugging options. */
- write_symbols = NO_DEBUG;
- debug_info_level = DINFO_LEVEL_NONE;
-
/* -fltrans and -fwpa are mutually exclusive. Check for that here. */
if (flag_wpa && flag_ltrans)
error ("-fwpa and -fltrans are mutually exclusive");
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index c7ac7c32e15..e62bc02fe48 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -1376,7 +1376,7 @@ static void
lto_fixup_field_decl (tree t, void *data)
{
lto_fixup_decl_common (t, data);
- gcc_assert (no_fixup_p (DECL_FIELD_OFFSET (t)));
+ LTO_FIXUP_SUBTREE (DECL_FIELD_OFFSET (t));
LTO_FIXUP_SUBTREE (DECL_BIT_FIELD_TYPE (t));
LTO_FIXUP_SUBTREE (DECL_QUALIFIER (t));
gcc_assert (no_fixup_p (DECL_FIELD_BIT_OFFSET (t)));
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index d6e2b1f5432..7f43dc018af 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,8 @@
+2009-12-17 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * objc-act.c (objc_substitute_decl, build_ivar_reference,
+ get_super_receiver): Update build_indirect_ref calls.
+
2009-11-28 Jakub Jelinek <jakub@redhat.com>
* objc-act.c (generate_shared_structures): Remove unused sc_spec and
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index e39462dcc23..2680fd85bb5 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -3115,7 +3115,7 @@ objc_substitute_decl (tree expr, tree oldexpr, tree newexpr)
return build_indirect_ref (input_location,
objc_substitute_decl (TREE_OPERAND (expr, 0),
oldexpr,
- newexpr), "->");
+ newexpr), RO_ARROW);
default:
return expr;
}
@@ -6823,7 +6823,8 @@ build_ivar_reference (tree id)
}
return objc_build_component_ref (build_indirect_ref (input_location,
- self_decl, "->"), id);
+ self_decl, RO_ARROW),
+ id);
}
/* Compute a hash value for a given method SEL_NAME. */
@@ -8841,7 +8842,7 @@ get_super_receiver (void)
(input_location,
build_c_cast (input_location,
build_pointer_type (objc_class_type),
- super_class), "unary *");
+ super_class), RO_UNARY_STAR);
}
else
{
diff --git a/gcc/opts.c b/gcc/opts.c
index 7660bd894fd..540752769bf 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -1129,10 +1129,6 @@ decode_options (unsigned int argc, const char **argv)
Otherwise, symbols will be privatized too early, causing link
errors later. */
flag_whole_program = 0;
-
- /* FIXME lto. Disable var-tracking until debug information
- is properly handled in free_lang_data. */
- flag_var_tracking = 0;
#else
error ("LTO support has not been enabled in this configuration");
#endif
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 81085c7ba28..d443a59c05c 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,11 @@
+2009-12-18 Joseph Myers <joseph@codesourcery.com>
+
+ * zh_CN.po: Update.
+
+2009-12-16 Joseph Myers <joseph@codesourcery.com>
+
+ * zh_CN.po: Update.
+
2009-12-14 Joseph Myers <joseph@codesourcery.com>
* zh_CN.po: Update.
diff --git a/gcc/po/zh_CN.po b/gcc/po/zh_CN.po
index 368f6e2388a..3e57339a2ef 100644
--- a/gcc/po/zh_CN.po
+++ b/gcc/po/zh_CN.po
@@ -8,9 +8,9 @@ msgstr ""
"Project-Id-Version: gcc 4.5-b20091203\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2009-12-03 21:28+0000\n"
-"PO-Revision-Date: 2009-12-14 15:51+0800\n"
-"Last-Translator: Zuxy Meng <zuxy.meng@gmail.com>\n"
-"Language-Team: Chinese (simplified) <translation-team-zh-cn@lists.sourceforge.net>\n"
+"PO-Revision-Date: 2009-12-18 17:43+0800\n"
+"Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n"
+"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -1190,7 +1190,7 @@ msgstr "‘-%s’缺少实å‚"
#: gcc.c:4764
#, c-format
msgid "unable to locate default linker script '%s' in the library search paths"
-msgstr ""
+msgstr "无法在库æœç´¢è·¯å¾„中定ä½é»˜è®¤é“¾æŽ¥å™¨è„šæœ¬â€˜%s’"
#: gcc.c:4945
#, c-format
@@ -1483,7 +1483,7 @@ msgstr "%%:compare-debug-auxbase-opt 的实å‚太多"
#: gcc.c:8933
#, c-format
msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk"
-msgstr ""
+msgstr "%%:compare-debug-auxbase-opt çš„å‚数未以 .gk 结尾"
#: gcov.c:403
#, c-format
@@ -1838,7 +1838,7 @@ msgstr "’"
#: langhooks.c:355
msgid "At top level:"
-msgstr "在文件层:"
+msgstr "在文件作用域:"
#: langhooks.c:375 cp/error.c:2720
#, c-format
@@ -2360,7 +2360,7 @@ msgstr "给定的编译å•å…ƒå› è·¨è¿›ç¨‹å¸¸é‡ä¼ é€’造æˆçš„编译å•å…ƒä½“积
#: params.def:187
msgid "Maximal estimated growth of function body caused by early inlining of single call"
-msgstr ""
+msgstr "对å•ä¸ªè°ƒç”¨è¿›è¡Œçš„早期内è”所导致的函数体代ç è†¨èƒ€çš„最大估计值"
#: params.def:191
msgid "The size of stack frame to be considered large"
@@ -2515,9 +2515,8 @@ msgid "The minimum cost of an expensive expression in the loop invariant motion"
msgstr "循环ä¸å˜é‡è½¬ç§»æ—¶ä¸€æ¡æ˜‚贵的表达å¼çš„最å°å¼€é”€"
#: params.def:414
-#, fuzzy
msgid "Bound on number of candidates below that all candidates are considered in iv optimizations"
-msgstr "候选数界é™ä½ŽäºŽå…¨éƒ¨ä»¥ iv 优化æ¥çœ‹çš„候选数"
+msgstr "当备选少于此设定值时所有备选都将为归纳å˜é‡ä¼˜åŒ–所考虑"
#: params.def:422
msgid "Bound on number of iv uses in loop optimized in iv optimizations"
@@ -2680,9 +2679,8 @@ msgid "Whether to use canonical types"
msgstr "是å¦ä½¿ç”¨åˆä¹Žè§„范的类型"
#: params.def:699
-#, fuzzy
msgid "Maximum length of partial antic set when performing tree pre optimization"
-msgstr "当执行树预优化时部分 antic 设置的最大的长度"
+msgstr "进行树上部分冗余消除时部分å¯é¢„期集的最大长度"
#: params.def:709
msgid "Maximum size of a SCC before SCCVN stops processing a function"
@@ -2706,11 +2704,11 @@ msgstr "当数组大å°ä¸Žå¼€å…³åˆ†æ”¯çš„比率大于此值时开关转æ¢ä¸ä¼š
#: params.def:740
msgid "size of tiles for loop blocking"
-msgstr ""
+msgstr "循环分å—中æ¯å°å—的大å°"
#: params.def:747
msgid "Max basic blocks number in loop for loop invariant motion"
-msgstr ""
+msgstr "用作循环ä¸å˜é‡è½¬ç§»çš„循环中基本å—的最大数é‡"
#: params.def:753
msgid "Maximum number of instructions in basic block to be considered for SLP vectorization"
@@ -2718,19 +2716,19 @@ msgstr "考虑进行基本å—矢é‡åŒ–的基本å—能包å«çš„指令数上é™"
#: params.def:758
msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count"
-msgstr ""
+msgstr "为有未知路程计数的循环å¯ç”¨é¢„å–时最å°çš„指令/预å–比"
#: params.def:764
msgid "Min. ratio of insns to mem ops to enable prefetching in a loop"
-msgstr ""
+msgstr "为循环å¯ç”¨é¢„å–时最å°çš„指令/内存æ“作比"
#: params.def:771
msgid "The minimum UID to be used for a nondebug insn"
-msgstr ""
+msgstr "éžè°ƒè¯•æŒ‡ä»¤æ‰€ä½¿ç”¨çš„æœ€å° UID"
#: params.def:776
msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with"
-msgstr ""
+msgstr "IPA-SRA 考虑将指å‘çš„èšåˆçš„指针替æ¢ä¸ºå‚数时这些å‚数总和大å°ç›¸å¯¹åŽŸæŒ‡é’ˆå‚数大å°å€æ•°çš„最大值"
#: config/alpha/alpha.c:5131
#, c-format
@@ -3192,14 +3190,14 @@ msgid "'%%&' used without any local dynamic TLS references"
msgstr "使用‘%%&’ æ—¶æ²¡æœ‰æŒ‡å®šä»»ä½•åŠ¨æ€ TLS 引用"
#: config/i386/i386.c:11445 config/i386/i386.c:11520
-#, fuzzy, c-format
+#, c-format
msgid "invalid operand size for operand code '%c'"
-msgstr "fr30_print_operand:无效的 %%x 代ç "
+msgstr "æ“作数代ç â€˜%c’的æ“作数大å°æ— æ•ˆ"
#: config/i386/i386.c:11515
-#, fuzzy, c-format
+#, c-format
msgid "invalid operand type used with operand code '%c'"
-msgstr "代ç â€˜%c’的æ“作数无效"
+msgstr "æ“作数代ç â€˜%c’的æ“作数类型无效"
#: config/i386/i386.c:11595 config/i386/i386.c:11635
#, c-format
@@ -3310,7 +3308,7 @@ msgstr "错误的æ“作数"
#: config/lm32/lm32.c:582
msgid "can't use non gp relative absolute address"
-msgstr ""
+msgstr "ä¸èƒ½ä½¿ç”¨éž GP 相对的ç»å¯¹åœ°å€"
#: config/lm32/lm32.c:586
msgid "invalid addressing mode"
@@ -3704,12 +3702,12 @@ msgstr "output_move_single:"
#: config/vax/vax.c:399
#, c-format
msgid "symbol used with both base and indexed registers"
-msgstr ""
+msgstr "符å·åŒæ—¶ä½¿ç”¨äº†åŸºå€å’Œå˜å€å¯„存器"
#: config/vax/vax.c:408
#, c-format
msgid "symbol with offset used in PIC mode"
-msgstr ""
+msgstr "带å移é‡çš„符å·åœ¨ PIC 模å¼ä¸‹è¢«ä½¿ç”¨"
#: config/vax/vax.c:494
#, c-format
@@ -3868,7 +3866,7 @@ msgstr "<表达å¼é”™è¯¯>"
#: cp/error.c:2295
msgid "<unknown operator>"
-msgstr "<未知的æ“作符>"
+msgstr "<未知的è¿ç®—符>"
#: cp/error.c:2502
msgid "<unknown>"
@@ -4055,14 +4053,14 @@ msgid "Integer outside symmetric range implied by Standard Fortran at %L"
msgstr "%L处整数超出标准 Fortran éšå«çš„对称范围"
#: fortran/arith.c:1151 fortran/arith.c:1173
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: Noninteger exponent in an initialization expression at %L"
-msgstr "Fortran 2003:在 %L 处åˆå§‹åŒ–表达å¼ä¸­éžæ•´æ•°æŒ‡æ•°"
+msgstr "Fortran 2003:%L处åˆå§‹åŒ–表达å¼ä¸­éžæ•´æ•°æŒ‡æ•°"
#: fortran/arith.c:1159
#, no-c-format
msgid "Raising a negative REAL at %L to a REAL power is prohibited"
-msgstr ""
+msgstr "%L处ä¸èƒ½ä¸ºè´Ÿçš„ REAL å– REAL 次幂"
#: fortran/arith.c:1666
msgid "elemental binary operation"
@@ -4079,14 +4077,14 @@ msgid "Arithmetic overflow converting %s to %s at %L. This check can be disabled
msgstr "%3$L处将 %1$s 转æ¢åˆ° %2$s 时算术溢出。这一检查å¯ç”¨ -fno-range-check 选项关闭"
#: fortran/arith.c:2259
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Arithmetic underflow converting %s to %s at %L. This check can be disabled with the option -fno-range-check"
-msgstr "%3$L 处将 %1$s 转æ¢åˆ° %2$s 时算术下溢。这一检查å¯ç”¨ -fno-range-check 选项ç¦ç”¨"
+msgstr "%3$L处将 %1$s 转æ¢åˆ° %2$s 时算术下溢。这一检查å¯ç”¨ -fno-range-check 选项ç¦ç”¨"
#: fortran/arith.c:2264
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Arithmetic NaN converting %s to %s at %L. This check can be disabled with the option -fno-range-check"
-msgstr "%2$L 处将 %1$s 转æ¢åˆ° %2$s 时算术 NaN。这一检查å¯ç”¨ -fno-range-check 选项ç¦ç”¨"
+msgstr "%3$L处将 %1$s 转æ¢åˆ° %2$s 时产生算术 NaN。这一检查å¯ç”¨ -fno-range-check 选项ç¦ç”¨"
#: fortran/arith.c:2269
#, no-c-format
@@ -4169,9 +4167,9 @@ msgid "Array specification at %C has more than %d dimensions"
msgstr "%C处数组指定了多于 %d 的维数"
#: fortran/array.c:438
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2008: Array specification at %C with more than 7 dimensions"
-msgstr "Fortran 2008:%C 处数组规格说明多于 7 个维数"
+msgstr "Fortran 2008:%C处多于 7 维的数组"
#: fortran/array.c:645
#, no-c-format
@@ -4194,9 +4192,9 @@ msgid "Fortran 2003: [...] style array constructors at %C"
msgstr "Fortran 2003:%C处 [...] 风格的数组构造"
#: fortran/array.c:916
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: Array constructor including type specification at %C"
-msgstr "Fortran 2003:%C 处包å«ç±»åž‹è§„格说明的数组构造器"
+msgstr "Fortran 2003:%C处包å«æŒ‡å®šç±»åž‹çš„数组构造"
#: fortran/array.c:931
#, no-c-format
@@ -4276,7 +4274,7 @@ msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须具有与‘%4$sâ€
#: fortran/check.c:241
#, no-c-format
msgid "'%s' argument of '%s' intrinsic at %L must be of rank %d"
-msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须为 %4$d"
+msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’的秩必须为 %4$d"
#: fortran/check.c:256
#, no-c-format
@@ -4392,14 +4390,14 @@ msgid "'%s' argument of '%s' intrinsic at %L must be default real"
msgstr "%3$L处内建函数‘%2$s’的‘%1$s’实å‚类型必须为默认实型"
#: fortran/check.c:1171 fortran/check.c:2024 fortran/check.c:2078
-#, fuzzy, c-format
+#, c-format
msgid "arguments '%s' and '%s' for intrinsic %s"
-msgstr "%2$L处 %1$s 内建函数缺少实å‚"
+msgstr "‘%s’和‘%s’用作内建函数‘%s’的实å‚"
#: fortran/check.c:1244
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2008: COMPLEX argument '%s' argument of '%s' intrinsic at %L"
-msgstr "Fortran 2003:%2$L处的‘%1$s’内建函数有 KIND 实å‚"
+msgstr "Fortran 2003:%3L处的‘%2s’内建函数有 COMPLEX 实å‚‘%1$s’"
#: fortran/check.c:1425
#, no-c-format
@@ -4429,7 +4427,7 @@ msgstr "%3$L处内建函数‘%2$s’的实å‚‘a%1$d’必须是 %4$s(%5$d)"
#: fortran/check.c:1830
#, fuzzy, c-format
msgid "arguments 'a%d' and 'a%d' for intrinsic '%s'"
-msgstr "%2$L处 %1$s 内建函数缺少实å‚"
+msgstr "‘%s’和‘%s’用作内建函数‘%s’的实å‚"
#: fortran/check.c:1852
#, no-c-format
@@ -4474,7 +4472,7 @@ msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实å‚必须有ç›
#: fortran/check.c:2238 fortran/intrinsic.c:3639
#, fuzzy, c-format
msgid "arguments '%s' and '%s' for intrinsic '%s'"
-msgstr "%2$L处 %1$s 内建函数缺少实å‚"
+msgstr "‘%s’和‘%s’用作内建函数‘%s’的实å‚"
#: fortran/check.c:2289 fortran/check.c:3244
#, fuzzy, no-c-format
@@ -4587,9 +4585,9 @@ msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have identical shape
msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实å‚必须有相åŒçš„外形。"
#: fortran/check.c:3514 fortran/check.c:3546
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Size of '%s' argument of '%s' intrinsic at %L too small (%i/%i)"
-msgstr "%3$L 处内建函数“%2$sâ€çš„实å‚“%1$sâ€çš„大å°å¤ªå°( %4$i/$5$i)"
+msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’的大å°å¤ªå°(%4$i/%5$i)"
#: fortran/check.c:3554
#, no-c-format
@@ -4832,9 +4830,9 @@ msgid "NULL() initialization at %C is ambiguous"
msgstr "%C处的 NULL() åˆå§‹åŒ–有歧义"
#: fortran/decl.c:1654 fortran/decl.c:5833
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Duplicate array spec for Cray pointee at %C"
-msgstr "%C 处 Cray 指针的é‡å¤æ•°ç»„指定"
+msgstr "%C处 Cray 指针é‡å¤æŒ‡å®šäº†æ•°ç»„"
#: fortran/decl.c:1725
#, fuzzy, no-c-format
@@ -4952,9 +4950,9 @@ msgid "DOUBLE COMPLEX at %C does not conform to the Fortran 95 standard"
msgstr "%C处的 DOUBLE COMPLEX ä¸éµå¾ª Fortran 95 标准"
#: fortran/decl.c:2387
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: CLASS statement at %C"
-msgstr "Fortran 2003:%C处的 IMPORT 语å¥"
+msgstr "Fortran 2003:%C处的 CLASS 语å¥"
#: fortran/decl.c:2410 fortran/decl.c:2419 fortran/decl.c:2732
#: fortran/decl.c:2740
@@ -5194,7 +5192,7 @@ msgstr "%C处带有 NAME çš„ BIND(C)过程ä¸èƒ½æœ‰ POINTER 属性"
#: fortran/decl.c:4315
#, no-c-format
msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME"
-msgstr "%C处的哑过程‘%s’ä¸èƒ½æœ‰å¸¦æœ‰ NAME çš„ BIND(C) 属性"
+msgstr "%C处的哑过程ä¸èƒ½æœ‰å¸¦æœ‰ NAME çš„ BIND(C) 属性"
#: fortran/decl.c:4338
#, no-c-format
@@ -5214,7 +5212,7 @@ msgstr "%C处绑定属性åŽéœ€è¦â€˜::’"
#: fortran/decl.c:4455
#, no-c-format
msgid "NOPASS or explicit interface required at %C"
-msgstr ""
+msgstr "%Cå¤„éœ€è¦ NOPASS 或显å¼æŽ¥å£"
#: fortran/decl.c:4459
#, no-c-format
@@ -5437,12 +5435,12 @@ msgstr "在%C处需è¦â€œ,â€æˆ–语å¥å°¾"
#: fortran/decl.c:5891
#, no-c-format
msgid "INTENT is not allowed inside of BLOCK at %C"
-msgstr ""
+msgstr "INTENT ä¸èƒ½ç”¨åœ¨%C处 BLOCK 内"
#: fortran/decl.c:5923
#, no-c-format
msgid "OPTIONAL is not allowed inside of BLOCK at %C"
-msgstr ""
+msgstr "OPTIONAL ä¸èƒ½ç”¨åœ¨%C处 BLOCK 内"
#: fortran/decl.c:5942
#, no-c-format
@@ -5522,7 +5520,7 @@ msgstr "%C SAVE 语å¥è¯­æ³•é”™è¯¯"
#: fortran/decl.c:6386
#, no-c-format
msgid "VALUE is not allowed inside of BLOCK at %C"
-msgstr ""
+msgstr "VALUE ä¸èƒ½ç”¨åœ¨%C处 BLOCK 内"
#: fortran/decl.c:6390
#, no-c-format
@@ -5694,7 +5692,7 @@ msgstr "%C处需è¦ç»‘定属性"
#: fortran/decl.c:7309
#, no-c-format
msgid "NON_OVERRIDABLE and DEFERRED can't both appear at %C"
-msgstr ""
+msgstr "NON_OVERRIDABLE å’Œ DEFERRED ä¸èƒ½åŒæ—¶å‡ºçŽ°åœ¨%C处"
#: fortran/decl.c:7321
#, no-c-format
@@ -5729,7 +5727,7 @@ msgstr "%C处需è¦ç»‘定å"
#: fortran/decl.c:7428
#, no-c-format
msgid "'=> target' is invalid for DEFERRED binding at %C"
-msgstr ""
+msgstr "‘=> target’对%C处的 DEFERRED 绑定而言无效"
#: fortran/decl.c:7434
#, no-c-format
@@ -6298,9 +6296,9 @@ msgid "Syntax error in generic specification at %C"
msgstr "%C 泛型指定语法错误"
#: fortran/interface.c:201
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Syntax error: Trailing garbage in INTERFACE statement at %C"
-msgstr "语法错误:在 %C 处 INTERFACE 语å¥ä¸­å°¾éšçš„垃圾"
+msgstr "语法错误:在 %C处 INTERFACE 语å¥åŽæœ‰åžƒåœ¾å­—符"
#: fortran/interface.c:220
#, no-c-format
@@ -6313,14 +6311,14 @@ msgid "Fortran 2003: ABSTRACT INTERFACE at %C"
msgstr "Fortran 2003:%C处的 ABSTRACT INTERFACE"
#: fortran/interface.c:261
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Syntax error in ABSTRACT INTERFACE statement at %C"
-msgstr "%C 处 ABSTRACT INTERFACE 语å¥ä¸­çš„语法错误"
+msgstr "%C处 ABSTRACT INTERFACE 语å¥è¯­æ³•é”™è¯¯"
#: fortran/interface.c:292
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Syntax error: Trailing garbage in END INTERFACE statement at %C"
-msgstr "语法错误:END INTERFACE 语å¥ä¸­å°¾éšçš„垃圾"
+msgstr "语法错误:%C处 END INTERFACE 语å¥åŽæœ‰åžƒåœ¾å­—符"
#: fortran/interface.c:305
#, no-c-format
@@ -6368,14 +6366,14 @@ msgid "Assignment operator interface at %L must have two arguments"
msgstr "%L处的赋值è¿ç®—符接å£å¿…须有两个实å‚"
#: fortran/interface.c:635
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Assignment operator interface at %L must not redefine an INTRINSIC type assignment"
-msgstr "%L 处的赋值è¿ç®—符接å£ä¸å¿…é‡å¤å®šä¹‰ä¸€ä¸ª INTRINSIC 类型"
+msgstr "%L处的赋值è¿ç®—符接å£ä¸èƒ½é‡å¤å®šä¹‰ä¸€ä¸ª INTRINSIC 类型赋值"
#: fortran/interface.c:644
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Intrinsic operator interface at %L must be a FUNCTION"
-msgstr "%L 处内建è¿ç®—符接å£å¿…须是一个 FUNCTION"
+msgstr "%L处内建è¿ç®—符接å£å¿…须是一个 FUNCTION"
#: fortran/interface.c:655
#, fuzzy, no-c-format
@@ -6403,9 +6401,9 @@ msgid "Operator interface at %L conflicts with intrinsic interface"
msgstr "%L处è¿ç®—符接å£ä¸Žå†…建接å£å†²çª"
#: fortran/interface.c:1075
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Procedure '%s' in %s at %L has no explicit interface"
-msgstr "在 %3$L 处“%2$sâ€ä¸­çš„过程“%1$sâ€æ²¡æœ‰æ˜¾å¼æŽ¥å£"
+msgstr "%3$L处 %2$s 中的过程‘%1$s’没有显å¼æŽ¥å£"
#: fortran/interface.c:1078
#, no-c-format
@@ -6513,9 +6511,9 @@ msgid "Expected a PURE procedure for argument '%s' at %L"
msgstr "å‚数‘%s’在%L处需è¦ä¸€ä¸ª PURE 过程"
#: fortran/interface.c:1970
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Actual argument for '%s' cannot be an assumed-size array at %L"
-msgstr "“%sâ€çš„实å‚在 %L 处必须ä¸æ˜¯ä¸€ä¸ªå‡å®šå¤§å°çš„数组"
+msgstr "‘%s’的实å‚在%L处必须ä¸æ˜¯ä¸€ä¸ªå‡å®šå¤§å°çš„数组"
#: fortran/interface.c:1979
#, no-c-format
@@ -6528,9 +6526,9 @@ msgid "Actual argument for '%s' must be ALLOCATABLE at %L"
msgstr "‘%s’的实å‚在%L处必须是 ALLOCATABLE çš„"
#: fortran/interface.c:2001
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Actual argument at %L must be definable as the dummy argument '%s' is INTENT = OUT/INOUT"
-msgstr "在 %L 处实际的å‚数必须是å¯å®šä¹‰çš„,因为 å‡å‚数“%sâ€æ˜¯ INTENT = OUT/INOUT"
+msgstr "%L处的实å‚必须是å¯å®šä¹‰çš„,因为哑å‚数‘%s’是 INTENT = OUT/INOUT"
#: fortran/interface.c:2010
#, fuzzy, no-c-format
@@ -6648,9 +6646,9 @@ msgid "Type of argument '%s' in call to '%s' at %L should be %s, not %s"
msgstr "%3$L 处对“%2$sâ€çš„调用中å‚数“%1$sâ€çš„类型应该是“%1$sâ€ï¼Œè€Œéžâ€œ%1$sâ€"
#: fortran/intrinsic.c:3717
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Intrinsic '%s' (is %s) is used at %L"
-msgstr "%3$L 处使用了内建的“%1$sâ€(是 %2$s)"
+msgstr "%3$L处使用了内建的‘%1$s’(是 %2$s)"
#: fortran/intrinsic.c:3781
#, no-c-format
@@ -6663,9 +6661,9 @@ msgid "Fortran 2003: Elemental function as initialization expression with non-in
msgstr "Fortran 2003:作为åˆå§‹è¡¨è¾¾å¼çš„基本函数在 %L 处用整数或éžå­—符的å‚æ•°"
#: fortran/intrinsic.c:3918
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Subroutine call to intrinsic '%s' at %L is not PURE"
-msgstr "在 %2$L 处调用内建“%1$sâ€çš„å­ä¾‹ç¨‹ä¸æ˜¯ PURE"
+msgstr "在%2$L处调用内建‘%1$s’的å­ä¾‹ç¨‹ä¸æ˜¯ PURE"
#: fortran/intrinsic.c:3990
#, no-c-format
@@ -6985,9 +6983,9 @@ msgid "Fortran 2003: ENCODING= at %C not allowed in Fortran 95"
msgstr "Fortran 2003:%C处的 ENCODING= ä¸å…许用在 Fortran 95 中"
#: fortran/io.c:1965
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran F2003: ROUND= at %C not allowed in Fortran 95"
-msgstr "Fortran 2003:%C处的 ASYNCHRONOUS= ä¸å…许用在 Fortran 95 中"
+msgstr "Fortran 2003:%C处的 ROUND= ä¸å…许用在 Fortran 95 中"
#: fortran/io.c:1985
#, no-c-format
@@ -7005,9 +7003,9 @@ msgid "UNIT number in CLOSE statement at %L must be non-negative"
msgstr "%L处 CASE 语å¥ä¸­çš„表达å¼å¿…须具有 %s 类型"
#: fortran/io.c:2343 fortran/match.c:1976
-#, fuzzy, no-c-format
+#, no-c-format
msgid "%s statement not allowed in PURE procedure at %C"
-msgstr "OPEN å™è¿°ä¸å…许出现在 %C 处的 PURE 程åºä¸­"
+msgstr "%s 语å¥ä¸å…许出现在%C处的 PURE 程åºä¸­"
#: fortran/io.c:2375 fortran/io.c:2783
#, fuzzy, no-c-format
@@ -7136,9 +7134,9 @@ msgid "Syntax error in %s statement at %C"
msgstr "%s 语å¥åœ¨%C处语法错误"
#: fortran/io.c:3173
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: Internal file at %L with namelist"
-msgstr "Fortran 2003:属性 %s 在 %L 处出现在 TYPE 定义中"
+msgstr "Fortran 2003:%L处内部文件有å字列表"
#: fortran/io.c:3227
#, no-c-format
@@ -7146,14 +7144,14 @@ msgid "ASYNCHRONOUS= specifier at %L must be an initialization expression"
msgstr "必须为%L处的 ASYNCHRONOUS= 指定一个åˆå§‹åŒ–表达å¼"
#: fortran/io.c:3295
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: PAD= at %C not allowed in Fortran 95"
-msgstr "Fortran 2003:%C 处的 PAD= ä¸å…许用在 Fortran 95 中"
+msgstr "Fortran 2003:%C处的 PAD= ä¸å…许用在 Fortran 95 中"
#: fortran/io.c:3316
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: ROUND= at %C not allowed in Fortran 95"
-msgstr "Fortran 2003:%C处的 ASYNCHRONOUS= ä¸å…许用在 Fortran 95 中"
+msgstr "Fortran 2003:%C处的 ROUND= ä¸å…许用在 Fortran 95 中"
#: fortran/io.c:3510
#, no-c-format
@@ -7291,9 +7289,9 @@ msgid "Invalid form of PROGRAM statement at %C"
msgstr "%C处 PROGRAM 语å¥æ ¼å¼æ— æ•ˆ"
#: fortran/match.c:1389 fortran/match.c:1470
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Obsolescent feature: Arithmetic IF statement at %C"
-msgstr "%L 处的算数 IF 语å¥è¦æ±‚一个数字表达å¼"
+msgstr "已过时的特性:%C处的算术 IF 语å¥"
#: fortran/match.c:1445
#, no-c-format
@@ -7412,9 +7410,9 @@ msgid "Invalid type-spec at %C"
msgstr "%C处类型指定无效"
#: fortran/match.c:2422
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: typespec in ALLOCATE at %L"
-msgstr "Fortran 2003:%s 属性与 %s 属性冲çªï¼Œåœ¨â€˜%s’中,ä½äºŽ %L"
+msgstr "Fortran 2003:%L处 ALLOCATE 中有 typespec"
#: fortran/match.c:2454
#, fuzzy, no-c-format
@@ -7437,9 +7435,9 @@ msgid "Allocate-object at %C is not a nonprocedure pointer or an allocatable var
msgstr ""
#: fortran/match.c:2518 fortran/match.c:2772
-#, no-c-format
+#, fuzzy, no-c-format
msgid "Redundant STAT tag found at %L "
-msgstr ""
+msgstr "%L有多余的 ERRMSG 标记"
#: fortran/match.c:2537
#, no-c-format
@@ -7447,9 +7445,9 @@ msgid "Fortran 2003: ERRMSG tag at %L"
msgstr "Fortran 2003:%L处的 ERRMSG 标记"
#: fortran/match.c:2544 fortran/match.c:2798
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Redundant ERRMSG tag found at %L "
-msgstr "Fortran 2003:%L处的 ERRMSG 标记"
+msgstr "%L有多余的 ERRMSG 标记"
#: fortran/match.c:2560
#, no-c-format
@@ -7457,14 +7455,14 @@ msgid "Fortran 2003: SOURCE tag at %L"
msgstr "Fortran 2003:%L处的 SOURCE 标记"
#: fortran/match.c:2567
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Redundant SOURCE tag found at %L "
-msgstr "Fortran 2003:%L处的 SOURCE 标记"
+msgstr "%L有多余的 SOURCE 标记"
#: fortran/match.c:2574
#, no-c-format
msgid "SOURCE tag at %L conflicts with the typespec at %L"
-msgstr ""
+msgstr "%L处的 SOURCE 标记与%L处的类型指定冲çª"
#: fortran/match.c:2581
#, no-c-format
@@ -7492,9 +7490,9 @@ msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE"
msgstr "%C处的替代 RETURN 语å¥åªå…许出现在 SUBROUTINE 中"
#: fortran/match.c:2857
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Obsolescent feature: Alternate RETURN at %C"
-msgstr "%L ä¸å…许有 ALTERNATIVE RETURN"
+msgstr "已过时的特性:%C处交替的 RETURN"
#: fortran/match.c:2887
#, no-c-format
@@ -7615,9 +7613,9 @@ msgid "Statement function at %L is recursive"
msgstr "%L处的语å¥å‡½æ•°æ˜¯é€’å½’çš„"
#: fortran/match.c:3800
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Obsolescent feature: Statement function at %C"
-msgstr "%L处的语å¥å‡½æ•°æ˜¯é€’å½’çš„"
+msgstr "已过时的特性:%C处的语å¥å‡½æ•°"
#: fortran/match.c:3886
#, no-c-format
@@ -7635,9 +7633,9 @@ msgid "Selector in SELECT TYPE at %C is not a named variable; use associate-name
msgstr ""
#: fortran/match.c:4047
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Selector shall be polymorphic in SELECT TYPE statement at %C"
-msgstr "%C处 PROTECTED 语å¥è¯­æ³•é”™è¯¯"
+msgstr "%C处 SELECT TYPE 语å¥ä¸­çš„选择å­åº”该是多æ€çš„"
#: fortran/match.c:4075
#, no-c-format
@@ -7645,9 +7643,9 @@ msgid "Unexpected CASE statement at %C"
msgstr "%C处éžé¢„期的 CASE 语å¥"
#: fortran/match.c:4127
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Syntax error in CASE specification at %C"
-msgstr "%C 泛型指定语法错误"
+msgstr "%C处 CASE 指定语法错误"
#: fortran/match.c:4145
#, no-c-format
@@ -7716,9 +7714,9 @@ msgid "Out of memory-- malloc() failed"
msgstr "内存ä¸è¶³ -- malloc() 失败"
#: fortran/module.c:519
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: module nature in USE statement at %C"
-msgstr "Fortran 2003:%C 处的 USE 语å¥ä¸­æ¨¡å—本性"
+msgstr "Fortran 2003:%C处的 USE 语å¥ä¸­æ¨¡å—本性"
#: fortran/module.c:531
#, fuzzy, no-c-format
@@ -7726,9 +7724,9 @@ msgid "Module nature in USE statement at %C shall be either INTRINSIC or NON_INT
msgstr "在 %C 处 USE 语å¥ä¸­çš„模å—本性应该是 INTRINSIC 或 NON_INTRINSIC 中的任何一个"
#: fortran/module.c:544
-#, fuzzy, no-c-format
+#, no-c-format
msgid "\"::\" was expected after module nature at %C but was not found"
-msgstr "在 %C 处在模å—本性åŽæœŸå¾…的是“::â€ï¼Œä½†æ˜¯æ‰¾ä¸åˆ°"
+msgstr "%C处在模å—本性åŽéœ€è¦â€œ::â€"
#: fortran/module.c:553
#, no-c-format
@@ -7853,14 +7851,14 @@ msgid "Symbol '%s' referenced at %L not found in module '%s'"
msgstr "%2$L处引用的符å·â€˜%1$s’在模å—‘%3$s’中找ä¸åˆ°"
#: fortran/module.c:4443
-#, fuzzy, no-c-format
+#, no-c-format
msgid "User operator '%s' referenced at %L not found in module '%s'"
-msgstr "%2$L 处引用的用户æ“作符“%1$sâ€åœ¨æ¨¡å—“%3$sâ€ä¸­æ‰¾ä¸åˆ°"
+msgstr "%2$L处引用的用户è¿ç®—符‘%1$s’在模å—‘%3$s’中找ä¸åˆ°"
#: fortran/module.c:4448
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'"
-msgstr "%2$L 处引用的内建æ“作符“%1$sâ€åœ¨æ¨¡å—“%3$sâ€ä¸­æ‰¾ä¸åˆ°"
+msgstr "%2$L处引用的内建è¿ç®—符‘%1$s’在模å—‘%3$s’中找ä¸åˆ°"
#: fortran/module.c:5057
#, no-c-format
@@ -7957,9 +7955,9 @@ msgid "Unexpected end of module"
msgstr "éžé¢„期的模å—结æŸ"
#: fortran/module.c:5478
-#, fuzzy, no-c-format
+#, no-c-format
msgid "File '%s' opened at %C is not a GFORTRAN module file"
-msgstr "%2$C 处打开的文件的“%1$sâ€å¹¶éžä¸€ä¸ª GFORTRAN 模å—文件"
+msgstr "%2$C处打开的文件的‘%1$s’并éžä¸€ä¸ª GFORTRAN 模å—文件"
#: fortran/module.c:5485
#, fuzzy, no-c-format
@@ -7997,9 +7995,9 @@ msgid "COLLAPSE clause argument not constant positive integer at %C"
msgstr "%C 处的 COLLAPSE 分å¥å‚æ•°ä¸æ˜¯ä¸å˜çš„正整数"
#: fortran/openmp.c:542
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Threadprivate variable at %C is an element of a COMMON block"
-msgstr " %C 处 Threadprivate å˜é‡æ˜¯ä¸ª COMMON å—的元素"
+msgstr " %C 处线程局部å˜é‡æ˜¯ä¸ª COMMON å—的元素"
#: fortran/openmp.c:582
#, no-c-format
@@ -8033,9 +8031,9 @@ msgid "Symbol '%s' present on multiple clauses at %L"
msgstr "%L 处符å·â€œ%1$sâ€å‡ºçŽ°åœ¨å¤šä¸ªåˆ†å¥ä¸Š"
#: fortran/openmp.c:874
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Non-THREADPRIVATE object '%s' in COPYIN clause at %L"
-msgstr "%2$L 处 COPYIN 分å¥ä¸­çš„ Non-THREADPRIVATE 对象“%1$sâ€"
+msgstr "%2$L处 COPYIN 分å¥ä¸­çš„éž THREADPRIVATE 对象‘%1$s’"
#: fortran/openmp.c:877
#, fuzzy, no-c-format
@@ -8053,9 +8051,9 @@ msgid "COPYPRIVATE clause object '%s' at %L has ALLOCATABLE components"
msgstr "%2$L 处 COPYPRIVATE 分å¥å¯¹è±¡â€œ%1$sâ€æœ‰ ALLOCATABLE 组件"
#: fortran/openmp.c:896
-#, fuzzy, no-c-format
+#, no-c-format
msgid "THREADPRIVATE object '%s' in SHARED clause at %L"
-msgstr "%2$L 处 SHARED 分å¥ä¸­çš„ THREADPRIVATE 对象“%1$sâ€"
+msgstr "%2$L处 SHARED 分å¥ä¸­çš„ THREADPRIVATE 对象‘%1$s’"
#: fortran/openmp.c:899
#, fuzzy, no-c-format
@@ -8063,9 +8061,9 @@ msgid "Cray pointee '%s' in SHARED clause at %L"
msgstr "%2$L 处 SHARED 分å¥ä¸­çš„ Cray 指针“%1$sâ€"
#: fortran/openmp.c:907
-#, fuzzy, no-c-format
+#, no-c-format
msgid "THREADPRIVATE object '%s' in %s clause at %L"
-msgstr "%2$L 处分å¥ä¸­çš„ THREADPRIVATE 对象“%1$sâ€"
+msgstr "%3$L处 %2$s 分å¥ä¸­çš„ THREADPRIVATE 对象‘%1$s’"
#: fortran/openmp.c:910
#, no-c-format
@@ -8198,14 +8196,14 @@ msgid "!$OMP DO collapsed loops don't form rectangular iteration space at %L"
msgstr "在 %L 处,!$OMP DO 崩溃的循环ä¸å½¢æˆçŸ©å½¢è¿­ä»£ç©ºç™½"
#: fortran/openmp.c:1477
-#, fuzzy, no-c-format
+#, no-c-format
msgid "collapsed !$OMP DO loops not perfectly nested at %L"
-msgstr "折å çš„ !$OMP DO 循环没有完美的嵌套于 %L 处"
+msgstr "折å çš„ !$OMP DO 循环没有完美的嵌套于%L处"
#: fortran/openmp.c:1486 fortran/openmp.c:1493
-#, fuzzy, no-c-format
+#, no-c-format
msgid "not enough DO loops for collapsed !$OMP DO at %L"
-msgstr "在 %L 处崩溃的 !$OMP DO 没有足够的 DO 循环"
+msgstr "%L处折å çš„ !$OMP DO 没有足够的 DO 循环"
#: fortran/options.c:308
#, no-c-format
@@ -8338,9 +8336,9 @@ msgid "Semicolon at %C needs to be preceded by statement"
msgstr "%C处分å·å‰å¿…须是一个语å¥"
#: fortran/parse.c:661 fortran/parse.c:855
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Ignoring statement label in empty statement at %L"
-msgstr "%C处语å¥æ ‡å·ä¸­æ•°å­—太多"
+msgstr "忽略%L处空语å¥ä¸­çš„语å¥æ ‡å·"
#: fortran/parse.c:782 fortran/parse.c:822
#, no-c-format
@@ -8429,24 +8427,24 @@ msgid "Fortran 2003: GENERIC binding at %C"
msgstr "Fortran 2003:%L处的 GENERIC 绑定"
#: fortran/parse.c:1864
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: FINAL procedure declaration at %C"
-msgstr "Fortran 2003:%C 处的的 FINAL 过程声明"
+msgstr "Fortran 2003:%C处的的 FINAL 过程声明"
#: fortran/parse.c:1876
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2008: Derived type definition at %C with empty CONTAINS section"
-msgstr "Fortran 2008:%C 处的派生类型定义有空的 CONTAINS 部分"
+msgstr "Fortran 2008:%C的派生类型定义有空的 CONTAINS 节"
#: fortran/parse.c:1887 fortran/parse.c:1993
-#, fuzzy, no-c-format
+#, no-c-format
msgid "PRIVATE statement in TYPE at %C must be inside a MODULE"
-msgstr "%C 处 TYPE 中的 PRIVATE 语å¥å¿…须在 MODULE 中"
+msgstr "%C处 TYPE 中的 PRIVATE 语å¥å¿…须在 MODULE 中"
#: fortran/parse.c:1895
-#, fuzzy, no-c-format
+#, no-c-format
msgid "PRIVATE statement at %C must precede procedure bindings"
-msgstr "%C 处 PRINT 语å¥å¿…须先于过程é™å®š"
+msgstr "%C 处 PRIVATE 语å¥å¿…须先于过程绑定"
#: fortran/parse.c:1903 fortran/parse.c:2009
#, no-c-format
@@ -8454,19 +8452,19 @@ msgid "Duplicate PRIVATE statement at %C"
msgstr "%C处é‡å¤çš„ PRIVATE 语å¥"
#: fortran/parse.c:1913
-#, fuzzy, no-c-format
+#, no-c-format
msgid "SEQUENCE statement at %C must precede CONTAINS"
-msgstr "%C 处 SEQUENCE 语å¥å¿…须先于 CONTAINS"
+msgstr "%C处 SEQUENCE 语å¥å¿…须先于 CONTAINS"
#: fortran/parse.c:1918
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Already inside a CONTAINS block at %C"
-msgstr "å·²ç»åœ¨ %C 上的一个 CONTAINS å—内部 "
+msgstr "%C处已在一个 CONTAINS å—内部 "
#: fortran/parse.c:1973
-#, fuzzy, no-c-format
+#, no-c-format
msgid "FINAL declaration at %C must be inside CONTAINS"
-msgstr "%C 处的 FINAL 声明必须是在 CONTAINS 内"
+msgstr "%C处的 FINAL 声明必须在 CONTAINS 内"
#: fortran/parse.c:1982
#, no-c-format
@@ -8474,19 +8472,19 @@ msgid "Fortran 2003: Derived type definition at %C without components"
msgstr "Fortran 2003:%C处的派生类型定义没有组件"
#: fortran/parse.c:2001
-#, fuzzy, no-c-format
+#, no-c-format
msgid "PRIVATE statement at %C must precede structure components"
-msgstr "%C 处 PRIVATE 语å¥å¿…须先于结构组件"
+msgstr "%C处 PRIVATE 语å¥å¿…须先于结构组件"
#: fortran/parse.c:2022
-#, fuzzy, no-c-format
+#, no-c-format
msgid "SEQUENCE statement at %C must precede structure components"
-msgstr "%C 处 SEQUENCE 语å¥å¿…须先于结构组件"
+msgstr "%C处 SEQUENCE 语å¥å¿…须先于结构组件"
#: fortran/parse.c:2029
-#, fuzzy, no-c-format
+#, no-c-format
msgid "SEQUENCE attribute at %C already specified in TYPE statement"
-msgstr "%C 处 SEQUENCE 属性已ç»åœ¨ TYPE 语å¥ä¸­æŒ‡å®š"
+msgstr "%C处 SEQUENCE 属性已ç»åœ¨ TYPE 语å¥ä¸­æŒ‡å®š"
#: fortran/parse.c:2034
#, no-c-format
@@ -8494,9 +8492,9 @@ msgid "Duplicate SEQUENCE statement at %C"
msgstr "%C处é‡å¤çš„ SEQUENCE 语å¥"
#: fortran/parse.c:2045
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Fortran 2003: CONTAINS block in derived type definition at %C"
-msgstr "Fortran 2003:%C 处的派生类型定义中的 CONTAINS å—"
+msgstr "Fortran 2003:%C处的派生类型定义中的 CONTAINS å—"
#: fortran/parse.c:2135
#, fuzzy, no-c-format
@@ -8534,9 +8532,9 @@ msgid "INTERFACE procedure '%s' at %L has the same name as the enclosing procedu
msgstr "在 %2$L 处 INTERFACE 过程“%1$sâ€æœ‰ä¸ŽåŒ…装过程相åŒçš„åå­—"
#: fortran/parse.c:2431
-#, fuzzy, no-c-format
+#, no-c-format
msgid "%s statement is not allowed inside of BLOCK at %C"
-msgstr "%C 处的 IF 语å¥å—标记ä¸é€‚åˆ"
+msgstr "%s 语å¥ä¸èƒ½ç”¨åœ¨%C处 BLOCK 内"
#: fortran/parse.c:2517
#, no-c-format
@@ -8591,7 +8589,7 @@ msgstr "在 %C 处期待的一个 CASE 或 END SELECT 语å¥åŽè·Ÿ SELECT CASE"
#: fortran/parse.c:2929
#, no-c-format
msgid "Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at %C"
-msgstr ""
+msgstr "%C处的 SELECT TYPE 之åŽéœ€è¦ TYPE ISã€CLASS IS 或 END SELECT 语å¥"
#: fortran/parse.c:2991
#, no-c-format
@@ -8692,9 +8690,9 @@ msgid "Integer kind %d at %C not available"
msgstr "æ•´æ•°ç§åˆ« %d 在%C处ä¸å¯ç”¨"
#: fortran/primary.c:225
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Integer too big for its kind at %C. This check can be disabled with the option -fno-range-check"
-msgstr "%C 处该类的整数太大。这一检查å¯ç”¨ -fno-range-check 选项ç¦ç”¨"
+msgstr "%C整数相对其ç§åˆ«è€Œè¨€å¤ªå¤§ã€‚这一检查å¯ç”¨ -fno-range-check 选项ç¦ç”¨"
#: fortran/primary.c:254
#, no-c-format
@@ -8722,9 +8720,9 @@ msgid "Extension: Hexadecimal constant at %C uses non-standard syntax"
msgstr "扩展:%C处的å六进制常é‡ä½¿ç”¨äº†éžæ ‡å‡†è¯­æ³•"
#: fortran/primary.c:380
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Empty set of digits in BOZ constant at %C"
-msgstr "%C 处 BOZ 常数中的数字符集åˆä¸ºç©º"
+msgstr "%C处 BOZ 常é‡ä¸­çš„数字符集åˆä¸ºç©º"
#: fortran/primary.c:386
#, no-c-format
@@ -8752,9 +8750,9 @@ msgid "Missing exponent in real number at %C"
msgstr "%C处实数缺少指数部分"
#: fortran/primary.c:602
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Real number at %C has a 'd' exponent and an explicit kind"
-msgstr "在 %C 处实数有一个'd'指数和一个显å¼çš„类别"
+msgstr "%C处的实数有一个‘d’指数和一个显å¼çš„ç§åˆ«"
#: fortran/primary.c:615
#, no-c-format
@@ -8872,9 +8870,9 @@ msgid "No initializer for component '%s' given in the structure constructor at %
msgstr "对 %C 处结构构造中给出的“%1$sâ€ç»„件没有åˆå§‹åŒ–器"
#: fortran/primary.c:2260
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Can't construct ABSTRACT type '%s' at %C"
-msgstr "%C 处无法构建 ABSTRACT 类型“%sâ€"
+msgstr "%2$C处无法构建 ABSTRACT 类型‘%1$s’"
#: fortran/primary.c:2288
#, fuzzy, no-c-format
@@ -8962,9 +8960,9 @@ msgid "'%s' at %L is of the ABSTRACT type '%s'"
msgstr "%2$L 处的“%1$sâ€æ˜¯ ABSTRACT 类型“%3$sâ€"
#: fortran/resolve.c:114
-#, fuzzy, no-c-format
+#, no-c-format
msgid "ABSTRACT type '%s' used at %L"
-msgstr "用于 %1$L 处的 ABSTRACT 类型“%2$sâ€"
+msgstr "%2$L处使用了 ABSTRACT 类型‘%1$s’"
#: fortran/resolve.c:164
#, no-c-format
@@ -9150,9 +9148,9 @@ msgid "The element in the derived type constructor at %L, for pointer component
msgstr "%L 处的派生类型构建器中的元素,对指针组件“%sâ€è€Œè¨€æ˜¯ä¸ª %s 但应该是 %s"
#: fortran/resolve.c:899
-#, fuzzy, no-c-format
+#, no-c-format
msgid "The NULL in the derived type constructor at %L is being applied to component '%s', which is neither a POINTER nor ALLOCATABLE"
-msgstr "在 %L 处派生类型构造æˆå‘˜ä¸­çš„ NULL 适用于既ä¸æ˜¯ä¸€ä¸ªæŒ‡é’ˆä¹Ÿä¸æ˜¯ ALLOCATABLE 的组件“%sâ€"
+msgstr "%L处派生类型构造函数中的 NULL 被用在既ä¸æ˜¯ä¸€ä¸ªæŒ‡é’ˆä¹Ÿä¸æ˜¯ ALLOCATABLE 的组件‘%s’上"
#: fortran/resolve.c:913
#, fuzzy, no-c-format
@@ -9269,9 +9267,9 @@ msgid "The reference to function '%s' at %L either needs an explicit INTERFACE o
msgstr ""
#: fortran/resolve.c:1930
-#, fuzzy, no-c-format
+#, no-c-format
msgid "There is no specific function for the generic '%s' at %L"
-msgstr "在 %2$L 处通用的“%1$sâ€æ²¡æœ‰ç‰¹å®šçš„函数"
+msgstr "%2$L处的泛型‘%1$s’没有指定的函数"
#: fortran/resolve.c:1939
#, fuzzy, no-c-format
@@ -9399,9 +9397,9 @@ msgid "Subroutine call to '%s' in FORALL block at %L is not PURE"
msgstr "在 %2$L 处调用 FORALL å—内“%1$sâ€çš„å­ä¾‹ç¨‹ä¸æ˜¯ PURE"
#: fortran/resolve.c:2766
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Subroutine call to '%s' at %L is not PURE"
-msgstr "在 %2$L 处调用“%1$sâ€çš„å­ä¾‹ç¨‹ä¸æ˜¯ PURE"
+msgstr "%2$L处调用‘%1$s’的å­ä¾‹ç¨‹ä¸æ˜¯ PURE"
#: fortran/resolve.c:2829
#, no-c-format
@@ -9429,9 +9427,9 @@ msgid "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsi
msgstr "在 %2$L 处的å­ä¾‹ç¨‹â€œ%sâ€æ˜¯ INTRINSIC,但ä¸æ˜¯ä¸Žä¸€ä¸ªå†…建å­ä¾‹ç¨‹å¯å…¼å®¹"
#: fortran/resolve.c:3065
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Unable to resolve the specific subroutine '%s' at %L"
-msgstr "ä¸èƒ½è§£å†³ %2$L 处的特定å­ä¾‹ç¨‹â€œ%1$sâ€"
+msgstr "ä¸èƒ½è§£å†³%2$L处的指定å­ä¾‹ç¨‹â€˜%1$s’"
#: fortran/resolve.c:3125
#, fuzzy, no-c-format
@@ -9500,7 +9498,7 @@ msgstr "比较è¿ç®—符‘%s’(ä½äºŽ %%L)çš„æ“作数为 %s/%s"
#: fortran/resolve.c:3433
#, c-format
msgid "Unknown operator '%s' at %%L"
-msgstr "未知的æ“作符‘%s’在 %%L处"
+msgstr "未知的è¿ç®—符‘%s’在 %%L处"
#: fortran/resolve.c:3435
#, c-format
@@ -9513,9 +9511,9 @@ msgid "Operands of user operator '%s' at %%L are %s/%s"
msgstr "用户è¿ç®—符‘%s’(ä½äºŽ %%L)çš„æ“作数为 %s/%s"
#: fortran/resolve.c:3524
-#, fuzzy, c-format
+#, c-format
msgid "Inconsistent ranks for operator at %%L and %%L"
-msgstr "%%L å’Œ %%L 处的æ“作数的行列ä¸ä¸€è‡´"
+msgstr "%%Lå’Œ%%L处的æ“作数的秩ä¸ä¸€è‡´"
#: fortran/resolve.c:3727
#, no-c-format
@@ -9653,9 +9651,9 @@ msgid "Variable '%s' is used at %L before the ENTRY statement in which it is a p
msgstr "在 %L 处使用å˜é‡â€œ%sâ€ï¼Œç”¨åœ¨å®ƒæ˜¯ä¸€ä¸ªå‚æ•°çš„ ENTRY 语å¥ä»¥å‰"
#: fortran/resolve.c:4786 fortran/resolve.c:4858
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Passed-object at %L must be scalar"
-msgstr "在 %L 处传递的对象必须是标é‡"
+msgstr "%L处传递的对象必须是标é‡"
#: fortran/resolve.c:4887
#, no-c-format
@@ -9791,9 +9789,9 @@ msgid "Array specification required in ALLOCATE statement at %L"
msgstr "%L 处的 ALLOCATE 语å¥ä¸­è¦æ±‚的数组规格说明"
#: fortran/resolve.c:6197
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Bad array specification in ALLOCATE statement at %L"
-msgstr "%L 处的 ALLOCATE 语å¥ä¸­å的数组规格说明"
+msgstr "%L处的 ALLOCATE 语å¥æŒ‡å®šäº†é”™è¯¯çš„数组"
#: fortran/resolve.c:6217
#, fuzzy, no-c-format
@@ -9823,12 +9821,12 @@ msgstr "%C READ 语å¥éœ€è¦å˜é‡"
#: fortran/resolve.c:6266
#, no-c-format
msgid "ERRMSG at %L is useless without a STAT tag"
-msgstr ""
+msgstr "%L处的 ERRMSG 没有 STAT 标记所以ä¸èµ·ä½œç”¨"
#: fortran/resolve.c:6270
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Errmsg-variable '%s' at %L cannot be INTENT(IN)"
-msgstr "循环å˜é‡â€˜%s’在%C处ä¸èƒ½æ˜¯ INTENT(IN)"
+msgstr "错误信æ¯å˜é‡â€˜%s’在%L处ä¸èƒ½æ˜¯ INTENT(IN)"
#: fortran/resolve.c:6274
#, fuzzy, no-c-format
@@ -9848,7 +9846,7 @@ msgstr ""
#: fortran/resolve.c:6305
#, no-c-format
msgid "Allocate-object at %L also appears at %L"
-msgstr ""
+msgstr "%L处分é…的对象也出现在%L处"
#. The cases overlap, or they are the same
#. element in the list. Either way, we must
@@ -9915,19 +9913,19 @@ msgid "Logical SELECT CASE block at %L has more that two cases"
msgstr "在 %L 处逻辑的 SELECT CASE å—多于两个的情况"
#: fortran/resolve.c:6884
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Derived type '%s' at %L must be extensible"
-msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须具有å¯æ‰©å±•ç±»åž‹"
+msgstr "%2$L处派生类型‘%1$s’必须是å¯æ‰©å±•çš„"
#: fortran/resolve.c:6894
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Derived type '%s' at %L must be an extension of '%s'"
-msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是派生类型"
+msgstr "%2$L处派生类型‘%1$s’必须是‘%3$s’的一个扩展"
#: fortran/resolve.c:7040
#, no-c-format
msgid "Double CLASS IS block in SELECT TYPE statement at %L"
-msgstr ""
+msgstr "%L处 SELECT TYPE 语å¥ä¸­æœ‰åŒé‡çš„ CLASS IS å—"
#: fortran/resolve.c:7135
#, fuzzy, no-c-format
@@ -9955,9 +9953,9 @@ msgid "Statement at %L is not a valid branch target statement for the branch sta
msgstr "在 %L 处的语å¥å¯¹äºŽåœ¨ %L 处的分支语å¥ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„分支目标语å¥"
#: fortran/resolve.c:7229
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Branch at %L may result in an infinite loop"
-msgstr "%L 处的分支导致无穷循环"
+msgstr "%L处的分支å¯èƒ½å¯¼è‡´æ— ç©·å¾ªçŽ¯"
#. The label is not in an enclosing block, so illegal. This was
#. allowed in Fortran 66, so we allow it as extension. No
@@ -10013,9 +10011,9 @@ msgid "CHARACTER expression will be truncated in assignment (%d/%d) at %L"
msgstr "CHARACTER 表达å¼åœ¨ %3$L 处赋值(%1$d/%2$d)时被截断"
#: fortran/resolve.c:7831
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Cannot assign to variable '%s' in PURE procedure at %L"
-msgstr "ä¸èƒ½åœ¨ %L 处的 PURE 过程中为å˜é‡â€œ%1$sâ€èµ‹å€¼"
+msgstr "ä¸èƒ½åœ¨%2$L处的 PURE 过程中为å˜é‡â€˜%1$s’赋值"
#: fortran/resolve.c:7843
#, fuzzy, no-c-format
@@ -10101,9 +10099,9 @@ msgid "CHARACTER variable has zero length at %L"
msgstr "%L处的 CHARACTER å˜é‡é•¿åº¦ä¸ºé›¶"
#: fortran/resolve.c:8475
-#, fuzzy, no-c-format
+#, no-c-format
msgid "String length at %L is too large"
-msgstr "%L处å­ä¸²ç»“æŸç´¢å¼•å¤ªå¤§"
+msgstr "%L处字符串太长"
#: fortran/resolve.c:8777
#, no-c-format
@@ -10193,9 +10191,9 @@ msgid "Automatic array '%s' at %L cannot have an initializer"
msgstr "自动数组‘%s’在%L处ä¸èƒ½æœ‰åˆå§‹å€¼è®¾å®š"
#: fortran/resolve.c:9026
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Although not referenced, '%s' at %L has ambiguous interfaces"
-msgstr "å³ä½¿ä¸å¼•ç”¨ï¼Œåœ¨ %L 处的“%sâ€æœ‰äºŒä¹‰æ€§æŽ¥å£"
+msgstr "尽管没有被引用,%2$L处的‘%1$s’的接å£ä¹Ÿæœ‰æ­§ä¹‰"
#: fortran/resolve.c:9045
#, fuzzy, no-c-format
@@ -10253,9 +10251,9 @@ msgid "CHARACTER(*) function '%s' at %L cannot be recursive"
msgstr "CHARACTER(*) 函数‘%s’在%L处ä¸èƒ½æ˜¯é€’å½’çš„"
#: fortran/resolve.c:9203
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Obsolescent feature: CHARACTER(*) function '%s' at %L"
-msgstr "已过时:%C处的旧å¼å­—符长度"
+msgstr "已过时的特性:%2$L处的 CHARACTER(*) 函数‘%1$s’"
#: fortran/resolve.c:9258
#, fuzzy, no-c-format
@@ -10293,29 +10291,29 @@ msgid "FINAL procedure at %L must have exactly one argument"
msgstr "%L 处的 FINAL 过程必须åªæœ‰ä¸€ä¸ªå‚æ•°"
#: fortran/resolve.c:9347
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Argument of FINAL procedure at %L must be of type '%s'"
-msgstr "%L 处 FINAL 过程的å‚数必须是“%sâ€ç±»åž‹"
+msgstr "%L处 FINAL 过程的å‚数必须是‘%s’类型"
#: fortran/resolve.c:9355
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Argument of FINAL procedure at %L must not be a POINTER"
-msgstr "%L 处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ POINTER"
+msgstr "%L处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ POINTER"
#: fortran/resolve.c:9361
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE"
-msgstr "%L 处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ ALLOCATABLE"
+msgstr "%L处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ ALLOCATABLE"
#: fortran/resolve.c:9367
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Argument of FINAL procedure at %L must not be OPTIONAL"
-msgstr "%L 处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ OPTIONAL"
+msgstr "%L处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ OPTIONAL"
#: fortran/resolve.c:9375
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)"
-msgstr "%L 处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ INTENT(OUT)"
+msgstr "%L处 FINAL 过程的å‚æ•°å¿…é¡»ä¸æ˜¯ INTENT(OUT)"
#: fortran/resolve.c:9383
#, fuzzy, no-c-format
@@ -10334,19 +10332,19 @@ msgstr "仅数组 FINAL 过程声明了在 %L 处定义的派生类型“%sâ€ï¼
#. TODO: Remove this error when finalization is finished.
#: fortran/resolve.c:9440
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Finalization at %L is not yet implemented"
-msgstr "在 %C 处的åˆå§‹åŒ–还未实现"
+msgstr "%L处的终结化还未实现"
#: fortran/resolve.c:9466
#, no-c-format
msgid "Can't overwrite GENERIC '%s' at %L"
-msgstr "ä¸èƒ½è¦†ç›–‘%1$L’处的 GENERIC‘%2$s’"
+msgstr "ä¸èƒ½è¦†ç›–%2$L处的 GENERIC‘%1$s’"
#: fortran/resolve.c:9478
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a procedure binding declared NON_OVERRIDABLE"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Šé™å®šå£°æ˜Ž NON_OVERRIDABLE 的过程"
+msgstr "%2$L处的‘%1$s’覆盖了一个绑定声明为 NON_OVERRIDABLE 的过程"
#: fortran/resolve.c:9486
#, no-c-format
@@ -10354,39 +10352,39 @@ msgid "'%s' at %L must not be DEFERRED as it overrides a non-DEFERRED binding"
msgstr ""
#: fortran/resolve.c:9494
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a PURE procedure and must also be PURE"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Š PURE 过程并且必须也是 PURE"
+msgstr "%2$L处的‘%1$s’覆盖了一个 PURE 过程因此必须也是 PURE"
#: fortran/resolve.c:9503
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Š ELEMENTAL 过程并且也必须是个 ELEMENTAL"
+msgstr "%2$L处的‘%1$s’覆盖了一个 ELEMENTAL 过程因此也必须是 ELEMENTAL"
#: fortran/resolve.c:9509
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, either"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Šéž ELEMENTAL 过程并且必须ä¸æ˜¯ä¸ª ELEMENTAL,"
+msgstr "%2$L处的‘%1$sâ€™è¦†ç›–äº†ä¸€ä¸ªéž ELEMENTAL 过程因此必须也ä¸æ˜¯ ELEMENTAL"
#: fortran/resolve.c:9518
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a SUBROUTINE and must also be a SUBROUTINE"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Š SUBROUTINE 并且也必须是个 SUBROUTINE"
+msgstr "%2$L处的‘%1$s’覆盖了一个 SUBROUTINE 因此也必须是 SUBROUTINE"
#: fortran/resolve.c:9529
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a FUNCTION and must also be a FUNCTION"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Š FUNCTION 并且也必须是个 FUNCTION"
+msgstr "%2$L处的‘%1$s’覆盖了一个 FUNCTION 因此也必须是 FUNCTION"
#: fortran/resolve.c:9540
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L and the overridden FUNCTION should have matching result types"
-msgstr "在 %L 处的“%sâ€å’Œè·¨è¿‡çš„ FUNCTION 应该有匹é…的结果类型"
+msgstr "%2$L处的‘%1$s’和它覆盖的 FUNCTION 应该有匹é…的返回类型"
#: fortran/resolve.c:9551
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a PUBLIC procedure and must not be PRIVATE"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Š PUBLIC 过程并且必须ä¸æ˜¯ PRIVATE"
+msgstr "%2$L处的‘%1$s’覆盖了一个 PUBLIC 过程因此必须ä¸æ˜¯ PRIVATE"
#: fortran/resolve.c:9580
#, fuzzy, no-c-format
@@ -10404,14 +10402,14 @@ msgid "'%s' at %L must have the same number of formal arguments as the overridde
msgstr "在 %2$L 处的“%1$sâ€å¿…须有与被跨越的过程相åŒçš„å½¢å¼å‚æ•°"
#: fortran/resolve.c:9612
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a NOPASS binding and must also be NOPASS"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Š NOPASS é™å®šå¹¶ä¸”也必须是个 NPASSO"
+msgstr "%2$L处的‘%1$s’覆盖了一个 NOPASS 绑定因此必须也是 NOPASS"
#: fortran/resolve.c:9623
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' at %L overrides a binding with PASS and must also be PASS"
-msgstr "%2$L 处的“%1$sâ€è·¨è¶Šå…·æœ‰ PASS çš„é™å®šå¹¶ä¸”也必须是个 PASS"
+msgstr "%2$L处的‘%1$s’覆盖了一个具有 PASS 的绑定因此也必须是 PASS"
#: fortran/resolve.c:9630
#, fuzzy, no-c-format
@@ -10619,9 +10617,9 @@ msgid "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type
msgstr "在 %2$L 处éšå¼åœ°æ‰“å­—çš„ PARAMETER“%1$sâ€ä¸Žä¸€ä¸ªæ›´åŽé¢çš„ IMPLICIT 类型ä¸åŒ¹é…"
#: fortran/resolve.c:10703
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Incompatible derived type in PARAMETER at %L"
-msgstr "在 %L 处 PARAMETER 中派生类型秩ä¸å…¼å®¹"
+msgstr "%L处 PARAMETER 中派生类型ä¸å…¼å®¹"
#: fortran/resolve.c:10766
#, fuzzy, no-c-format
@@ -10929,14 +10927,14 @@ msgid "Invalid KIND parameter of %s at %L"
msgstr "%s ä½äºŽ %L çš„ KIND å‚数无效"
#: fortran/simplify.c:680
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Argument of %s function at %L is negative"
-msgstr "%2$L 处的 %1$s 函数的å‚数是负的"
+msgstr "%2$L处 %1$s 函数的å‚数是负的"
#: fortran/simplify.c:687
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Argument of %s function at %L outside of range [0,127]"
-msgstr "%L 处 %s 函数的å‚æ•°ä¸åœ¨[0,127]范围内"
+msgstr "%2$L处 %1$s 函数的å‚æ•°ä¸åœ¨[0,127]范围内"
#: fortran/simplify.c:705
#, fuzzy, no-c-format
@@ -10999,9 +10997,9 @@ msgid "Invalid third argument of IBITS at %L"
msgstr "%L处 IBITS 的第三个å‚数无效"
#: fortran/simplify.c:2325
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Sum of second and third arguments of IBITS exceeds bit size at %L"
-msgstr "%L 处 IBSET 的第二和第三å‚数的总和超过ä½å¤§å°"
+msgstr "%L处 IBSET 的第二个和第三个å‚数的总和超过ä½å¤§å°"
#: fortran/simplify.c:2372
#, no-c-format
@@ -11009,9 +11007,9 @@ msgid "Invalid second argument of IBSET at %L"
msgstr "%L处 IBSET 的第二个å‚数无效"
#: fortran/simplify.c:2380
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Second argument of IBSET exceeds bit size at %L"
-msgstr "%L 处 IBSET 的第二个å‚数超过ä½å¤§å°"
+msgstr "%L处 IBSET 的第二个å‚数超过ä½å¤§å°"
#: fortran/simplify.c:2410
#, no-c-format
@@ -11202,9 +11200,9 @@ msgid "Fortran 2003: Procedure pointer at %C"
msgstr "Fortran 2003:%C处的过程指针组件"
#: fortran/symbol.c:617
-#, fuzzy, no-c-format
+#, no-c-format
msgid "%s attribute applied to %s %s at %L"
-msgstr "%1$s 属性应用于 %4$L 处的 %2$s %3$s"
+msgstr "%1$s 属性应用于%4$L处的 %2$s %3$s"
#: fortran/symbol.c:624
#, fuzzy, no-c-format
@@ -11392,24 +11390,24 @@ msgid "Duplicate statement label %d at %L and %L"
msgstr "é‡å¤çš„语å¥æ ‡å· %d 出现在 %L å’Œ%L处"
#: fortran/symbol.c:2089
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Label %d at %C already referenced as branch target"
-msgstr "在 %2$C å¤„çš„æ ‡å· %1$d 已作为分支目标引用"
+msgstr "%2$Cå¤„çš„æ ‡å· %1$d 已作为分支目标引用"
#: fortran/symbol.c:2098
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Label %d at %C already referenced as a format label"
-msgstr "在 %C å¤„çš„æ ‡å· %d 已作为格å¼æ ‡å·å¼•ç”¨"
+msgstr "%2$Cå¤„çš„æ ‡å· %1$d 已作为格å¼æ ‡å·å¼•ç”¨"
#: fortran/symbol.c:2140
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Label %d at %C previously used as a FORMAT label"
-msgstr "在 %2$C å¤„çš„æ ‡å· %1$d 以å‰ç”¨ä½œ FORMAT æ ‡å·"
+msgstr "%2$Cå¤„çš„æ ‡å· %1$d å…ˆå‰ç”¨ä½œ FORMAT æ ‡å·"
#: fortran/symbol.c:2148
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Label %d at %C previously used as branch target"
-msgstr "在 %2$C å¤„çš„æ ‡å· %1$d 以å‰ç”¨ä½œåˆ†æ”¯ç›®æ ‡"
+msgstr "%2$Cå¤„çš„æ ‡å· %1$d å…ˆå‰ç”¨ä½œåˆ†æ”¯ç›®æ ‡"
#: fortran/symbol.c:2463
#, fuzzy, no-c-format
@@ -11478,19 +11476,19 @@ msgid "Derived type '%s' at %L cannot have the SEQUENCE attribute because it is
msgstr "%2$L 处派生类型“%1$sâ€ä¸èƒ½æœ‰ SEQUENCE 属性,因为它是 BIND(C)"
#: fortran/symbol.c:4507
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Symbol '%s' is used before it is typed at %L"
-msgstr "%L 处打入以å‰ç¬¦å·â€œ%1$sâ€å·²è¢«ä½¿ç”¨"
+msgstr "%2$L处符å·â€˜%1$s’在指定类型之å‰è¢«ä½¿ç”¨"
#: fortran/symbol.c:4513
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Extension: Symbol '%s' is used before it is typed at %L"
-msgstr "扩展:%C 处打入以å‰ç¬¦å·â€œ%1$sâ€å·²è¢«ä½¿ç”¨"
+msgstr "扩展:%2$L处符å·â€˜%1$s’在指定类型之å‰è¢«ä½¿ç”¨"
#: fortran/symbol.c:4852 fortran/symbol.c:4926
-#, fuzzy, no-c-format
+#, no-c-format
msgid "'%s' of '%s' is PRIVATE at %L"
-msgstr "组件‘%s’在%C处是‘%s’的 PRIVATE 组件"
+msgstr "‘%2$s’的‘%1$s’在%3$L处是 PRIVATE"
#: fortran/target-memory.c:659
#, fuzzy, no-c-format
@@ -11592,14 +11590,14 @@ msgid "non-constant initialization expression at %L"
msgstr "%C处需è¦æ ‡é‡åˆå§‹åŒ–表达å¼"
#: fortran/trans-decl.c:3085 fortran/trans-decl.c:4408
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Return value of function '%s' at %L not set"
-msgstr "%2$L 处函数“%1$sâ€çš„返回值没有设置"
+msgstr "%2$L处函数‘%1$s’的返回值没有设置"
#: fortran/trans-decl.c:3782
-#, fuzzy, no-c-format
+#, no-c-format
msgid "Dummy argument '%s' at %L was declared INTENT(OUT) but was not set"
-msgstr "%2$L 处的“%1$sâ€å“‘å…ƒå‚数声明为 INTENT(OUT),但没有设置"
+msgstr "%2$L处的哑元å‚数‘%1$s’被声明为 INTENT(OUT),但没有设置"
#: fortran/trans-decl.c:3787
#, no-c-format
@@ -11633,7 +11631,7 @@ msgstr "å‚数‘%s’在%L处缺少实å‚"
#: fortran/trans-expr.c:1616
msgid "internal error: bad hash value in dynamic dispatch"
-msgstr ""
+msgstr "内部错误:动æ€åˆ†å‘时散列值错误"
#: fortran/trans-expr.c:2530
#, no-c-format
@@ -11885,7 +11883,7 @@ msgstr "å–æ ·ä¸æ”¯æŒ -mg\n"
#: config/i386/linux-unwind.h:186
msgid "ax ; {int $0x80 | syscall"
-msgstr ""
+msgstr "ax ; {int $0x80 | syscall"
#: config/darwin.h:306
msgid "-current_version only allowed with -dynamiclib"
@@ -12207,7 +12205,6 @@ msgid "Warn about underflow of numerical constant expressions"
msgstr "数字常é‡è¡¨è¾¾å¼ä¸‹æº¢æ—¶è­¦å‘Š"
#: fortran/lang.opt:125
-#, fuzzy
msgid "Warn if a user-procedure has the same name as an intrinsic"
msgstr "如果用户过程有与内建过程相åŒçš„å字则警告"
@@ -12237,9 +12234,8 @@ msgid "Specify that backslash in string introduces an escape character"
msgstr "指定字符串中的åæ–œæ å¼•å…¥ä¸€ä¸ªè½¬ä¹‰å­—符"
#: fortran/lang.opt:161
-#, fuzzy
msgid "Produce a backtrace when a runtime error is encountered"
-msgstr "é‡åˆ°è¿è¡Œæ—¶é”™è¯¯æ—¶äº§ç”Ÿä¸€ä¸ªå跟踪"
+msgstr "é‡åˆ°è¿è¡Œæ—¶é”™è¯¯æ—¶æ‰“å°å‡½æ•°è°ƒç”¨å›žæº¯"
#: fortran/lang.opt:165
msgid "-fblas-matmul-limit=<n> Size of the smallest matrix for which matmul will use BLAS"
@@ -12303,9 +12299,8 @@ msgid "Display the code tree after parsing"
msgstr "解æžåŽæ˜¾ç¤ºä»£ç æ ‘"
#: fortran/lang.opt:225
-#, fuzzy
msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays"
-msgstr "指定一个外部的 BLAS 库应该于大尺寸数组时为 matmul 调用所使用"
+msgstr "为大尺寸数组调用 matmul 时应当使用一个外部 BLAS 库"
#: fortran/lang.opt:229
msgid "Use f2c calling convention"
@@ -12388,9 +12383,8 @@ msgid "Size in bytes of the largest array that will be put on the stack"
msgstr "以字节大å°è¡¨ç¤ºçš„å¯ä»¥è¢«æ”¾å…¥å †æ ˆçš„数组的最大大å°"
#: fortran/lang.opt:309
-#, fuzzy
msgid "Set default accessibility of module entities to PRIVATE."
-msgstr "将模å—实体的默认访问æƒè®¾ç½®ä¸º PRIVATE。"
+msgstr "将模å—实体的默认访问æƒé™è®¾ç½®ä¸º PRIVATE。"
#: fortran/lang.opt:317
msgid "Try to lay out derived types as compactly as possible"
@@ -12418,9 +12412,8 @@ msgid "Copy array sections into a contiguous block on procedure entry"
msgstr "把数组节å¤åˆ¶è¿›è¿‡ç¨‹è¡¨é¡¹ä¸Šçš„一个连续å—"
#: fortran/lang.opt:345
-#, fuzzy
msgid "Specify which runtime checks are to be performed"
-msgstr "指定是å¦åº”当使用 r10k 缓存å±éšœ"
+msgstr "指定è¦è¿›è¡Œå“ªç§è¿è¡Œæ—¶æ£€æŸ¥"
#: fortran/lang.opt:349
msgid "Append a second underscore if the name already contains an underscore"
@@ -12436,7 +12429,7 @@ msgstr "为外部å¯è§çš„å字添加下划线"
#: fortran/lang.opt:365
msgid "Compile all program units at once and check all interfaces"
-msgstr ""
+msgstr "ç«‹å³ç¼–译所有程åºå•å…ƒå¹¶æ£€æŸ¥æŽ¥å£"
#: fortran/lang.opt:405
msgid "Statically link the GNU Fortran helper library (libgfortran)"
@@ -12727,9 +12720,8 @@ msgid "Cause gas to print tomcat statistics"
msgstr "让 gas æ‰“å° tomcat 统计"
#: config/frv/frv.opt:195
-#, fuzzy
msgid "Link with the library-pic libraries"
-msgstr "与 library-pic 库的链接"
+msgstr "与 library-pic 库链接"
#: config/frv/frv.opt:199
msgid "Allow branches to be packed with other instructions"
@@ -12760,9 +12752,8 @@ msgid "Enable TPF-OS tracing code"
msgstr "å¯ç”¨ TPF-OS 追踪代ç "
#: config/s390/tpf.opt:27
-#, fuzzy
msgid "Specify main object for TPF-OS"
-msgstr "指定 TPF-OS 主è¦å¯¹è±¡"
+msgstr "指定 TPF-OS 的主对象"
#: config/s390/s390.opt:23
msgid "31 bit ABI"
@@ -12984,9 +12975,8 @@ msgid "Place a stop bit after every cycle when scheduling"
msgstr "调度时在æ¯å‘¨æœŸåŽéƒ½æ”¾ç½®åœæ­¢ä½"
#: config/ia64/ia64.opt:167
-#, fuzzy
msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group"
-msgstr "å‡å®šæµ®ç‚¹å­˜å‚¨å’Œè£…载当放进一个指令组时ä¸å¤ªä¼šå¼•èµ·å†²çªæ˜¯"
+msgstr "å‡å®šæµ®ç‚¹å­˜å‚¨å’Œè£…载放在一个指令组时ä¸å¤ªä¼šå¼•èµ·å†²çª"
#: config/ia64/ia64.opt:171
#, fuzzy
@@ -12994,14 +12984,12 @@ msgid "Soft limit on number of memory insns per instruction group, giving lower
msgstr "软件é™å®šæ¯æŒ‡ä»¤ç»„内存 insns 数,给åŽæ¥çš„试图在相åŒçš„ insn 组中去调度的内存 insns 低的优先数 。防止高速缓存银行冲çªå¸¸å¸¸æ˜¯æœ‰ç”¨çš„。 默认值是 1"
#: config/ia64/ia64.opt:175
-#, fuzzy
msgid "Disallow more than `msched-max-memory-insns' in instruction group. Otherwise, limit is `soft' (prefer non-memory operations when limit is reached)"
-msgstr "在指令组中ä¸å‡†å¤šäºŽ `msched-max-memory-insns' 。å¦åˆ™ï¼Œé™å®šå€¼æ˜¯`软的' (当达到é™å®šå€¼æ—¶å®å¯éžå†…å­˜æ“作)"
+msgstr "一个指令组中至多有‘msched-max-memory-insns’æ¡æŒ‡ä»¤ã€‚å¦åˆ™ï¼Œé™å®šå€¼æ˜¯`软的' (当达到é™å®šå€¼æ—¶ä¼˜å…ˆé€‰æ‹©éžå†…å­˜æ“作)"
#: config/ia64/ia64.opt:179
-#, fuzzy
msgid "Don't generate checks for control speculation in selective scheduling"
-msgstr "在选择调度中ä¸ä¸ºæŽ§åˆ¶æŽ¨æµ‹äº§ç”Ÿæ£€æŸ¥"
+msgstr "在选择性调度中ä¸ä¸ºæŽ§åˆ¶æŠ•æœºç”Ÿæˆæ£€æŸ¥"
#: config/ia64/ia64.opt:183
msgid "Enable fused multiply/add and multiply/subtract instructions"
@@ -13009,11 +12997,11 @@ msgstr "å¯ç”¨èžåˆçš„乘加和乘å‡æŒ‡ä»¤"
#: config/ia64/vms_symvec_libgcc_s.opt:3
msgid "! It would be better to auto-generate this file."
-msgstr ""
+msgstr "! 最好自动生æˆæ­¤æ–‡ä»¶ã€‚"
#: config/ia64/vms_symvec_libgcc_s.opt:7
msgid "SYMBOL_VECTOR=(__divdi3=PROCEDURE)"
-msgstr ""
+msgstr "SYMBOL_VECTOR=(__divdi3=PROCEDURE)"
#: config/m32c/m32c.opt:24 config/bfin/bfin.opt:23 config/mep/mep.opt:138
msgid "Use simulator runtime"
@@ -13180,9 +13168,8 @@ msgid "Don't call any cache flush trap"
msgstr "ä¸è°ƒç”¨ä»»ä½•æ¸…空缓存的陷阱"
#: config/m32r/m32r.opt:82
-#, fuzzy
msgid "Small data area: none, sdata, use"
-msgstr "å°æ•°æ®åŒºåŸŸ: none, sdata, use"
+msgstr "å°æ•°æ®åŒºåŸŸ: noneã€sdataã€use"
#: config/m68k/m68k.opt:23
msgid "Generate code for a 520X"
@@ -13342,7 +13329,7 @@ msgstr "在 ColdFire 上支æŒè¶…过 8192 个 GOT æ¡ç›®"
#: config/m68k/m68k.opt:188
msgid "Support TLS segment larger than 64K"
-msgstr ""
+msgstr "支æŒå¤§äºŽ 64K çš„ TLS 段"
#: config/m68k/ieee.opt:24 config/i386/i386.opt:137
msgid "Use IEEE math for fp comparisons"
@@ -13655,11 +13642,11 @@ msgstr "使用 PE æ ¼å¼çš„ GNU 扩展æ¥å¯¹é½ common æ•°æ®"
#: config/i386/cygming.opt:55
msgid "Compile code that relies on Cygwin DLL wrappers to support C++ operator new/delete replacement"
-msgstr ""
+msgstr "生æˆä¾èµ– Cygwin DLL 包装的代ç ä»¥æ”¯æŒå¯¹ C++ è¿ç®—符 new/delete 的替æ¢"
#: config/i386/mingw-w64.opt:23
msgid "Use unicode startup and define UNICODE macro"
-msgstr ""
+msgstr "使用 unicode å¯åŠ¨å¹¶ä¸”定义 UNICODE å®"
#: config/rs6000/aix.opt:24 config/rs6000/rs6000.opt:195
msgid "Conform more closely to IBM XLC semantics"
@@ -13782,18 +13769,16 @@ msgid "Generate load/store with update instructions"
msgstr "生æˆå¸¦æ›´æ–°çš„加载/存储指令"
#: config/rs6000/rs6000.opt:168
-#, fuzzy
msgid "Avoid generation of indexed load/store instructions when possible"
-msgstr "当å¯èƒ½çš„æ—¶é¿å… 装载/存储 指令索引的产生"
+msgstr "å°½å¯èƒ½é¿å…生æˆå˜å€è£…è½½/存储指令"
#: config/rs6000/rs6000.opt:172
msgid "Generate fused multiply/add instructions"
msgstr "生æˆèžåˆçš„乘/加指令"
#: config/rs6000/rs6000.opt:176
-#, fuzzy
msgid "Mark __tls_get_addr calls with argument info"
-msgstr "调用%<__builtin_next_arg%>时没有给定实å‚"
+msgstr "用实å‚ä¿¡æ¯æ ‡æ³¨å¯¹ __tls_get_addr 的调用"
#: config/rs6000/rs6000.opt:183
msgid "Schedule the start and end of the procedure"
@@ -13909,9 +13894,8 @@ msgid "Specify which post scheduling nop insertion scheme to apply"
msgstr "指定应用的事åŽè°ƒåº¦ nop æ’入计划"
#: config/rs6000/rs6000.opt:314
-#, fuzzy
msgid "Specify alignment of structure fields default/natural"
-msgstr "指定结构字段默认或本æ¥çš„对é½"
+msgstr "指定结构字段默认或自然的对é½"
#: config/rs6000/rs6000.opt:318
#, fuzzy
@@ -13931,9 +13915,8 @@ msgid "Floating point unit does not support divide & sqrt"
msgstr "浮点å•å…ƒä¸æ”¯æŒé™¤æ³•å’Œå¼€æ–¹"
#: config/rs6000/rs6000.opt:334
-#, fuzzy
msgid "Specify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)"
-msgstr "指定 FP (sp,dp,sp-lite,dp-lite) (implies -mxilinx-fpu)"
+msgstr "指定 FP (spã€dpã€sp-liteã€dp-lite)(åŒæ—¶æŒ‡å®šäº† -mxilinx-fpu)"
#: config/rs6000/rs6000.opt:338
msgid "Specify Xilinx FPU."
@@ -13948,9 +13931,8 @@ msgid "Compile for 32-bit pointers"
msgstr "为 32 ä½æŒ‡é’ˆç¼–译"
#: config/rs6000/aix64.opt:32
-#, fuzzy
msgid "Support message passing with the Parallel Environment"
-msgstr "支æŒç”¨å¹¶è¡ŒçŽ¯å¢ƒçš„消æ¯ä¼ é€"
+msgstr "支æŒå¹¶è¡ŒçŽ¯å¢ƒä¸‹çš„消æ¯ä¼ é€"
#: config/rs6000/linux64.opt:24
#, fuzzy
@@ -13962,7 +13944,6 @@ msgid "Select ABI calling convention"
msgstr "选择 ABI 调用约定"
#: config/rs6000/sysv4.opt:28
-#, fuzzy
msgid "Select method for sdata handling"
msgstr "ä¸ºå¤„ç† sdata 选择方法"
@@ -14006,7 +13987,7 @@ msgstr "使用å¦ä¸€å¥—寄存器å"
#: config/rs6000/sysv4.opt:101
msgid "Use default method for sdata handling"
-msgstr ""
+msgstr "å¤„ç† sdata 使用默认的方法"
#: config/rs6000/sysv4.opt:105
msgid "Link with libsim.a, libc.a and sim-crt0.o"
@@ -14037,14 +14018,12 @@ msgid "Generate code for old exec BSS PLT"
msgstr "为旧的å¯æ‰§è¡Œ BSS PLT 生æˆä»£ç "
#: config/spu/spu.opt:20
-#, fuzzy
msgid "Emit warnings when run-time relocations are generated"
-msgstr "Emit 当è¿è¡Œæ—¶é—´é‡å®šä½ç”Ÿæˆæ—¶è­¦å‘Š"
+msgstr "生æˆè¿è¡Œæ—¶é‡å®šä½æ—¶ç»™å‡ºè­¦å‘Š"
#: config/spu/spu.opt:24
-#, fuzzy
msgid "Emit errors when run-time relocations are generated"
-msgstr "Emit 当è¿è¡Œæ—¶é—´é‡å®šä½ç”Ÿæˆæ—¶å‡ºé”™è¯¯"
+msgstr "生æˆè¿è¡Œæ—¶é‡å®šä½æ—¶ç»™å‡ºé”™è¯¯"
#: config/spu/spu.opt:28
msgid "Specify cost of branches (Default 20)"
@@ -14059,9 +14038,8 @@ msgid "volatile must be specified on any memory that is effected by DMA"
msgstr "所有为 DMA 所影å“的内存必须被标为 volatile"
#: config/spu/spu.opt:40 config/spu/spu.opt:44
-#, fuzzy
msgid "Insert nops when it might improve performance by allowing dual issue (default)"
-msgstr "当因å…许åŒå‘出(默认)å¯èƒ½æ”¹å–„性能时æ’å…¥ nops"
+msgstr "å¯èƒ½å› å…许åŒå‘射而改善性能时æ’å…¥ nop(默认)"
#: config/spu/spu.opt:48
msgid "Use standard main function as entry for startup"
@@ -14072,14 +14050,12 @@ msgid "Generate branch hints for branches"
msgstr "为跳转生æˆæš—示"
#: config/spu/spu.opt:56
-#, fuzzy
msgid "Maximum number of nops to insert for a hint (Default 2)"
-msgstr "为 æ示æ’入的 nops 的最大数(默认 2)"
+msgstr "为实现跳转æ示æ’入的 nop 的最大数(默认 2)"
#: config/spu/spu.opt:60
-#, fuzzy
msgid "Approximate maximum number of instructions to allow between a hint and its branch [125]"
-msgstr "建议和其分支[125]之间所å…许的大致最大指令数"
+msgstr "跳转æ示和其分支之间所å…许的大致最大指令数[125]"
#: config/spu/spu.opt:64
msgid "Generate code for 18 bit addressing"
@@ -14090,21 +14066,20 @@ msgid "Generate code for 32 bit addressing"
msgstr "为 32 ä½å¯»å€ç”Ÿæˆä»£ç "
#: config/spu/spu.opt:76
-#, fuzzy
msgid "Insert hbrp instructions after hinted branch targets to avoid the SPU hang issue"
-msgstr "在æ示分支目标以é¿å… SPU hang å‘出以åŽæ’å…¥ hbrp 指令"
+msgstr "在æ示分支目标åŽæ’å…¥ hbrp 指令以é¿å… SPU æ­»é”"
#: config/spu/spu.opt:88
msgid "Access variables in 32-bit PPU objects (default)"
-msgstr ""
+msgstr "在 32 ä½ PPU 对象访问å˜é‡(默认)"
#: config/spu/spu.opt:92
msgid "Access variables in 64-bit PPU objects"
-msgstr ""
+msgstr "在 64 ä½ PPU 对象访问å˜é‡"
#: config/spu/spu.opt:96
msgid "Allow conversions between __ea and generic pointers (default)"
-msgstr ""
+msgstr "支æŒåœ¨ __ea 和普通指针之间的转æ¢(默认)"
#: config/spu/spu.opt:100
msgid "Size (in KB) of software data cache"
@@ -14112,7 +14087,7 @@ msgstr "以 KB 表示的软件数æ®ç¼“存的大å°"
#: config/spu/spu.opt:104
msgid "Atomically write back software data cache lines (default)"
-msgstr ""
+msgstr "原å­åŒ–对软件数æ®ç¼“存的写回æ“作(默认)"
#: config/mcore/mcore.opt:23
msgid "Generate code for the M*Core M210"
@@ -14147,9 +14122,8 @@ msgid "Generate little-endian code"
msgstr "生æˆå°ç«¯åœ¨å‰çš„代ç "
#: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
-#, fuzzy
msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line"
-msgstr "å‡å®š è¿è¡Œ-时间支æŒå·²è¢«æä¾›, 那么从链接器命令行çœç•¥ -lsim"
+msgstr "å‡å®šè¿è¡Œæ—¶æ”¯æŒå·²è¢«æ供,因此从链接器命令行çœç•¥ -lsim"
#: config/mcore/mcore.opt:60
msgid "Use arbitrary sized immediates in bit operations"
@@ -14160,9 +14134,8 @@ msgid "Prefer word accesses over byte accesses"
msgstr "å°½é‡æŒ‰å­—访问而ä¸æ˜¯æŒ‰å­—节访问"
#: config/mcore/mcore.opt:68
-#, fuzzy
msgid "Set the maximum amount for a single stack increment operation"
-msgstr "为å•ä¸ªå †æ ˆå¢žé‡æ“作è¿ç®—设置最大的总é‡"
+msgstr "设定å•ä¸ªå †æ ˆå¢žé‡æ“作è¿ç®—总é‡çš„上é™"
#: config/mcore/mcore.opt:72
msgid "Always treat bitfields as int-sized"
@@ -14369,9 +14342,8 @@ msgid "Enable cbranchdi4 pattern"
msgstr "å¯ç”¨ cbranchdi4 æ ·å¼"
#: config/sh/sh.opt:229
-#, fuzzy
msgid "Emit cmpeqdi_t pattern even when -mcbranchdi is in effect."
-msgstr "ç”Ÿæˆ cmpeqdi_t æ ·å¼ï¼Œå³ä½¿ -mcbranchdi å’Œ -mexpand-cbranchdi 起作用。"
+msgstr "ç”Ÿæˆ cmpeqdi_t æ ·å¼ï¼Œå³ä½¿ -mcbranchdi 起作用。"
#: config/sh/sh.opt:233
msgid "Enable SH5 cut2 workaround"
@@ -14391,7 +14363,7 @@ msgstr "指定 32 ä½æœ‰ç¬¦å·é™¤æ³•å‡½æ•°çš„å称"
#: config/sh/sh.opt:249
msgid "Enable the use of 64-bit floating point registers in fmov instructions. See -mdalign if 64-bit alignment is required."
-msgstr ""
+msgstr "在 fmov 指令中å¯ç”¨ 64 ä½æµ®ç‚¹å¯„å­˜å™¨ã€‚å¦‚éœ€è¦ 64 ä½å¯¹é½è¯·å‚è§ -mdalign。"
#: config/sh/sh.opt:257
msgid "Enable the use of the fused floating point multiply-accumulate operation"
@@ -14423,7 +14395,7 @@ msgstr "å‡å®šç¬¦å·å¯èƒ½æ— æ•ˆ"
#: config/sh/sh.opt:285
msgid "Annotate assembler instructions with estimated addresses"
-msgstr "使用估算的地å€æ ‡è®°æ±‡ç¼–指令"
+msgstr "使用估算的地å€è¯„注汇编指令"
#: config/sh/sh.opt:289
msgid "Generate code in little endian mode"
@@ -14467,7 +14439,6 @@ msgid "Pretend a branch-around-a-move is a conditional move."
msgstr "将数æ®ä¼ è¾“周围的跳转认为是æ¡ä»¶è½¬ç§»ã€‚"
#: config/sh/superh.opt:6
-#, fuzzy
msgid "Board name [and memory region]."
msgstr "æ¿åå­—[和内存区域]。"
@@ -14600,9 +14571,8 @@ msgid "Use Neon quad-word (rather than double-word) registers for vectorization"
msgstr "使用 Neon 四字(而éžåŒå­—)寄存器æ¥è¿›è¡ŒçŸ¢é‡åŒ–"
#: config/arm/arm.opt:166
-#, fuzzy
msgid "Only generate absolute relocations on word sized values."
-msgstr "于字大å°å€¼ä»…产生ç»å¯¹çš„é‡å®šä½ã€‚"
+msgstr "对字大å°çš„值仅产生ç»å¯¹é‡å®šä½ã€‚"
#: config/arm/arm.opt:170
#, fuzzy
@@ -15018,7 +14988,7 @@ msgstr "使用 64 ä½ long 类型"
#: config/mips/mips.opt:213
msgid "Pass the address of the ra save location to _mcount in $12"
-msgstr ""
+msgstr "å°†ä¿å­˜ RA çš„ä½ç½®çš„地å€ä¼ é€’ç»™ $12 中的 _mcount"
#: config/mips/mips.opt:217
msgid "Don't optimize block moves"
@@ -15058,7 +15028,7 @@ msgstr "指定是å¦åº”当使用 r10k 缓存å±éšœ"
#: config/mips/mips.opt:253
msgid "Try to allow the linker to turn PIC calls into direct calls"
-msgstr ""
+msgstr "å…许链接器将 PIC 调用转化为直接调用"
#: config/mips/mips.opt:257
msgid "When generating -mabicalls code, make the code suitable for use in shared libraries"
@@ -15517,7 +15487,6 @@ msgid "Assume ICPLBs are enabled at runtime."
msgstr "å‡å®šåœ¨è¿è¡Œæ—¶ ICPLB 是被å¯ç”¨çš„。"
#: config/picochip/picochip.opt:23
-#, fuzzy
msgid "Specify which type of AE to target. This option sets the mul-type and byte-access."
msgstr "指定去到目标的 AE 类型。这个选项设置 mul-type 和字节访问。"
@@ -15526,9 +15495,8 @@ msgid "Specify which type of multiplication to use. Can be mem, mac or none."
msgstr "指定使用的乘法类型。å¯ä»¥æ˜¯ memã€mac 或 none。"
#: config/picochip/picochip.opt:31
-#, fuzzy
msgid "Specify whether the byte access instructions should be used. Enabled by default."
-msgstr "指定应该使用的字节访问指令。按照默认被å¯ç”¨ã€‚"
+msgstr "指定是å¦åº”该使用字节访问指令。默认被å¯ç”¨ã€‚"
#: config/picochip/picochip.opt:35
msgid "Enable debug output to be generated."
@@ -15640,7 +15608,7 @@ msgstr "å¯ç”¨å‡å€¼æŒ‡ä»¤"
#: config/mep/mep.opt:33
msgid "Variables this size and smaller go in the based section. (default 0)"
-msgstr ""
+msgstr "大å°ç­‰äºŽæˆ–å°äºŽè®¾å®šå€¼(默认为 0)çš„å˜é‡æ”¾åœ¨åŸºæœ¬èŠ‚中。"
#: config/mep/mep.opt:37
msgid "Enable bit manipulation instructions"
@@ -15648,7 +15616,7 @@ msgstr "å¯ç”¨ä½æ“作指令"
#: config/mep/mep.opt:41
msgid "Section to put all const variables in (tiny, near, far) (no default)"
-msgstr ""
+msgstr "设置存放所有常å˜é‡çš„节(tinyã€near 或 far)(没有默认值)"
#: config/mep/mep.opt:45
msgid "Enable clip instructions"
@@ -15736,7 +15704,7 @@ msgstr "所有å˜é‡é»˜è®¤ä½äºŽ far 节中"
#: config/mep/mep.opt:150
msgid "Variables this size and smaller go in the tiny section. (default 4)"
-msgstr ""
+msgstr "大å°ç­‰äºŽæˆ–å°äºŽè®¾å®šå€¼(默认 4)çš„å˜é‡æ”¾åœ¨ tiny 节中。"
#: config/vms/vms.opt:21
msgid "Malloc data into P2 space"
@@ -15780,7 +15748,7 @@ msgstr "æ•°æ®è¢«å­˜å‚¨ä¸ºå°ç«¯åœ¨å‰çš„æ ¼å¼ã€‚(默认)"
#: config/rx/rx.opt:62
msgid "Maximum size of global and static variables which can be placed into the small data area."
-msgstr ""
+msgstr "能被放在å°å†…存区的全局和é™æ€å˜é‡çš„最大尺寸。"
#: config/rx/rx.opt:68
msgid "Use the simulator runtime."
@@ -15788,7 +15756,7 @@ msgstr "使用仿真器è¿è¡Œæ—¶ã€‚"
#: config/rx/rx.opt:74
msgid "Generate assembler output that is compatible with the Renesas AS100 assembler. This may restrict some of the compiler's capabilities. The default is to generate GAS compatable syntax."
-msgstr ""
+msgstr "生æˆä¸Ž Renesas AS100 兼容的汇编输出。这å¯èƒ½ä¼šé™åˆ¶ç¼–译器的æŸäº›åŠŸèƒ½ã€‚默认是使用与 GAS 兼容的语法。"
#: config/rx/rx.opt:80
msgid "Enable linker relaxation."
@@ -15796,7 +15764,7 @@ msgstr "使用更短的地å€å¼•ç”¨ã€‚"
#: config/rx/rx.opt:86
msgid "Maximum size in bytes of constant values allowed as operands."
-msgstr ""
+msgstr "用字节表示的能被用作æ“作数的常é‡çš„最大尺寸。"
#: config/rx/rx.opt:92
msgid "Specifies the number of registers to reserve for interrupt handlers."
@@ -15804,7 +15772,7 @@ msgstr "指定ä¿ç•™ç»™ä¸­æ–­å¤„ç†å‡½æ•°ä½¿ç”¨çš„寄存器的数é‡"
#: config/rx/rx.opt:98
msgid "Specifies whether interrupt functions should save and restore the accumulator register."
-msgstr ""
+msgstr "指定中断函数是å¦è¦ä¿å­˜å’Œæ¢å¤ç´¯ç§¯å¯„存器。"
#: config/lm32/lm32.opt:24
msgid "Enable multiply instructions"
@@ -16688,15 +16656,15 @@ msgstr "å¯ç”¨è¯¦ç»†è¾“出"
#: lto/lang.opt:29
msgid "Run the link-time optimizer in local transformation (LTRANS) mode."
-msgstr ""
+msgstr "在局部转化(LTRANS)模å¼ä¸‹è¿è¡Œé“¾æŽ¥æ—¶ä¼˜åŒ–器。"
#: lto/lang.opt:33
msgid "Specify a file to which a list of files output by LTRANS is written."
-msgstr ""
+msgstr "指定存放 LTRANS 输出的文件列表的文件。"
#: lto/lang.opt:37
msgid "Run the link-time optimizer in whole program analysis (WPA) mode."
-msgstr ""
+msgstr "在全程åºåˆ†æž(WPA)模å¼ä¸‹è¿è¡Œé“¾æŽ¥æ—¶ä¼˜åŒ–器。"
#: lto/lang.opt:41
msgid "The resolution file"
@@ -17099,9 +17067,8 @@ msgid "Do not suppress C++ class debug information."
msgstr "ä¿ç•™ C++ 类调试信æ¯ã€‚"
#: common.opt:507
-#, fuzzy
msgid "Generate debug information to support Identical Code Folding (ICF)"
-msgstr "ç”Ÿæˆ XCOFF 扩展格å¼çš„调试信æ¯"
+msgstr "生æˆå¿…è¦çš„调试信æ¯ä»¥æ”¯æŒç›¸åŒä»£ç æŠ˜å (ICF)"
#: common.opt:511
msgid "Enable exception handling"
@@ -17288,14 +17255,12 @@ msgid "Use IRA based register pressure calculation"
msgstr "使用基于 IRA 的寄存器压力计算"
#: common.opt:727
-#, fuzzy
msgid "Share slots for saving different hard registers."
msgstr "为ä¿å­˜ä¸åŒçš„硬寄存器的共享槽。"
#: common.opt:731
-#, fuzzy
msgid "Share stack slots for spilled pseudo-registers."
-msgstr "对于溢出的伪寄存器共享堆栈槽。"
+msgstr "为溢出的伪寄存器共享堆栈槽。"
#: common.opt:735
msgid "-fira-verbose=<number> Control IRA's level of diagnostic messages."
@@ -17330,9 +17295,8 @@ msgid "-flto-compression-level=<number> Use zlib compression level <number> for
msgstr "-flto-compression-level=<N> 为 IL 使用 zlib 压缩级别<N>"
#: common.opt:772
-#, fuzzy
msgid "Report various link-time optimization statistics"
-msgstr "进行寄存器é‡å‘½å优化"
+msgstr "报告å„ç§é“¾æŽ¥æ—¶ä¼˜åŒ–统计"
#: common.opt:776
msgid "Set errno after built-in math functions"
@@ -17492,18 +17456,16 @@ msgid "Enable common options for generating profile info for profile feedback di
msgstr "å¯ç”¨ä¸€äº›å…¬å…±é€‰é¡¹æ¥ç”Ÿæˆæ ·æœ¬æ–‡ä»¶ï¼Œä»¥ä¾¿è¿›è¡ŒåŸºäºŽå–样的优化"
#: common.opt:940
-#, fuzzy
msgid "Enable common options for generating profile info for profile feedback directed optimizations, and set -fprofile-dir="
-msgstr "å¯ç”¨ä¸€äº›ç”Ÿæˆæ ·æœ¬ä¿¡æ¯çš„公共选项æ¥ç”Ÿæˆæ ·æœ¬å›žé¦ˆç›´æŽ¥ä¼˜åŒ–,并且设置-fprofile-dir="
+msgstr "å¯ç”¨ç”Ÿæˆå–æ ·ä¿¡æ¯çš„公共选项以支æŒåŸºäºŽå–æ ·å馈的优化,åŒæ—¶è®¾ç½® -fprofile-dir="
#: common.opt:944
msgid "Enable common options for performing profile feedback directed optimizations"
msgstr "å¯ç”¨ä¸€äº›å…¬å…±é€‰é¡¹ä»¥è¿›è¡ŒåŸºäºŽå–样的优化"
#: common.opt:948
-#, fuzzy
msgid "Enable common options for performing profile feedback directed optimizations, and set -fprofile-dir="
-msgstr "å¯ç”¨å…¬å…±é€‰é¡¹ä»¥è¿›è¡Œå–样回馈直接的优化,并设置 -fprofile-dir="
+msgstr "å¯ç”¨å…¬å…±é€‰é¡¹ä»¥è¿›è¡ŒåŸºäºŽå–æ ·å馈的优化,åŒæ—¶è®¾ç½® -fprofile-dir="
#: common.opt:952
msgid "Insert code to profile values of expressions"
@@ -17650,22 +17612,20 @@ msgid "Enable the dependent count heuristic in the scheduler"
msgstr "为调度器å¯ç”¨ä¾èµ–计数å¯å‘å¼å‘现"
#: common.opt:1118
-#, fuzzy
msgid "Access data in the same section from shared anchor points"
msgstr "从共享的锚点访问在åŒæ ·çš„节中的数æ®"
#: common.opt:1126
-#, fuzzy
msgid "Show column numbers in diagnostics, when available. Default on"
msgstr "诊断信æ¯ä¸­ç»™å‡ºè¡Œå·ã€‚默认打开"
#: common.opt:1130
msgid "Disable optimizations observable by IEEE signaling NaNs"
-msgstr "ç¦ç”¨ä¸º IEEE è®¯æ¯ NaN å¯è§çš„优化"
+msgstr "ç¦ç”¨ä¸º IEEE NaN å¯è§çš„优化"
#: common.opt:1134
msgid "Disable floating point optimizations that ignore the IEEE signedness of zero"
-msgstr "ç¦ç”¨å¿½ç•¥ IEEE 零符å·çš„浮点优化"
+msgstr "ç¦ç”¨å¿½ç•¥ IEEE 中零的符å·çš„浮点优化"
#: common.opt:1138
msgid "Convert floating point constants to single precision constants"
@@ -17737,7 +17697,7 @@ msgstr "设定默认的线程局部存储代ç ç”Ÿæˆæ¨¡å¼"
#: common.opt:1217
msgid "Reorder top level functions, variables, and asms"
-msgstr "é‡æ–°æŽ’åºæ–‡ä»¶åŸŸçš„函数ã€å˜é‡å’Œæ±‡ç¼–"
+msgstr "é‡æ–°æŽ’åºæ–‡ä»¶ä½œç”¨åŸŸçš„函数ã€å˜é‡å’Œæ±‡ç¼–"
#: common.opt:1221
msgid "Perform superblock formation via tail duplication"
@@ -17820,18 +17780,16 @@ msgid "Enable automatic parallelization of loops"
msgstr "å¯ç”¨å¾ªçŽ¯çš„自动并行化"
#: common.opt:1312
-#, fuzzy
msgid "Enable hoisting loads from conditional pointers."
-msgstr "å¯ç”¨æ¡ä»¶è½¬ç§»"
+msgstr "为æ¡ä»¶æŒ‡é’ˆå¤–æ内存读å–æ“作。"
#: common.opt:1316
msgid "Enable SSA-PRE optimization on trees"
msgstr "å¯ç”¨æ ‘上的 SSA-PRE 优化"
#: common.opt:1320
-#, fuzzy
msgid "Perform function-local points-to analysis on trees."
-msgstr "进行进程间的指å‘分æž"
+msgstr "在树上进行函数内的指å‘分æžã€‚"
#: common.opt:1324
msgid "Enable reassociation on tree level"
@@ -17898,9 +17856,8 @@ msgid "Perform variable tracking"
msgstr "进行å˜é‡è·Ÿè¸ª"
#: common.opt:1403
-#, fuzzy
msgid "Perform variable tracking by annotating assignments"
-msgstr "进行å˜é‡è·Ÿè¸ª"
+msgstr "评注赋值以进行å˜é‡è·Ÿè¸ª"
#: common.opt:1407
msgid "Toggle -fvar-tracking-assignments"
@@ -17996,11 +17953,11 @@ msgstr "生æˆæ‰©å±• STABS æ ¼å¼çš„调试信æ¯"
#: common.opt:1506
msgid "Emit DWARF additions beyond selected version"
-msgstr ""
+msgstr "生æˆè¾ƒæ‰€é€‰ç‰ˆæœ¬æ›´å…ˆè¿›çš„ DWARF 附加信æ¯"
#: common.opt:1510
msgid "Don't emit DWARF additions beyond selected version"
-msgstr ""
+msgstr "ä¸ç”Ÿæˆè¾ƒæ‰€é€‰ç‰ˆæœ¬æ›´å…ˆè¿›çš„ DWARF 附加信æ¯"
#: common.opt:1514
msgid "Toggle debug information generation"
@@ -18447,7 +18404,7 @@ msgstr "case æ ‡å·èŒƒå›´çš„上é™å€¼æ¯”该类型的最大值还è¦å¤§"
#: c-common.c:2885
#, gcc-internal-format
msgid "GCC cannot support operators with integer types and fixed-point types that have too many integral and fractional bits together"
-msgstr "GCC ä¸æ”¯æŒæ•´æ•°ç±»åž‹å’Œæ•´æ•°åŠåˆ†æ•°ä½å¤ªå¤šçš„定点类型间的æ“作符"
+msgstr "GCC ä¸æ”¯æŒæ•´æ•°ç±»åž‹å’Œæ•´æ•°åŠåˆ†æ•°ä½å¤ªå¤šçš„定点类型间的è¿ç®—符"
#: c-common.c:3372
#, gcc-internal-format
@@ -18780,9 +18737,9 @@ msgid "alias argument not a string"
msgstr "alias çš„å‚æ•°ä¸æ˜¯ä¸€ä¸ªå­—符串"
#: c-common.c:6836
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "weakref attribute must appear before alias attribute"
-msgstr "%Jweakref 属性必须出现在 alias 属性å‰"
+msgstr "weakref 属性必须出现在 alias 属性å‰"
#: c-common.c:6865
#, gcc-internal-format
@@ -19000,7 +18957,7 @@ msgstr "试图å–ä½æ®µç»“æž„æˆå‘˜%qD的地å€"
#: c-common.c:8435
#, gcc-internal-format
msgid "index %E denotes an offset greater than size of %qT"
-msgstr ""
+msgstr "索引 %E 指定了一个大于%qT大å°çš„å移é‡"
#: c-common.c:8472
#, gcc-internal-format
@@ -20162,7 +20119,7 @@ msgstr "å½¢å‚ %u (%q+D)类型为 void"
#: c-decl.c:6112
#, gcc-internal-format
msgid "parameter %u has void type"
-msgstr "å‚æ•° %u 类型为 void"
+msgstr "第 %u 个å‚数类型为 void"
#: c-decl.c:6182
#, gcc-internal-format
@@ -20518,7 +20475,7 @@ msgstr "在%<for%>循环åˆå§‹å£°æ˜Žä¸­å£°æ˜Žäº†éžå˜é‡%qD"
#: c-decl.c:8416
#, gcc-internal-format
msgid "incompatible address space qualifiers %qs and %qs"
-msgstr ""
+msgstr "ä¸å…¼å®¹çš„地å€ç©ºé—´é™å®šç¬¦%qså’Œ%qs"
#: c-decl.c:8455 c-decl.c:8752 c-decl.c:9118
#, gcc-internal-format
@@ -21000,7 +20957,7 @@ msgstr "程åºä¸­æœ‰æ¸¸ç¦»çš„%<\\%o%>"
#: c-lex.c:572
#, gcc-internal-format
msgid "this decimal constant is unsigned only in ISO C90"
-msgstr "这个å°æ•°å¸¸é‡ä»… ISO C90 中是无符å·çš„"
+msgstr "这个å进制数常é‡ä»… ISO C90 中是无符å·çš„"
#: c-lex.c:576
#, gcc-internal-format
@@ -21532,7 +21489,7 @@ msgstr "å¤åˆå­—é¢å€¼æœ‰å¯å˜çš„大å°"
#: c-parser.c:5817
#, gcc-internal-format
msgid "compound literal qualified by address-space qualifier"
-msgstr ""
+msgstr "组åˆå­—é¢å¸¸é‡æœ‰åœ°å€ç©ºé—´é™å®š"
#: c-parser.c:5822
#, gcc-internal-format
@@ -21632,7 +21589,7 @@ msgstr "%qs对%qs而言无效"
#: c-parser.c:7882
#, gcc-internal-format
msgid "invalid operator for %<#pragma omp atomic%>"
-msgstr "%<#pragma omp atomic%>æ“作符无效"
+msgstr "%<#pragma omp atomic%>è¿ç®—符无效"
#: c-parser.c:7941 c-parser.c:7962
#, gcc-internal-format
@@ -22020,9 +21977,9 @@ msgid "junk at end of %<#pragma %s%>"
msgstr "%<#pragma %s%>末尾有垃圾"
#: c-pragma.c:1106
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported for C++"
-msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> 在此目标机上ä¸å—支æŒ"
+msgstr "%<#pragma STDC FLOAT_CONST_DECIMAL64%> ä¸ä¸º C++ 所支æŒ"
#: c-pragma.c:1115
#, gcc-internal-format
@@ -22476,17 +22433,17 @@ msgstr "类型转æ¢çš„æºç±»åž‹æœªå‡ºçŽ°åœ¨è”åˆä¸­"
#: c-typeck.c:4457
#, gcc-internal-format
msgid "cast to %s address space pointer from disjoint generic address space pointer"
-msgstr ""
+msgstr "å°†ä¸é‡å çš„普通地å€ç©ºé—´æŒ‡é’ˆè½¬æ¢ä¸º %s 地å€ç©ºé—´æŒ‡é’ˆ"
#: c-typeck.c:4462
#, gcc-internal-format
msgid "cast to generic address space pointer from disjoint %s address space pointer"
-msgstr ""
+msgstr "å°†ä¸é‡å çš„ %s 地å€ç©ºé—´æŒ‡é’ˆè½¬æ¢ä¸ºæ™®é€šåœ°å€ç©ºé—´æŒ‡é’ˆ"
#: c-typeck.c:4467
#, fuzzy, gcc-internal-format
msgid "cast to %s address space pointer from disjoint %s address space pointer"
-msgstr "为指针赋值给未被包围的地å€ç©ºé—´"
+msgstr "å°†ä¸é‡å çš„普通地å€ç©ºé—´æŒ‡é’ˆè½¬æ¢ä¸º %s 地å€ç©ºé—´æŒ‡é’ˆ"
#: c-typeck.c:4487
#, gcc-internal-format
@@ -22539,7 +22496,7 @@ msgstr "需è¦ç±»åž‹%qT,但实å‚的类型为%qT"
#: c-typeck.c:4907
#, gcc-internal-format
msgid "enum conversion when passing argument %d of %qE is invalid in C++"
-msgstr "C++ ç¦æ­¢åœ¨ä¼ é€’%2$qEçš„å‚æ•° %1$d 时进行枚举转æ¢"
+msgstr "C++ ç¦æ­¢åœ¨ä¼ é€’%2$qE的第 %1$d 个å‚数时进行枚举转æ¢"
#: c-typeck.c:4913
#, gcc-internal-format
@@ -22604,12 +22561,12 @@ msgstr "C++ 中ä¸å…许从%qT到%qTçš„éšå¼è½¬æ¢"
#: c-typeck.c:5148
#, gcc-internal-format
msgid "passing argument %d of %qE from pointer to non-enclosed address space"
-msgstr "传递%2$qEçš„å‚æ•° %1$d 时从指针转æ¢ä¸ºæœªè¢«åŒ…围的地å€ç©ºé—´"
+msgstr "传递%2$qE的第 %1$d 个å‚数时从指针转æ¢ä¸ºæœªè¢«åŒ…围的地å€ç©ºé—´"
#: c-typeck.c:5152
#, gcc-internal-format
msgid "assignment from pointer to non-enclosed address space"
-msgstr "为指针赋值给未被包围的地å€ç©ºé—´"
+msgstr "将指针赋值给未被包围的地å€ç©ºé—´"
#: c-typeck.c:5156
#, gcc-internal-format
@@ -22617,9 +22574,9 @@ msgid "initialization from pointer to non-enclosed address space"
msgstr "从指针å‘未被包围的地å€ç©ºé—´åˆå§‹åŒ–"
#: c-typeck.c:5160
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "return from pointer to non-enclosed address space"
-msgstr "为指针赋值给未被包围的地å€ç©ºé—´"
+msgstr "返回时将指针赋值给未被包围的地å€ç©ºé—´"
#: c-typeck.c:5178
#, gcc-internal-format
@@ -22664,7 +22621,7 @@ msgstr "ISO C ä¸å…许在函数指针和%<void *%>间返回"
#: c-typeck.c:5257
#, gcc-internal-format
msgid "pointer targets in passing argument %d of %qE differ in signedness"
-msgstr "传递%2$qEçš„å‚æ•° %1$d 给指针时,目标与指针符å·ä¸ä¸€è‡´"
+msgstr "传递%2$qE的第 %1$d 个å‚数给指针时,目标与指针符å·ä¸ä¸€è‡´"
#: c-typeck.c:5259
#, gcc-internal-format
@@ -23267,9 +23224,9 @@ msgid "%d exits recorded for loop %d (having %d exits)"
msgstr "%1$d 为循环 %2$d 记录的退出(有 %3$d 的退出)"
#: cfgrtl.c:1817
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "BB_RTL flag not set for block %d"
-msgstr "å¯¹äºŽå— %d BB_RTL 标志ä¸è®¾ç½®"
+msgstr "å— %d 没有设置 BB_RTL 标志"
#: cfgrtl.c:1824
#, fuzzy, gcc-internal-format
@@ -23307,9 +23264,9 @@ msgid "too many eh edges %i"
msgstr "eh 边缘 %i 太多"
#: cfgrtl.c:1917
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "too many outgoing branch edges from bb %i"
-msgstr "从 bb %i 分出太多的分支边"
+msgstr "ä»ŽåŸºæœ¬å— %i 分出太多的分支边"
#: cfgrtl.c:1922
#, gcc-internal-format
@@ -23494,22 +23451,22 @@ msgstr "节点有错误的 clone_of"
#: cgraphunit.c:698
#, gcc-internal-format
msgid "node has wrong clone list"
-msgstr ""
+msgstr "节点的克隆列表ä¸æ­£ç¡®"
#: cgraphunit.c:704
#, gcc-internal-format
msgid "node is in clone list but it is not clone"
-msgstr ""
+msgstr "节点在克隆列表中,但并ä¸æ˜¯å…‹éš†"
#: cgraphunit.c:709
#, gcc-internal-format
msgid "node has wrong prev_clone pointer"
-msgstr ""
+msgstr "节点的 prev_clone 指针错误"
#: cgraphunit.c:714
#, gcc-internal-format
msgid "double linked list of clones corrupted"
-msgstr ""
+msgstr "åŒå‘克隆链接列表已æŸå"
#: cgraphunit.c:744
#, gcc-internal-format
@@ -23557,9 +23514,9 @@ msgid "nodes with unreleased memory found"
msgstr "找到未释放内存的节点"
#: collect2.c:1505 opts.c:1137
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "LTO support has not been enabled in this configuration"
-msgstr "在当å‰é…置下 -m64 ä¸è¢«æ”¯æŒ"
+msgstr "LTO 支æŒåœ¨æ­¤é…置下未被å¯ç”¨"
#: collect2.c:1598
#, gcc-internal-format
@@ -23737,9 +23694,9 @@ msgid "Multiple EH personalities are supported only with assemblers supporting .
msgstr ""
#: dwarf2out.c:5392
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "DW_LOC_OP %s not implemented"
-msgstr "DW_LOC_OP %s 尚未实作"
+msgstr "DW_LOC_OP %s 尚未实现"
#: emit-rtl.c:2460
#, gcc-internal-format
@@ -23787,9 +23744,9 @@ msgid "region_array is corrupted for region %i"
msgstr "区域 %i çš„ region_array 被破å"
#: except.c:3347 except.c:3378
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "lp_array is corrupted for lp %i"
-msgstr "区域 %i çš„ region_array 被破å"
+msgstr "lp %i çš„ lp_array 被破å"
#: except.c:3364
#, gcc-internal-format
@@ -23802,7 +23759,7 @@ msgid "negative nesting depth of region %i"
msgstr "区域 %i 的负嵌套深度"
#: except.c:3383
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "region of lp %i is wrong"
msgstr "区域 %i 的 lp 错误"
@@ -23814,12 +23771,12 @@ msgstr "树列表结æŸäºŽæ·±åº¦ %i"
#: except.c:3415
#, gcc-internal-format
msgid "region_array does not match region_tree"
-msgstr ""
+msgstr "region_array ä¸åŒ¹é… region_tree"
#: except.c:3420
#, gcc-internal-format
msgid "lp_array does not match region_tree"
-msgstr ""
+msgstr "lp_array ä¸åŒ¹é… region_tree"
#: except.c:3427
#, gcc-internal-format
@@ -23850,14 +23807,14 @@ msgid "the frame size of %wd bytes is larger than %wd bytes"
msgstr "堆栈框架有 %wd 字节,超过了 %wd 字节"
#: final.c:4367 toplev.c:1921
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not open final insn dump file %qs: %s"
-msgstr "无法打开转储文件%qs:%s"
+msgstr "无法打开最终指令转储文件%qs:%s"
#: final.c:4423
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not close final insn dump file %qs: %s"
-msgstr "无法打开转储文件%qs:%s"
+msgstr "无法关闭最终指令转储文件%qs:%s"
#: fixed-value.c:104
#, gcc-internal-format
@@ -23905,7 +23862,7 @@ msgid "assuming signed overflow does not occur when combining constants around a
msgstr "在比较周围组åˆå˜é‡æ—¶å‡å®šæœ‰ç¬¦å·æ•°ä»Žä¸æº¢å‡º"
#: fold-const.c:14213
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "fold check: original tree changed by fold"
msgstr "折å æ£€æŸ¥: 原始树因折å è€Œæ”¹å˜ "
@@ -24003,9 +23960,9 @@ msgid "%s: -fcompare-debug failure (length)"
msgstr "%s:-fcompare-debug 失败(长度)"
#: gcc.c:6694 gcc.c:6735
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s: could not open compare-debug file %s"
-msgstr "无法打开临时å“应文件 %s"
+msgstr "%s:无法打开比较调试文件 %s"
#: gcc.c:6714 gcc.c:6751
#, gcc-internal-format
@@ -24141,9 +24098,9 @@ msgid "memory input %d is not directly addressable"
msgstr "内存输入 %d ä¸å¯ç›´æŽ¥å¯»å€"
#: gimplify.c:5391
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE not specified in enclosing parallel"
-msgstr "%qs 未为在括入的并行指定"
+msgstr "%qE未为在括入的并行中指定"
#: gimplify.c:5393
#, gcc-internal-format
@@ -24198,27 +24155,27 @@ msgstr "%s ä¸èƒ½åœ¨è¿™é‡Œç”¨äºŽ asm"
#: lto-cgraph.c:571
#, gcc-internal-format
msgid "bytecode stream: found multiple instances of cgraph node %d"
-msgstr ""
+msgstr "字节ç æµï¼šæ‰¾åˆ° cgraph 节点 %d 的多个实例"
#: lto-cgraph.c:634
#, gcc-internal-format
msgid "bytecode stream: no caller found while reading edge"
-msgstr ""
+msgstr "字节ç æµï¼šè¯»å–边时找ä¸åˆ°è°ƒç”¨è€…"
#: lto-cgraph.c:638
#, gcc-internal-format
msgid "bytecode stream: no callee found while reading edge"
-msgstr ""
+msgstr "字节ç æµï¼šè¯»å–边时找ä¸åˆ°è¢«è°ƒç”¨è€…"
#: lto-cgraph.c:687
#, gcc-internal-format
msgid "bytecode stream: found empty cgraph node"
-msgstr ""
+msgstr "字节ç æµï¼šæ‰¾åˆ°ç©ºçš„ cgraph 节点"
#: lto-cgraph.c:745
#, gcc-internal-format
msgid "Combining units with different profiles is not supported."
-msgstr ""
+msgstr "ä¸æ”¯æŒç»„åˆæœ‰ä¸åŒå–æ ·ä¿¡æ¯çš„å•å…ƒã€‚"
#: lto-compress.c:190 lto-compress.c:198 lto-compress.c:219 lto-compress.c:280
#: lto-compress.c:288 lto-compress.c:309
@@ -24229,22 +24186,22 @@ msgstr "压缩的æµï¼š%s"
#: lto-section-in.c:66
#, gcc-internal-format
msgid "bytecode stream: trying to read %d bytes after the end of the input buffer"
-msgstr ""
+msgstr "字节ç æµï¼šè¯•å›¾åœ¨è¾“入缓冲区结æŸå¤„è¯»å– %d 字节"
#: lto-streamer-in.c:81
#, gcc-internal-format
msgid "bytecode stream: unexpected tag %s"
-msgstr ""
+msgstr "字节ç æµï¼šéžé¢„期的标记 %s"
#: lto-streamer-in.c:92
#, gcc-internal-format
msgid "bytecode stream: tag %s is not in the expected range [%s, %s]"
-msgstr ""
+msgstr "字节ç æµï¼šæ ‡è®° %s ä¸åœ¨é¢„期的范围[%s,%s]内"
#: lto-streamer-in.c:106
#, gcc-internal-format
msgid "bytecode stream: expected tag %s instead of %s"
-msgstr ""
+msgstr "字节ç æµï¼šéœ€è¦æ ‡è®° %s è€Œéž %s"
#: lto-streamer-in.c:150
#, gcc-internal-format
@@ -24254,12 +24211,12 @@ msgstr "字节ç æµï¼šå­—符串对字符串表而言太长"
#: lto-streamer-in.c:210
#, gcc-internal-format
msgid "bytecode stream: found non-null terminated string"
-msgstr ""
+msgstr "字节ç æµï¼šæ‰¾åˆ°éž NULL 结尾的字符串"
#: lto-streamer-in.c:1112
#, gcc-internal-format
msgid "bytecode stream: unknown GIMPLE statement tag %s"
-msgstr ""
+msgstr "字节ç æµï¼šæœªçŸ¥çš„ GIMPLE 语å¥æ ‡è®° %s"
#: lto-streamer-in.c:2387
#, gcc-internal-format
@@ -24274,7 +24231,7 @@ msgstr "尚未支æŒç›®æ ‡ä¼˜åŒ–选项"
#: lto-streamer-in.c:2535
#, gcc-internal-format
msgid "bytecode stream: tried to jump backwards in the stream"
-msgstr ""
+msgstr "字节ç æµï¼šè¯•å›¾åœ¨æµä¸­åå‘跳转"
#: lto-streamer-in.c:2579
#, gcc-internal-format
@@ -24299,17 +24256,17 @@ msgstr "32 ä½ç³»ç»Ÿä¸æ”¯æŒ -mcmodel="
#: lto-streamer-out.c:1238
#, gcc-internal-format
msgid "gimple bytecode streams do not support machine specific builtin functions on this target"
-msgstr ""
+msgstr "GIMPLE 字节ç æµåœ¨æ­¤ç›®æ ‡æœºä¸Šä¸æ”¯æŒæœºå™¨ç›¸å…³çš„内建函数"
#: lto-streamer.c:176
#, gcc-internal-format
msgid "bytecode stream: unexpected LTO section %s"
-msgstr ""
+msgstr "字节ç æµï¼šéžé¢„期的 LTO 节 %s"
#: lto-streamer.c:859
#, gcc-internal-format
msgid "bytecode stream generated with LTO version %d.%d instead of the expected %d.%d"
-msgstr ""
+msgstr "字节ç æµæ˜¯ç”± LTO 版本 %d.%d 生æˆï¼Œè€Œéžé¢„期的 %d.%d"
#: lto-symtab.c:432
#, gcc-internal-format
@@ -24322,14 +24279,14 @@ msgid "previously defined here"
msgstr "以å‰åœ¨æ­¤å®šä¹‰è¿‡"
#: lto-symtab.c:504
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "type of %qD does not match original declaration"
-msgstr "%2$q+D的模æ¿æ ‡è¯†ç¬¦%1$qDä¸åŒ¹é…任何模æ¿å£°æ˜Ž"
+msgstr "类型%qDä¸åŒ¹é…原先的声明"
#: lto-symtab.c:511
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "alignment of %qD is bigger than original declaration"
-msgstr "赋值(ä¸æ˜¯åˆå§‹åŒ–)出现在声明中"
+msgstr "%qD的对é½"
#: lto-symtab.c:517 lto-symtab.c:614
#, gcc-internal-format
@@ -24347,34 +24304,34 @@ msgid "function %qD redeclared as variable"
msgstr "函数%qDé‡å£°æ˜Žä¸ºå˜é‡"
#: omp-low.c:1837
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "barrier region may not be closely nested inside of work-sharing, critical, ordered, master or explicit task region"
-msgstr "æ¡åŒºåŸŸåœ¨å·¥ä½œå…±äº«ã€ä¸´ç•Œã€æŽ’次åºã€ä¸»è¦çš„或显å¼çš„任务区域内部ä¸å¯ä»¥ç´§å¯†åµŒå¥—"
+msgstr "å±éšœåŒºåŸŸä¸å¯ä»¥ç´§å¯†åµŒå¥—在工作共享ã€ä¸´ç•Œã€æœ‰åºã€ä¸»è¦çš„或显å¼çš„任务区域内"
#: omp-low.c:1842
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "work-sharing region may not be closely nested inside of work-sharing, critical, ordered, master or explicit task region"
-msgstr "工作共享区域在工作共享ã€ä¸´ç•Œã€æŽ’次åºã€ä¸»è¦çš„或显å¼çš„任务区域内部ä¸å¯ä»¥ç´§å¯†åµŒå¥—"
+msgstr "工作共享区域ä¸å¯ä»¥ç´§å¯†åµŒå¥—在工作共享ã€ä¸´ç•Œã€æœ‰åºã€ä¸»è¦çš„或显å¼çš„任务区域内"
#: omp-low.c:1860
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "master region may not be closely nested inside of work-sharing or explicit task region"
-msgstr "主è¦åŒºåŸŸ ä¸å¯ä»¥åœ¨å·¥ä½œå…±äº«æˆ–显å¼çš„任务区域内部紧密嵌套"
+msgstr "主è¦åŒºåŸŸä¸å¯ä»¥ç´§å¯†åµŒå¥—在工作共享或显å¼çš„任务区域内"
#: omp-low.c:1875
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ordered region may not be closely nested inside of critical or explicit task region"
-msgstr "排åºçš„区域ä¸å¯ä»¥ç´§å¯†åµŒå¥—在临界或显å¼çš„任务区域内部"
+msgstr "有åºåŒºåŸŸä¸å¯ä»¥ç´§å¯†åµŒå¥—在临界或显å¼çš„任务区域内"
#: omp-low.c:1881
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ordered region must be closely nested inside a loop region with an ordered clause"
-msgstr "有次åºåŒºåŸŸå¿…须是具有一个有次åºåˆ†å¥çš„循环内部密切嵌套的区域"
+msgstr "有åºåŒºåŸŸå¿…须紧密嵌套在一个有次åºåˆ†å¥çš„循环内"
#: omp-low.c:1896
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "critical region may not be nested inside a critical region with the same name"
-msgstr "一个具有相åŒå字临界区域的内部临界的区域ä¸å¯ä»¥è¢«åµŒå¥—"
+msgstr "临界区域ä¸å¯ä»¥è¢«åµŒå¥—在åŒå的临界区域内"
#: omp-low.c:6750 cp/decl.c:2709 cp/parser.c:8399 cp/parser.c:8419
#, gcc-internal-format
@@ -24388,9 +24345,9 @@ msgstr "OpenMP 结构å—å…¥å£æ— æ•ˆ"
#. Otherwise, be vague and lazy, but efficient.
#: omp-low.c:6760
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid branch to/from an OpenMP structured block"
-msgstr "进出 OpenMP 结构å—çš„éžæ³•åˆ†æ”¯"
+msgstr "进出 OpenMP 结构å—的分支无效"
#: opts.c:171
#, gcc-internal-format
@@ -24434,19 +24391,19 @@ msgid "argument to \"%s\" should be a non-negative integer"
msgstr "“%sâ€çš„实å‚应该是一个éžè´Ÿæ•´æ•°"
#: opts.c:1000
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Section anchors must be disabled when unit-at-a-time is disabled."
-msgstr "当 unit-at-a-time 被ç¦æ­¢æ—¶èŠ‚锚必须被ç¦æ­¢ã€‚"
+msgstr "当 unit-at-a-time 被ç¦ç”¨æ—¶èŠ‚中锚点也必须被ç¦ç”¨ã€‚"
#: opts.c:1004
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Toplevel reorder must be disabled when unit-at-a-time is disabled."
-msgstr "当unit-at-a-time 被ç¦æ­¢æ—¶é¡¶å±‚é‡æ–°æŽ’åºå¿…é¡»ç¦æ­¢ã€‚"
+msgstr "unit-at-a-time 被ç¦ç”¨æ—¶æ–‡ä»¶ä½œç”¨åŸŸé‡æŽ’åºä¹Ÿå¿…须被ç¦ç”¨"
#: opts.c:1019
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "section anchors must be disabled when toplevel reorder is disabled"
-msgstr "当顶层é‡æ–°æŽ’åºè¢«ç¦æ­¢æ—¶èŠ‚下锚必须ç¦æ­¢"
+msgstr "当文件作用域é‡æŽ’åºè¢«ç¦ç”¨æ—¶ä¹Ÿå¿…é¡»ç¦ç”¨èŠ‚中锚点"
#: opts.c:1054 config/darwin.c:1705 config/sh/sh.c:903
#, gcc-internal-format
@@ -24491,7 +24448,7 @@ msgstr "结构的对é½å¿…须是 2 的较å°æ¬¡æ–¹ï¼Œè€Œä¸æ˜¯ %d"
#: opts.c:1826 opts.c:1834
#, gcc-internal-format
msgid "Plugin support is disabled. Configure with --enable-plugin."
-msgstr ""
+msgstr "æ’件支æŒè¢«ç¦ç”¨ã€‚é…置时需带 -enable-plugin。"
#: opts.c:1913
#, gcc-internal-format
@@ -24611,31 +24568,34 @@ msgid ""
"%s\n"
"%s"
msgstr ""
+"æ’件 %s 指定了ä¸åŒçš„路径:\n"
+"%s\n"
+"%s"
#: plugin.c:199
#, gcc-internal-format
msgid "Malformed option -fplugin-arg-%s (multiple '=' signs)"
-msgstr ""
+msgstr "-fplugin-arg-%s 选项格å¼ä¸å¯¹(多个‘=’)"
#: plugin.c:215
#, gcc-internal-format
msgid "Malformed option -fplugin-arg-%s (missing -<key>[=<value>])"
-msgstr ""
+msgstr "-fplugin-arg-%s 选项格å¼ä¸å¯¹(缺少 -<é”®>[=<值>])"
#: plugin.c:277
#, gcc-internal-format
msgid "Plugin %s should be specified before -fplugin-arg-%s in the command line"
-msgstr ""
+msgstr "在命令行中,æ’件 %s 需è¦å‡ºçŽ°åœ¨ -fplugin-arg-%s 之å‰"
#: plugin.c:397
#, gcc-internal-format
msgid "Unknown callback event registered by plugin %s"
-msgstr ""
+msgstr "æ’件 %s 注册了未知的回调事件"
#: plugin.c:425
#, gcc-internal-format
msgid "Plugin %s registered a null callback function for event %s"
-msgstr ""
+msgstr "æ’件 %s 为事件 %s 注册了一个空的回调函数"
#: plugin.c:550
#, gcc-internal-format
@@ -24652,6 +24612,8 @@ msgid ""
"plugin %s is not licensed under a GPL-compatible license\n"
"%s"
msgstr ""
+"æ’件 %s 带有与 GPL ä¸å…¼å®¹çš„许å¯\n"
+"%s"
#: plugin.c:568
#, gcc-internal-format
@@ -25215,9 +25177,9 @@ msgid "-f%sleading-underscore not supported on this target machine"
msgstr "-f%sleading-underscore 在此目标机上ä¸å—支æŒ"
#: toplev.c:1927
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not close zeroed insn dump file %qs: %s"
-msgstr "无法打开转储文件%qs:%s"
+msgstr "无法打开用零填充的指令转储文件%qs:%s"
#: toplev.c:1992
#, gcc-internal-format
@@ -25310,9 +25272,9 @@ msgid "SSA name in freelist but still referenced"
msgstr "SSA å在 freelist 中,å´ä»ç„¶è¢«æ领"
#: tree-cfg.c:2544
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Indirect reference's operand is not a register or a constant."
-msgstr "i间接引用的æ“作数ä¸æ˜¯å¯„存器或一个常é‡ã€‚"
+msgstr "间接引用的æ“作数ä¸æ˜¯å¯„存器或常é‡ã€‚"
#: tree-cfg.c:2553
#, fuzzy, gcc-internal-format
@@ -25335,9 +25297,9 @@ msgid "side effects not recomputed when ADDR_EXPR changed"
msgstr "ADDR_EXPR å˜åŒ–时副作用未被é‡æ–°è®¡ç®—"
#: tree-cfg.c:2603 tree-ssa.c:822
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "address taken, but ADDRESSABLE bit not set"
-msgstr "å–地å€ï¼Œä½†æ˜¯ ADDRESSABLE ä½ä¸è®¾ç½®"
+msgstr "å·²å–地å€ï¼Œä½†æ˜¯ ADDRESSABLE ä½æœªè¢«è®¾ç½®"
#: tree-cfg.c:2608
#, gcc-internal-format
@@ -25435,24 +25397,24 @@ msgid "Conversion of an SSA_NAME on the left hand side."
msgstr ""
#: tree-cfg.c:2961
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-function in gimple call"
-msgstr "在 gimple 调用中的éžå‡½æ•°"
+msgstr "gimple 调用了éžå‡½æ•°"
#: tree-cfg.c:2969
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid LHS in gimple call"
-msgstr "在 gimple 调用中的éžæ³• LHS"
+msgstr "gimple 调用中左æ“作数无效"
#: tree-cfg.c:2985
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid conversion in gimple call"
-msgstr "在 gimple 调用中的éžæ³•è½¬æ¢"
+msgstr "gimple 调用中转æ¢æ— æ•ˆ"
#: tree-cfg.c:2998
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "static chain in indirect gimple call"
-msgstr "无效的版本å·â€˜%s’"
+msgstr "间接 gimple 调用中有é™æ€è°ƒç”¨é“¾"
#: tree-cfg.c:3005
#, gcc-internal-format
@@ -25460,9 +25422,9 @@ msgid "static chain with function that doesn't use one"
msgstr ""
#: tree-cfg.c:3029
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid operands in gimple comparison"
-msgstr "在 gimple 比较中的éžæ³•æ“作数"
+msgstr "gimple 比较中æ“作数无效"
#: tree-cfg.c:3047
#, gcc-internal-format
@@ -25485,9 +25447,9 @@ msgid "invalid types in nop conversion"
msgstr "空转æ¢ä¸­ç±»åž‹æ— æ•ˆ"
#: tree-cfg.c:3129
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid types in address space conversion"
-msgstr "整点转æ¢ä¸­ç±»åž‹æ— æ•ˆ"
+msgstr "地å€ç©ºé—´è½¬æ¢ä¸­ç±»åž‹æ— æ•ˆ"
#: tree-cfg.c:3143
#, gcc-internal-format
@@ -25540,9 +25502,9 @@ msgid "non-element sized vector shift of floating point vector"
msgstr ""
#: tree-cfg.c:3335
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid non-vector operands to vector valued plus"
-msgstr "+/-(指针)æ“作数无效"
+msgstr "矢é‡å€¼çš„加法中有无效的éžçŸ¢é‡æ“作数"
#: tree-cfg.c:3359
#, gcc-internal-format
@@ -25580,9 +25542,9 @@ msgid "type mismatch in address expression"
msgstr "地å€è¡¨è¾¾å¼ç±»åž‹ä¸åŒ¹é…"
#: tree-cfg.c:3539 tree-cfg.c:3565
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid rhs for gimple memory store"
-msgstr "gimple 内存存储的éžæ³• rhs"
+msgstr "gimple 内存存储中å³æ“作数无效"
#: tree-cfg.c:3629
#, gcc-internal-format
@@ -25615,9 +25577,9 @@ msgid "Invalid PHI argument"
msgstr "无效的 PHI 实å‚"
#: tree-cfg.c:3718
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Incompatible types in PHI argument %u"
-msgstr "指针目标类型在 C++ 中ä¸å…¼å®¹"
+msgstr "PHI å®žå‚ %u 类型ä¸å…¼å®¹"
#: tree-cfg.c:3858
#, gcc-internal-format
@@ -25700,14 +25662,14 @@ msgid "verify_stmts failed"
msgstr "verify_stmts 失败"
#: tree-cfg.c:4196
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ENTRY_BLOCK has IL associated with it"
msgstr "ENTRY_BLOCK 有与之关è”çš„ IL"
#: tree-cfg.c:4202
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "EXIT_BLOCK has IL associated with it"
-msgstr "EXIT_BLOCK 有与之相关的 IL"
+msgstr "EXIT_BLOCK 有与之关è”çš„ IL"
#: tree-cfg.c:4209
#, fuzzy, gcc-internal-format
@@ -25790,14 +25752,14 @@ msgid "function might be possible candidate for attribute %<noreturn%>"
msgstr "函数å¯èƒ½æ˜¯%qsformat 属性的备选"
#: tree-cfg.c:7312
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ignoring return value of %qD, declared with attribute warn_unused_result"
-msgstr "%H忽略声明有 warn_unused_result 属性的%qD的返回值"
+msgstr "忽略声明有 warn_unused_result 属性的%qD的返回值"
#: tree-cfg.c:7317
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ignoring return value of function declared with attribute warn_unused_result"
-msgstr "%H忽略声明有 warn_unused_result 属性的函数的返回值"
+msgstr "忽略声明有 warn_unused_result 属性的函数的返回值"
#: tree-dump.c:930
#, gcc-internal-format
@@ -25817,12 +25779,12 @@ msgstr "åŸºæœ¬å— %i 有多个 EH è¾¹"
#: tree-eh.c:3889
#, gcc-internal-format
msgid "BB %i can not throw but has an EH edge"
-msgstr ""
+msgstr "åŸºæœ¬å— %i ä¸èƒ½æŠ›å‡ºå¼‚常但å´æœ‰ EH è¾¹"
#: tree-eh.c:3897
#, gcc-internal-format
msgid "BB %i last statement has incorrectly set lp"
-msgstr "åŸºæœ¬å— %i 最åŽä¸€æ¡è¯­å¥è®¾ç½®äº†ä¸æ­£ç¡®çš„ IP"
+msgstr "åŸºæœ¬å— %i 最åŽä¸€æ¡è¯­å¥è®¾ç½®äº†ä¸æ­£ç¡®çš„ lp"
#: tree-eh.c:3903
#, gcc-internal-format
@@ -25840,19 +25802,19 @@ msgid "BB %i is missing an edge"
msgstr "åŸºæœ¬å— %i 缺少一æ¡è¾¹"
#: tree-eh.c:3979
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "BB %i too many fallthru edges"
-msgstr "从 bb %i 分出太多的分支边"
+msgstr "åŸºæœ¬å— %i 下è½è¾¹å¤ªå¤š"
#: tree-eh.c:3988
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "BB %i has incorrect edge"
-msgstr "åŸºæœ¬å— %i 缺少一æ¡è¾¹"
+msgstr "åŸºæœ¬å— %i 有ä¸æ­£ç¡®çš„è¾¹"
#: tree-eh.c:3994
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "BB %i has incorrect fallthru edge"
-msgstr "fallthru 边缘交å‰èŠ‚分界线(bb %i)"
+msgstr "åŸºæœ¬å— %i 有ä¸æ­£ç¡®çš„下è½è¾¹"
#: tree-inline.c:2773
#, gcc-internal-format
@@ -26016,7 +25978,7 @@ msgid "missing definition"
msgstr "定义缺失"
#: tree-ssa.c:709
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "definition in block %i does not dominate use in block %i"
msgstr "å— %i 中的定义ä¸æ”¯é…å— %i 中的使用"
@@ -26083,12 +26045,12 @@ msgstr ""
#: tree-ssa.c:975
#, gcc-internal-format
msgid "statement has VDEF but no VUSE operand"
-msgstr ""
+msgstr "语å¥æœ‰ VDEF 而没有 VUSE æ“作数"
#: tree-ssa.c:981
#, gcc-internal-format
msgid "VDEF and VUSE do not use the same symbol"
-msgstr ""
+msgstr "VDEF å’Œ VUSE 没有使用相åŒçš„符å·"
#: tree-ssa.c:990
#, gcc-internal-format
@@ -26116,19 +26078,19 @@ msgid "%qD may be used uninitialized in this function"
msgstr "此函数中的%qD在使用å‰å¯èƒ½æœªåˆå§‹åŒ–"
#: tree-vrp.c:5015
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array subscript is outside array bounds"
-msgstr "数组下标ä¸æ˜¯ä¸€ä¸ªæ•´æ•°"
+msgstr "数组下标越过了数组边界"
#: tree-vrp.c:5030
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array subscript is above array bounds"
-msgstr "数组下标ä¸æ˜¯ä¸€ä¸ªæ•´æ•°"
+msgstr "数组下标大于数组边界"
#: tree-vrp.c:5037
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array subscript is below array bounds"
-msgstr "数组下标ä¸æ˜¯ä¸€ä¸ªæ•´æ•°"
+msgstr "数组下标å°äºŽæ•°ç»„边界"
#: tree-vrp.c:5706
#, gcc-internal-format
@@ -26151,14 +26113,14 @@ msgid "comparison always true due to limited range of data type"
msgstr "由于数æ®ç±»åž‹èŒƒå›´é™åˆ¶ï¼Œæ¯”较结果永远为真"
#: tree-vrp.c:6598
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "assuming signed overflow does not occur when simplifying %</%> or %<%%%> to %<>>%> or %<&%>"
-msgstr "å°† && 或 || 简化为 & 或 | æ—¶å‡å®šæœ‰ç¬¦å·æ•°ä»Žä¸æº¢å‡º"
+msgstr "å°†%</%>或%<%%%>简化为%<>>%>或%<&%>æ—¶å‡å®šæœ‰ç¬¦å·æ•°ä»Žä¸æº¢å‡º"
#: tree-vrp.c:6680
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "assuming signed overflow does not occur when simplifying %<abs (X)%> to %<X%> or %<-X%>"
-msgstr "å°† ==ã€!= 或 ! 简化为或åŒä¸€æ“作或 ^ æ—¶å‡å®šæœ‰ç¬¦å·æ•°ä»Žä¸æº¢å‡º"
+msgstr "å°†%<abs (X)%>简化为%<X%>或%<-X%>æ—¶å‡å®šæœ‰ç¬¦å·æ•°ä»Žä¸æº¢å‡º"
#: tree.c:4068
#, gcc-internal-format
@@ -26196,14 +26158,14 @@ msgid "variable %q+D definition is marked dllimport"
msgstr "å˜é‡%q+D的定义被标记为 dllimport"
#: tree.c:5384 config/sh/symbian-c.c:164 config/sh/symbian-cxx.c:651
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "external linkage required for symbol %q+D because of %qE attribute"
-msgstr "符å·%q+D需è¦å¤–部链接,因为%qs属性"
+msgstr "符å·%q+D需è¦å¤–部链接,因为%qE属性"
#: tree.c:5398
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE implies default visibility, but %qD has already been declared with a different visibility"
-msgstr "%qsæ„味ç€é»˜è®¤å¯è§æ€§ï¼›ä½†%qDå·²ç»è¢«å£°æ˜Žä¸ºæœ‰ä¸åŒçš„å¯è§æ€§"
+msgstr "%qEæ„味ç€é»˜è®¤å¯è§æ€§ï¼›ä½†%qDå·²ç»è¢«å£°æ˜Žä¸ºæœ‰ä¸åŒçš„å¯è§æ€§"
#: tree.c:6998
#, gcc-internal-format
@@ -26251,7 +26213,7 @@ msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d"
msgstr "树检查:在 %4$s:%5$d 处,%3$s 中 %d 个 elts 访问了 tree_vec 的 elt %1$d"
#: tree.c:8546
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d"
msgstr "树检查:在 %4$s 中访问有 %3$d 个æ“作数的 %2$s 的第 %1$d 个æ“作数,于 %5$s:%6$d"
@@ -26266,9 +26228,9 @@ msgid "Dead histogram"
msgstr "ä¸æ´»è·ƒç›´æ–¹å›¾"
#: value-prof.c:407
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Histogram value statement does not correspond to the statement it is associated with"
-msgstr "直方图值语å¥ä¸å’Œä¸Žå®ƒç›¸å…³çš„语å¥å¯¹åº”"
+msgstr "直方图值语å¥ä¸å’Œä¸Žå®ƒç›¸å…³è”的语å¥å¯¹åº”"
#: value-prof.c:420
#, gcc-internal-format
@@ -26361,9 +26323,9 @@ msgid "initializer for floating value is not a floating constant"
msgstr "浮点值的åˆå§‹å€¼è®¾å®šä¸æ˜¯ä¸€ä¸ªæµ®ç‚¹å¸¸é‡"
#: varasm.c:4872
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid initial value for member %qE"
-msgstr "æˆå‘˜%qsçš„åˆå§‹å€¼æ— æ•ˆ"
+msgstr "æˆå‘˜%qEçš„åˆå§‹å€¼æ— æ•ˆ"
#: varasm.c:5181 varasm.c:5225
#, gcc-internal-format
@@ -26416,9 +26378,9 @@ msgid "weakref %q+D must have static linkage"
msgstr "弱引用%q+D必须有é™æ€é“¾æŽ¥"
#: varasm.c:5649
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "alias definitions not supported in this configuration"
-msgstr "弱引用在此é…置下ä¸å—支æŒ"
+msgstr "别å定义在此é…置下ä¸å—支æŒ"
#: varasm.c:5715
#, gcc-internal-format
@@ -26442,7 +26404,7 @@ msgstr "çŸ¢é‡ %s %s 域错误,在 %s 于 %s:%u"
#. Print an error message for unrecognized stab codes.
#: xcoffout.c:187
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no sclass for %s stab (0x%x)"
msgstr "%s stab (0x%x)没有 sclass"
@@ -26498,7 +26460,7 @@ msgid "junk at end of '#pragma ms_struct'"
msgstr "‘#pragma ms_struct’末尾有垃圾字符"
#: config/darwin-c.c:406
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "subframework include %s conflicts with framework include"
msgstr "å­æ¡†æž¶åŒ…å« %s 与框架包å«å†²çª"
@@ -26690,14 +26652,14 @@ msgid "bad builtin fcode"
msgstr "错误的内建 fcode"
#: config/arc/arc.c:393
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument of %qE attribute is not a string constant"
-msgstr "%qs属性的实å‚ä¸æ˜¯ä¸€ä¸ªå­—符串常é‡"
+msgstr "%qE属性的实å‚ä¸æ˜¯ä¸€ä¸ªå­—符串常é‡"
#: config/arc/arc.c:401
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument of %qE attribute is not \"ilink1\" or \"ilink2\""
-msgstr "%qs属性的实å‚ä¸æ˜¯â€œilink1â€æˆ–“ilink2â€"
+msgstr "%qE属性的实å‚ä¸æ˜¯â€œilink1â€æˆ–“ilink2â€"
#: config/arm/arm.c:1337
#, gcc-internal-format
@@ -26710,9 +26672,9 @@ msgid "bad value (%s) for %s switch"
msgstr "开关%2$sçš„å‚æ•°%1$sä¸æ­£ç¡®"
#: config/arm/arm.c:1460
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid __fp16 format option: -mfp16-format=%s"
-msgstr "无效的浮点选项:-mfpu=%s"
+msgstr "无效的 __fp16 浮点选项:-mfp16-format=%s"
#: config/arm/arm.c:1477
#, gcc-internal-format
@@ -26737,7 +26699,7 @@ msgstr "目标 CPU ä¸æ”¯æŒ THUMB 指令"
#: config/arm/arm.c:1515
#, gcc-internal-format
msgid "enabling backtrace support is only meaningful when compiling for the Thumb"
-msgstr "回溯支æŒåªåœ¨ä¸º Thumb 编译时有æ„义"
+msgstr "函数调用回溯支æŒåªåœ¨ä¸º Thumb 编译时有æ„义"
#: config/arm/arm.c:1518
#, gcc-internal-format
@@ -26805,14 +26767,14 @@ msgid "FPA is unsupported in the AAPCS"
msgstr "AAPCS ä¸æ”¯æŒ FPA"
#: config/arm/arm.c:1693
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "AAPCS does not support -mcaller-super-interworking"
-msgstr "目标 CPU ä¸æ”¯æŒäº¤äº’工作"
+msgstr "AAPCS ä¸æ”¯æŒ -mcaller-super-interworking"
#: config/arm/arm.c:1696
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "AAPCS does not support -mcallee-super-interworking"
-msgstr "目标 CPU ä¸æ”¯æŒäº¤äº’工作"
+msgstr "AAPCS ä¸æ”¯æŒ -mcallee-super-interworking"
#: config/arm/arm.c:1703
#, gcc-internal-format
@@ -26877,12 +26839,12 @@ msgstr "-freorder-blocks-and-partition ä¸èƒ½åœ¨æ­¤æž¶æž„下工作"
#: config/arm/arm.c:3633
#, gcc-internal-format
msgid "Non-AAPCS derived PCS variant"
-msgstr ""
+msgstr "ä¸æ˜¯ä»Ž AAPCS 派生出的 PCS å˜ç§"
#: config/arm/arm.c:3635
#, gcc-internal-format
msgid "Variadic functions must use the base AAPCS variant"
-msgstr ""
+msgstr "å¯å˜å‚数函数必须使用基础的 AAPCS å˜ç§"
#: config/arm/arm.c:3654
#, gcc-internal-format
@@ -27571,9 +27533,9 @@ msgid "unsupported operand size for extended register"
msgstr "扩展的寄存器ä¸æ”¯æŒçš„æ“作数大å°"
#: config/i386/i386.c:11452
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-integer operand used with operand code '%c'"
-msgstr "无效的æ“作数代ç â€˜%c’"
+msgstr "éžæ•´æ•°æ“作数使用了æ“作数代ç â€˜%c’"
#: config/i386/i386.c:22882
#, gcc-internal-format
@@ -27661,14 +27623,14 @@ msgid "ms_hook_prologue attribute needs assembler swap suffix support"
msgstr ""
#: config/i386/i386.c:30067
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "vector permutation requires vector constant"
-msgstr "%qE属性需è¦ä¸€ä¸ªæ•´å¸¸é‡ä½œä¸ºå®žå‚"
+msgstr "矢é‡ç½®æ¢éœ€è¦çŸ¢é‡å¸¸é‡"
#: config/i386/i386.c:30077
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid vector permutation constant"
-msgstr "CHARACTER 常é‡çš„ç§åˆ« %d 无效,在%C处"
+msgstr "无效的矢é‡ç½®æ¢å¸¸é‡"
#: config/i386/i386.c:30125
#, gcc-internal-format
@@ -27854,7 +27816,7 @@ msgstr "%qE属性的å‚数应当在 18 å’Œ 255 之间"
#: config/m32c/m32c.c:4001
#, gcc-internal-format
msgid "%<bank_switch%> has no effect on non-interrupt functions"
-msgstr ""
+msgstr "%<bank_switch%>对éžä¸­æ–­å‡½æ•°ä¸èµ·ä½œç”¨"
#: config/m32c/m32c.c:4102
#, gcc-internal-format
@@ -28039,7 +28001,7 @@ msgstr "-mc= 必须是 -mc=tiny,-mc=near 或者 -mc=far"
#: config/mep/mep.c:1534
#, gcc-internal-format
msgid "unusual TP-relative address"
-msgstr ""
+msgstr "ä¸å¯»å¸¸çš„ TP 相对地å€"
#: config/mep/mep.c:3530
#, gcc-internal-format
@@ -28047,19 +28009,19 @@ msgid "unconvertible operand %c %qs"
msgstr "无法转æ¢çš„æ“作数 %c%qs"
#: config/mep/mep.c:3972 config/mep/mep.c:4035
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "address region attributes not allowed with auto storage class"
-msgstr "__BELOW100__ 属性ä¸å…许用于自动存储类"
+msgstr "地å€åŒºåŸŸå±žæ€§ä¸å…许用于自动存储类"
#: config/mep/mep.c:3978 config/mep/mep.c:4041
#, gcc-internal-format
msgid "address region attributes on pointed-to types ignored"
-msgstr ""
+msgstr "被指å‘的类型上的内存区域属性被忽略"
#: config/mep/mep.c:4027
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute only applies to variables and functions"
-msgstr "%qE属性åªèƒ½ä¸ºå…·æœ‰å¤–部链接的已åˆå§‹åŒ–çš„å˜é‡ä½¿ç”¨"
+msgstr "%qE属性åªèƒ½ä¸ºå˜é‡æˆ–函数所使用"
#: config/mep/mep.c:4047 config/mep/mep.c:4335
#, gcc-internal-format
@@ -28082,19 +28044,19 @@ msgid "interrupt function must have no arguments"
msgstr "中断函数ä¸èƒ½æœ‰å‚æ•°"
#: config/mep/mep.c:4113
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute allows only an integer constant argument"
-msgstr "%qs属性需è¦ä¸€ä¸ªæ•´å¸¸é‡ä½œä¸ºå®žå‚"
+msgstr "%qE属性需è¦ä¸€ä¸ªæ•´å¸¸é‡ä½œä¸ºå®žå‚"
#: config/mep/mep.c:4146
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute only applies to functions, not %s"
-msgstr "%qE属性åªèƒ½ç”¨äºŽå¸¦å¯å˜å‚数函数"
+msgstr "%qE属性åªèƒ½ç”¨äºŽå‡½æ•°è€Œéž %s"
#: config/mep/mep.c:4156
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "To describe a pointer to a VLIW function, use syntax like this:"
-msgstr "æè¿° VLIW 函数指针时使用下列语法:"
+msgstr "æè¿° VLIW 函数指针时请使用下列语法:"
#: config/mep/mep.c:4157
#, gcc-internal-format
@@ -28117,9 +28079,9 @@ msgid "VLIW functions are not allowed without a VLIW configuration"
msgstr "没有 VLIW é…置时 VLIW 函数ä¸è¢«æ”¯æŒ"
#: config/mep/mep.c:4318
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "\"#pragma disinterrupt %s\" not used"
-msgstr "%q+D定义åŽæœªä½¿ç”¨"
+msgstr "“#pragma disinterrupt %sâ€æœªä½¿ç”¨"
#: config/mep/mep.c:4460
#, gcc-internal-format
@@ -28127,44 +28089,44 @@ msgid "__io address 0x%x is the same for %qE and %qE"
msgstr "__io åœ°å€ 0x%x 对%qEå’Œ%qE而言是相åŒçš„"
#: config/mep/mep.c:4608
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable %s (%ld bytes) is too large for the %s section (%d bytes)"
-msgstr "堆栈框架有 %wd 字节,超过了 %wd 字节"
+msgstr "å˜é‡ %s 大å°ä¸º %ld 字节,而 %s 节å´åªæœ‰ %d 字节"
#: config/mep/mep.c:4706
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable %D of type %<io%> must be uninitialized"
-msgstr "%c REDUCTION å˜é‡â€˜%s’在%Lå¤„å¿…é¡»å…·æœ‰æ•°å­—ç±»åž‹è€Œéž %s"
+msgstr "类型为%<io%>çš„å˜é‡ %D ä¸èƒ½è¢«åˆå§‹åŒ–"
#: config/mep/mep.c:4711
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "variable %D of type %<cb%> must be uninitialized"
-msgstr "%c REDUCTION å˜é‡â€˜%s’在%Lå¤„å¿…é¡»å…·æœ‰æ•°å­—ç±»åž‹è€Œéž %s"
+msgstr "类型为%<cb%>çš„å˜é‡ %D ä¸èƒ½è¢«åˆå§‹åŒ–"
#: config/mep/mep.c:6164
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "coprocessor intrinsic %qs is not available in this configuration"
-msgstr "æ­¤é…ç½®ä¸æ”¯æŒå‘½ä»¤è¡Œé€‰é¡¹%qs"
+msgstr "å处ç†å™¨å†…建函数%qs在此é…置下ä¸å¯ç”¨"
#: config/mep/mep.c:6167
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs is not available in VLIW functions"
-msgstr "%qDä¸æ˜¯ä¸€ä¸ªæ¨¡æ¿å‡½æ•°"
+msgstr "%qs在 VLIW 函数中ä¸å¯ç”¨"
#: config/mep/mep.c:6170
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs is not available in non-VLIW functions"
-msgstr "%q+D通常是一个éžé™æ€çš„函数"
+msgstr "%qsåœ¨éž VLIW 函数中ä¸å¯ç”¨"
#: config/mep/mep.c:6332 config/mep/mep.c:6450
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument %d of %qE must be in the range %d...%d"
-msgstr "选择å­å¿…须是 0 到 %wi 间的整常é‡"
+msgstr "%2$qE的第 %1$d 个å‚数必须是在 %3$d å’Œ %4$d 之间"
#: config/mep/mep.c:6335
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument %d of %qE must be a multiple of %d"
-msgstr "%2$qEçš„å®žå‚ %1$d 必须是地å€"
+msgstr "%2$qE的第 %1$d 个å‚数必须是 %3$d çš„å€æ•°"
#: config/mep/mep.c:6389
#, gcc-internal-format
@@ -28182,14 +28144,14 @@ msgid "argument %d of %qE must be an address"
msgstr "%2$qEçš„å®žå‚ %1$d 必须是地å€"
#: config/mep/mep.c:7208
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "2 byte cop instructions are not allowed in 64-bit VLIW mode"
-msgstr "指定何时指令å…许被访问代ç "
+msgstr "2 字节 cop 指针ä¸å…许被用在 VLIW 模å¼ä¸­"
#: config/mep/mep.c:7214
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unexpected %d byte cop instruction"
-msgstr "预测到的 Thumb 指令"
+msgstr "éžé¢„期的 %d 字节 cop 指令"
#: config/mips/mips.c:1343 config/mips/mips.c:1345
#, gcc-internal-format
@@ -28197,14 +28159,14 @@ msgid "%qs attribute only applies to functions"
msgstr "%qs属性åªèƒ½åº”用于函数"
#: config/mips/mips.c:1355
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE cannot have both %<mips16%> and %<nomips16%> attributes"
-msgstr "%qsä¸èƒ½åŒæ—¶æœ‰%<mips16%> å’Œ %<nomips16%>属性"
+msgstr "%qEä¸èƒ½åŒæ—¶æœ‰%<mips16%>å’Œ%<nomips16%>属性"
#: config/mips/mips.c:1377 config/mips/mips.c:1380
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE redeclared with conflicting %qs attributes"
-msgstr "%qsé‡å£°æ˜Žæœ‰å†²çªçš„属性%qs"
+msgstr "%qEé‡å£°æ˜Žæœ‰å†²çªçš„属性%qs"
#: config/mips/mips.c:2895
#, gcc-internal-format
@@ -28237,9 +28199,9 @@ msgid "invalid argument to built-in function"
msgstr "内建函数实å‚无效"
#: config/mips/mips.c:13335
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "built-in function %qE not supported for MIPS16"
-msgstr "MIPS16 ä¸æ”¯æŒå†…建函数%qs"
+msgstr "MIPS16 ä¸æ”¯æŒå†…建函数%qE"
#: config/mips/mips.c:13925
#, gcc-internal-format
@@ -28347,9 +28309,9 @@ msgid "%qs requires branch-likely instructions"
msgstr "%qséœ€è¦ Branch-Likely 指令"
#: config/mips/mips.c:15719
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %qs architecture does not support the synci instruction"
-msgstr "%qs架构ä¸æ”¯æŒ Branch-Likely 指令"
+msgstr "%qs架构ä¸æ”¯æŒ synci 指令"
#: config/mips/mips.c:16186
#, gcc-internal-format
@@ -28458,29 +28420,29 @@ msgid "Defaulting to stack for %s register creation\n"
msgstr "对于 %s 寄存器创建默认为堆栈\n"
#: config/picochip/picochip.c:1342
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "LCFI labels have already been deferred."
-msgstr "LCFI 标记已ç»è¢«æŽ¨è¿Ÿã€‚"
+msgstr "LCFI æ ‡å·å·²ç»è¢«æŽ¨è¿Ÿã€‚"
#: config/picochip/picochip.c:1405
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "LM label has already been deferred."
-msgstr "LM 标记已ç»è¢«æŽ¨è¿Ÿã€‚"
+msgstr "LM æ ‡å·å·²ç»è¢«æŽ¨è¿Ÿã€‚"
#: config/picochip/picochip.c:1685
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "picochip_asm_output_opcode - Found multiple lines in VLIW packet %s\n"
msgstr "picochip_asm_output_opcode - 在 VLIW 包 %s 中找到多行\n"
#: config/picochip/picochip.c:1788
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "picochip_asm_output_opcode - can't output unknown operator %c\n"
-msgstr "picochip_asm_output_opcode - 无法输出未知的æ“作符 %c\n"
+msgstr "picochip_asm_output_opcode - 无法输出未知的è¿ç®—符 %c\n"
#: config/picochip/picochip.c:2040 config/picochip/picochip.c:2099
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s: At least one operand can't be handled"
-msgstr "%s: 至少一个æ“作数ä¸èƒ½è¢«å¤„ç†"
+msgstr "%s:至少有一个æ“作数ä¸èƒ½è¢«å¤„ç†"
#: config/picochip/picochip.c:2180
#, gcc-internal-format
@@ -28783,14 +28745,14 @@ msgid "argument 3 must be a 4-bit unsigned literal"
msgstr "å®žå‚ 3 必须是一个 4 ä½æ— ç¬¦å·å­—é¢å€¼"
#: config/rs6000/rs6000.c:9918
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument 3 must be a 2-bit unsigned literal"
-msgstr "å®žå‚ 2 必须是一个 5 ä½æ— ç¬¦å·å­—é¢å€¼"
+msgstr "å®žå‚ 2 必须是一个 2 ä½æ— ç¬¦å·å­—é¢å€¼"
#: config/rs6000/rs6000.c:9930
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument 3 must be a 1-bit unsigned literal"
-msgstr "å®žå‚ 2 必须是一个 5 ä½æ— ç¬¦å·å­—é¢å€¼"
+msgstr "å®žå‚ 2 必须是一个 1 ä½æ— ç¬¦å·å­—é¢å€¼"
#: config/rs6000/rs6000.c:10106
#, gcc-internal-format
@@ -28828,9 +28790,9 @@ msgid "argument 1 of __builtin_spe_predicate is out of range"
msgstr "__builtin_spe_predicate 的第 1 个实å‚越界"
#: config/rs6000/rs6000.c:12141
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "internal error: builtin function %s had no type"
-msgstr "内部错误:内建函数 %s 有éžé¢„期的返回类型 %s"
+msgstr "内部错误:内建函数 %s 没有类型"
#: config/rs6000/rs6000.c:12148
#, gcc-internal-format
@@ -28840,7 +28802,7 @@ msgstr "内部错误:内建函数 %s 有éžé¢„期的返回类型 %s"
#: config/rs6000/rs6000.c:12161
#, gcc-internal-format
msgid "internal error: builtin function %s, argument %d had unexpected argument type %s"
-msgstr "内部错误:内建函数 %s çš„å‚æ•° %d 有éžé¢„期的å‚数类型 %s"
+msgstr "内部错误:内建函数 %s 的第 %d 个å‚数有éžé¢„期的å‚数类型 %s"
#: config/rs6000/rs6000.c:17854
#, gcc-internal-format
@@ -29142,9 +29104,9 @@ msgid "%qE attribute only applies to interrupt functions"
msgstr "%qE属性åªèƒ½ç”¨äºŽä¸­æ–­å‡½æ•°"
#: config/sh/sh.c:8674
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE attribute is supported only for SH2A"
-msgstr "%qE属性在 R8C 目标机上ä¸å—支æŒ"
+msgstr "%qE属性åªä¸º SH2A 所支æŒ"
#: config/sh/sh.c:8704
#, gcc-internal-format
@@ -29398,7 +29360,7 @@ msgid "value passed to %<-m%s%> is too large"
msgstr "传递给%<-m%s%>的值太大"
#: config/v850/v850.c:2117
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "data area attributes cannot be specified for local variables"
msgstr "ä¸èƒ½ä¸ºå±€éƒ¨å˜é‡æŒ‡å®šåœ°å€åŒºåŸŸå±žæ€§"
@@ -29530,64 +29492,64 @@ msgid "call of %<(%T) (%A)%> is ambiguous"
msgstr "对%<(%T) (%A)%>的调用有歧义"
#: cp/call.c:3505
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous overload for ternary %<operator?:%> in %<%E ? %E : %E%>"
-msgstr "%s 为三元%<operator?:%>在%<%E ? %E : %E%>中"
+msgstr "三元%<operator?:%>在%<%E ? %E : %E%>中的é‡è½½æœ‰æ­§ä¹‰"
#: cp/call.c:3508
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no match for ternary %<operator?:%> in %<%E ? %E : %E%>"
-msgstr "%s 为三元%<operator?:%>在%<%E ? %E : %E%>中"
+msgstr "三元%<operator?:%>在%<%E ? %E : %E%>中没有匹é…"
#: cp/call.c:3515
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous overload for %<operator%s%> in %<%E%s%>"
-msgstr "%s 为%<operator%s%>在%<%E%s%>中"
+msgstr "%<operator%s%>在%<%E%s%>中的é‡è½½æœ‰æ­§ä¹‰"
#: cp/call.c:3518
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no match for %<operator%s%> in %<%E%s%>"
-msgstr "没有åˆé€‚çš„%<operator %s%>ç»™%qT"
+msgstr "%<operator%s%>在%<%E%s%>中没有匹é…"
#: cp/call.c:3524
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous overload for %<operator[]%> in %<%E[%E]%>"
-msgstr "%s 为%<operator[]%>在%<%E[%E]%>中"
+msgstr "%<operator[]%>在%<%E[%E]%>中的é‡è½½æœ‰æ­§ä¹‰"
#: cp/call.c:3527
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no match for %<operator[]%> in %<%E[%E]%>"
-msgstr "没有åˆé€‚çš„%<operator %s%>ç»™%qT"
+msgstr "%<operator[]%>在%<%E[%E]%>中没有匹é…"
#: cp/call.c:3534
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous overload for %qs in %<%s %E%>"
-msgstr "%s 为%qs在%<%s %E%>"
+msgstr "%qs在%<%s %E%>中的é‡è½½æœ‰æ­§ä¹‰"
#: cp/call.c:3537
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no match for %qs in %<%s %E%>"
-msgstr "对%<(%T) (%A)%>的调用没有匹é…"
+msgstr "%qs在%<%s %E%>中没有匹é…"
#: cp/call.c:3544
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous overload for %<operator%s%> in %<%E %s %E%>"
-msgstr "%s 为%<operator%s%>在%<%E %s %E%>中"
+msgstr "%<operator%s%>在%<%E %s %E%>中的é‡è½½æœ‰æ­§ä¹‰"
#: cp/call.c:3547
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no match for %<operator%s%> in %<%E %s %E%>"
-msgstr "没有åˆé€‚çš„%<operator %s%>ç»™%qT"
+msgstr "%<operator%s%>在%<%E %s %E%>中没有匹é…"
#: cp/call.c:3551
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ambiguous overload for %<operator%s%> in %<%s%E%>"
-msgstr "%s 为%<operator%s%>在%<%s%E%>中"
+msgstr "%<operator%s%>在 %<%s%E%>中的é‡è½½æœ‰æ­§ä¹‰"
#: cp/call.c:3554
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no match for %<operator%s%> in %<%s%E%>"
-msgstr "没有åˆé€‚çš„%<operator %s%>ç»™%qT"
+msgstr "%<operator%s%>在%<%s%E%>中没有匹é…"
#: cp/call.c:3649
#, gcc-internal-format
@@ -29597,12 +29559,12 @@ msgstr "ISO C ä¸å…许çœç•¥ ?: 表达å¼ä¸­çš„第二项"
#: cp/call.c:3730
#, gcc-internal-format
msgid "second operand to the conditional operator is of type %<void%>, but the third operand is neither a throw-expression nor of type %<void%>"
-msgstr "æ¡ä»¶æ“作符的第二个æ“作数类型为%<void%>,但第三个æ“作数既ä¸æ˜¯å¼‚常表达å¼ï¼Œä¹Ÿä¸æ‹¥æœ‰%<void%>类型"
+msgstr "æ¡ä»¶è¿ç®—符的第二个æ“作数类型为%<void%>,但第三个æ“作数既ä¸æ˜¯å¼‚常表达å¼ï¼Œä¹Ÿä¸æ‹¥æœ‰%<void%>类型"
#: cp/call.c:3735
#, gcc-internal-format
msgid "third operand to the conditional operator is of type %<void%>, but the second operand is neither a throw-expression nor of type %<void%>"
-msgstr "æ¡ä»¶æ“作符的第三个æ“作数类型为%<void%>,但第二个æ“作数既ä¸æ˜¯å¼‚常表达å¼ï¼Œä¹Ÿä¸æ‹¥æœ‰%<void%>类型"
+msgstr "æ¡ä»¶è¿ç®—符的第三个æ“作数类型为%<void%>,但第二个æ“作数既ä¸æ˜¯å¼‚常表达å¼ï¼Œä¹Ÿä¸æ‹¥æœ‰%<void%>类型"
#: cp/call.c:3777 cp/call.c:4015
#, gcc-internal-format
@@ -29625,9 +29587,9 @@ msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead"
msgstr "%<%D(int)%>没有出现在åŽç¼€%qs中,å°è¯•ä½¿ç”¨å‰ç¼€è¿ç®—符"
#: cp/call.c:4322
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no %<%D(int)%> declared for postfix %qs"
-msgstr "%<%D(int)%>没有出现在åŽç¼€%qs中,å°è¯•ä½¿ç”¨å‰ç¼€è¿ç®—符"
+msgstr "没有为åŽç¼€%2$qs声明%<%1$D(int)%>"
#: cp/call.c:4416
#, gcc-internal-format
@@ -29635,14 +29597,14 @@ msgid "comparison between %q#T and %q#T"
msgstr "在%q#T和%q#T间比较"
#: cp/call.c:4660
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-placement deallocation function %q+D"
-msgstr "å…ˆå‰å¯¹äºŽ%q+#Dçš„éžå‡½æ•°å£°æ˜Ž"
+msgstr "éžé¢„定ä½çš„释放函数%q+D"
#: cp/call.c:4661
#, gcc-internal-format
msgid "selected for placement delete"
-msgstr ""
+msgstr "被选择为预定ä½åˆ é™¤"
#: cp/call.c:4740
#, gcc-internal-format
@@ -29690,9 +29652,9 @@ msgid "converting %<false%> to pointer type for argument %P of %qD"
msgstr "å°†%<false%>转æ¢ä¸ºæŒ‡å‘%2$qDçš„å®žå‚ %1$P 的指针类型"
#: cp/call.c:4862
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "too many braces around initializer for %qT"
-msgstr "%qTçš„åˆå§‹åŒ–器周围花括å·å¤ªå¤š"
+msgstr "%qTçš„åˆå§‹å€¼è®¾å®šå‘¨å›´èŠ±æ‹¬å·å¤ªå¤š"
#: cp/call.c:4884 cp/cvt.c:217
#, gcc-internal-format
@@ -29710,14 +29672,14 @@ msgid "converting to %qT from initializer list would use explicit constructor %q
msgstr "从åˆå§‹åŒ–列表转æ¢ä¸º%qT将使用显å¼æž„造函数%qD"
#: cp/call.c:5070
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot bind %qT lvalue to %qT"
-msgstr "无法将左值 %qT 绑定到 %qT"
+msgstr "无法将左值%qT绑定到%qT"
#: cp/call.c:5073
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid " initializing argument %P of %q+D"
-msgstr " åˆå§‹åŒ–%2$qDçš„å®žå‚ %1$P"
+msgstr "以åˆå§‹åŒ–%2$q+Dçš„å®žå‚ %1$P"
#: cp/call.c:5100
#, gcc-internal-format
@@ -29735,15 +29697,15 @@ msgid "cannot bind rvalue %qE to %qT"
msgstr "无法将å³å€¼%qE绑定到%qT"
#: cp/call.c:5225
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot pass objects of non-trivially-copyable type %q#T through %<...%>"
-msgstr "ä¸èƒ½é€šè¿‡%<...%>传递有éžç®€å•æ—§æ•°æ®ç±»åž‹%q#T的对象;调用会在è¿è¡Œæ—¶ä¸­æ­¢"
+msgstr "ä¸èƒ½é€šè¿‡%<...%>传递有éžå¹³å‡¡å¤åˆ¶çš„类型%q#T"
#. conditionally-supported behavior [expr.call] 5.2.2/7.
#: cp/call.c:5252
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot receive objects of non-trivially-copyable type %q#T through %<...%>; "
-msgstr "ä¸èƒ½é€šè¿‡%<...%>接å—有éžç®€å•æ—§æ•°æ®ç±»åž‹%q#T的对象;调用会在è¿è¡Œæ—¶ä¸­æ­¢"
+msgstr "ä¸èƒ½é€šè¿‡%<...%>接å—有éžå¹³å‡¡å¤åˆ¶çš„类型%q#Tï¼›"
#: cp/call.c:5298
#, gcc-internal-format
@@ -29778,12 +29740,12 @@ msgstr "演绎 %qT 为 %qT"
#: cp/call.c:5682
#, gcc-internal-format
msgid " in call to %q+D"
-msgstr " 在调用%q+D时"
+msgstr "在调用%q+D时"
#: cp/call.c:5684
#, gcc-internal-format
msgid " (you can disable this with -fno-deduce-init-list)"
-msgstr " (您å¯ä»¥ç”¨ -fno-deduce-init-lis ç¦ç”¨å®ƒ)"
+msgstr "(您å¯ä»¥ç”¨ -fno-deduce-init-lis ç¦ç”¨å®ƒ)"
#: cp/call.c:5957
#, gcc-internal-format
@@ -29818,7 +29780,7 @@ msgstr "传递%qT时选择%qT而ä¸æ˜¯%qT"
#: cp/call.c:7110 cp/name-lookup.c:5036
#, gcc-internal-format
msgid " in call to %qD"
-msgstr " 在调用%qD时"
+msgstr "在调用%qD时"
#: cp/call.c:7167
#, gcc-internal-format
@@ -29828,12 +29790,12 @@ msgstr "选择%qD而ä¸æ˜¯%qD"
#: cp/call.c:7168
#, gcc-internal-format
msgid " for conversion from %qT to %qT"
-msgstr " 当从%qT转æ¢ä¸º%qTæ—¶"
+msgstr "以从%qT转æ¢ä¸º%qT"
#: cp/call.c:7171
#, gcc-internal-format
msgid " because conversion sequence for the argument is better"
-msgstr " 因为å‰è€…的实å‚类型转æ¢åºåˆ—更好"
+msgstr "因为å‰è€…的实å‚类型转æ¢åºåˆ—更好"
#: cp/call.c:7289
#, gcc-internal-format
@@ -29861,9 +29823,9 @@ msgid "could not convert %qE to %qT"
msgstr "ä¸èƒ½å°†%qE转æ¢ä¸º%qT"
#: cp/call.c:7703
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid initialization of non-const reference of type %qT from an rvalue of type %qT"
-msgstr "ä¸èƒ½å°†ç±»åž‹ä¸º%qTçš„éž const 引用åˆå§‹åŒ–为类型为%qT的临时å˜é‡"
+msgstr "用类型为%2$qTçš„å³å€¼åˆå§‹åŒ–类型为%1$qTçš„éžå¸¸é‡å¼•ç”¨æ— æ•ˆ"
#: cp/call.c:7707
#, gcc-internal-format
@@ -29959,12 +29921,12 @@ msgstr "%qD的最终é‡è½½åœ¨%qT中ä¸å”¯ä¸€"
#: cp/class.c:2505
#, gcc-internal-format
msgid "%q+D was hidden"
-msgstr "%q+D被éšè—"
+msgstr "%q+D为"
#: cp/class.c:2506
#, gcc-internal-format
msgid " by %q+D"
-msgstr " 为%q+D"
+msgstr "%q+D所éšè—"
#: cp/class.c:2549 cp/decl2.c:1292
#, gcc-internal-format
@@ -30084,17 +30046,17 @@ msgstr "%q#T有指针数æ®æˆå‘˜"
#: cp/class.c:3159
#, gcc-internal-format
msgid " but does not override %<%T(const %T&)%>"
-msgstr " 但没有é‡è½½%<%T(const %T&)%>"
+msgstr "但没有é‡è½½%<%T(const %T&)%>"
#: cp/class.c:3161
#, gcc-internal-format
msgid " or %<operator=(const %T&)%>"
-msgstr " 或%<operator=(const %T&)%>"
+msgstr "或者%<operator=(const %T&)%>"
#: cp/class.c:3165
#, gcc-internal-format
msgid " but does not override %<operator=(const %T&)%>"
-msgstr " 也没有é‡è½½%<operator=(const %T&)%>"
+msgstr "但没有é‡è½½%<operator=(const %T&)%>"
#: cp/class.c:3628
#, gcc-internal-format
@@ -30131,7 +30093,7 @@ msgstr "%q+D被声明为å–常é‡å¼•ç”¨ï¼Œä½†æ˜¯éšå¼å£°æ˜Žå–éžå¸¸é‡å¼•ç”¨"
#: cp/class.c:4460
#, gcc-internal-format
msgid "%q+D declared to take non-const reference cannot be defaulted in the class body"
-msgstr "%q+D被声明为å–éžå¸¸é‡å¼•ç”¨ï¼Œä¸èƒ½åœ¨ç±»ä½“内指定默认值"
+msgstr "%q+D被声明为å–éžå¸¸é‡å¼•ç”¨ï¼Œä¸èƒ½åœ¨ç±»ä½“内默认化"
#: cp/class.c:4679
#, gcc-internal-format
@@ -30573,38 +30535,38 @@ msgstr "跳转至 case æ ‡å·"
#: cp/decl.c:2508 cp/decl.c:2648 cp/decl.c:2689
#, gcc-internal-format
msgid " from here"
-msgstr " 从这里"
+msgstr "从这里"
#: cp/decl.c:2527 cp/decl.c:2692
#, gcc-internal-format
msgid " exits OpenMP structured block"
-msgstr " 退出 OpenMP 结构å—"
+msgstr "退出了 OpenMP 结构å—"
#: cp/decl.c:2548
#, gcc-internal-format
msgid " crosses initialization of %q+#D"
-msgstr " 跳过%q+#Dçš„åˆå§‹åŒ–"
+msgstr "跳过了%q+#Dçš„åˆå§‹åŒ–"
#: cp/decl.c:2550 cp/decl.c:2666
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid " enters scope of %q+#D which has non-trivial destructor"
-msgstr "基类%q#T有一个éžè™šæžæž„函数"
+msgstr "进入了有éžå¹³å‡¡æžæž„函数的%q+#D的作用域"
#: cp/decl.c:2564 cp/decl.c:2671
#, gcc-internal-format
msgid " enters try block"
-msgstr " 进入 try å—"
+msgstr "进入了 try å—"
#. Can't skip init of __exception_info.
#: cp/decl.c:2566 cp/decl.c:2660 cp/decl.c:2673
#, gcc-internal-format
msgid " enters catch block"
-msgstr " 进入 catch å—"
+msgstr "进入了 catch å—"
#: cp/decl.c:2576 cp/decl.c:2676
#, gcc-internal-format
msgid " enters OpenMP structured block"
-msgstr " 进入 OpenMP 结构å—"
+msgstr "进入了 OpenMP 结构å—"
#: cp/decl.c:2647 cp/decl.c:2688
#, gcc-internal-format
@@ -30614,7 +30576,7 @@ msgstr "跳转至标å·%q+D"
#: cp/decl.c:2664
#, gcc-internal-format
msgid " skips initialization of %q+#D"
-msgstr " 跳过%q+#Dçš„åˆå§‹åŒ–"
+msgstr "跳过了%q+#Dçš„åˆå§‹åŒ–"
#: cp/decl.c:2741
#, gcc-internal-format
@@ -30642,9 +30604,9 @@ msgid "no class template named %q#T in %q#T"
msgstr "没有å为%q#T的类模æ¿ï¼Œåœ¨%q#T中 "
#: cp/decl.c:3064
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "lookup of %qT in %qT is ambiguous"
-msgstr "从%qT到%qT的转æ¢æœ‰æ­§ä¹‰"
+msgstr "在%2$qT中查询%1$qT有歧义"
#: cp/decl.c:3073
#, gcc-internal-format
@@ -30803,9 +30765,9 @@ msgid "duplicate initialization of %qD"
msgstr "ISO C++ ä¸å…许æˆå‘˜%qDçš„åˆå§‹åŒ–"
#: cp/decl.c:4200
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD declared %<constexpr%> outside its class"
-msgstr "constexpr 函数ä¸èƒ½å®šä¹‰åœ¨ç±»å¤–"
+msgstr "%qD在其类外被声明为%<constexpr%>"
#: cp/decl.c:4237
#, gcc-internal-format
@@ -31252,14 +31214,14 @@ msgid "creating array of references"
msgstr "创建引用的数组"
#: cp/decl.c:7465
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "declaration of %qD as array of function members"
-msgstr "%qs声明为函数的数组"
+msgstr "%qD声明为函数æˆå‘˜çš„数组"
#: cp/decl.c:7467
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "creating array of function members"
-msgstr "在%L处建立临时数组"
+msgstr "创建函数æˆå‘˜çš„组织"
#: cp/decl.c:7482
#, gcc-internal-format
@@ -31437,9 +31399,9 @@ msgid "typedef declaration invalid in parameter declaration"
msgstr "å½¢å‚声明中出现的 typedef 声明无效"
#: cp/decl.c:8210
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "storage class specified for template parameter %qs"
-msgstr "为形å‚%qs指定了存储类"
+msgstr "为模æ¿å‚æ•°%qs指定了存储类"
#: cp/decl.c:8216
#, gcc-internal-format
@@ -31452,9 +31414,9 @@ msgid "parameter declared %<auto%>"
msgstr "å½¢å‚声明为%<auto%>"
#: cp/decl.c:8228
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "a parameter cannot be declared %<constexpr%>"
-msgstr "构造函数ä¸èƒ½è¢«å£°æ˜Žä¸ºè™šå‡½æ•°"
+msgstr "å½¢å‚ä¸èƒ½è¢«å£°æ˜Žä¸º%<constexpr%>"
#: cp/decl.c:8237
#, gcc-internal-format
@@ -31583,9 +31545,9 @@ msgid "cannot declare pointer to %q#T member"
msgstr "无法声明指å‘%q#Tæˆå‘˜çš„指针"
#: cp/decl.c:8622
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot declare %s to qualified function type %qT"
-msgstr "ä¸èƒ½å°† %1$s 声明为å—é™åˆ¶çš„函数类型 %2$qT"
+msgstr "ä¸èƒ½å°† %s 声明为é™å®šçš„函数类型%qT"
#: cp/decl.c:8659
#, gcc-internal-format
@@ -31675,9 +31637,9 @@ msgid "const %qs cannot be declared %<mutable%>"
msgstr "常é‡%qsä¸èƒ½è¢«å£°æ˜Žä¸º%<mutable%>"
#: cp/decl.c:8935
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "typedef name may not be a nested-name-specifier"
-msgstr "%Jtypedef åä¸èƒ½æ˜¯åµŒå¥—å指定"
+msgstr "typedef åä¸èƒ½æ˜¯åµŒå¥—å指定"
#: cp/decl.c:8953
#, gcc-internal-format
@@ -31771,9 +31733,9 @@ msgid "declaration of %qD as member of %qT"
msgstr "%qD声明为%qT的一个æˆå‘˜"
#: cp/decl.c:9273
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "a destructor cannot be %<constexpr%>"
-msgstr "æžæž„函数ä¸èƒ½æ˜¯é™æ€æˆå‘˜å‡½æ•°"
+msgstr "æžæž„函数ä¸èƒ½æ˜¯ %<constexpr%>"
#: cp/decl.c:9277
#, gcc-internal-format
@@ -31793,7 +31755,7 @@ msgstr "åå­—%qT类型ä¸å®Œå…¨"
#: cp/decl.c:9352
#, gcc-internal-format
msgid " in instantiation of template %qT"
-msgstr " 在模æ¿%qT的实例化中"
+msgstr "在模æ¿%qT的实例化中"
#: cp/decl.c:9361
#, gcc-internal-format
@@ -31823,9 +31785,9 @@ msgid "making %qD static"
msgstr "使%qDæˆä¸ºé™æ€çš„"
#: cp/decl.c:9450
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-static data member %qE declared %<constexpr%>"
-msgstr "é™æ€æˆå‘˜%qD声明为%<register%>"
+msgstr "éžé™æ€æ•°æ®æˆå‘˜%qE被声明为%<constexpr%>"
#: cp/decl.c:9485
#, gcc-internal-format
@@ -31853,9 +31815,9 @@ msgid "%<inline%> specifier invalid for function %qs declared out of global scop
msgstr "在全局作用域外为函数%qs指定%<inline%>无效"
#: cp/decl.c:9512
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q#T is not a class or a namespace"
-msgstr "%q#T ä¸æ˜¯ç±»æˆ–命å空间"
+msgstr "%q#T ä¸æ˜¯ä¸€ä¸ªç±»æˆ–命å空间"
#: cp/decl.c:9520
#, gcc-internal-format
@@ -31863,9 +31825,9 @@ msgid "virtual non-class function %qs"
msgstr "虚函数%qsä¸æ˜¯ç±»æˆå‘˜"
#: cp/decl.c:9527
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs defined in a non-class scope"
-msgstr "在éžç±»ä½œç”¨åŸŸä¸­å®šä¹‰çš„ %qs"
+msgstr "%qs定义在在éžç±»ä½œç”¨åŸŸä¸­"
#: cp/decl.c:9560
#, gcc-internal-format
@@ -31929,14 +31891,14 @@ msgid "parameter %qD invalidly declared method type"
msgstr "å½¢å‚%qD被无效地被声明为具有方法类型"
#: cp/decl.c:9915
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "parameter %qD includes pointer to array of unknown bound %qT"
-msgstr "å‚æ•°%qD包å«äº† %s,åŽè€…指å‘有未知边界%qT的数组"
+msgstr "å½¢å‚%qD包å«äº†æŒ‡å‘具有未知边界数组%qT的指针"
#: cp/decl.c:9917
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "parameter %qD includes reference to array of unknown bound %qT"
-msgstr "å‚æ•°%qD包å«äº† %s,åŽè€…指å‘有未知边界%qT的数组"
+msgstr "å½¢å‚%qD包å«äº†æŒ‡å‘具有未知边界数组%qT的引用"
#: cp/decl.c:9932
#, gcc-internal-format
@@ -31989,34 +31951,34 @@ msgid "%qD must have an argument of class or enumerated type"
msgstr "%qD的实å‚必须有类或枚举类型"
#: cp/decl.c:10373
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conversion to a reference to void will never use a type conversion operator"
-msgstr "å‘ %s%s 的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
+msgstr "å‘æŒ‡å‘ void 的引用的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
#: cp/decl.c:10375
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conversion to void will never use a type conversion operator"
-msgstr "å‘ %s%s 的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
+msgstr "å‘ void 的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
#: cp/decl.c:10382
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conversion to a reference to the same type will never use a type conversion operator"
-msgstr "å‘ %s%s 的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
+msgstr "å‘具有相åŒç±»åž‹çš„引用的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
#: cp/decl.c:10384
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conversion to the same type will never use a type conversion operator"
-msgstr "å‘ %s%s 的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
+msgstr "å‘相åŒç±»åž‹çš„转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
#: cp/decl.c:10392
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conversion to a reference to a base class will never use a type conversion operator"
-msgstr "å‘ %s%s 的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
+msgstr "å‘指å‘基类的引用的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
#: cp/decl.c:10394
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "conversion to a base class will never use a type conversion operator"
-msgstr "å‘ %s%s 的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
+msgstr "å‘基类的转æ¢æ°¸è¿œä¸ä¼šç”¨åˆ°ç±»åž‹è½¬æ¢è¿ç®—符"
#. 13.4.0.3
#: cp/decl.c:10403
@@ -32322,9 +32284,9 @@ msgid "Java method %qD has non-Java parameter type %qT"
msgstr "Java 方法%qDæœ‰éž Java 类型形å‚%qT"
#: cp/decl2.c:596
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "template parameter lists provided don't match the template parameters of %qD"
-msgstr "æ供的模æ¿å‚数列表与 %qD 的模æ¿ä¸ç¬¦"
+msgstr "æ供的模æ¿å‚数列表与%qD的模æ¿å‚æ•°ä¸ç¬¦"
#: cp/decl2.c:664
#, gcc-internal-format
@@ -32347,9 +32309,9 @@ msgid "(an out of class initialization is required)"
msgstr "(需è¦ä¸€ä¸ªç±»å¤–çš„åˆå§‹åŒ–)"
#: cp/decl2.c:812
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "explicit template argument list not allowed"
-msgstr "模æ¿å‚æ•° %d 无效"
+msgstr "ä¸å…许显å¼æ¨¡æ¿å‚数列表"
#: cp/decl2.c:818
#, gcc-internal-format
@@ -32466,14 +32428,14 @@ msgid "%qT declared with greater visibility than its base %qT"
msgstr "%qT被声明为比其基类%qT有更高的å¯è§æ€§"
#: cp/decl2.c:3441
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q+#D, declared using anonymous type, is used but never defined"
-msgstr "%q+F声明为%<static%>å´ä»Žæœªå®šä¹‰è¿‡"
+msgstr "%q+#D声明为具有匿å类型,在使用å‰æœªè¢«å®šä¹‰"
#: cp/decl2.c:3448
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q+#D, declared using local type %qT, is used but never defined"
-msgstr "%q+F声明为%<static%>å´ä»Žæœªå®šä¹‰è¿‡"
+msgstr "%q+#D声明为具有局部类型%qT,在使用å‰æœªè¢«å®šä¹‰"
#: cp/decl2.c:3740
#, gcc-internal-format
@@ -32503,7 +32465,7 @@ msgstr "扩展åˆå§‹å€¼è®¾å®šåˆ—表åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
#: cp/error.c:2904
#, gcc-internal-format
msgid "explicit conversion operators only available with -std=c++0x or -std=gnu++0x"
-msgstr "显å¼è½¬æ¢æ“作符åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
+msgstr "显å¼è½¬æ¢è¿ç®—符åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
#: cp/error.c:2909
#, gcc-internal-format
@@ -32526,9 +32488,9 @@ msgid "scoped enums only available with -std=c++0x or -std=gnu++0x"
msgstr "带作用域的枚举åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
#: cp/error.c:2927
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "defaulted and deleted functions only available with -std=c++0x or -std=gnu++0x"
-msgstr "%s åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
+msgstr "默认化和被删除的函数åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
#. Can't throw a reference.
#: cp/except.c:277
@@ -32583,9 +32545,9 @@ msgid " by earlier handler for %qT"
msgstr "为%qT更早的处ç†è€…所æ•èŽ·"
#: cp/except.c:1028
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<...%> handler must be the last handler for its try block"
-msgstr "%H%<...%>处ç†è€…必须是其 try å—中的最åŽä¸€ä¸ªå¤„ç†è€…"
+msgstr "%<...%>处ç†è€…必须是其 try å—中的最åŽä¸€ä¸ªå¤„ç†è€…"
#: cp/friend.c:156
#, gcc-internal-format
@@ -32677,29 +32639,29 @@ msgid "value-initialization of reference"
msgstr "引用被值所åˆå§‹åŒ–"
#: cp/init.c:431
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD should be initialized in the member initialization list"
-msgstr "%J%qD应该在æˆå‘˜åˆå§‹åŒ–列表中被åˆå§‹åŒ–"
+msgstr "%qD应该在æˆå‘˜åˆå§‹åŒ–列表中被åˆå§‹åŒ–"
#: cp/init.c:457
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "value-initialization of %q#D, which has reference type"
-msgstr "%J默认åˆå§‹åŒ–具有引用类型的%q#D"
+msgstr "用值åˆå§‹åŒ–具有引用类型的%q#D"
#: cp/init.c:498 cp/init.c:515
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "uninitialized member %qD with %<const%> type %qT"
-msgstr "%J未åˆå§‹åŒ–çš„æˆå‘˜%qD具有%<const%>类型%qT"
+msgstr "未åˆå§‹åŒ–çš„æˆå‘˜%qD具有%<const%>类型%qT"
#: cp/init.c:511
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "uninitialized reference member %qD"
-msgstr "æˆå‘˜%qD是未åˆå§‹åŒ–的引用"
+msgstr "未åˆå§‹åŒ–的引用æˆå‘˜%qD"
#: cp/init.c:660
#, gcc-internal-format
msgid "%q+D will be initialized after"
-msgstr "%q+Då°†éšåŽè¢«åˆå§‹åŒ–"
+msgstr "%q+D将在"
#: cp/init.c:663
#, gcc-internal-format
@@ -32714,32 +32676,32 @@ msgstr "%q+#D"
#: cp/init.c:668
#, gcc-internal-format
msgid " base %qT"
-msgstr " 基类%qT"
+msgstr "基类%qT"
#: cp/init.c:670
#, gcc-internal-format
msgid " when initialized here"
-msgstr " 当在这里åˆå§‹åŒ–æ—¶"
+msgstr "在此处åˆå§‹åŒ–åŽè¢«åˆå§‹åŒ–"
#: cp/init.c:687
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multiple initializations given for %qD"
-msgstr "%J为%qD给定了多个åˆå§‹åŒ–设定"
+msgstr "为%qD给定了多个åˆå§‹åŒ–设定"
#: cp/init.c:691
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multiple initializations given for base %qT"
-msgstr "%J为基类%qT给定了多个åˆå§‹åŒ–设定"
+msgstr "为基类%qT给定了多个åˆå§‹åŒ–设定"
#: cp/init.c:759
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "initializations for multiple members of %qT"
-msgstr "%Jåˆå§‹åŒ–%qT的多个æˆå‘˜"
+msgstr "åˆå§‹åŒ–%qT的多个æˆå‘˜"
#: cp/init.c:823
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "base class %q#T should be explicitly initialized in the copy constructor"
-msgstr "%J基类%q#T应该在å¤åˆ¶æž„造函数中显å¼åœ°åˆå§‹åŒ–"
+msgstr "基类%q#T应该在å¤åˆ¶æž„造函数中显å¼åœ°åˆå§‹åŒ–"
#: cp/init.c:1047 cp/init.c:1066
#, gcc-internal-format
@@ -32842,9 +32804,9 @@ msgid "request for member %qD is ambiguous"
msgstr "对æˆå‘˜%qD的请求有歧义"
#: cp/init.c:2125
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-constant array size in new, unable to verify length of initializer-list"
-msgstr "在新的内éžå¸¸æ•°æ•°ç»„大å°ï¼Œä¸èƒ½æ ¸å¯¹åˆå§‹åŒ–器列表的长度"
+msgstr "new 中数组大å°ä¸æ˜¯å¸¸é‡ï¼Œæ— æ³•æ£€æŸ¥åˆå§‹å€¼åˆ—表的长度"
#: cp/init.c:2134
#, gcc-internal-format
@@ -33012,39 +32974,39 @@ msgid "synthesized method %qD first required here "
msgstr "在这里第一次需è¦ç”Ÿæˆçš„方法%qD"
#: cp/method.c:1015
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "defaulted declaration %q+D"
-msgstr "默认的声明 %q+D"
+msgstr "默认化声明%q+D"
#: cp/method.c:1017
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "does not match expected signature %qD"
-msgstr "å½¢å‚表ä¸åŒ¹é… %s() 的有效签å"
+msgstr "ä¸åŒ¹é…%qD预期的签å"
#: cp/method.c:1049
#, gcc-internal-format
msgid "%qD cannot be defaulted"
-msgstr "%qDä¸èƒ½ä½œä¸ºé»˜è®¤"
+msgstr "%qDä¸èƒ½è¢«é»˜è®¤åŒ–"
#: cp/method.c:1058
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "defaulted function %q+D with default argument"
-msgstr "%H文件在默认å‚数处结æŸ"
+msgstr "默认化函数%q+D有默认å‚æ•°"
#: cp/method.c:1064
#, gcc-internal-format
msgid "%qD declared explicit cannot be defaulted in the class body"
-msgstr "声明为 explicit çš„%qDä¸èƒ½åœ¨ç±»ä½“内指定默认值"
+msgstr "声明为 explicit çš„%qDä¸èƒ½åœ¨ç±»ä½“内被默认化"
#: cp/method.c:1067
#, gcc-internal-format
msgid "%qD declared with non-public access cannot be defaulted in the class body"
-msgstr "声明有éžå…¬å…±è®¿é—®æƒé™çš„%qDä¸èƒ½åœ¨ç±»ä½“内指定默认值"
+msgstr "声明有éžå…¬å…±è®¿é—®æƒé™çš„%qDä¸èƒ½åœ¨ç±»ä½“内被默认化"
#: cp/method.c:1070
#, gcc-internal-format
msgid "function %q+D defaulted on its first declaration must not have an exception-specification"
-msgstr ""
+msgstr "首次声明时被默认化的函数%q+Dä¸å¯ä»¥æŒ‡å®šå¼‚常"
#: cp/method.c:1119
#, gcc-internal-format
@@ -33131,12 +33093,12 @@ msgstr "%qDçš„å称查阅已改å˜"
#: cp/name-lookup.c:1214
#, gcc-internal-format
msgid " matches this %q+D under ISO standard rules"
-msgstr " 在 ISO 标准规则下匹é…æ­¤%q+D"
+msgstr "在 ISO 标准规则下匹é…æ­¤%q+D"
#: cp/name-lookup.c:1216
#, gcc-internal-format
msgid " matches this %q+D under old rules"
-msgstr " 在旧规则下匹é…æ­¤%q+D"
+msgstr "在旧规则下匹é…æ­¤%q+D"
#: cp/name-lookup.c:1234 cp/name-lookup.c:1242
#, gcc-internal-format
@@ -33146,12 +33108,12 @@ msgstr "在 ISO%<for%>作用域中,%qDçš„å称查找有å˜åŒ–"
#: cp/name-lookup.c:1236
#, gcc-internal-format
msgid " cannot use obsolete binding at %q+D because it has a destructor"
-msgstr " ä¸èƒ½åœ¨%q+D使用过时的绑定,因为它有æžæž„函数"
+msgstr "ä¸èƒ½åœ¨%q+D使用过时的绑定,因为它有æžæž„函数"
#: cp/name-lookup.c:1245
#, gcc-internal-format
msgid " using obsolete binding at %q+D"
-msgstr " 在%q+D使用过时的绑定"
+msgstr "在%q+D使用过时的绑定"
#: cp/name-lookup.c:1251 cp/parser.c:10890
#, gcc-internal-format
@@ -33304,9 +33266,9 @@ msgid "XXX leaving pop_everything ()\n"
msgstr "XXX 离开 pop_everything ()\n"
#: cp/parser.c:435
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "identifier %qE will become a keyword in C++0x"
-msgstr "标志符%<%s%>将会æˆä¸º C++0x 的一个关键字"
+msgstr "标志符%qE将会æˆä¸º C++0x 的一个关键字"
#: cp/parser.c:2100
#, gcc-internal-format
@@ -33434,7 +33396,7 @@ msgstr "且%qT没有模æ¿æž„造函数"
#: cp/parser.c:2415
#, gcc-internal-format
msgid "need %<typename%> before %<%T::%E%> because %qT is a dependent scope"
-msgstr ""
+msgstr "%<%T::%E%>之å‰éœ€è¦%<typename%>,因为%qT是一个有ä¾èµ–的作用域"
#: cp/parser.c:2419
#, gcc-internal-format
@@ -33521,7 +33483,7 @@ msgstr "使用旧å¼çš„类型转æ¢"
#: cp/parser.c:6349
#, gcc-internal-format
msgid "%<>>%> operator will be treated as two right angle brackets in C++0x"
-msgstr "%<>>%>æ“作符在 C++0x 中将被认为是两个å³å°–括å·"
+msgstr "%<>>%>è¿ç®—符在 C++0x 中将被认为是两个å³å°–括å·"
#: cp/parser.c:6352
#, gcc-internal-format
@@ -33556,7 +33518,7 @@ msgstr "case æ ‡å·%qE未出现在 switch 语å¥ä¸­"
#: cp/parser.c:7811
#, gcc-internal-format
msgid "need %<typename%> before %qE because %qT is a dependent scope"
-msgstr ""
+msgstr "%qE之å‰éœ€è¦%<typename%>,因为%qT是一个有ä¾èµ–的作用域"
#: cp/parser.c:7820
#, gcc-internal-format
@@ -33609,7 +33571,7 @@ msgstr "模æ¿ä¸èƒ½æ˜¯%<virtual%>çš„"
#: cp/parser.c:9771
#, gcc-internal-format
msgid "invalid use of %<auto%> in conversion operator"
-msgstr "在转æ¢æ“作符中使用%<auto%>无效"
+msgstr "在转æ¢è¿ç®—符中使用%<auto%>无效"
#: cp/parser.c:9856
#, gcc-internal-format
@@ -33864,9 +33826,9 @@ msgid "keyword %<typename%> not allowed in this context (the base class is impli
msgstr "关键字%<typename%>ä¸å…许用在此上下文中(基类éšå¼åœ°æ˜¯ä¸€ä¸ªç±»åž‹)"
#: cp/parser.c:18286
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "specializing member %<%T::%E%> requires %<template<>%> syntax"
-msgstr "å‘现 %d 个%<template<>%>ï¼Œéœ€è¦ %d æ¥ç‰¹ä¾‹åŒ–一个æˆå‘˜å‡½æ•°æ¨¡æ¿"
+msgstr "特例化æˆå‘˜%<%T::%E%>需è¦%<template<>%>语法"
#: cp/parser.c:18291
#, gcc-internal-format
@@ -33953,7 +33915,7 @@ msgid "misplaced %<@%D%> Objective-C++ construct"
msgstr "ä½ç½®é”™è¯¯çš„%<@%D%>Objective-C++ 构造"
#: cp/parser.c:20263
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<@encode%> must specify a type as an argument"
msgstr "%<@encode%>必须指定一个类型作为实å‚"
@@ -33978,9 +33940,9 @@ msgid "iteration variable %qD should not be reduction"
msgstr "迭代å˜é‡%qDä¸åº”当是 reduction"
#: cp/parser.c:22484
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "not enough collapsed for loops"
-msgstr "折å çš„循环没有完美的嵌套"
+msgstr "循环折å å¾—ä¸å¤Ÿ"
#: cp/parser.c:22946
#, gcc-internal-format
@@ -34275,12 +34237,12 @@ msgstr "得到 %d 个模æ¿å‚数,为%q#D"
#: cp/pt.c:4407
#, gcc-internal-format
msgid "got %d template parameters for %q#T"
-msgstr "得到 %d 个模æ¿å‚数,为%q#T"
+msgstr "%2$q#T得到了 %1$d 个模æ¿å‚æ•°"
#: cp/pt.c:4409
#, gcc-internal-format
msgid " but %d required"
-msgstr " ä½†å®žé™…éœ€è¦ %d 个"
+msgstr "ä½†å®žé™…éœ€è¦ %d 个"
#: cp/pt.c:4427
#, gcc-internal-format
@@ -34342,9 +34304,9 @@ msgid "%qE is not a valid template argument for type %qT because function %qD ha
msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为函数%qD没有外部链接"
#: cp/pt.c:4722 cp/pt.c:5009
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE is not a valid template argument for type %qT"
-msgstr "%qE ä¸æ˜¯ç±»åž‹ %qT 的有效模æ¿å‚æ•°"
+msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å‚æ•°"
#: cp/pt.c:4724
#, gcc-internal-format
@@ -34387,14 +34349,14 @@ msgid "%qE is not a valid template argument for type %qT because it is not an lv
msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为它ä¸æ˜¯ä¸€ä¸ªå·¦å€¼"
#: cp/pt.c:4960
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%q#D is not a valid template argument for type %qT because a reference variable does not have a constant address"
-msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为它是一个éžå¸¸é‡çš„表达å¼"
+msgstr "%q#Dä¸æ˜¯ç±»åž‹%qT的有效模æ¿å‚数,因为一个引用å˜é‡æ²¡æœ‰å¸¸é‡åœ°å€"
#: cp/pt.c:4969
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE is not a valid template argument for type %qT because it is not an object with external linkage"
-msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为对象%qD没有外部链接"
+msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为它没有外部链接"
#: cp/pt.c:4977
#, gcc-internal-format
@@ -34402,7 +34364,7 @@ msgid "%qE is not a valid template argument for type %qT because object %qD has
msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为对象%qD没有外部链接"
#: cp/pt.c:5010
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "it must be the address of a function with external linkage"
msgstr "它必须是一个具有外部链接函数的地å€"
@@ -34427,9 +34389,9 @@ msgid "standard conversions are not allowed in this context"
msgstr "此上下文中ä¸å…许标准转æ¢"
#: cp/pt.c:5402
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "injected-class-name %qD used as template template argument"
-msgstr "ç±»åéšè—了模æ¿çš„模æ¿å½¢å‚%qD"
+msgstr "注入的类å%qD被用作模æ¿çš„模æ¿å‚æ•°"
#: cp/pt.c:5427
#, gcc-internal-format
@@ -34444,37 +34406,37 @@ msgstr "å®žå‚ %d 的类型/值ä¸åŒ¹é…,在%qD的模æ¿å‚数列表中"
#: cp/pt.c:5447
#, gcc-internal-format
msgid " expected a constant of type %qT, got %qT"
-msgstr " 需è¦ä¸€ä¸ª%qT类型的常é‡ï¼Œå´ç»™å‡ºäº†%qT"
+msgstr "需è¦ä¸€ä¸ª%qT类型的常é‡ï¼Œå´ç»™å‡ºäº†%qT"
#: cp/pt.c:5451
#, gcc-internal-format
msgid " expected a class template, got %qE"
-msgstr " 需è¦ä¸€ä¸ªç±»æ¨¡æ¿ï¼Œå´ç»™å‡ºäº†%qE"
+msgstr "需è¦ä¸€ä¸ªç±»æ¨¡æ¿ï¼Œå´ç»™å‡ºäº†%qE"
#: cp/pt.c:5453
#, gcc-internal-format
msgid " expected a type, got %qE"
-msgstr " 需è¦ä¸€ä¸ªç±»åž‹ï¼Œå´ç»™å‡ºäº†%qE"
+msgstr "需è¦ä¸€ä¸ªç±»åž‹ï¼Œå´ç»™å‡ºäº†%qE"
#: cp/pt.c:5466
#, gcc-internal-format
msgid " expected a type, got %qT"
-msgstr " 需è¦ä¸€ä¸ªç±»åž‹ï¼Œå´ç»™å‡ºäº†%qT"
+msgstr "需è¦ä¸€ä¸ªç±»åž‹ï¼Œå´ç»™å‡ºäº†%qT"
#: cp/pt.c:5468
#, gcc-internal-format
msgid " expected a class template, got %qT"
-msgstr " 需è¦ä¸€ä¸ªç±»æ¨¡æ¿ï¼Œå´ç»™å‡ºäº†%qT"
+msgstr "需è¦ä¸€ä¸ªç±»æ¨¡æ¿ï¼Œå´ç»™å‡ºäº†%qT"
#: cp/pt.c:5511
#, gcc-internal-format
msgid " expected a template of type %qD, got %qT"
-msgstr " 需è¦æœ‰%qD类型的模æ¿ï¼Œå´å¾—到了%qT"
+msgstr "需è¦æœ‰%qD类型的模æ¿ï¼Œå´å¾—到了%qT"
#. Not sure if this is reachable, but it doesn't hurt
#. to be robust.
#: cp/pt.c:5551
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "type mismatch in nontype parameter pack"
msgstr "éžç±»åž‹å‚数包中类型ä¸åŒ¹é…"
@@ -34511,7 +34473,7 @@ msgstr "无法将%<%T%>展开æˆå®šé•¿å®žå‚列表"
#: cp/pt.c:5857
#, gcc-internal-format
msgid "template argument %d is invalid"
-msgstr "模æ¿å‚æ•° %d 无效"
+msgstr "模æ¿ç¬¬ %d 个å‚数无效"
#: cp/pt.c:6179
#, gcc-internal-format
@@ -34652,9 +34614,9 @@ msgid "use of %qs in template"
msgstr "在模æ¿ä¸­ä½¿ç”¨%qs"
#: cp/pt.c:10524
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "qualifying type %qT does not match destructor name ~%qT"
-msgstr "é™å®šçš„类型%qTä¸åŒ¹é…æžæž„函数å ~%qT"
+msgstr "é™å®šç±»åž‹%qTä¸åŒ¹é…æžæž„函数å ~%qT"
#: cp/pt.c:10539
#, gcc-internal-format
@@ -34814,9 +34776,9 @@ msgid "%q#T is not a valid type for a template constant parameter"
msgstr "%q#Tä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„模æ¿å¸¸é‡å‚数类型"
#: cp/pt.c:17999
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "deducing from brace-enclosed initializer list requires #include <initializer_list>"
-msgstr "从花括å·ä¸­çš„åˆå§‹åŒ–列表推导 auto éœ€è¦ #include <initializer_list>"
+msgstr "从花括å·ä¸­çš„åˆå§‹åŒ–åˆ—è¡¨æ¼”ç»Žéœ€è¦ #include <initializer_list>"
#: cp/pt.c:18049
#, gcc-internal-format
@@ -34826,7 +34788,7 @@ msgstr "无法从%2$qE推导出%1$qT"
#: cp/pt.c:18060
#, gcc-internal-format
msgid "inconsistent deduction for %qT: %qT and then %qT"
-msgstr ""
+msgstr "对%qTä¸ä¸€è‡´çš„演绎:先是%qT然åŽæ˜¯%qT"
#: cp/repo.c:119
#, gcc-internal-format
@@ -34886,12 +34848,12 @@ msgstr "%qT是%qTä¸å¯è®¿é—®çš„基类"
#: cp/search.c:1841
#, gcc-internal-format
msgid "deprecated covariant return type for %q+#D"
-msgstr "ä¸å»ºè®®ä¸º%q+#D使用åå˜è¿”回类型"
+msgstr "ä¸å»ºè®®ä¸º%q+#D使用的åå˜è¿”回类型"
#: cp/search.c:1843 cp/search.c:1858 cp/search.c:1863 cp/search.c:1882
#, gcc-internal-format
msgid " overriding %q+#D"
-msgstr " 覆盖了%q+#D"
+msgstr "覆盖了%q+#D"
#: cp/search.c:1857
#, gcc-internal-format
@@ -34906,12 +34868,12 @@ msgstr "为%q+#D指定了冲çªçš„返回类型"
#: cp/search.c:1872
#, gcc-internal-format
msgid "looser throw specifier for %q+#F"
-msgstr "放æ¾%q+#Fçš„ throw é™å®š"
+msgstr "对%q+#F放æ¾çš„ throw é™å®š"
#: cp/search.c:1873
#, gcc-internal-format
msgid " overriding %q+#F"
-msgstr " 覆盖了%q+#F"
+msgstr "覆盖了%q+#F"
#: cp/search.c:1881
#, gcc-internal-format
@@ -34943,7 +34905,7 @@ msgstr "无法声明%q+#D"
#: cp/search.c:1990
#, gcc-internal-format
msgid " since %q+#D declared in base class"
-msgstr " 因为%q+#D已在基类中声明过"
+msgstr "因为%q+#D已在基类中声明过"
#: cp/semantics.c:762
#, gcc-internal-format
@@ -34998,7 +34960,7 @@ msgstr "在éžæˆå‘˜å‡½æ•°ä¸­ä½¿ç”¨%<this%>无效"
#: cp/semantics.c:2127
#, gcc-internal-format
msgid "invalid use of %<this%> at top level"
-msgstr "在文件层使用%<this%>无效"
+msgstr "在文件作用域使用%<this%>无效"
#: cp/semantics.c:2151
#, gcc-internal-format
@@ -35182,9 +35144,9 @@ msgid "%<threadprivate%> %qE directive not in %qT definition"
msgstr "%<threadprivate%>%qE指示ä¸åœ¨%qT定义中"
#: cp/semantics.c:4160
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "difference between %qE and %qD does not have integer type"
-msgstr "%H%qEå’Œ%qD之间的差ä¸å…·æœ‰æ•´æ•°ç±»åž‹"
+msgstr "%qEå’Œ%qD之间的差ä¸å…·æœ‰æ•´æ•°ç±»åž‹"
#. Report the error.
#: cp/semantics.c:4686
@@ -35223,9 +35185,9 @@ msgid "incomplete type %qT not allowed"
msgstr "ä¸å…许ä¸å®Œå…¨ç±»åž‹%qT"
#: cp/semantics.c:5306
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the type %qT of constexpr variable %qD is not literal"
-msgstr "函数%2$qD的返回值类型%1$qTä¸æ˜¯ä¸€ä¸ªå­—é¢ç±»åž‹"
+msgstr "constexpr å˜é‡%2$qD的类型%1$qTä¸æ˜¯å­—é¢å¸¸é‡"
#: cp/semantics.c:5341
#, gcc-internal-format
@@ -35627,12 +35589,12 @@ msgstr "å– %s%qE的地å€"
#: cp/typeck.c:4311
#, gcc-internal-format
msgid "invalid use of %qE to form a pointer-to-member-function"
-msgstr "用%qEå½¢æˆæˆå‘˜å‡½æ•°æŒ‡é’ˆçš„用法无效。"
+msgstr "用%qEå½¢æˆæˆå‘˜å‡½æ•°æŒ‡é’ˆçš„用法无效"
#: cp/typeck.c:4314
#, gcc-internal-format
msgid " a qualified-id is required"
-msgstr " 需è¦ä¸€ä¸ªé™å®šçš„标识符"
+msgstr "需è¦ä¸€ä¸ªé™å®šçš„标识符"
#: cp/typeck.c:4319
#, gcc-internal-format
@@ -35677,7 +35639,7 @@ msgstr "ISO C++ ä¸å…许对类型为%qT的指针自å‡"
#: cp/typeck.c:4668
#, gcc-internal-format
msgid "invalid use of Boolean expression as operand to %<operator--%>"
-msgstr "布尔表达å¼ä¸èƒ½ç”¨ä½œ%<æ“作符--%>çš„æ“作数"
+msgstr "布尔表达å¼ä¸èƒ½ç”¨ä½œ%<è¿ç®—符--%>çš„æ“作数"
#: cp/typeck.c:4703
#, gcc-internal-format
@@ -35817,7 +35779,7 @@ msgstr "å‘函数类型%qT的转æ¢æ— æ•ˆ"
#: cp/typeck.c:6300
#, gcc-internal-format
msgid " in evaluation of %<%Q(%#T, %#T)%>"
-msgstr " 在求%<%Q(%#T, %#T)%>值时"
+msgstr "在求%<%Q(%#T, %#T)%>值时"
#: cp/typeck.c:6358
#, gcc-internal-format
@@ -35837,7 +35799,7 @@ msgstr "无效的数组赋值"
#: cp/typeck.c:6474
#, gcc-internal-format
msgid " in pointer to member function conversion"
-msgstr " 在æˆå‘˜å‡½æ•°æŒ‡é’ˆè½¬æ¢ä¸­"
+msgstr "在æˆå‘˜å‡½æ•°æŒ‡é’ˆè½¬æ¢ä¸­"
#: cp/typeck.c:6485
#, gcc-internal-format
@@ -35847,7 +35809,7 @@ msgstr "æˆå‘˜æŒ‡é’ˆè½¬æ¢ç»ç”±è™šåŸºç±»%qT"
#: cp/typeck.c:6525 cp/typeck.c:6538
#, gcc-internal-format
msgid " in pointer to member conversion"
-msgstr " 在æˆå‘˜æŒ‡é’ˆè½¬æ¢ä¸­"
+msgstr "在æˆå‘˜æŒ‡é’ˆè½¬æ¢ä¸­"
#: cp/typeck.c:6616
#, gcc-internal-format
@@ -35915,12 +35877,12 @@ msgstr "构造函数返回值"
#: cp/typeck.c:7144
#, gcc-internal-format
msgid "lambda return type can only be deduced when the return statement is the only statement in the function body"
-msgstr ""
+msgstr "åªæœ‰å½“返回语å是函数体中唯一一æ¡è¯­å¥æ—¶æ‰èƒ½æ¼”绎 Lambda 返回类型"
#: cp/typeck.c:7150
#, gcc-internal-format
msgid "inconsistent types %qT and %qT deduced for lambda return type"
-msgstr ""
+msgstr "Lambda 返回类型演绎得到ä¸ä¸€è‡´çš„类型%qTå’Œ%qT"
#: cp/typeck.c:7176
#, gcc-internal-format
@@ -35950,7 +35912,7 @@ msgstr "å‘åªè¯»ç»“æž„çš„æ•°æ®æˆå‘˜%qD赋值"
#: cp/typeck2.c:108
#, gcc-internal-format
msgid "assignment (via 'asm' output) of data-member %qD in read-only structure"
-msgstr ""
+msgstr "通过‘asm’输出å‘åªè¯»ç»“æž„çš„æ•°æ®æˆå‘˜%qD赋值"
#: cp/typeck2.c:110
#, gcc-internal-format
@@ -36725,7 +36687,7 @@ msgstr "无法打开文件 %s"
#: lto/lto-elf.c:587
#, gcc-internal-format
msgid "ELF library is older than that used when building GCC"
-msgstr ""
+msgstr "ELF 库比构建 GCC 时所使用的还è¦æ—§"
#: lto/lto-elf.c:596
#, gcc-internal-format
@@ -36780,7 +36742,7 @@ msgstr "-fwpa 和 -fltrans 互斥"
#: lto/lto.c:244
#, gcc-internal-format
msgid "bytecode stream: garbage at the end of symbols section"
-msgstr ""
+msgstr "字节ç æµï¼šç¬¦å·èŠ‚结尾有垃圾字符"
#: lto/lto.c:268
#, gcc-internal-format
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index da700243eac..7e55a57ba48 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,172 @@
+2009-12-18 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * g++.old-deja/g++.brendan/misc6.C: Make expected dg-error strings
+ explicit.
+
+2009-12-17 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.dg/debug/dwarf2/const-1.c: Don't expect DW_AT_const_value,
+ but instead DW_AT_location with DW_OP_addr+DW_OP_stack_value. Add
+ -gno-strict-dwarf -fno-merge-debug-strings to dg-options.
+ * g++.dg/debug/dwarf2/const1.C: Likewise.
+ * g++.dg/debug/dwarf2/template-params-3.C: Likewise.
+ * g++.dg/debug/dwarf2/template-func-params-3.C: Likewise.
+
+2009-12-17 Alexandre Oliva <aoliva@redhat.com>
+
+ PR debug/41679
+ * gcc.target/arm/pr41679.c: New.
+
+2009-12-17 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/42386
+ * g++.dg/opt/dtor3.C: New test.
+
+2009-12-17 Arnaud Charlet <charlet@adacore.com>
+
+ * ada/acats/run_all.sh: Strip comments from norun.lst
+
+2009-12-17 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/32280
+ * gcc.target/i386/pr32280-1.c: New test.
+
+2009-12-17 Uros Bizjak <ubizjak@gmail.com>
+
+ * objc/execute/forward-1.x: XFAIL for -fgnu-runtime on
+ x86_64-*-darwin*, powerpc*-*-darwin* and alpha*-*-linux* targets.
+
+2009-12-17 Janus Weil <janus@gcc.gnu.org>
+
+ PR fortran/42144
+ * gfortran.dg/dynamic_dispatch_6.f03: New test.
+
+2009-12-17 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * g++.old-deja/g++.mike/net31.C: Make expected dg-error strings
+ explicit.
+ * g++.old-deja/g++.bugs/900213_02.C: Likewise.
+ * g++.old-deja/g++.bugs/900215_02.C: Likewise.
+
+2009-12-16 Richard Guenther <rguenther@suse.de>
+
+ PR lto/42392
+ * gcc.dg/lto/20091216-1_0.c: New testcase.
+
+2009-12-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/42387
+ * g++.dg/ext/vla8.C: New.
+
+2009-12-16 Jakub Jelinek <jakub@redhat.com>
+
+ * gcc.c-torture/compile/20091215-1.c: New test.
+
+ * gcc.dg/debug/tls-1.c: New test.
+
+2009-12-15 Jason Merrill <jason@redhat.com>
+
+ PR c++/42358
+ * g++.dg/cpp0x/variadic98.C: New.
+
+2009-12-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/42373
+ * g++.dg/cpp0x/lambda/lambda-mangle.C: Adjust regexps for darwin.
+
+2009-12-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * ada/acats/norun.lst: Sort.
+
+2009-12-15 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/41183
+ * g++.dg/torture/pr41183.C: New test.
+
+2009-12-15 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/41235
+ * gfortran.dg/auto_char_len_1.f90: New test.
+ * gfortran.dg/auto_char_len_2.f90: New test.
+ * gfortran.dg/auto_char_len_4.f90: Correct test.
+
+2009-12-14 Jason Merrill <jason@redhat.com>
+
+ PR c++/42364
+ * g++.dg/cpp0x/variadic31.C: Compile with -g.
+ * g++.dg/ext/attrib33.C: Likewise.
+
+2009-12-15 Shujing Zhao <pearly.zhao@oracle.com>
+
+ * g++.dg/other/error20.C: Adjust dg-message strings.
+ * g++.dg/other/error31.C: Likewise.
+ * g++.dg/rtti/typeid6.C: Likewise.
+ * g++.dg/ext/ms-1.C: Likewise.
+ * g++.dg/parse/error19.C: Likewise.
+ * g++.dg/parse/crash5.C: Likewise.
+ * g++.dg/cpp0x/explicit4.C: Likewise.
+ * g++.dg/template/ptrmem4.C: Likewise.
+ * g++.dg/template/crash37.C: Likewise.
+ * g++.dg/template/qualttp5.C: Likewise.
+ * g++.dg/template/local6.C: Likewise.
+ * g++.dg/template/instantiate5.C: Likewise.
+ * g++.old-deja/g++.brendan/overload1.C: Likewise.
+ * g++.old-deja/g++.brendan/cvt3.C: Likewise.
+ * g++.old-deja/g++.brendan/overload4.C: Likewise.
+ * g++.old-deja/g++.jason/conversion11.C: Likewise.
+ * g++.old-deja/g++.jason/scoping10.C: Likewise.
+ * g++.old-deja/g++.other/expr1.C: Likewise.
+ * g++.old-deja/g++.other/pmf3.C: Likewise.
+ * g++.old-deja/g++.other/crash24.C: Likewise.
+ * g++.old-deja/g++.niklas/t120.C: Likewise.
+ * g++.old-deja/g++.niklas/t121.C: Likewise.
+ * g++.old-deja/g++.law/operators9.C: Likewise.
+ * g++.old-deja/g++.law/arm9.C: Likewise.
+ * g++.old-deja/g++.law/enum4.C: Likewise.
+ * g++.old-deja/g++.law/arg11.C: Likewise.
+ * g++.old-deja/g++.benjamin/15800-1.C: Likewise.
+ * g++.old-deja/g++.mike/p2431.C: Likewise.
+ * g++.old-deja/g++.mike/p438.C: Likewise.
+ * g++.old-deja/g++.mike/p9068.C: Likewise.
+ * g++.old-deja/g++.mike/p11110.C: Likewise.
+ * g++.old-deja/g++.bugs/900330_02.C: Likewise.
+
+2009-12-14 Uros Bizjak <ubizjak@gmail.com>
+
+ * g++.dg/other/i386-2.C: Add -mpopcnt -mabm -mlwp to dg-options.
+ * g++.dg/other/i386-3.C: Ditto.
+ * g++.dg/other/i386-5.C: Remove duplicated test.
+ * g++.dg/other/i386-6.C: Ditto.
+
+2009-12-14 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/42354
+ * gfortran.dg/iso_c_binding_init_expr.f03: New.
+ * gfortran.dg/intrinsic_std_1.f90: Fixed expected error message.
+ * gfortran.dg/function_kinds_5.f90: Likewise.
+ * gfortran.dg/selected_char_kind_3.f90: Likewise.
+
+2009-12-14 Dominique d'Humieres <dominiq@lps.ens.fr>
+
+ * gfortran.dg/boz_15.f90: Fix typos.
+
+2009-12-14 Jakub Jelinek <jakub@redhat.com>
+ Sebastian Pop <sebastian.pop@amd.com>
+
+ * gcc.target/i386/sse-12.c: Add -mpopcnt and -mlwp.
+ * gcc.target/i386/sse-13.c: Same.
+ (__builtin_ia32_lwpval32, __builtin_ia32_lwpval64,
+ __builtin_ia32_lwpins32, __builtin_ia32_lwpins64): Added testcases.
+ * gcc.target/i386/sse-14.c: Add -mpopcnt -mabm -mlwp.
+ Added tests for __lwpval32, __lwpins32, __lwpval64, and __lwpins64.
+ * gcc.target/i386/sse-22.c: Added tests for popcnt, abm, and lwp.
+ * gcc.target/i386/sse-23.c: Same.
+
+2009-12-14 Sebastian Pop <sebpop@gmail.com>
+
+ PR middle-end/42284
+ * testsuite/gcc.dg/graphite/pr42284.c: New.
+
2009-12-13 Richard Guenther <rguenther@suse.de>
PR tree-optimization/42357
@@ -80,7 +249,7 @@
* gfortran.dg/typebound_proc_13.f03: New test.
2009-12-08 Olga Golovanevsky <olga@il.ibm.com>
- Jakub Jelinek <jakub@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
PR midle-end/41843
* gcc.dg/struct/wo_prof_empty_str.c: New testcase.
@@ -224,7 +393,7 @@
PR c++/41611
* g++.dg/abi/guard1.C: New.
-2009-12-91 Uros Bizjak <ubizjak@gmail.com>
+2009-12-01 Uros Bizjak <ubizjak@gmail.com>
* gcc.target/i386/vperm-v4sf-1.c (dg-options): Use -msse.
@@ -538,7 +707,7 @@
* gcc-dg/raw-string-2.c: Ditto.
* gcc-dg/utf-array-short-wchar.c: Ditto.
* gcc-dg/utf-array.c: Ditto.
- * gcc-dg/utf8-2.c: Ditto.
+ * gcc-dg/utf8-2.c: Ditto.
2009-11-23 Andy Hutchinson <hutchinsonandy@gcc.gnu.org>
@@ -764,7 +933,7 @@
* gcc.misc-tests/linkage.exp: Also check -m32 for i*86-*-linux*.
2009-11-18 Nick Clifton <nickc@redhat.com>
-
+
* g++.dg/lto/20091002-1_0.C: Replace -shared with -r -nostlib.
* g++.dg/lto/20081120-1_0.C: Likewise.
* g++.dg/lto/20091002-2_0.C: Likewise.
@@ -1179,7 +1348,7 @@
* g++.dg/other/i386-3.C: Ditto.
* g++.dg/other/i386-5.C: Ditto.
* g++.dg/other/i386-6.C: Ditto.
-
+
2009-11-04 Wei Guozhi <carrot@google.com>
PR target/40835
diff --git a/gcc/testsuite/ada/acats/norun.lst b/gcc/testsuite/ada/acats/norun.lst
index c0b08e42c07..e9f64b4ded9 100644
--- a/gcc/testsuite/ada/acats/norun.lst
+++ b/gcc/testsuite/ada/acats/norun.lst
@@ -1,2 +1,2 @@
-templat
# Tests must be sorted in alphabetical order
+templat
diff --git a/gcc/testsuite/ada/acats/run_all.sh b/gcc/testsuite/ada/acats/run_all.sh
index e28ec7a838a..92446fa875a 100755
--- a/gcc/testsuite/ada/acats/run_all.sh
+++ b/gcc/testsuite/ada/acats/run_all.sh
@@ -129,6 +129,7 @@ sed -e "s,ACATS4GNATDIR,$dir,g" \
cp $testdir/tests/cd/*.c $dir/support
cp $testdir/tests/cxb/*.c $dir/support
+grep -v '^#' $testdir/norun.lst > $dir/support/norun.lst
rm -rf $dir/run
mv $dir/tests $dir/tests.$$ 2> /dev/null
@@ -206,7 +207,7 @@ for chapter in $chapters; do
cd $dir/tests/$chapter
ls *.a *.ada *.adt *.am *.dep 2> /dev/null | sed -e 's/\(.*\)\..*/\1/g' | \
- cut -c1-7 | sort | uniq | comm -23 - $testdir/norun.lst \
+ cut -c1-7 | sort | uniq | comm -23 - $dir/support/norun.lst \
> $dir/tests/$chapter/${chapter}.lst
countn=`wc -l < $dir/tests/$chapter/${chapter}.lst`
glob_countn=`expr $glob_countn + $countn`
diff --git a/gcc/testsuite/g++.dg/cpp0x/explicit4.C b/gcc/testsuite/g++.dg/cpp0x/explicit4.C
index 74726a99cad..67c60f67928 100644
--- a/gcc/testsuite/g++.dg/cpp0x/explicit4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/explicit4.C
@@ -2,7 +2,7 @@
// { dg-options "-std=c++0x" }
struct A {
- A(const A&, int = 0); // { dg-message "candidates" }
+ A(const A&, int = 0); // { dg-message "candidate" }
};
struct B
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C
index aa7462b4fcf..12aa8491118 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C
@@ -1,4 +1,5 @@
// Test lambda mangling
+// { dg-require-weak "" }
// { dg-options "-std=c++0x -fno-inline" }
template<typename F> int algo(F fn) { return fn(); }
@@ -10,7 +11,7 @@ inline void g(int n) {
// The call operator of that type is _ZZ1giENKUlvE_clEv.
// { dg-final { scan-assembler "_ZZ1giENUlvE_clEv" } }
-// { dg-final { scan-assembler "weak\[ \t\]*_?_ZZ1giENUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZZ1giENUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } }
algo([=]{return n+bef();});
// The captured entities do not participate in <lambda-sig>
@@ -32,7 +33,7 @@ struct S {
// Type: ZN1S1fEiiEd0_UlvE_
// Operator: _ZZN1S1fEiiEd0_NKUlvE_clEv
// { dg-final { scan-assembler "_ZZN1S1fEiiEd0_NUlvE_clEv" } }
-// { dg-final { scan-assembler "weak\[ \t\]*_?_ZZN1S1fEiiEd0_NUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZZN1S1fEiiEd0_NUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } }
[]{return 1;}()
// Type: ZN1S1fEiiEd0_UlvE0_
// Operator: _ZZN1S1fEiiEd0_NKUlvE0_clEv
@@ -53,7 +54,7 @@ template int R<int>::x;
// Type of lambda in intializer of R<int>::x: N1RIiE1xMUlvE_E
// Corresponding operator(): _ZNK1RIiE1xMUlvE_clEv
// { dg-final { scan-assembler "_ZN1RIiE1xMUlvE_clEv" } }
-// { dg-final { scan-assembler "weak\[ \t\]*_?_ZN1RIiE1xMUlvE_clEv" { target { ! { *-*-mingw* *-*-cygwin } } } } }
+// { dg-final { scan-assembler "weak\[^\n\r\]*_?_ZN1RIiE1xMUlvE_clEv" { target { ! { *-*-mingw* *-*-cygwin } } } } }
void bar()
{
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic31.C b/gcc/testsuite/g++.dg/cpp0x/variadic31.C
index eacf568978a..db8daa89858 100644
--- a/gcc/testsuite/g++.dg/cpp0x/variadic31.C
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic31.C
@@ -1,4 +1,4 @@
-// { dg-options "-std=gnu++0x" }
+// { dg-options "-std=gnu++0x -g" }
template<typename... T>
void eat(T...) { }
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic98.C b/gcc/testsuite/g++.dg/cpp0x/variadic98.C
new file mode 100644
index 00000000000..6af599fcaa0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/variadic98.C
@@ -0,0 +1,411 @@
+// PR c++/42358
+// { dg-do assemble }
+// { dg-options -std=c++0x }
+
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+typedef __SIZE_TYPE__ size_t;
+namespace std __attribute__ ((__visibility__ ("default"))) {
+ using ::size_t;
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+ struct __sfinae_types {
+ typedef char __one;
+ typedef struct {
+ } __two;
+ };
+ template<typename _Tp, _Tp __v> struct integral_constant {
+ static const _Tp value = __v;
+ typedef _Tp value_type;
+ typedef integral_constant<_Tp, __v> type;
+ };
+ typedef integral_constant<bool, false> false_type;
+ template<typename> struct remove_cv;
+ template<typename> struct __is_void_helper : public false_type {
+ };
+ template<typename _Tp> struct is_void : public integral_constant<bool, (__is_void_helper<typename remove_cv<_Tp>::type>::value)> {
+ };
+ template<typename> struct is_array : public false_type {
+ };
+ template<typename> struct is_function : public false_type {
+ };
+ template<typename, unsigned _Uint = 0> struct extent : public integral_constant<std::size_t, 0> {
+ };
+ template<typename _Tp> struct remove_const {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct remove_volatile {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct remove_cv {
+ typedef typename remove_const<typename remove_volatile<_Tp>::type>::type type;
+ };
+ template<typename> struct is_lvalue_reference : public false_type {
+ };
+ template<typename> struct is_rvalue_reference : public false_type {
+ };
+ template<typename _Tp> struct is_reference : public integral_constant<bool, (is_lvalue_reference<_Tp>::value || is_rvalue_reference<_Tp>::value)> {
+ };
+ template<typename _Tp> struct remove_reference {
+ typedef _Tp type;
+ };
+ template<typename _Tp, bool = !is_reference<_Tp>::value && !is_void<_Tp>::value> struct __add_rvalue_reference_helper {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct add_rvalue_reference : public __add_rvalue_reference_helper<_Tp> {
+ };
+ template<typename _Tp> typename add_rvalue_reference<_Tp>::type declval();
+ template<typename _From, typename _To, bool = (is_void<_From>::value || is_void<_To>::value || is_function<_To>::value || is_array<_To>::value)> struct __is_convertible_helper {
+ };
+ template<typename _From, typename _To> struct __is_convertible_helper<_From, _To, false> : public __sfinae_types {
+ static __one __test(_To);
+ static __two __test(...);
+ static const bool __value = sizeof(__test(declval<_From>())) == 1;
+ };
+ template<typename _From, typename _To> struct is_convertible : public integral_constant<bool, __is_convertible_helper<_From, _To>::__value> {
+ };
+ template<bool, typename _Tp = void> struct enable_if {
+ };
+ template<typename _Tp> struct enable_if<true, _Tp> {
+ typedef _Tp type;
+ };
+ template<typename _Tp> struct identity {
+ typedef _Tp type;
+ };
+ template<typename _Tp> inline typename enable_if<!is_lvalue_reference<_Tp>::value, _Tp&&>::type forward(typename std::identity<_Tp>::type& __t) {
+ }
+ template<typename _Tp> inline typename enable_if<is_lvalue_reference<_Tp>::value, _Tp>::type forward(typename std::identity<_Tp>::type __t) {
+ }
+ template<typename _Tp> inline typename std::remove_reference<_Tp>::type&& move(_Tp&& __t) {
+ }
+ template<class _T1, class _T2> struct pair {
+ typedef _T1 first_type;
+ typedef _T2 second_type;
+ _T1 first;
+ _T2 second;
+ template<class _U1, class = typename std::enable_if<std::is_convertible<_U1, _T1>::value>::type> pair(_U1&& __x, const _T2& __y) : first(std::forward<_U1>(__x)), second(__y) {
+ }
+ template<class _U2, class = typename std::enable_if<std::is_convertible<_U2, _T2>::value>::type> pair(const _T1& __x, _U2&& __y) : first(__x), second(std::forward<_U2>(__y)) {
+ }
+ template<class _U1, class _U2, class = typename std::enable_if<std::is_convertible<_U1, _T1>::value && std::is_convertible<_U2, _T2>::value>::type> pair(_U1&& __x, _U2&& __y) : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) {
+ }
+ template<class _U1, class _U2> pair(pair<_U1, _U2>&& __p) : first(std::move(__p.first)), second(std::move(__p.second)) {
+ }
+ template<class _U1, class _U2> pair& operator=(pair<_U1, _U2>&& __p) {
+ }
+ };
+ struct input_iterator_tag {
+ };
+ struct output_iterator_tag {
+ };
+ struct forward_iterator_tag : public input_iterator_tag {
+ };
+ struct bidirectional_iterator_tag : public forward_iterator_tag {
+ };
+ template<typename _Category, typename _Tp, typename _Distance = ptrdiff_t, typename _Pointer = _Tp*, typename _Reference = _Tp&> struct iterator {
+ typedef _Category iterator_category;
+ typedef _Tp value_type;
+ typedef _Distance difference_type;
+ typedef _Pointer pointer;
+ typedef _Reference reference;
+ };
+ template<typename _Iterator> struct iterator_traits {
+ typedef typename _Iterator::iterator_category iterator_category;
+ typedef typename _Iterator::value_type value_type;
+ typedef typename _Iterator::difference_type difference_type;
+ typedef typename _Iterator::pointer pointer;
+ typedef typename _Iterator::reference reference;
+ };
+ template<typename _Iter> inline typename iterator_traits<_Iter>::iterator_category __iterator_category(const _Iter&) {
+ }
+ template<typename _InputIterator> inline typename iterator_traits<_InputIterator>::difference_type __distance(_InputIterator __first, _InputIterator __last, input_iterator_tag) {
+ }
+ template<typename _InputIterator> inline typename iterator_traits<_InputIterator>::difference_type distance(_InputIterator __first, _InputIterator __last) {
+ return std::__distance(__first, __last, std::__iterator_category(__first));
+ }
+ template<typename _Iterator> class reverse_iterator : public iterator<typename iterator_traits<_Iterator>::iterator_category, typename iterator_traits<_Iterator>::value_type, typename iterator_traits<_Iterator>::difference_type, typename iterator_traits<_Iterator>::pointer, typename iterator_traits<_Iterator>::reference> {
+ };
+ template<typename _Container> class back_insert_iterator : public iterator<output_iterator_tag, void, void, void, void> {
+ };
+}
+namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) {
+ template<typename _Tp> class new_allocator {
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Tp* pointer;
+ typedef const _Tp* const_pointer;
+ typedef _Tp& reference;
+ typedef const _Tp& const_reference;
+ typedef _Tp value_type;
+ new_allocator() throw() {
+ }
+ new_allocator(const new_allocator&) throw() {
+ }
+ template<typename _Tp1> new_allocator(const new_allocator<_Tp1>&) throw() {
+ }
+ template<typename... _Args> void construct(pointer __p, _Args&&... __args) {
+ }
+ };
+}
+namespace std __attribute__ ((__visibility__ ("default"))) {
+ template<typename _Tp> class allocator: public __gnu_cxx::new_allocator<_Tp> {
+ public:
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Tp* pointer;
+ typedef const _Tp* const_pointer;
+ typedef _Tp& reference;
+ typedef const _Tp& const_reference;
+ typedef _Tp value_type;
+ template<typename _Tp1> struct rebind {
+ typedef allocator<_Tp1> other;
+ };
+ allocator() throw() {
+ }
+ template<typename _Tp1> allocator(const allocator<_Tp1>&) throw() {
+ }
+ };
+ extern template class allocator<char>;
+ extern template class allocator<wchar_t>;
+ template<typename _Arg, typename _Result> struct unary_function {
+ typedef _Arg argument_type;
+ typedef _Result result_type;
+ };
+ template<typename _Arg1, typename _Arg2, typename _Result> struct binary_function {
+ typedef _Arg1 first_argument_type;
+ typedef _Arg2 second_argument_type;
+ typedef _Result result_type;
+ };
+ template<typename _Tp> struct less : public binary_function<_Tp, _Tp, bool> {
+ bool operator()(const _Tp& __x, const _Tp& __y) const {
+ }
+ };
+ template<typename _Pair> struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> {
+ const typename _Pair::first_type& operator()(const _Pair& __x) const {
+ }
+ };
+ struct _Rb_tree_node_base {
+ typedef _Rb_tree_node_base* _Base_ptr;
+ typedef const _Rb_tree_node_base* _Const_Base_ptr;
+ };
+ template<typename _Val> struct _Rb_tree_node : public _Rb_tree_node_base {
+ typedef _Rb_tree_node<_Val>* _Link_type;
+ _Val _M_value_field;
+ template<typename... _Args> _Rb_tree_node(_Args&&... __args) : _Rb_tree_node_base(), _M_value_field(std::forward<_Args>(__args)...) {
+ }
+ };
+ template<typename _Tp> struct _Rb_tree_iterator {
+ typedef _Tp value_type;
+ typedef _Tp& reference;
+ typedef _Tp* pointer;
+ typedef bidirectional_iterator_tag iterator_category;
+ typedef ptrdiff_t difference_type;
+ typedef _Rb_tree_iterator<_Tp> _Self;
+ typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
+ typedef _Rb_tree_node<_Tp>* _Link_type;
+ _Base_ptr _M_node;
+ };
+ template<typename _Tp> struct _Rb_tree_const_iterator {
+ typedef _Tp value_type;
+ typedef const _Tp& reference;
+ typedef const _Tp* pointer;
+ typedef _Rb_tree_iterator<_Tp> iterator;
+ typedef bidirectional_iterator_tag iterator_category;
+ typedef ptrdiff_t difference_type;
+ typedef _Rb_tree_const_iterator<_Tp> _Self;
+ typedef _Rb_tree_node_base::_Const_Base_ptr _Base_ptr;
+ typedef const _Rb_tree_node<_Tp>* _Link_type;
+ explicit _Rb_tree_const_iterator(_Link_type __x) : _M_node(__x) {
+ }
+ _Rb_tree_const_iterator(const iterator& __it) : _M_node(__it._M_node) {
+ }
+ _Base_ptr _M_node;
+ };
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc = allocator<_Val> > class _Rb_tree {
+ typedef typename _Alloc::template rebind<_Rb_tree_node<_Val> >::other _Node_allocator;
+ typedef _Rb_tree_node_base* _Base_ptr;
+ typedef const _Rb_tree_node_base* _Const_Base_ptr;
+ public:
+ typedef _Key key_type;
+ typedef _Val value_type;
+ typedef value_type* pointer;
+ typedef const value_type* const_pointer;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ typedef _Rb_tree_node<_Val>* _Link_type;
+ typedef const _Rb_tree_node<_Val>* _Const_Link_type;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef _Alloc allocator_type;
+ _Node_allocator& _M_get_Node_allocator() {
+ }
+ _Link_type _M_get_node() {
+ }
+ template<typename... _Args> _Link_type _M_create_node(_Args&&... __args) {
+ _Link_type __tmp = _M_get_node();
+ try {
+ _M_get_Node_allocator().construct(__tmp, std::forward<_Args>(__args)...);
+ }
+ catch(...) {
+ }
+ }
+ template<typename _Key_compare, bool _Is_pod_comparator = __is_pod(_Key_compare)> struct _Rb_tree_impl : public _Node_allocator {
+ _Key_compare _M_key_compare;
+ _Rb_tree_node_base _M_header;
+ size_type _M_node_count;
+ _Rb_tree_impl(const _Key_compare& __comp, const _Node_allocator& __a) : _Node_allocator(__a), _M_key_compare(__comp), _M_header(), _M_node_count(0) {
+ }
+ void _M_initialize() {
+ }
+ };
+ _Rb_tree_impl<_Compare> _M_impl;
+ _Base_ptr& _M_rightmost() {
+ }
+ _Link_type _M_begin() {
+ }
+ _Link_type _M_end() {
+ }
+ _Const_Link_type _M_end() const {
+ }
+ static _Link_type _S_right(_Base_ptr __x) {
+ }
+ static const_reference _S_value(_Const_Base_ptr __x) {
+ }
+ static const _Key& _S_key(_Const_Base_ptr __x) {
+ return _KeyOfValue()(_S_value(__x));
+ }
+ typedef _Rb_tree_iterator<value_type> iterator;
+ typedef _Rb_tree_const_iterator<value_type> const_iterator;
+ typedef std::reverse_iterator<iterator> reverse_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+ iterator _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __y, const value_type& __v);
+ iterator _M_insert_lower(_Base_ptr __x, _Base_ptr __y, const value_type& __v);
+ iterator _M_insert_equal_lower(const value_type& __x);
+ iterator _M_lower_bound(_Link_type __x, _Link_type __y, const _Key& __k);
+ iterator _M_upper_bound(_Link_type __x, _Link_type __y, const _Key& __k);
+ _Rb_tree(const _Compare& __comp, const allocator_type& __a = allocator_type()) : _M_impl(__comp, __a) {
+ }
+ iterator end() {
+ }
+ iterator _M_insert_equal_(const_iterator __position, const value_type& __x);
+ template<typename _InputIterator> void _M_insert_unique(_InputIterator __first, _InputIterator __last);
+ template<typename _InputIterator> void _M_insert_equal(_InputIterator __first, _InputIterator __last);
+ size_type count(const key_type& __k) const;
+ pair<iterator, iterator> equal_range(const key_type& __k);
+ pair<const_iterator, const_iterator> equal_range(const key_type& __k) const;
+ };
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_(_Const_Base_ptr __x, _Const_Base_ptr __p, const _Val& __v) {
+ _Link_type __z = _M_create_node(__v);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_lower(_Base_ptr __x, _Base_ptr __p, const _Val& __v) {
+ _Link_type __z = _M_create_node(__v);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_equal_lower(const _Val& __v) {
+ _Link_type __x = _M_begin();
+ _Link_type __y = _M_end();
+ return _M_insert_lower(__x, __y, __v);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator, typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator> _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: equal_range(const _Key& __k) {
+ _Link_type __x = _M_begin();
+ _Link_type __y = _M_end();
+ while (__x != 0) {
+ if (_M_impl._M_key_compare(_S_key(__x), __k)) __x = _S_right(__x);
+ else {
+ _Link_type __xu(__x), __yu(__y);
+ return pair<iterator, iterator>(_M_lower_bound(__x, __y, __k), _M_upper_bound(__xu, __yu, __k));
+ }
+ }
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> pair<typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator, typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::const_iterator> _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: equal_range(const _Key& __k) const {
+ _Const_Link_type __y = _M_end();
+ return pair<const_iterator, const_iterator>(const_iterator(__y), const_iterator(__y));
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: _M_insert_equal_(const_iterator __position, const _Val& __v) {
+ if (__position._M_node == _M_end()) {
+ if (__position._M_node == _M_rightmost()) return _M_insert_(0, _M_rightmost(), __v);
+ else return _M_insert_equal_lower(__v);
+ }
+ }
+ template<typename _Key, typename _Val, typename _KoV, typename _Cmp, typename _Alloc> template<class _II> void _Rb_tree<_Key, _Val, _KoV, _Cmp, _Alloc>:: _M_insert_equal(_II __first, _II __last) {
+ for (;
+ __first != __last;
+ ++__first) _M_insert_equal_(end(), *__first);
+ }
+ template<typename _Key, typename _Val, typename _KeyOfValue, typename _Compare, typename _Alloc> typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::size_type _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>:: count(const _Key& __k) const {
+ pair<const_iterator, const_iterator> __p = equal_range(__k);
+ const size_type __n = std::distance(__p.first, __p.second);
+ }
+ template<class _E> class initializer_list {
+ public:
+ typedef _E value_type;
+ typedef const _E& reference;
+ typedef const _E& const_reference;
+ typedef size_t size_type;
+ typedef const _E* iterator;
+ typedef const _E* const_iterator;
+ iterator _M_array;
+ size_type _M_len;
+ initializer_list(const_iterator __a, size_type __l) : _M_array(__a), _M_len(__l) {
+ }
+ const_iterator begin() const {
+ }
+ const_iterator end() const {
+ }
+ };
+ template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>, typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > > class multimap {
+ typedef _Key key_type;
+ typedef _Tp mapped_type;
+ typedef std::pair<const _Key, _Tp> value_type;
+ typedef _Compare key_compare;
+ typedef _Alloc allocator_type;
+ typedef typename _Alloc::value_type _Alloc_value_type;
+ typedef typename _Alloc::template rebind<value_type>::other _Pair_alloc_type;
+ typedef _Rb_tree<key_type, value_type, _Select1st<value_type>, key_compare, _Pair_alloc_type> _Rep_type;
+ _Rep_type _M_t;
+ public:
+ typedef typename _Pair_alloc_type::pointer pointer;
+ typedef typename _Pair_alloc_type::const_pointer const_pointer;
+ typedef typename _Pair_alloc_type::reference reference;
+ typedef typename _Pair_alloc_type::const_reference const_reference;
+ typedef typename _Rep_type::iterator iterator;
+ typedef typename _Rep_type::const_iterator const_iterator;
+ typedef typename _Rep_type::size_type size_type;
+ typedef typename _Rep_type::difference_type difference_type;
+ typedef typename _Rep_type::reverse_iterator reverse_iterator;
+ typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
+ multimap(initializer_list<value_type> __l, const _Compare& __comp = _Compare(), const allocator_type& __a = allocator_type()) : _M_t(__comp, __a) {
+ _M_t._M_insert_equal(__l.begin(), __l.end());
+ }
+ template<typename _InputIterator> multimap(_InputIterator __first, _InputIterator __last) : _M_t() {
+ }
+ template<typename _InputIterator> multimap(_InputIterator __first, _InputIterator __last, const _Compare& __comp, const allocator_type& __a = allocator_type()) : _M_t(__comp, __a) {
+ }
+ template<typename _InputIterator> void insert(_InputIterator __first, _InputIterator __last) {
+ }
+ size_type count(const key_type& __x) const {
+ return _M_t.count(__x);
+ }
+ std::pair<iterator, iterator> equal_range(const key_type& __x) {
+ return _M_t.equal_range(__x);
+ }
+ template<typename _K1, typename _T1, typename _C1, typename _A1> friend bool operator==(const multimap<_K1, _T1, _C1, _A1>&, const multimap<_K1, _T1, _C1, _A1>&);
+ template<typename _K1, typename _T1, typename _C1, typename _A1> friend bool operator<(const multimap<_K1, _T1, _C1, _A1>&, const multimap<_K1, _T1, _C1, _A1>&);
+ };
+}
+extern "C" {
+ extern void __assert_fail (__const char *__assertion, __const char *__file, unsigned int __line, __const char *__function) throw () __attribute__ ((__noreturn__));
+}
+using namespace std;
+int test01() {
+ typedef multimap<int,double> Container;
+ typedef Container::iterator iterator;
+ typedef pair<iterator,iterator> itpair;
+ Container m({
+ {
+ 1, 1.0 }
+ }
+ );
+ itpair ip = m.equal_range(1);
+ ((distance(ip.first, ip.second) == 3) ? static_cast<void> (0) : __assert_fail ("distance(ip.first, ip.second) == 3", "/home/richard/src/trunk/libstdc++-v3/testsuite/23_containers/multimap/init-list.cc", 36, __PRETTY_FUNCTION__));
+ ((m.count(7) == 2) ? static_cast<void> (0) : __assert_fail ("m.count(7) == 2", "/home/richard/src/trunk/libstdc++-v3/testsuite/23_containers/multimap/init-list.cc", 54, __PRETTY_FUNCTION__));
+}
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/const1.C b/gcc/testsuite/g++.dg/debug/dwarf2/const1.C
index eaed5bd603e..7b18fa0693b 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/const1.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/const1.C
@@ -1,7 +1,7 @@
/* { dg-do compile } */
-/* { dg-options "-O -gdwarf-2 -dA" } */
+/* { dg-options "-O -gdwarf-2 -dA -gno-strict-dwarf -fno-merge-debug-strings" } */
/* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "DW_AT_const_value" } } */
+/* { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*fnx\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
-extern void x () __attribute__((visibility ("hidden")));
-void (* const f) () = x;
+extern void fnx () __attribute__((visibility ("hidden")));
+void (* const f) () = fnx;
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C
index 9f3dc8c2870..4c72490351b 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-3.C
@@ -1,9 +1,9 @@
// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin PR debug/30161
-// { dg-options "-g -dA" }
+// { dg-options "-g -dA -gno-strict-dwarf -fno-merge-debug-strings" }
// { dg-final { scan-assembler "DW_TAG_template_value_param" } }
// { dg-final { scan-assembler "f.*DW_AT_name" } }
-// { dg-final { scan-assembler "_Z4blehv.*DW_AT_const_value" } }
+// { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*_Z4blehv\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
typedef void (*func_ptr)();
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C
index 06b0e2b821a..e69e1c9f37b 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-params-3.C
@@ -1,9 +1,9 @@
// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin PR debug/30161
-// { dg-options "-g -dA" }
+// { dg-options "-g -dA -gno-strict-dwarf -fno-merge-debug-strings" }
// { dg-final { scan-assembler "DW_TAG_template_value_param" } }
// { dg-final { scan-assembler "f.*DW_AT_name" } }
-// { dg-final { scan-assembler "_Z4blehv.*DW_AT_const_value" } }
+// { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*_Z4blehv\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
typedef void (*func_ptr) ();
diff --git a/gcc/testsuite/g++.dg/ext/attrib33.C b/gcc/testsuite/g++.dg/ext/attrib33.C
index 5b989849128..55bfc4cadb8 100644
--- a/gcc/testsuite/g++.dg/ext/attrib33.C
+++ b/gcc/testsuite/g++.dg/ext/attrib33.C
@@ -1,5 +1,6 @@
// PR c++/35546
// { dg-do compile }
+// { dg-options "-g" }
template <int N>
struct T
diff --git a/gcc/testsuite/g++.dg/ext/ms-1.C b/gcc/testsuite/g++.dg/ext/ms-1.C
index dcd1d0466ef..3963b7561d1 100644
--- a/gcc/testsuite/g++.dg/ext/ms-1.C
+++ b/gcc/testsuite/g++.dg/ext/ms-1.C
@@ -10,7 +10,7 @@ struct X
void Quux (void (X::*) ());
-void X::Foo (X *ptr) // { dg-message "candidates" }
+void X::Foo (X *ptr) // { dg-message "candidate" }
{
Quux (Foo); // { dg-error "no matches" }
Quux (Bar);
diff --git a/gcc/testsuite/g++.dg/ext/vla8.C b/gcc/testsuite/g++.dg/ext/vla8.C
new file mode 100644
index 00000000000..7b7428d07a9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/vla8.C
@@ -0,0 +1,15 @@
+// PR c++/42387
+// { dg-options "" }
+
+template<class PF>
+struct AvlTreeIter
+{
+ int Num();
+
+ AvlTreeIter()
+ {
+ new (void* [Num()]);
+ }
+};
+
+AvlTreeIter<int> a;
diff --git a/gcc/testsuite/g++.dg/opt/dtor3.C b/gcc/testsuite/g++.dg/opt/dtor3.C
new file mode 100644
index 00000000000..2d930987760
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/dtor3.C
@@ -0,0 +1,11 @@
+// PR c++/42386
+// { dg-do compile }
+// { dg-options "-O2" }
+# 1 "A.h" 1
+#pragma interface
+struct D { virtual bool d () const; };
+struct E { virtual ~E (); virtual void *e () const = 0; };
+struct A : public D, public E { ~A () {} };
+# 5 "dtor3.C" 1
+struct F : public A { void *f () const; void *e () const; };
+void *F::e () const { return __null; }
diff --git a/gcc/testsuite/g++.dg/other/error20.C b/gcc/testsuite/g++.dg/other/error20.C
index 50a4495cff9..6033c0e783d 100644
--- a/gcc/testsuite/g++.dg/other/error20.C
+++ b/gcc/testsuite/g++.dg/other/error20.C
@@ -2,7 +2,7 @@
// { dg-do compile }
struct A
-{ // { dg-message "candidates" }
+{ // { dg-message "candidate is" }
virtual A foo ();
};
diff --git a/gcc/testsuite/g++.dg/other/error31.C b/gcc/testsuite/g++.dg/other/error31.C
index c9e8351bcf3..c4095504d6d 100644
--- a/gcc/testsuite/g++.dg/other/error31.C
+++ b/gcc/testsuite/g++.dg/other/error31.C
@@ -3,7 +3,7 @@
// { dg-options "" }
// { dg-bogus "not supported by" "" { target *-*-* } 0 }
-struct A {}; // { dg-message "note: candidates are" }
+struct A {}; // { dg-message "note: candidate is" }
void
foo ()
diff --git a/gcc/testsuite/g++.dg/other/i386-2.C b/gcc/testsuite/g++.dg/other/i386-2.C
index 1ef6b2775d8..952fa14c364 100644
--- a/gcc/testsuite/g++.dg/other/i386-2.C
+++ b/gcc/testsuite/g++.dg/other/i386-2.C
@@ -1,7 +1,9 @@
-/* Test that {,x,e,p,t,s,w,a,i}mmintrin.h, fma4intrin.h, xopintrin.h, mm3dnow.h and
- mm_malloc.h are usable with -O -pedantic-errors. */
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -mavx -msse4a -mfma4 -mxop -maes -mpclmul" } */
+/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
+
+/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, abmintrin.h,
+ lwpintrin.h, popcntintrin.h and mm3dnow.h are usable with
+ -O -pedantic-errors. */
#include <x86intrin.h>
diff --git a/gcc/testsuite/g++.dg/other/i386-3.C b/gcc/testsuite/g++.dg/other/i386-3.C
index df33af8bbd9..88dd7693891 100644
--- a/gcc/testsuite/g++.dg/other/i386-3.C
+++ b/gcc/testsuite/g++.dg/other/i386-3.C
@@ -1,6 +1,8 @@
-/* Test that {,x,e,p,t,s,w,a,i}mmintrin.h, fma4intrin.h, mm3dnow.h, xopintrin.h and
- mm_malloc.h are usable with -O -fkeep-inline-functions. */
/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -mavx -msse4a -mfma4 -mxop -maes -mpclmul" } */
+/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
+
+/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, abmintrin.h,
+ lwpintrin.h, popcntintrin.h and mm3dnow.h are usable with
+ -O -fkeep-inline-functions. */
#include <x86intrin.h>
diff --git a/gcc/testsuite/g++.dg/other/i386-5.C b/gcc/testsuite/g++.dg/other/i386-5.C
deleted file mode 100644
index 383aae365bb..00000000000
--- a/gcc/testsuite/g++.dg/other/i386-5.C
+++ /dev/null
@@ -1,6 +0,0 @@
-/* Test that {,x,e,p,t,s,w,a,i}mmintrin.h, fma4intrin.h, xopintrin.h, mm3dnow.h and
- mm_malloc.h are usable with -O -fkeep-inline-functions. */
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -fkeep-inline-functions -march=k8 -m3dnow -mavx -msse4a -mfma4 -mxop -maes -mpclmul" } */
-
-#include <x86intrin.h>
diff --git a/gcc/testsuite/g++.dg/other/i386-6.C b/gcc/testsuite/g++.dg/other/i386-6.C
deleted file mode 100644
index 2bd4609d671..00000000000
--- a/gcc/testsuite/g++.dg/other/i386-6.C
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Test that {,x,e,p,t,s,w,a,i}mmintrin.h, fma4intrin.h, xopintrin.h, mm3dnow.h and
- mm_malloc.h are usable with -O -pedantic-errors. */
-/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-/* { dg-options "-O -pedantic-errors -march=k8 -m3dnow -mavx -msse4a -mfma4 -mxop -maes -mpclmul" } */
-
-#include <x86intrin.h>
-
-int dummy;
diff --git a/gcc/testsuite/g++.dg/parse/crash5.C b/gcc/testsuite/g++.dg/parse/crash5.C
index acf9e9d4bba..4597d6cf9af 100644
--- a/gcc/testsuite/g++.dg/parse/crash5.C
+++ b/gcc/testsuite/g++.dg/parse/crash5.C
@@ -1,7 +1,7 @@
// { dg-options "-w" }
class QString { // { dg-error "previous definition" }
- QString (const QString & a); // { dg-message "candidates" }
+ QString (const QString & a); // { dg-message "candidate is" }
};
class QString { }; // { dg-error "redefinition" }
diff --git a/gcc/testsuite/g++.dg/parse/error19.C b/gcc/testsuite/g++.dg/parse/error19.C
index 5582891c974..39c2d785837 100644
--- a/gcc/testsuite/g++.dg/parse/error19.C
+++ b/gcc/testsuite/g++.dg/parse/error19.C
@@ -2,7 +2,7 @@
// PR C++/17867
struct A
-{ // { dg-message "1:candidates are:" }
+{ // { dg-message "1:candidate is:" }
A(int);
};
diff --git a/gcc/testsuite/g++.dg/rtti/typeid6.C b/gcc/testsuite/g++.dg/rtti/typeid6.C
index 18709b4976d..adc5bbb02fb 100644
--- a/gcc/testsuite/g++.dg/rtti/typeid6.C
+++ b/gcc/testsuite/g++.dg/rtti/typeid6.C
@@ -7,5 +7,5 @@ namespace std
template<int> void foo()
{
- !typeid(void); // { dg-error "!typeid\\(void\\)|candidates" }
+ !typeid(void); // { dg-error "!typeid\\(void\\)|candidate is" }
}
diff --git a/gcc/testsuite/g++.dg/template/crash37.C b/gcc/testsuite/g++.dg/template/crash37.C
index 8af516018f7..aef0df0846e 100644
--- a/gcc/testsuite/g++.dg/template/crash37.C
+++ b/gcc/testsuite/g++.dg/template/crash37.C
@@ -11,7 +11,7 @@ struct coperator_stack
struct helper {};
template<class F>
-void bla(F f) // { dg-message "candidates" }
+void bla(F f) // { dg-message "candidate is" }
{
}
diff --git a/gcc/testsuite/g++.dg/template/instantiate5.C b/gcc/testsuite/g++.dg/template/instantiate5.C
index 70ed2b059f9..9cdf310c738 100644
--- a/gcc/testsuite/g++.dg/template/instantiate5.C
+++ b/gcc/testsuite/g++.dg/template/instantiate5.C
@@ -13,7 +13,7 @@ int baz() { return A<0>::i; }
struct B
{
- static void foo (int); // { dg-message "candidates" }
+ static void foo (int); // { dg-message "candidate is" }
};
template <typename T> struct C
diff --git a/gcc/testsuite/g++.dg/template/local6.C b/gcc/testsuite/g++.dg/template/local6.C
index 7094e7480d8..c691c4c789b 100644
--- a/gcc/testsuite/g++.dg/template/local6.C
+++ b/gcc/testsuite/g++.dg/template/local6.C
@@ -1,5 +1,5 @@
template <class T> struct PCVector2
-{ // { dg-message "candidates" }
+{ // { dg-message "candidate is" }
template <class T2> PCVector2(const PCVector2<T> &cv) ;
PCVector2<T> operator- (const PCVector2<T> &ov) const
diff --git a/gcc/testsuite/g++.dg/template/ptrmem4.C b/gcc/testsuite/g++.dg/template/ptrmem4.C
index 0ea73a13106..b1422c3e811 100644
--- a/gcc/testsuite/g++.dg/template/ptrmem4.C
+++ b/gcc/testsuite/g++.dg/template/ptrmem4.C
@@ -6,7 +6,7 @@
// Pointer to member function template argument deduction ICE.
-template <class CONT> void queryAliases(CONT& fill_me); // { dg-message "candidates" }
+template <class CONT> void queryAliases(CONT& fill_me); // { dg-message "candidate is" }
struct SpyExample
{
diff --git a/gcc/testsuite/g++.dg/template/qualttp5.C b/gcc/testsuite/g++.dg/template/qualttp5.C
index 7d1062e3a8f..fc93f462835 100644
--- a/gcc/testsuite/g++.dg/template/qualttp5.C
+++ b/gcc/testsuite/g++.dg/template/qualttp5.C
@@ -4,7 +4,7 @@
template <class U> struct A
{
- template <class T> class B {}; // { dg-message "candidates" }
+ template <class T> class B {}; // { dg-message "candidate is" }
};
template <template <class> class TT> void f()
diff --git a/gcc/testsuite/g++.dg/torture/pr41183.C b/gcc/testsuite/g++.dg/torture/pr41183.C
new file mode 100644
index 00000000000..df3e303410e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr41183.C
@@ -0,0 +1,30 @@
+// PR c++/41183
+// { dg-do compile }
+
+void foo (const char *);
+
+template <int *>
+struct A
+{
+ template <typename T> A (const int &, T);
+ int i;
+};
+
+template <int *X>
+template <typename T>
+A<X>::A (const int &j, T) : i(j)
+{
+ foo (0);
+ foo (0);
+ foo (__PRETTY_FUNCTION__);
+}
+
+int N;
+
+struct B
+{
+ B ();
+ A<&N> a;
+};
+
+B::B() : a(N, 0) {}
diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C b/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C
index deedfba75a2..3441ae5bed0 100644
--- a/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C
+++ b/gcc/testsuite/g++.old-deja/g++.benjamin/15800-1.C
@@ -5,7 +5,7 @@
struct panama {
panama();
panama(panama &);
- panama& operator=(panama&); // { dg-message "candidates" }
+ panama& operator=(panama&); // { dg-message "candidate is" }
};
extern panama dig();
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C b/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C
index 638ba9f9252..e77c437a6d0 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C
@@ -38,7 +38,7 @@ struct bar
class nnyacc
{
public:
- static void assign(void*& lval, void*& rval); // { dg-message "candidates" }
+ static void assign(void*& lval, void*& rval); // { dg-message "candidate is" }
};
void
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C
index 1738f6545c0..93b241b9e04 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C
@@ -4,6 +4,6 @@
inline int i;// { dg-error "" } .*
struct c { inline int i; };// { dg-error "" } .*
int foo (inline int i);// { dg-error "" } .*
-inline class c; // { dg-error "" } inline
+inline class c; // { dg-error "'inline' can only be specified for functions" } inline
inline typedef int t; // { dg-error "" } inline
-class d { inline friend class c; }; // { dg-error "" } inline
+class d { inline friend class c; }; // { dg-error "'inline' can only be specified for functions" } inline
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C
index 92b04c4d02b..328bcdfe2ce 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C
@@ -9,7 +9,7 @@ public:
class Bar : public Foo
{
public:
- int f (int); // { dg-message "candidates" }
+ int f (int); // { dg-message "candidate is" }
};
int main ()
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C
index d832a4b47c1..7a1941cac4e 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C
@@ -5,7 +5,7 @@
class B
{
public:
- static void WantsNew (NewObject creator); // { dg-message "candidates" }
+ static void WantsNew (NewObject creator); // { dg-message "candidate is" }
};
class A
diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C
index c6415e1ac0d..9b9ae994de9 100644
--- a/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C
+++ b/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C
@@ -16,7 +16,7 @@ int struct0::*dmp;
void global_function_0 ()
{
- i = *dmp; // { dg-error "" } causes abort
+ i = *dmp; // { dg-error "invalid use of unary '\\\*' on pointer to member" } causes abort
}
int main () { return 0; }
diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C
index 6802299b6b0..3309c886384 100644
--- a/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C
+++ b/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C
@@ -41,8 +41,8 @@ void struct0::function_member ()
i = (this->*fmp) (); // perfectly legal - for both cfront and g++
i = this->*dmp; // perfectly legal - for both cfront and g++
- i = (*fmp) (); // { dg-error "" }
- i = *dmp; // { dg-error "" }
+ i = (*fmp) (); // { dg-error "invalid use of unary '\\\*' on pointer to member" }
+ i = *dmp; // { dg-error "invalid use of unary '\\\*' on pointer to member" }
}
int main () { return 0; }
diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C
index f1da7fba722..5038f23b16c 100644
--- a/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C
+++ b/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C
@@ -19,7 +19,7 @@ struct B {
};
struct D : public B {
- int f(struct B); // { dg-message "candidates" } referred to below
+ int f(struct B); // { dg-message "candidate is" } referred to below
};
void h(D* pd)
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C
index 78e46e1cd38..1e64693d804 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C
@@ -14,7 +14,7 @@ public:
class Something {
public:
- void DoSomething(Ding A); // { dg-message "candidates" } referred to
+ void DoSomething(Ding A); // { dg-message "candidate is" } referred to
};
void DoSomething(Ding A);
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C
index d5763748f61..9e6ae0f6898 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C
@@ -3,7 +3,7 @@
void f (char *);
struct A {
- void f (); // { dg-message "candidates" } referred to
+ void f (); // { dg-message "candidate is" } referred to
};
struct B : public A {
void g (char *);
diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg11.C b/gcc/testsuite/g++.old-deja/g++.law/arg11.C
index b6a0194f314..01331535ee2 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/arg11.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/arg11.C
@@ -9,7 +9,7 @@ struct String { String(const char*); };
struct Ack { Ack(String); };
-struct S { void method(Ack); }; // { dg-message "candidates" } referenced below
+struct S { void method(Ack); }; // { dg-message "candidate is" } referenced below
void function(Ack);
diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm9.C b/gcc/testsuite/g++.old-deja/g++.law/arm9.C
index 7c7cfea0c8f..b8128c6f686 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/arm9.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/arm9.C
@@ -19,7 +19,7 @@ class B : public A {
public:
void set (f2 f);
};
-void B::set (f2 f) { std::cout << "called B\n";} // { dg-message "candidates" }
+void B::set (f2 f) { std::cout << "called B\n";} // { dg-message "candidate is" }
int main() {
B b;
diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum4.C b/gcc/testsuite/g++.old-deja/g++.law/enum4.C
index 742f54bc459..37836595b2f 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/enum4.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/enum4.C
@@ -11,7 +11,7 @@ enum Enum {enumerator1, enumerator2};
struct Struct
{
int i;
- int getI(Enum) {return i;} // { dg-message "candidates" }
+ int getI(Enum) {return i;} // { dg-message "candidate is" }
};
int funct (Enum)
diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators9.C b/gcc/testsuite/g++.old-deja/g++.law/operators9.C
index 8ec6825abfa..d00c707c915 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/operators9.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/operators9.C
@@ -10,7 +10,7 @@ class B
{
public:
operator=(B &); // { dg-error "no type" }
- // { dg-message "candidates" "note" { target *-*-* } 12 }
+ // { dg-message "candidate is" "note" { target *-*-* } 12 }
};
void
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net31.C b/gcc/testsuite/g++.old-deja/g++.mike/net31.C
index 6565a3697a9..8bc159b136e 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/net31.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/net31.C
@@ -40,7 +40,7 @@ foo_b& foo_c<TP>::bug_func(int x) {
static foo_b retval(m);
retval.bar_a(m);
for (register int i = 0; i < m; i++)
- retval(i) = (*(operator()(i)))(x); // { dg-error "" }
+ retval(i) = (*(operator()(i)))(x); // { dg-error "invalid use of unary '\\\*'" }
return retval;
}
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11110.C b/gcc/testsuite/g++.old-deja/g++.mike/p11110.C
index 746a57ccfd6..e234d57c323 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p11110.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p11110.C
@@ -6,7 +6,7 @@ class data;
class conatiner {
public:
virtual void* first ();
- virtual data* contents (void* i); // { dg-message "candidates" }
+ virtual data* contents (void* i); // { dg-message "candidate is" }
};
class user {
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2431.C b/gcc/testsuite/g++.old-deja/g++.mike/p2431.C
index 1d5b3974f9a..0bb2648215a 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p2431.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p2431.C
@@ -3,7 +3,7 @@
class A
{
public:
- A(A &); // { dg-message "candidates" }
+ A(A &); // { dg-message "candidate is" }
};
class B
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p438.C b/gcc/testsuite/g++.old-deja/g++.mike/p438.C
index a08a404aa91..16dc628b613 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p438.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p438.C
@@ -12,7 +12,7 @@ class C
class D
{
public:
- void a(C& b); // { dg-message "candidates" }
+ void a(C& b); // { dg-message "candidate is" }
};
void C::test() const
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9068.C b/gcc/testsuite/g++.old-deja/g++.mike/p9068.C
index aff4a6a7bc7..ff5454b2289 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p9068.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p9068.C
@@ -2,7 +2,7 @@
// prms-id: 9068
struct ostream {
- void operator<< (int); // { dg-message "candidates" } fn ref in err msg
+ void operator<< (int); // { dg-message "candidate is" } fn ref in err msg
};
class C {
diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t120.C b/gcc/testsuite/g++.old-deja/g++.niklas/t120.C
index 17eaf0743fc..bef06655220 100644
--- a/gcc/testsuite/g++.old-deja/g++.niklas/t120.C
+++ b/gcc/testsuite/g++.old-deja/g++.niklas/t120.C
@@ -3,4 +3,4 @@
typedef void (*T) (...);
void f ();
struct S { void g (T); void h() { g(f); } };// { dg-error "match" "match" }
-// { dg-message "candidates" "note" { target *-*-* } 5 }
+// { dg-message "candidate is" "note" { target *-*-* } 5 }
diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t121.C b/gcc/testsuite/g++.old-deja/g++.niklas/t121.C
index cf3373964a2..4510a280312 100644
--- a/gcc/testsuite/g++.old-deja/g++.niklas/t121.C
+++ b/gcc/testsuite/g++.old-deja/g++.niklas/t121.C
@@ -3,4 +3,4 @@
void f ();
void g1 (void (*) (...)); void h1 () { g1 (f); }// { dg-error "invalid conversion" }
struct S { void g2 (void (*) (...)); void h2 () { g2 (f); } };// { dg-error "match" "match" }
-// { dg-message "candidates" "note" { target *-*-* } 5 }
+// { dg-message "candidate is" "note" { target *-*-* } 5 }
diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash24.C b/gcc/testsuite/g++.old-deja/g++.other/crash24.C
index 9d6af1dfe87..a49ce56b1aa 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/crash24.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/crash24.C
@@ -7,7 +7,7 @@ class foo {
friend class __iterator;
typedef __iterator const_iterator;
virtual ~foo() { }
- __iterator begin(); // { dg-message "candidates" }
+ __iterator begin(); // { dg-message "candidate is" }
};
static void iteratorTest(const foo &x)
{
diff --git a/gcc/testsuite/g++.old-deja/g++.other/expr1.C b/gcc/testsuite/g++.old-deja/g++.other/expr1.C
index 1f1f60d19c2..485594dfbe3 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/expr1.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/expr1.C
@@ -3,7 +3,7 @@
// Simplified from bug report by Trevor Taylor <ttaylor@powerup.com.au>
struct T {
- int operator()(int) { } // { dg-message "candidates" }
+ int operator()(int) { } // { dg-message "candidate is" }
};
int main() {
diff --git a/gcc/testsuite/g++.old-deja/g++.other/pmf3.C b/gcc/testsuite/g++.old-deja/g++.other/pmf3.C
index d8568dd9b1b..f43ed65ef2a 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/pmf3.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/pmf3.C
@@ -3,7 +3,7 @@
// Bug: g++ was crashing after giving errors.
template<class T>
- void connect_to_method( // { dg-message "candidates are" }
+ void connect_to_method( // { dg-message "candidate is" }
T *receiver,
void (T::*method)())
{}
diff --git a/gcc/testsuite/gcc.c-torture/compile/20091215-1.c b/gcc/testsuite/gcc.c-torture/compile/20091215-1.c
new file mode 100644
index 00000000000..7862e2fb03f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20091215-1.c
@@ -0,0 +1,15 @@
+void bar ();
+
+void
+foo (void *x, short y)
+{
+ bar (x, y + 1);
+}
+
+void
+bar (x, y)
+ void *x;
+ char *y;
+{
+ baz (y);
+}
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c
index 26aa9bd8c50..bc5c7d611de 100644
--- a/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/const-1.c
@@ -1,7 +1,7 @@
/* { dg-do compile } */
-/* { dg-options "-O -gdwarf-2 -dA" } */
+/* { dg-options "-O -gdwarf-2 -dA -gno-strict-dwarf -fno-merge-debug-strings" } */
/* { dg-require-visibility "" } */
-/* { dg-final { scan-assembler "DW_AT_const_value" } } */
+/* { dg-final { scan-assembler "DW_AT_location\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_addr\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*fnx\[^\\r\\n\]*\[\\r\\n\]*\[^\\r\\n\]*DW_OP_stack_value" } } */
-extern void x() __attribute__((visibility("hidden")));
-static void (*f)() = x;
+extern void fnx() __attribute__((visibility("hidden")));
+static void (*f)() = fnx;
diff --git a/gcc/testsuite/gcc.dg/debug/tls-1.c b/gcc/testsuite/gcc.dg/debug/tls-1.c
new file mode 100644
index 00000000000..a9431ef00b6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/tls-1.c
@@ -0,0 +1,19 @@
+/* Test that optimized out __thread var doesn't have its location
+ referenced in debug info. */
+/* { dg-do link } */
+/* { dg-options "-O2" } */
+/* { dg-require-effective-target tls } */
+
+static __thread int vara;
+
+int
+foo (int b)
+{
+ return vara + b;
+}
+
+int
+main (void)
+{
+ return foo (0);
+}
diff --git a/gcc/testsuite/gcc.dg/graphite/pr42284.c b/gcc/testsuite/gcc.dg/graphite/pr42284.c
new file mode 100644
index 00000000000..854c2514fa0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/pr42284.c
@@ -0,0 +1,27 @@
+/* { dg-options "-O2 -fgraphite-identity" } */
+
+int
+huft_build (unsigned *b)
+{
+ int k;
+ for (k = 0; k <= 10; k++)
+ if (foo ());
+}
+int
+inflate_fixed ()
+{
+ int i;
+ unsigned l[288];
+ for (i = 0; i < 144; i++)
+ l[i] = 8;
+ for (; i < 256; i++)
+ l[i] = 9;
+ for (; i < 280; i++)
+ l[i] = 7;
+ for (; i < 288; i++)
+ l[i] = 8;
+ if ((i = huft_build (l)) != 0)
+ return i;
+ for (i = 0; i < 30; i++)
+ l[i] = 5;
+}
diff --git a/gcc/testsuite/gcc.dg/lto/20091216-1_0.c b/gcc/testsuite/gcc.dg/lto/20091216-1_0.c
new file mode 100644
index 00000000000..8d120224312
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/lto/20091216-1_0.c
@@ -0,0 +1,9 @@
+/* { dg-lto-do run } */
+
+asm (".globl start; start: nop");
+
+int
+main ()
+{
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/arm/pr41679.c b/gcc/testsuite/gcc.target/arm/pr41679.c
new file mode 100644
index 00000000000..8b248985fe0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr41679.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-options "-march=armv5te -g -O2" } */
+
+extern int a;
+extern char b;
+extern int foo (void);
+
+void
+test (void)
+{
+ int c;
+ b = foo () ? '~' : '\0';
+ while ((c = foo ()))
+ if (c == '7')
+ a = 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr32280-1.c b/gcc/testsuite/gcc.target/i386/pr32280-1.c
new file mode 100644
index 00000000000..1dbe2ccbb4f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr32280-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2" } */
+
+__uint128_t
+t1 (__uint128_t a)
+{
+ return a << 8;
+}
+
+__uint128_t
+t2 (__uint128_t a)
+{
+ return a >> 8;
+}
+
+/* { dg-final { scan-assembler-not "pslldq" } } */
+/* { dg-final { scan-assembler-not "psrldq" } } */
diff --git a/gcc/testsuite/gcc.target/i386/sse-12.c b/gcc/testsuite/gcc.target/i386/sse-12.c
index 4a314e842c6..77baff0f4b9 100644
--- a/gcc/testsuite/gcc.target/i386/sse-12.c
+++ b/gcc/testsuite/gcc.target/i386/sse-12.c
@@ -1,8 +1,8 @@
/* Test that {,x,e,p,t,s,w,a,b,i}mmintrin.h, xopintrin.h, mm3dnow.h,
- abmintrin.h and mm_malloc.h are usable with -O -std=c89
- -pedantic-errors. */
+ abmintrin.h, lwpintrin.h, popcntintrin.h and mm_malloc.h are usable
+ with -O -std=c89 -pedantic-errors. */
/* { dg-do compile } */
-/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mabm" } */
+/* { dg-options "-O -std=c89 -pedantic-errors -march=k8 -m3dnow -mavx -mfma4 -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-13.c b/gcc/testsuite/gcc.target/i386/sse-13.c
index 546a99fdc08..96214e02280 100644
--- a/gcc/testsuite/gcc.target/i386/sse-13.c
+++ b/gcc/testsuite/gcc.target/i386/sse-13.c
@@ -1,13 +1,14 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mabm" } */
+/* { dg-options "-O2 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -maes -mpclmul -mpopcnt -mabm -mlwp" } */
#include <mm_malloc.h>
/* Test that the intrinsics compile with optimization. All of them
are defined as inline functions in {,x,e,p,t,s,w,a,b,i}mmintrin.h,
- xopintrin.h, abmintrin.h and mm3dnow.h that reference the proper
- builtin functions. Defining away "extern" and "__inline" results
- in all of them being compiled as proper functions. */
+ xopintrin.h, abmintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h
+ that reference the proper builtin functions. Defining away
+ "extern" and "__inline" results in all of them being compiled as
+ proper functions. */
#define extern
#define __inline
@@ -127,9 +128,15 @@
#define __builtin_ia32_shufps(A, B, N) __builtin_ia32_shufps(A, B, 0)
/* xopintrin.h */
-#define __builtin_ia32_vprotbi(A, N) __builtin_ia32_vprotbi (A,1)
-#define __builtin_ia32_vprotwi(A, N) __builtin_ia32_vprotwi (A,1)
-#define __builtin_ia32_vprotdi(A, N) __builtin_ia32_vprotdi (A,1)
-#define __builtin_ia32_vprotqi(A, N) __builtin_ia32_vprotqi (A,1)
+#define __builtin_ia32_vprotbi(A, N) __builtin_ia32_vprotbi (A,1)
+#define __builtin_ia32_vprotwi(A, N) __builtin_ia32_vprotwi (A,1)
+#define __builtin_ia32_vprotdi(A, N) __builtin_ia32_vprotdi (A,1)
+#define __builtin_ia32_vprotqi(A, N) __builtin_ia32_vprotqi (A,1)
+
+/* lwpintrin.h */
+#define __builtin_ia32_lwpval32(D2, D1, F) __builtin_ia32_lwpval32 (D2, D1, 1)
+#define __builtin_ia32_lwpval64(D2, D1, F) __builtin_ia32_lwpval64 (D2, D1, 1)
+#define __builtin_ia32_lwpins32(D2, D1, F) __builtin_ia32_lwpins32 (D2, D1, 1)
+#define __builtin_ia32_lwpins64(D2, D1, F) __builtin_ia32_lwpins64 (D2, D1, 1)
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/sse-14.c b/gcc/testsuite/gcc.target/i386/sse-14.c
index 783cd0af106..c3f72e419c7 100644
--- a/gcc/testsuite/gcc.target/i386/sse-14.c
+++ b/gcc/testsuite/gcc.target/i386/sse-14.c
@@ -1,12 +1,13 @@
/* { dg-do compile } */
-/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -msse4a -maes -mpclmul" } */
+/* { dg-options "-O0 -Werror-implicit-function-declaration -march=k8 -m3dnow -mavx -mxop -msse4a -maes -mpclmul -mpopcnt -mabm -mlwp" } */
#include <mm_malloc.h>
/* Test that the intrinsics compile without optimization. All of them are
- defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h, xopintrin.h and mm3dnow.h
- that reference the proper builtin functions. Defining away "extern" and
- "__inline" results in all of them being compiled as proper functions. */
+ defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h, xopintrin.h,
+ lwpintrin.h and mm3dnow.h that reference the proper builtin functions.
+ Defining away "extern" and "__inline" results in all of them being compiled
+ as proper functions. */
#define extern
#define __inline
@@ -162,3 +163,10 @@ test_1 ( _mm_roti_epi16, __m128i, __m128i, 1)
test_1 ( _mm_roti_epi32, __m128i, __m128i, 1)
test_1 ( _mm_roti_epi64, __m128i, __m128i, 1)
+/* lwpintrin.h */
+test_2 ( __lwpval32, void, unsigned int, unsigned int, 1)
+test_2 ( __lwpins32, unsigned char, unsigned int, unsigned int, 1)
+#ifdef __x86_64__
+test_2 ( __lwpval64, void, unsigned long long, unsigned int, 1)
+test_2 ( __lwpins64, unsigned char, unsigned long long, unsigned int, 1)
+#endif
diff --git a/gcc/testsuite/gcc.target/i386/sse-22.c b/gcc/testsuite/gcc.target/i386/sse-22.c
index 541cad4d439..6d976972d28 100644
--- a/gcc/testsuite/gcc.target/i386/sse-22.c
+++ b/gcc/testsuite/gcc.target/i386/sse-22.c
@@ -4,10 +4,12 @@
#include <mm_malloc.h>
-/* Test that the intrinsics compile without optimization. All of them are
- defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h, xopintrin.h and mm3dnow.h
- that reference the proper builtin functions. Defining away "extern" and
- "__inline" results in all of them being compiled as proper functions. */
+/* Test that the intrinsics compile without optimization. All of them
+ are defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h,
+ xopintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h that
+ reference the proper builtin functions. Defining away "extern" and
+ "__inline" results in all of them being compiled as proper
+ functions. */
#define extern
#define __inline
@@ -37,7 +39,7 @@
#ifndef DIFFERENT_PRAGMAS
-#pragma GCC target ("mmx,3dnow,sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,aes,pclmul,xop")
+#pragma GCC target ("mmx,3dnow,sse,sse2,sse3,ssse3,sse4.1,sse4.2,sse4a,aes,pclmul,xop,popcnt,abm,lwp")
#endif
/* Following intrinsics require immediate arguments. They
@@ -162,10 +164,18 @@ test_2 (_mm_round_ss, __m128, __m128, __m128, 1)
/* xopintrin.h (XOP). */
#ifdef DIFFERENT_PRAGMAS
-#pragma GCC target ("xop")
+#pragma GCC target ("xop,lwp")
#endif
#include <x86intrin.h>
test_1 ( _mm_roti_epi8, __m128i, __m128i, 1)
test_1 ( _mm_roti_epi16, __m128i, __m128i, 1)
test_1 ( _mm_roti_epi32, __m128i, __m128i, 1)
test_1 ( _mm_roti_epi64, __m128i, __m128i, 1)
+
+/* lwpintrin.h (LWP). */
+test_2 ( __lwpval32, void, unsigned int, unsigned int, 1)
+test_2 ( __lwpins32, unsigned char, unsigned int, unsigned int, 1)
+#ifdef __x86_64__
+test_2 ( __lwpval64, void, unsigned long long, unsigned int, 1)
+test_2 ( __lwpins64, unsigned char, unsigned long long, unsigned int, 1)
+#endif
diff --git a/gcc/testsuite/gcc.target/i386/sse-23.c b/gcc/testsuite/gcc.target/i386/sse-23.c
index 3e0fa1f5ca4..f74d3a71f6e 100644
--- a/gcc/testsuite/gcc.target/i386/sse-23.c
+++ b/gcc/testsuite/gcc.target/i386/sse-23.c
@@ -3,10 +3,12 @@
#include <mm_malloc.h>
-/* Test that the intrinsics compile with optimization. All of them are
- defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h, xopintrin.h and mm3dnow.h
- that reference the proper builtin functions. Defining away "extern" and
- "__inline" results in all of them being compiled as proper functions. */
+/* Test that the intrinsics compile with optimization. All of them
+ are defined as inline functions in {,x,e,p,t,s,w,a}mmintrin.h,
+ xopintrin.h, lwpintrin.h, popcntintrin.h and mm3dnow.h that
+ reference the proper builtin functions. Defining away "extern" and
+ "__inline" results in all of them being compiled as proper
+ functions. */
#define extern
#define __inline
@@ -93,13 +95,52 @@
#define __builtin_ia32_vec_ext_v4hi(A, N) __builtin_ia32_vec_ext_v4hi(A, 0)
#define __builtin_ia32_shufps(A, B, N) __builtin_ia32_shufps(A, B, 0)
+/* immintrin.h */
+#define __builtin_ia32_blendpd256(X, Y, M) __builtin_ia32_blendpd256(X, Y, 1)
+#define __builtin_ia32_blendps256(X, Y, M) __builtin_ia32_blendps256(X, Y, 1)
+#define __builtin_ia32_dpps256(X, Y, M) __builtin_ia32_dpps256(X, Y, 1)
+#define __builtin_ia32_shufpd256(X, Y, M) __builtin_ia32_shufpd256(X, Y, 1)
+#define __builtin_ia32_shufps256(X, Y, M) __builtin_ia32_shufps256(X, Y, 1)
+#define __builtin_ia32_cmpsd(X, Y, O) __builtin_ia32_cmpsd(X, Y, 1)
+#define __builtin_ia32_cmpss(X, Y, O) __builtin_ia32_cmpss(X, Y, 1)
+#define __builtin_ia32_cmppd(X, Y, O) __builtin_ia32_cmppd(X, Y, 1)
+#define __builtin_ia32_cmpps(X, Y, O) __builtin_ia32_cmpps(X, Y, 1)
+#define __builtin_ia32_cmppd256(X, Y, O) __builtin_ia32_cmppd256(X, Y, 1)
+#define __builtin_ia32_cmpps256(X, Y, O) __builtin_ia32_cmpps256(X, Y, 1)
+#define __builtin_ia32_vextractf128_pd256(X, N) __builtin_ia32_vextractf128_pd256(X, 1)
+#define __builtin_ia32_vextractf128_ps256(X, N) __builtin_ia32_vextractf128_ps256(X, 1)
+#define __builtin_ia32_vextractf128_si256(X, N) __builtin_ia32_vextractf128_si256(X, 1)
+#define __builtin_ia32_vpermilpd(X, N) __builtin_ia32_vpermilpd(X, 1)
+#define __builtin_ia32_vpermilpd256(X, N) __builtin_ia32_vpermilpd256(X, 1)
+#define __builtin_ia32_vpermilps(X, N) __builtin_ia32_vpermilps(X, 1)
+#define __builtin_ia32_vpermilps256(X, N) __builtin_ia32_vpermilps256(X, 1)
+#define __builtin_ia32_vpermil2pd(X, Y, C, I) __builtin_ia32_vpermil2pd(X, Y, C, 1)
+#define __builtin_ia32_vpermil2pd256(X, Y, C, I) __builtin_ia32_vpermil2pd256(X, Y, C, 1)
+#define __builtin_ia32_vpermil2ps(X, Y, C, I) __builtin_ia32_vpermil2ps(X, Y, C, 1)
+#define __builtin_ia32_vpermil2ps256(X, Y, C, I) __builtin_ia32_vpermil2ps256(X, Y, C, 1)
+#define __builtin_ia32_vperm2f128_pd256(X, Y, C) __builtin_ia32_vperm2f128_pd256(X, Y, 1)
+#define __builtin_ia32_vperm2f128_ps256(X, Y, C) __builtin_ia32_vperm2f128_ps256(X, Y, 1)
+#define __builtin_ia32_vperm2f128_si256(X, Y, C) __builtin_ia32_vperm2f128_si256(X, Y, 1)
+#define __builtin_ia32_vinsertf128_pd256(X, Y, C) __builtin_ia32_vinsertf128_pd256(X, Y, 1)
+#define __builtin_ia32_vinsertf128_ps256(X, Y, C) __builtin_ia32_vinsertf128_ps256(X, Y, 1)
+#define __builtin_ia32_vinsertf128_si256(X, Y, C) __builtin_ia32_vinsertf128_si256(X, Y, 1)
+#define __builtin_ia32_roundpd256(V, M) __builtin_ia32_roundpd256(V, 1)
+#define __builtin_ia32_roundps256(V, M) __builtin_ia32_roundps256(V, 1)
+
/* xopintrin.h */
#define __builtin_ia32_vprotbi(A, B) __builtin_ia32_vprotbi(A,1)
#define __builtin_ia32_vprotwi(A, B) __builtin_ia32_vprotwi(A,1)
#define __builtin_ia32_vprotdi(A, B) __builtin_ia32_vprotdi(A,1)
#define __builtin_ia32_vprotqi(A, B) __builtin_ia32_vprotqi(A,1)
-#pragma GCC target ("3dnow,sse4,sse4a,aes,pclmul,xop")
+/* lwpintrin.h */
+#define __builtin_ia32_lwpval32(D2, D1, F) __builtin_ia32_lwpval32 (D2, D1, 1)
+#define __builtin_ia32_lwpval64(D2, D1, F) __builtin_ia32_lwpval64 (D2, D1, 1)
+#define __builtin_ia32_lwpins32(D2, D1, F) __builtin_ia32_lwpins32 (D2, D1, 1)
+#define __builtin_ia32_lwpins64(D2, D1, F) __builtin_ia32_lwpins64 (D2, D1, 1)
+
+#pragma GCC target ("3dnow,sse4,sse4a,aes,pclmul,xop,abm,popcnt,lwp")
#include <wmmintrin.h>
#include <smmintrin.h>
#include <mm3dnow.h>
+#include <x86intrin.h>
diff --git a/gcc/testsuite/gfortran.dg/auto_char_len_1.f90 b/gcc/testsuite/gfortran.dg/auto_char_len_1.f90
new file mode 100644
index 00000000000..628e6e9148e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/auto_char_len_1.f90
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! { dg-options "" }
+! [option to disable -pedantic as assumed character length
+! functions are obsolescent]
+!
+! PR fortran/41235
+!
+
+character(len=*) function func()
+ func = 'ABC'
+end function func
+
+subroutine test(i)
+ integer :: i
+ character(len=i), external :: func
+ print *, func()
+end subroutine test
+
+subroutine test2(i)
+ integer :: i
+ character(len=i) :: func
+ print *, func()
+end subroutine test2
+
+call test(2)
+call test2(2)
+end
diff --git a/gcc/testsuite/gfortran.dg/auto_char_len_2.f90 b/gcc/testsuite/gfortran.dg/auto_char_len_2.f90
new file mode 100644
index 00000000000..95825c4205a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/auto_char_len_2.f90
@@ -0,0 +1,25 @@
+! { dg-do compile }
+! { dg-options "-fwhole-file" }
+!
+! PR fortran/41235
+!
+
+character(len=*) function func()
+ func = 'ABC'
+end function func
+
+subroutine test(i)
+ integer :: i
+ character(len=i), external :: func
+ print *, func()
+end subroutine test
+
+subroutine test2(i)
+ integer :: i
+ character(len=i) :: func
+ print *, func()
+end subroutine test2
+
+call test(2)
+call test2(2)
+end
diff --git a/gcc/testsuite/gfortran.dg/auto_char_len_4.f90 b/gcc/testsuite/gfortran.dg/auto_char_len_4.f90
index 3749abd8ed3..6b4e26e6b45 100644
--- a/gcc/testsuite/gfortran.dg/auto_char_len_4.f90
+++ b/gcc/testsuite/gfortran.dg/auto_char_len_4.f90
@@ -1,20 +1,31 @@
! { dg-do compile }
+! { dg-options "-fwhole-file" }
+!
! Tests the fix for PR25087, in which the following invalid code
! was not detected.
!
! Contributed by Joost VandeVondele <jv244@cam.ac.uk>
!
+! Modified by Tobias Burnus to fix PR fortran/41235.
+!
+FUNCTION a()
+ CHARACTER(len=10) :: a
+ a = ''
+END FUNCTION a
+
SUBROUTINE s(n)
CHARACTER(LEN=n), EXTERNAL :: a ! { dg-error "must have an explicit interface" }
+ CHARACTER(LEN=n), EXTERNAL :: d ! { dg-error "must have an explicit interface" }
interface
function b (m) ! This is OK
CHARACTER(LEN=m) :: b
integer :: m
end function b
end interface
- write(6,*) a(n)
+ write(6,*) a()
write(6,*) b(n)
write(6,*) c()
+ write(6,*) d()
contains
function c () ! This is OK
CHARACTER(LEN=n):: c
@@ -22,3 +33,7 @@ contains
end function c
END SUBROUTINE s
+FUNCTION d()
+ CHARACTER(len=99) :: d
+ d = ''
+END FUNCTION d
diff --git a/gcc/testsuite/gfortran.dg/boz_15.f90 b/gcc/testsuite/gfortran.dg/boz_15.f90
index 40ad514cffd..f481f16e80e 100644
--- a/gcc/testsuite/gfortran.dg/boz_15.f90
+++ b/gcc/testsuite/gfortran.dg/boz_15.f90
@@ -8,7 +8,7 @@
! which needs integer(16) support.
!
implicit none
-character(len=255) :: str
+character(len=256) :: str
integer,parameter :: xp = selected_real_kind (precision (0.0d0)+1)
real(xp) :: r1,r2
complex(xp) :: z1,z2
@@ -16,8 +16,8 @@ complex(xp) :: z1,z2
r2 = 5.0_xp
r1 = 2.0_xp
! Real B(OZ)
-write(str,'(b126)') r1
-read (str,'(b126)') r2
+write(str,'(b128)') r1
+read (str,'(b128)') r2
if(r2 /= r1) call abort()
! Real (B)O(Z)
r2 = 5.0_xp
@@ -33,8 +33,8 @@ if(r2 /= r1) call abort()
z2 = cmplx(5.0_xp,7.0_xp)
z1 = cmplx(2.0_xp,3.0_xp)
! Complex B(OZ)
-write(str,'(2b126)') z1
-read (str,'(2b126)') z2
+write(str,'(2b128)') z1
+read (str,'(2b128)') z2
if(z2 /= z1) call abort()
! Complex (B)O(Z)
z2 = cmplx(5.0_xp,7.0_xp)
diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_6.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_6.f03
new file mode 100644
index 00000000000..e2d880e0efa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_6.f03
@@ -0,0 +1,69 @@
+! { dg-do run }
+!
+! PR 42144: [OOP] deferred TBPs do not work
+!
+! Contributed by Damian Rouson <damian@rouson.net>
+
+module field_module
+ implicit none
+ private
+ public :: field
+ type ,abstract :: field
+ end type
+end module
+
+module periodic_5th_order_module
+ use field_module ,only : field
+ implicit none
+ type ,extends(field) :: periodic_5th_order
+ end type
+end module
+
+module field_factory_module
+ implicit none
+ private
+ public :: field_factory
+ type, abstract :: field_factory
+ contains
+ procedure(create_interface), deferred :: create
+ end type
+ abstract interface
+ function create_interface(this)
+ use field_module ,only : field
+ import :: field_factory
+ class(field_factory), intent(in) :: this
+ class(field) ,pointer :: create_interface
+ end function
+ end interface
+end module
+
+module periodic_5th_factory_module
+ use field_factory_module , only : field_factory
+ implicit none
+ private
+ public :: periodic_5th_factory
+ type, extends(field_factory) :: periodic_5th_factory
+ contains
+ procedure :: create=>new_periodic_5th_order
+ end type
+contains
+ function new_periodic_5th_order(this)
+ use field_module ,only : field
+ use periodic_5th_order_module ,only : periodic_5th_order
+ class(periodic_5th_factory), intent(in) :: this
+ class(field) ,pointer :: new_periodic_5th_order
+ end function
+end module
+
+program main
+ use field_module ,only : field
+ use field_factory_module ,only : field_factory
+ use periodic_5th_factory_module ,only : periodic_5th_factory
+ implicit none
+ class(field) ,pointer :: u
+ class(field_factory), allocatable :: field_creator
+ allocate (periodic_5th_factory :: field_creator)
+ u => field_creator%create()
+end program
+
+! { dg-final { cleanup-modules "field_module periodic_5th_order_module field_factory_module periodic_5th_factory_module" } }
diff --git a/gcc/testsuite/gfortran.dg/function_kinds_5.f90 b/gcc/testsuite/gfortran.dg/function_kinds_5.f90
index fde5bef12f8..e48484ec30d 100644
--- a/gcc/testsuite/gfortran.dg/function_kinds_5.f90
+++ b/gcc/testsuite/gfortran.dg/function_kinds_5.f90
@@ -5,6 +5,6 @@
!
! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
!
-real (bad_kind(0d0)) function foo () ! { dg-error "must be an intrinsic or" }
+real (bad_kind(0d0)) function foo () ! { dg-error "must be an intrinsic function" }
foo = real (kind (foo))
end function
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr42185.f90 b/gcc/testsuite/gfortran.dg/graphite/pr42185.f90
new file mode 100644
index 00000000000..0918f72874c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/graphite/pr42185.f90
@@ -0,0 +1,27 @@
+! { dg-compile }
+! { dg-options "-fgraphite -O -ffast-math" }
+
+MODULE powell
+ INTEGER, PARAMETER :: dp=8
+CONTAINS
+ SUBROUTINE trsapp (n,npt,xopt,xpt,gq,hq,pq,delta,step,d,g,hd,hs,crvmin)
+ REAL(dp), DIMENSION(*), INTENT(INOUT) :: step, d, g, hd, hs
+ LOGICAL :: jump1, jump2
+ REAL(dp) :: alpha, angle, angtest, bstep, cf, cth, dd, delsq, dg, dhd, &
+ reduc, sg, sgk, shs, ss, sth, temp, tempa, tempb
+ DO i=1,n
+ dd=dd+d(i)**2
+ END DO
+ mainloop : DO
+ IF ( .NOT. jump2 ) THEN
+ IF ( .NOT. jump1 ) THEN
+ bstep=temp/(ds+SQRT(ds*ds+dd*temp))
+ IF (alpha < bstep) THEN
+ IF (ss < delsq) CYCLE mainloop
+ END IF
+ IF (gg <= 1.0e-4_dp*ggbeg) EXIT mainloop
+ END IF
+ END IF
+ END DO mainloop
+ END SUBROUTINE trsapp
+END MODULE powell
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90 b/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90
index 8f406fecaa8..9c97b7eaa5d 100644
--- a/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90
+++ b/gcc/testsuite/gfortran.dg/intrinsic_std_1.f90
@@ -32,7 +32,7 @@ END SUBROUTINE implicit_type
SUBROUTINE specification_expression
CHARACTER(KIND=selected_char_kind("ascii")) :: x
-! { dg-error "specification function" "" { target "*-*-*" } 34 }
+! { dg-error "must be an intrinsic function" "" { target "*-*-*" } 34 }
! { dg-warning "Fortran 2003" "" { target "*-*-*" } 34 }
END SUBROUTINE specification_expression
diff --git a/gcc/testsuite/gfortran.dg/iso_c_binding_init_expr.f03 b/gcc/testsuite/gfortran.dg/iso_c_binding_init_expr.f03
new file mode 100644
index 00000000000..840b60e4eb2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/iso_c_binding_init_expr.f03
@@ -0,0 +1,11 @@
+! { dg-do "compile" }
+! PR fortran/42354
+
+use iso_c_binding
+implicit none
+integer, target :: a
+type t
+ type(c_ptr) :: ptr = c_loc(a) ! { dg-error "must be an intrinsic function" }
+end type t
+type(c_ptr) :: ptr2 = c_loc(a) ! { dg-error "must be an intrinsic function" }
+end
diff --git a/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90 b/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90
index a7b7ae7d895..59bc18f1f6f 100644
--- a/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90
+++ b/gcc/testsuite/gfortran.dg/selected_char_kind_3.f90
@@ -4,7 +4,7 @@
! Check that SELECTED_CHAR_KIND is rejected with -std=f95
!
implicit none
- character(kind=selected_char_kind("ascii")) :: s ! { dg-error "must be an intrinsic or a specification function" }
+ character(kind=selected_char_kind("ascii")) :: s ! { dg-error "must be an intrinsic function" }
s = "" ! { dg-error "has no IMPLICIT type" }
print *, s
end
diff --git a/gcc/testsuite/objc/execute/forward-1.x b/gcc/testsuite/objc/execute/forward-1.x
index 2b7ca2a8e68..8d4bcf5ff45 100644
--- a/gcc/testsuite/objc/execute/forward-1.x
+++ b/gcc/testsuite/objc/execute/forward-1.x
@@ -1,8 +1,6 @@
load_lib target-supports.exp
# XFAIL: PR libobjc/36610, for targets which pass arguments via registers
-# For powerpc-darwin it fails with -fgnu-runtime, passes with -fnext-runtime,
-# but that would be too ugly to handle; let it fail there.
if { ([istarget x86_64-*-linux*] && [check_effective_target_lp64] )
|| [istarget powerpc*-*-linux*]
@@ -15,4 +13,21 @@ if { ([istarget x86_64-*-linux*] && [check_effective_target_lp64] )
set torture_execute_xfail "*-*-*"
}
+# For darwin and alpha-linux it fails with -fgnu-runtime,
+# passes with -fnext-runtime.
+
+if { ([istarget x86_64-*-darwin*] && [check_effective_target_lp64] )
+ || [istarget powerpc*-*-darwin*]
+ || [istarget alpha*-*-linux*] } {
+ set torture_eval_before_execute {
+ global compiler_conditional_xfail_data
+ set compiler_conditional_xfail_data {
+ "Target fails with -fgnu-runtime" \
+ "*-*-*" \
+ { "-fgnu-runtime" } \
+ { "" }
+ }
+ }
+}
+
return 0
diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c
index 9711e20b5be..18ed4ed2a38 100644
--- a/gcc/tree-chrec.c
+++ b/gcc/tree-chrec.c
@@ -1293,6 +1293,8 @@ keep_cast:
if (use_overflow_semantics
&& (TREE_CODE (chrec) == PLUS_EXPR
|| TREE_CODE (chrec) == MINUS_EXPR)
+ && TREE_CODE (type) == INTEGER_TYPE
+ && TREE_CODE (ct) == INTEGER_TYPE
&& TYPE_PRECISION (type) > TYPE_PRECISION (ct)
&& TYPE_OVERFLOW_UNDEFINED (ct))
res = fold_build2 (TREE_CODE (chrec), type,
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index 1b0421c5ef0..dbdd3237d5e 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -4630,70 +4630,6 @@ debug_rdg (struct graph *rdg)
dump_rdg (stderr, rdg);
}
-static void
-dot_rdg_1 (FILE *file, struct graph *rdg)
-{
- int i;
-
- fprintf (file, "digraph RDG {\n");
-
- for (i = 0; i < rdg->n_vertices; i++)
- {
- struct vertex *v = &(rdg->vertices[i]);
- struct graph_edge *e;
-
- /* Highlight reads from memory. */
- if (RDG_MEM_READS_STMT (rdg, i))
- fprintf (file, "%d [style=filled, fillcolor=green]\n", i);
-
- /* Highlight stores to memory. */
- if (RDG_MEM_WRITE_STMT (rdg, i))
- fprintf (file, "%d [style=filled, fillcolor=red]\n", i);
-
- if (v->succ)
- for (e = v->succ; e; e = e->succ_next)
- switch (RDGE_TYPE (e))
- {
- case input_dd:
- fprintf (file, "%d -> %d [label=input] \n", i, e->dest);
- break;
-
- case output_dd:
- fprintf (file, "%d -> %d [label=output] \n", i, e->dest);
- break;
-
- case flow_dd:
- /* These are the most common dependences: don't print these. */
- fprintf (file, "%d -> %d \n", i, e->dest);
- break;
-
- case anti_dd:
- fprintf (file, "%d -> %d [label=anti] \n", i, e->dest);
- break;
-
- default:
- gcc_unreachable ();
- }
- }
-
- fprintf (file, "}\n\n");
-}
-
-/* Display SCOP using dotty. */
-
-void
-dot_rdg (struct graph *rdg)
-{
- FILE *file = fopen ("/tmp/rdg.dot", "w");
- gcc_assert (file != NULL);
-
- dot_rdg_1 (file, rdg);
- fclose (file);
-
- system ("dotty /tmp/rdg.dot");
-}
-
-
/* This structure is used for recording the mapping statement index in
the RDG. */
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
index e945ecb464d..678eb10cc18 100644
--- a/gcc/tree-data-ref.h
+++ b/gcc/tree-data-ref.h
@@ -504,7 +504,6 @@ void dump_rdg_component (FILE *, struct graph *, int, bitmap);
void debug_rdg_component (struct graph *, int);
void dump_rdg (FILE *, struct graph *);
void debug_rdg (struct graph *);
-void dot_rdg (struct graph *);
int rdg_vertex_for_stmt (struct graph *, gimple);
/* Data dependence type. */
diff --git a/gcc/tree.c b/gcc/tree.c
index 769b332e244..7fa7649d2f9 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -4152,13 +4152,10 @@ free_lang_data_in_binfo (tree binfo)
gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
- BINFO_OFFSET (binfo) = NULL_TREE;
BINFO_VTABLE (binfo) = NULL_TREE;
- BINFO_VPTR_FIELD (binfo) = NULL_TREE;
BINFO_BASE_ACCESSES (binfo) = NULL;
BINFO_INHERITANCE_CHAIN (binfo) = NULL_TREE;
BINFO_SUBVTT_INDEX (binfo) = NULL_TREE;
- BINFO_VPTR_FIELD (binfo) = NULL_TREE;
for (i = 0; VEC_iterate (tree, BINFO_BASE_BINFOS (binfo), i, t); i++)
free_lang_data_in_binfo (t);
@@ -4253,7 +4250,8 @@ free_lang_data_in_type (tree type)
}
TYPE_CONTEXT (type) = NULL_TREE;
- TYPE_STUB_DECL (type) = NULL_TREE;
+ if (debug_info_level < DINFO_LEVEL_TERSE)
+ TYPE_STUB_DECL (type) = NULL_TREE;
}
@@ -4380,29 +4378,16 @@ free_lang_data_in_decl (tree decl)
}
}
- if (TREE_CODE (decl) == PARM_DECL
- || TREE_CODE (decl) == FIELD_DECL
- || TREE_CODE (decl) == RESULT_DECL)
- {
- tree unit_size = DECL_SIZE_UNIT (decl);
- tree size = DECL_SIZE (decl);
- if ((unit_size && TREE_CODE (unit_size) != INTEGER_CST)
- || (size && TREE_CODE (size) != INTEGER_CST))
- {
- DECL_SIZE_UNIT (decl) = NULL_TREE;
- DECL_SIZE (decl) = NULL_TREE;
- }
+ /* ??? We could free non-constant DECL_SIZE, DECL_SIZE_UNIT
+ and DECL_FIELD_OFFSET. But it's cheap enough to not do
+ that and refrain from adding workarounds to dwarf2out.c */
- if (TREE_CODE (decl) == FIELD_DECL
- && DECL_FIELD_OFFSET (decl)
- && TREE_CODE (DECL_FIELD_OFFSET (decl)) != INTEGER_CST)
- DECL_FIELD_OFFSET (decl) = NULL_TREE;
+ /* DECL_FCONTEXT is only used for debug info generation. */
+ if (TREE_CODE (decl) == FIELD_DECL
+ && debug_info_level < DINFO_LEVEL_TERSE)
+ DECL_FCONTEXT (decl) = NULL_TREE;
- /* DECL_FCONTEXT is only used for debug info generation. */
- if (TREE_CODE (decl) == FIELD_DECL)
- DECL_FCONTEXT (decl) = NULL_TREE;
- }
- else if (TREE_CODE (decl) == FUNCTION_DECL)
+ if (TREE_CODE (decl) == FUNCTION_DECL)
{
if (gimple_has_body_p (decl))
{
@@ -4977,13 +4962,6 @@ free_lang_data (void)
diagnostic_finalizer (global_dc) = default_diagnostic_finalizer;
diagnostic_format_decoder (global_dc) = default_tree_printer;
- /* FIXME. We remove sufficient language data that the debug
- info writer gets completely confused. Disable debug information
- for now. */
- debug_info_level = DINFO_LEVEL_NONE;
- write_symbols = NO_DEBUG;
- debug_hooks = &do_nothing_debug_hooks;
-
return 0;
}
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 8267df825ee..db7778b8e74 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -4375,19 +4375,19 @@ replace_expr_with_values (rtx loc)
MO_CLOBBER if no micro operation is to be generated. */
static enum micro_operation_type
-use_type (rtx *loc, struct count_use_info *cui, enum machine_mode *modep)
+use_type (rtx loc, struct count_use_info *cui, enum machine_mode *modep)
{
tree expr;
cselib_val *val;
if (cui && cui->sets)
{
- if (GET_CODE (*loc) == VAR_LOCATION)
+ if (GET_CODE (loc) == VAR_LOCATION)
{
- if (track_expr_p (PAT_VAR_LOCATION_DECL (*loc), false))
+ if (track_expr_p (PAT_VAR_LOCATION_DECL (loc), false))
{
- rtx ploc = PAT_VAR_LOCATION_LOC (*loc);
- cselib_val *val = cselib_lookup (ploc, GET_MODE (*loc), 1);
+ rtx ploc = PAT_VAR_LOCATION_LOC (loc);
+ cselib_val *val = cselib_lookup (ploc, GET_MODE (loc), 1);
/* ??? flag_float_store and volatile mems are never
given values, but we could in theory use them for
@@ -4399,15 +4399,15 @@ use_type (rtx *loc, struct count_use_info *cui, enum machine_mode *modep)
return MO_CLOBBER;
}
- if ((REG_P (*loc) || MEM_P (*loc))
- && (val = find_use_val (*loc, GET_MODE (*loc), cui)))
+ if ((REG_P (loc) || MEM_P (loc))
+ && (val = find_use_val (loc, GET_MODE (loc), cui)))
{
if (modep)
- *modep = GET_MODE (*loc);
+ *modep = GET_MODE (loc);
if (cui->store_p)
{
- if (REG_P (*loc)
- || cselib_lookup (XEXP (*loc, 0), GET_MODE (*loc), 0))
+ if (REG_P (loc)
+ || cselib_lookup (XEXP (loc, 0), GET_MODE (loc), 0))
return MO_VAL_SET;
}
else if (!cselib_preserved_value_p (val))
@@ -4415,31 +4415,31 @@ use_type (rtx *loc, struct count_use_info *cui, enum machine_mode *modep)
}
}
- if (REG_P (*loc))
+ if (REG_P (loc))
{
- gcc_assert (REGNO (*loc) < FIRST_PSEUDO_REGISTER);
+ gcc_assert (REGNO (loc) < FIRST_PSEUDO_REGISTER);
- expr = REG_EXPR (*loc);
+ expr = REG_EXPR (loc);
if (!expr)
return MO_USE_NO_VAR;
else if (target_for_debug_bind (var_debug_decl (expr)))
return MO_CLOBBER;
- else if (track_loc_p (*loc, expr, REG_OFFSET (*loc),
+ else if (track_loc_p (loc, expr, REG_OFFSET (loc),
false, modep, NULL))
return MO_USE;
else
return MO_USE_NO_VAR;
}
- else if (MEM_P (*loc))
+ else if (MEM_P (loc))
{
- expr = MEM_EXPR (*loc);
+ expr = MEM_EXPR (loc);
if (!expr)
return MO_CLOBBER;
else if (target_for_debug_bind (var_debug_decl (expr)))
return MO_CLOBBER;
- else if (track_loc_p (*loc, expr, INT_MEM_OFFSET (*loc),
+ else if (track_loc_p (loc, expr, INT_MEM_OFFSET (loc),
false, modep, NULL))
return MO_USE;
else
@@ -4467,37 +4467,38 @@ log_op_type (rtx x, basic_block bb, rtx insn,
INSN is instruction which the LOC is part of. */
static int
-count_uses (rtx *loc, void *cuip)
+count_uses (rtx *ploc, void *cuip)
{
+ rtx loc = *ploc;
struct count_use_info *cui = (struct count_use_info *) cuip;
enum micro_operation_type mopt = use_type (loc, cui, NULL);
if (mopt != MO_CLOBBER)
{
cselib_val *val;
- enum machine_mode mode = GET_MODE (*loc);
+ enum machine_mode mode = GET_MODE (loc);
VTI (cui->bb)->n_mos++;
if (dump_file && (dump_flags & TDF_DETAILS))
- log_op_type (*loc, cui->bb, cui->insn, mopt, dump_file);
+ log_op_type (loc, cui->bb, cui->insn, mopt, dump_file);
switch (mopt)
{
case MO_VAL_LOC:
- loc = &PAT_VAR_LOCATION_LOC (*loc);
- if (VAR_LOC_UNKNOWN_P (*loc))
+ loc = PAT_VAR_LOCATION_LOC (loc);
+ if (VAR_LOC_UNKNOWN_P (loc))
break;
/* Fall through. */
case MO_VAL_USE:
case MO_VAL_SET:
- if (MEM_P (*loc)
- && !REG_P (XEXP (*loc, 0)) && !MEM_P (XEXP (*loc, 0)))
+ if (MEM_P (loc)
+ && !REG_P (XEXP (loc, 0)) && !MEM_P (XEXP (loc, 0)))
{
enum machine_mode address_mode
- = targetm.addr_space.address_mode (MEM_ADDR_SPACE (*loc));
- val = cselib_lookup (XEXP (*loc, 0), address_mode, false);
+ = targetm.addr_space.address_mode (MEM_ADDR_SPACE (loc));
+ val = cselib_lookup (XEXP (loc, 0), address_mode, false);
if (val && !cselib_preserved_value_p (val))
{
@@ -4506,9 +4507,30 @@ count_uses (rtx *loc, void *cuip)
}
}
- val = find_use_val (*loc, mode, cui);
+ val = find_use_val (loc, mode, cui);
if (val)
- cselib_preserve_value (val);
+ {
+ if (mopt == MO_VAL_SET
+ && GET_CODE (PATTERN (cui->insn)) == COND_EXEC
+ && (REG_P (loc)
+ || (MEM_P (loc)
+ && (use_type (loc, NULL, NULL) == MO_USE
+ || cui->sets))))
+ {
+ cselib_val *oval = cselib_lookup (loc, GET_MODE (loc), 0);
+
+ gcc_assert (oval != val);
+ gcc_assert (REG_P (loc) || MEM_P (loc));
+
+ if (!cselib_preserved_value_p (oval))
+ {
+ VTI (cui->bb)->n_mos++;
+ cselib_preserve_value (oval);
+ }
+ }
+
+ cselib_preserve_value (val);
+ }
else
gcc_assert (mopt == MO_VAL_LOC);
@@ -4590,8 +4612,9 @@ count_with_sets (rtx insn, struct cselib_set *sets, int n_sets)
to VTI (bb)->mos. INSN is instruction which the LOC is part of. */
static int
-add_uses (rtx *loc, void *data)
+add_uses (rtx *ploc, void *data)
{
+ rtx loc = *ploc;
enum machine_mode mode = VOIDmode;
struct count_use_info *cui = (struct count_use_info *)data;
enum micro_operation_type type = use_type (loc, cui, &mode);
@@ -4602,12 +4625,12 @@ add_uses (rtx *loc, void *data)
micro_operation *mo = VTI (bb)->mos + VTI (bb)->n_mos++;
mo->type = type;
- mo->u.loc = type == MO_USE ? var_lowpart (mode, *loc) : *loc;
+ mo->u.loc = type == MO_USE ? var_lowpart (mode, loc) : loc;
mo->insn = cui->insn;
if (type == MO_VAL_LOC)
{
- rtx oloc = *loc;
+ rtx oloc = loc;
rtx vloc = PAT_VAR_LOCATION_LOC (oloc);
cselib_val *val;
@@ -4655,7 +4678,7 @@ add_uses (rtx *loc, void *data)
oloc = gen_rtx_CONCAT (mode, val->val_rtx, oloc);
- type2 = use_type (&vloc, 0, &mode2);
+ type2 = use_type (vloc, 0, &mode2);
gcc_assert (type2 == MO_USE || type2 == MO_USE_NO_VAR
|| type2 == MO_CLOBBER);
@@ -4679,8 +4702,8 @@ add_uses (rtx *loc, void *data)
{
enum machine_mode mode2 = VOIDmode;
enum micro_operation_type type2;
- cselib_val *val = find_use_val (*loc, GET_MODE (*loc), cui);
- rtx vloc, oloc = *loc, nloc;
+ cselib_val *val = find_use_val (loc, GET_MODE (loc), cui);
+ rtx vloc, oloc = loc, nloc;
gcc_assert (cui->sets);
@@ -4718,7 +4741,7 @@ add_uses (rtx *loc, void *data)
|| type2 == MO_CLOBBER);
if (type2 == MO_USE)
- vloc = var_lowpart (mode2, *loc);
+ vloc = var_lowpart (mode2, loc);
else
vloc = oloc;
@@ -4732,7 +4755,7 @@ add_uses (rtx *loc, void *data)
*/
- nloc = replace_expr_with_values (*loc);
+ nloc = replace_expr_with_values (loc);
if (!nloc)
nloc = oloc;
@@ -4781,7 +4804,7 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
basic_block bb = cui->bb;
micro_operation *mo;
rtx oloc = loc, nloc, src = NULL;
- enum micro_operation_type type = use_type (&loc, cui, &mode);
+ enum micro_operation_type type = use_type (loc, cui, &mode);
bool track_p = false;
cselib_val *v;
bool resolve, preserve;
@@ -4796,7 +4819,7 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
mo = VTI (bb)->mos + VTI (bb)->n_mos++;
if ((GET_CODE (expr) == CLOBBER && type != MO_VAL_SET)
- || !(track_p = use_type (&loc, NULL, &mode2) == MO_USE)
+ || !(track_p = use_type (loc, NULL, &mode2) == MO_USE)
|| GET_CODE (expr) == CLOBBER)
{
mo->type = MO_CLOBBER;
@@ -4815,19 +4838,21 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
}
else
{
+ rtx xexpr = CONST_CAST_RTX (expr);
+
if (SET_SRC (expr) != src)
- expr = gen_rtx_SET (VOIDmode, loc, src);
+ xexpr = gen_rtx_SET (VOIDmode, loc, src);
if (same_variable_part_p (src, REG_EXPR (loc), REG_OFFSET (loc)))
mo->type = MO_COPY;
else
mo->type = MO_SET;
- mo->u.loc = CONST_CAST_RTX (expr);
+ mo->u.loc = xexpr;
}
}
mo->insn = cui->insn;
}
else if (MEM_P (loc)
- && ((track_p = use_type (&loc, NULL, &mode2) == MO_USE)
+ && ((track_p = use_type (loc, NULL, &mode2) == MO_USE)
|| cui->sets))
{
mo = VTI (bb)->mos + VTI (bb)->n_mos++;
@@ -4872,15 +4897,17 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
}
else
{
+ rtx xexpr = CONST_CAST_RTX (expr);
+
if (SET_SRC (expr) != src)
- expr = gen_rtx_SET (VOIDmode, loc, src);
- if (same_variable_part_p (SET_SRC (expr),
+ xexpr = gen_rtx_SET (VOIDmode, loc, src);
+ if (same_variable_part_p (SET_SRC (xexpr),
MEM_EXPR (loc),
INT_MEM_OFFSET (loc)))
mo->type = MO_COPY;
else
mo->type = MO_SET;
- mo->u.loc = CONST_CAST_RTX (expr);
+ mo->u.loc = xexpr;
}
}
mo->insn = cui->insn;
@@ -4899,9 +4926,41 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
if (nloc)
oloc = nloc;
- if (resolve && GET_CODE (mo->u.loc) == SET)
+ if (GET_CODE (PATTERN (cui->insn)) == COND_EXEC)
{
- nloc = replace_expr_with_values (SET_SRC (mo->u.loc));
+ cselib_val *oval = cselib_lookup (oloc, GET_MODE (oloc), 0);
+
+ gcc_assert (oval != v);
+ gcc_assert (REG_P (oloc) || MEM_P (oloc));
+
+ if (!cselib_preserved_value_p (oval))
+ {
+ micro_operation *nmo = VTI (bb)->mos + VTI (bb)->n_mos++;
+
+ cselib_preserve_value (oval);
+
+ nmo->type = MO_VAL_USE;
+ nmo->u.loc = gen_rtx_CONCAT (mode, oval->val_rtx, oloc);
+ VAL_NEEDS_RESOLUTION (nmo->u.loc) = 1;
+ nmo->insn = mo->insn;
+
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ log_op_type (nmo->u.loc, cui->bb, cui->insn,
+ nmo->type, dump_file);
+ }
+
+ resolve = false;
+ }
+ else if (resolve && GET_CODE (mo->u.loc) == SET)
+ {
+ nloc = replace_expr_with_values (SET_SRC (expr));
+
+ /* Avoid the mode mismatch between oexpr and expr. */
+ if (!nloc && mode != mode2)
+ {
+ nloc = SET_SRC (expr);
+ gcc_assert (oloc == SET_DEST (expr));
+ }
if (nloc)
oloc = gen_rtx_SET (GET_MODE (mo->u.loc), oloc, nloc);
@@ -4940,7 +4999,8 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
(concat (concat val dstv) (set dst src)): dst now holds val,
copied from src. dstv is a value-based representation of dst, if
- it differs from dst. If resolution is needed, src is a REG.
+ it differs from dst. If resolution is needed, src is a REG, and
+ its mode is the same as that of val.
(concat (concat val (set dstv srcv)) (set dst src)): src
copied to dst, holding val. dstv and srcv are value-based
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 647e91f55da..0d14813f74f 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,7 @@
+2009-12-15 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ * testsuite/libffi.call/ffitest.h: Define PRIuPTR on PA HP-UX.
+
2009-12-13 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* src/pa/ffi.c (ffi_closure_inner_pa32): Handle FFI_TYPE_LONGDOUBLE
diff --git a/libffi/testsuite/libffi.call/ffitest.h b/libffi/testsuite/libffi.call/ffitest.h
index 5f157788291..52220a39b24 100644
--- a/libffi/testsuite/libffi.call/ffitest.h
+++ b/libffi/testsuite/libffi.call/ffitest.h
@@ -54,6 +54,11 @@
#define PRIuLL "llu"
#endif
+/* PA HP-UX kludge. */
+#if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR)
+#define PRIuPTR "lu"
+#endif
+
/* Solaris < 10 kludge. */
#if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR)
#if defined(__arch64__) || defined (__x86_64__)
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 510ba40cdd6..5d2822028e7 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,8 @@
+2009-12-18 Jack Howarth <howarth@bromo.med.uc.edu>
+
+ PR testsuite/42135
+ * libgomp.graphite/force-parallel-2.c: Reduce array size.
+
2009-12-05 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* Makefile.in: Regenerate.
diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
index 7f2c823f73e..03d823653a7 100644
--- a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
+++ b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c
@@ -3,7 +3,7 @@ void abort (void);
void parloop (int N)
{
int i, j;
- int x[10000][10000];
+ int x[500][500];
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
@@ -17,7 +17,7 @@ void parloop (int N)
int main(void)
{
- parloop(10000);
+ parloop(500);
return 0;
}
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index adef8782f74..0701bd395a7 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac: Remove code to un-precious-ize CC, CXX,
+ CXXFLAGS, CFLAGS, LDFLAGS.
+ * configure: Regenerate.
+
2009-12-09 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* include/pa-signal.h: Do not include ucontext.h.
diff --git a/libjava/configure b/libjava/configure
index 1a7d625c96d..605225b19a0 100755
--- a/libjava/configure
+++ b/libjava/configure
@@ -961,8 +961,15 @@ with_jvm_jar_dir
ac_precious_vars='build_alias
host_alias
target_alias
-CPP
+CC
+CFLAGS
+LDFLAGS
+LIBS
CPPFLAGS
+CXX
+CXXFLAGS
+CCC
+CPP
CXXCPP
XMKMF'
ac_subdirs_all='classpath libltdl'
@@ -3339,18 +3346,9 @@ fi
# It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
-# (1) We use an abnormal CXX (without library references), so we
-# must cache it under a different name.
-# (2) CC, CFLAGS, CXX, CXXFLAGS, LDFLAGS must not be 'precious', or
-# the non-multilib-adjusted value will be used in multilibs.
-# (3) As a side effect, we must SUBST CXXFLAGS, CFLAGS, and LDFLAGS ourselves.
-# (4) As another side effect, automake doesn't automatically include them
-# in Makefile.in.
-# (5) For libstdc++-v3, -fno-builtin must be present here so that a
+# For libstdc++-v3, -fno-builtin must be present here so that a
# non-conflicting form of std::exit can be guessed by AC_PROG_CXX, and
# used in later tests. This may not be necessary in libjava; I don't know.
-
-
save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fno-builtin"
ac_ext=c
@@ -4406,10 +4404,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
CXXFLAGS="$save_CXXFLAGS"
-
-
-
-
am__api_version='1.11'
# Find a good install program. We prefer a C program (faster),
@@ -13244,7 +13238,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13247 "configure"
+#line 13241 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13350,7 +13344,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13353 "configure"
+#line 13347 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -19215,7 +19209,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then :
enableval=$enable_sjlj_exceptions; :
else
cat > conftest.$ac_ext << EOF
-#line 19218 "configure"
+#line 19212 "configure"
struct S { ~S(); };
void bar();
void foo()
diff --git a/libjava/configure.ac b/libjava/configure.ac
index d8cb6103fea..3721e1c34ed 100644
--- a/libjava/configure.ac
+++ b/libjava/configure.ac
@@ -142,27 +142,14 @@ AM_CONDITIONAL(JAVA_MAINTAINER_MODE, test "$enable_java_maintainer_mode" = yes)
# It may not be safe to run linking tests in AC_PROG_CC/AC_PROG_CXX.
GCC_NO_EXECUTABLES
-# (1) We use an abnormal CXX (without library references), so we
-# must cache it under a different name.
-# (2) CC, CFLAGS, CXX, CXXFLAGS, LDFLAGS must not be 'precious', or
-# the non-multilib-adjusted value will be used in multilibs.
-# (3) As a side effect, we must SUBST CXXFLAGS, CFLAGS, and LDFLAGS ourselves.
-# (4) As another side effect, automake doesn't automatically include them
-# in Makefile.in.
-# (5) For libstdc++-v3, -fno-builtin must be present here so that a
+# For libstdc++-v3, -fno-builtin must be present here so that a
# non-conflicting form of std::exit can be guessed by AC_PROG_CXX, and
# used in later tests. This may not be necessary in libjava; I don't know.
-m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS])
-m4_define([_AC_ARG_VAR_PRECIOUS],[])
save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fno-builtin"
AC_PROG_CC
AC_PROG_CXX
CXXFLAGS="$save_CXXFLAGS"
-m4_rename_force([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
-AC_SUBST(CFLAGS)
-AC_SUBST(CXXFLAGS)
-AC_SUBST(LDFLAGS)
AM_INIT_AUTOMAKE([1.9.0])
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7c20083923a..2077dc14ec7 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,154 @@
+2009-12-18 Jimmy Guo <jguo@yahoo-inc.com>
+
+ PR libstdc++/40088
+ * src/locale_init.cc (locale::locale()): Optimize the common case
+ where _S_global still points to _S_classic.
+
+2009-12-17 Dave Korn <dave.korn.cygwin@gmail.com>
+
+ PR target/42377
+ * config/abi/pre/gnu.ver: Adjust mangled function signatures to permit
+ LLP64 sizetypes throughout.
+
+2009-12-17 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/42198
+ * src/thread.cc (thread::_M_start_thread): Throw system_error
+ immediately if the thread system is inactive.
+
+2009-12-16 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/21772 part 2
+ * doc/xml/manual/test.xml: Add documentation about testing details.
+ * testsuite/util/exception/safety.h: New. Functor objects for
+ testing C++0x container classes.
+ * testsuite/util/testsuite_container_traits.h: Add traits.
+
+ * testsuite/23_containers/list/requirements/exception/
+ basic.cc: New.
+ generation_prohibited.cc: New.
+ propagation_consistent.cc: New.
+
+2009-12-15 Benjamin Kosnik <bkoz@redhat.com>
+
+ PR libstdc++/21772 part 1
+ * include/ext/throw_allocator.h: Rework.
+ (__gnu_cxx::throw_allocator): To...
+ (__gnu_cxx::throw_allocator_limit): ...this.
+ (__gnu_cxx::throw_allocator_random): ...and this.
+ (throw_value_base, throw_value_limit, throw_value_random): Add.
+ (condition_base, random_condition, limit_condition): Add.
+ (forced_exception_error): To...
+ (forced_error): ...this.
+ * testsuite/ext/throw_value: New.
+ * testsuite/ext/throw_value/cons.cc: New.
+ * testsuite/ext/throw_allocator/deallocate_global.cc: Adjust for
+ throw_allocator, forced_exception_error changes.
+ * testsuite/ext/throw_allocator/check_delete.cc: Same.
+ * testsuite/ext/throw_allocator/check_allocate_max_size.cc: Same.
+ * testsuite/ext/throw_allocator/check_deallocate_null.cc: Same.
+ * testsuite/ext/throw_allocator/explicit_instantiation.cc: Same.
+ * testsuite/ext/throw_allocator/check_new.cc: Same.
+ * testsuite/ext/throw_allocator/variadic_construct.cc: Same.
+ * testsuite/ext/throw_allocator/deallocate_local.cc: Same.
+ * testsuite/23_containers/list/modifiers/insert/25288.cc: Same.
+ * testsuite/23_containers/list/modifiers/insert/25288.h: Same.
+ * testsuite/util/regression/common_type.hpp: Same.
+ * testsuite/util/regression/rand/priority_queue/
+ container_rand_regression_test.tcc: Same.
+ * testsuite/util/regression/rand/assoc/
+ container_rand_regression_test.h: Same.
+ * testsuite/util/regression/rand/assoc/
+ container_rand_regression_test.tcc: Same.
+ * testsuite/util/regression/basic_type.hpp: Same.
+
+ * testsuite/ext/forced_exception_error/cons_virtual_derivation.cc: To...
+ * testsuite/ext/forced_error/cons_virtual_derivation.cc: ...this, same.
+
+2009-12-15 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/42381
+ * include/bits/stl_deque.h (_GLIBCXX_DEQUE_BUF_SIZE): Add.
+ (__deque_buf_size(size_t)): Use it.
+ * testsuite/23_containers/deque/requirements/dr438/
+ assign_neg.cc: Adjust dg-error line numbers.
+ * testsuite/23_containers/deque/requirements/dr438/
+ insert_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_1_neg.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/dr438/
+ constructor_2_neg.cc: Likewise.
+
+2009-12-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/future (unique_future::get, promise::set_value): Remove
+ workaround for c++/34022.
+ (packaged_task::get_future, packaged_task::operator()): Use
+ __throw_bad_function_call.
+ * testsuite/30_threads/packaged_task/cons/assign_neg.cc: Adjust.
+ * testsuite/30_threads/packaged_task/cons/copy_neg.cc: Likewise.
+ * testsuite/30_threads/promise/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/promise/cons/copy_neg.cc: Likewise.
+ * testsuite/30_threads/shared_future/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/unique_future/cons/assign_neg.cc: Likewise.
+ * testsuite/30_threads/unique_future/cons/copy_neg.cc: Likewise.
+
+2009-12-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/std/functional (function::function): Move construct target.
+ (function::operator=): Use perfect forwarding for argument.
+ (function::operator()): Use new __throw_bad_function_call.
+ * include/bits/functexcept.h (__throw_bad_function_call): Declare.
+ * src/functexcept.cc (__throw_bad_function_call): Define.
+ * config/abi/pre/gnu.ver: Add new symbol.
+ * testsuite/20_util/function/cons/move_target.cc: New.
+ * testsuite/20_util/function/assign/move_target.cc: New.
+
+2009-12-15 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/42379
+ * testsuite/23_containers/set/operators/1_neg.cc: Fix dg-error strings.
+ * testsuite/23_containers/map/operators/1_neg.cc: Likewise.
+
+2009-12-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR libstdc++/25304, DR 865 [Ready]
+ * include/bits/stl_algobase.h (fill_n): Add comment about DR 865.
+ * include/bits/stl_algo.h (generate_n): Likewise.
+ * include/bits/algorithmfwd.h: Remove obsolete comment.
+ * doc/xml/manual/intro.xml: Add an entry for DR 865.
+
+2009-12-14 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
+
+ * configure.ac: Remove code to un-precious-ize CC, CXX,
+ CXXFLAGS, CFLAGS, LDFLAGS.
+ * configure: Regenerate.
+
+2009-12-14 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * testsuite/23_containers/queue/requirements/
+ explicit_instantiation/1_c++0x.cc: New.
+ * testsuite/23_containers/priority_queue/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/multimap/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/bitset/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/set/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/vector/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/deque/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/stack/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/multiset/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/list/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+ * testsuite/23_containers/map/requirements/
+ explicit_instantiation/1_c++0x.cc: Likewise.
+
2009-12-14 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/stl_list.h (splice(iterator, list&), splice(iterator,
@@ -81,7 +232,7 @@
2009-12-10 Paolo Carlini <paolo.carlini@oracle.com>
Revert:
- 2009-12-03 Paolo Carlini <paolo.carlini@oracle.com>
+ 2009-12-03 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/42261
* include/bits/basic_string.h (_S_construct_aux(_Integer, _Integer,
@@ -211,21 +362,21 @@
2009-11-30 Jonathan Wakely <jwakely.gcc@gmail.com>
- * include/tr1_impl/functional (function): Add rvalue support and
- tweak doxygen markup.
- * testsuite/20_util/function/assign/move.cc: New.
- * testsuite/20_util/function/cons/move.cc: New.
- * testsuite/20_util/function/invoke/move_only.cc: New.
- * testsuite/20_util/function/cmp/cmp_neg.cc: New.
- * testsuite/20_util/function/1.cc: Copy from testsuite/tr1/.
- * testsuite/20_util/function/2.cc: Likewise.
- * testsuite/20_util/function/3.cc: Likewise.
- * testsuite/20_util/function/4.cc: Likewise.
- * testsuite/20_util/function/5.cc: Likewise.
- * testsuite/20_util/function/6.cc: Likewise.
- * testsuite/20_util/function/7.cc: Likewise.
- * testsuite/20_util/function/8.cc: Likewise.
- * testsuite/20_util/function/9.cc: Likewise.
+ * include/tr1_impl/functional (function): Add rvalue support and
+ tweak doxygen markup.
+ * testsuite/20_util/function/assign/move.cc: New.
+ * testsuite/20_util/function/cons/move.cc: New.
+ * testsuite/20_util/function/invoke/move_only.cc: New.
+ * testsuite/20_util/function/cmp/cmp_neg.cc: New.
+ * testsuite/20_util/function/1.cc: Copy from testsuite/tr1/.
+ * testsuite/20_util/function/2.cc: Likewise.
+ * testsuite/20_util/function/3.cc: Likewise.
+ * testsuite/20_util/function/4.cc: Likewise.
+ * testsuite/20_util/function/5.cc: Likewise.
+ * testsuite/20_util/function/6.cc: Likewise.
+ * testsuite/20_util/function/7.cc: Likewise.
+ * testsuite/20_util/function/8.cc: Likewise.
+ * testsuite/20_util/function/9.cc: Likewise.
2009-11-29 Jonathan Wakely <jwakely.gcc@gmail.com>
@@ -290,10 +441,10 @@
2009-11-19 Johannes Singler <singler@kit.edu>
- * include/parallel/partition.h (__parallel_partition): Correctly
- initialize chunk size.
- (__parallel_nth_element): Respect nth_element_minimal_n. Use
- sequential nth_element as base case, instead of sequential sort.
+ * include/parallel/partition.h (__parallel_partition): Correctly
+ initialize chunk size.
+ (__parallel_nth_element): Respect nth_element_minimal_n. Use
+ sequential nth_element as base case, instead of sequential sort.
2009-11-17 Benjamin Kosnik <bkoz@redhat.com>
@@ -764,26 +915,26 @@
009-10-20 Paolo Carlini <paolo.carlini@oracle.com>
- PR libstdc++/41773
- Revert:
- 2009-10-20 Paolo Carlini <paolo.carlini@oracle.com>
-
- * include/bits/basic_string.h (_S_construct(const _CharT*, size_type,
- const _Alloc&)): New, declare.
- (_S_construct(_CharT*, _CharT*, const _Alloc&),
- _S_construct(const _CharT*, const _CharT*, const _Alloc&),
- _S_construct(iterator, iterator, const _Alloc&),
- _S_construct(const_iterator, const_iterator, const _Alloc&)): New,
- forward to the latter.
- * include/bits/basic_string.tcc (_S_construct(const _CharT*,
- size_type, const _Alloc&)): Define.
- (basic_string(const basic_string&, size_type, size_type),
- basic_string(const basic_string&, size_type, size_type,
- const _Alloc&), basic_string(const _CharT*, size_type,
- const _Alloc&), basic_string(const _CharT*, const _Alloc&),
- basic_string(initializer_list<>, const _Alloc&)): Call the latter.
- * config/abi/pre/gnu.ver: Remove recently added exports.
- * src/string-inst.cc: Remove instantiations.
+ PR libstdc++/41773
+ Revert:
+ 2009-10-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/basic_string.h (_S_construct(const _CharT*, size_type,
+ const _Alloc&)): New, declare.
+ (_S_construct(_CharT*, _CharT*, const _Alloc&),
+ _S_construct(const _CharT*, const _CharT*, const _Alloc&),
+ _S_construct(iterator, iterator, const _Alloc&),
+ _S_construct(const_iterator, const_iterator, const _Alloc&)): New,
+ forward to the latter.
+ * include/bits/basic_string.tcc (_S_construct(const _CharT*,
+ size_type, const _Alloc&)): Define.
+ (basic_string(const basic_string&, size_type, size_type),
+ basic_string(const basic_string&, size_type, size_type,
+ const _Alloc&), basic_string(const _CharT*, size_type,
+ const _Alloc&), basic_string(const _CharT*, const _Alloc&),
+ basic_string(initializer_list<>, const _Alloc&)): Call the latter.
+ * config/abi/pre/gnu.ver: Remove recently added exports.
+ * src/string-inst.cc: Remove instantiations.
2009-10-20 Paolo Carlini <paolo.carlini@oracle.com>
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver
index 4ed1cfeb2cd..cbd0596fa9b 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -175,23 +175,28 @@ GLIBCXX_3.4 {
# __gnu_debug::_Error_formatter*
};
- # Names not in an 'extern' block are mangled names.
+ # Names not in an 'extern' block are mangled names. Character classes
+ # are used in many of the regex patterns to compensate for minor differences
+ # among the standard integer types and sizes on different platforms and
+ # under different modes of 64-bit architecture (ILP64, LLP64, etc.)
# std::string
- _ZNSsC[12][EI][PRjmvN]*;
+ # 'y' here and below represents 'unsigned long long'
+ # where it is used for size_type on LLP64 platforms.
+ _ZNSsC[12][EI][PRjmvyN]*;
_ZNSsD*;
_ZNSs[0-58-9][a-z]*;
-# _ZNSs[67][a-z]*E[PRcjmv]*;
- _ZNSs6appendE[PRcjmv]*;
- _ZNSs6assignE[PRcjmv]*;
- _ZNSs6insertE[PRcjmv]*;
- _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEE[PRcjmv]*;
- _ZNSs[67][j-z]*E[PRcjmv]*;
- _ZNSs7[a-z]*EES2_[NPRjm]*;
+# _ZNSs[67][a-z]*E[PRcjmvy]*;
+ _ZNSs6appendE[PRcjmvy]*;
+ _ZNSs6assignE[PRcjmvy]*;
+ _ZNSs6insertE[PRcjmvy]*;
+ _ZNSs6insertEN9__gnu_cxx17__normal_iteratorIPcSsEE[PRcjmvy]*;
+ _ZNSs[67][j-z]*E[PRcjmvy]*;
+ _ZNSs7[a-z]*EES2_[NPRjmy]*;
_ZNSs7[a-z]*EES2_S[12]*;
_ZNSs12_Alloc_hiderC*;
_ZNSs12_M_leak_hardEv;
- _ZNSs12_S_constructE[jm]cRKSaIcE;
+ _ZNSs12_S_constructE[jmy]cRKSaIcE;
_ZNSs12_S_empty_repEv;
_ZNSs13_S_copy_chars*;
_ZNSs[0-9][0-9]_M_replace*;
@@ -204,10 +209,10 @@ GLIBCXX_3.4 {
_ZNSs4_Rep15_M_set_sharableEv;
_ZNSs4_Rep7_M_grab*;
_ZNSs4_Rep8_M_clone*;
- _ZNSs4_Rep9_S_createE[jm][jm]*;
+ _ZNSs4_Rep9_S_createE[jmy][jmy]*;
_ZNSs7_M_dataEPc;
_ZNSs7_M_leakEv;
- _ZNSs9_M_mutateE[jm][jm][jm];
+ _ZNSs9_M_mutateE[jmy][jmy][jmy];
_ZNSs4_Rep20_S_empty_rep_storageE;
_ZNSs4_Rep11_S_max_sizeE;
_ZNSs4_Rep11_S_terminalE;
@@ -230,23 +235,23 @@ GLIBCXX_3.4 {
_ZNKSs7compare*;
_ZNKSs5c_strEv;
_ZNKSs8capacityEv;
- _ZNKSs4copyEPc[jm][jm];
+ _ZNKSs4copyEPc[jmy][jmy];
# std::wstring
- _ZNSbIwSt11char_traitsIwESaIwEEC[12][EI][PRjmvN]*;
+ _ZNSbIwSt11char_traitsIwESaIwEEC[12][EI][PRjmvyN]*;
_ZNSbIwSt11char_traitsIwESaIwEED*;
_ZNSbIwSt11char_traitsIwESaIwEE[0-58-9][a-z]*;
-# _ZNSbIwSt11char_traitsIwESaIwEE[67][a-b]*E[PRwjmv]*;
- _ZNSbIwSt11char_traitsIwESaIwEE6appendE[PRwjmv]*;
- _ZNSbIwSt11char_traitsIwESaIwEE6assignE[PRwjmv]*;
- _ZNSbIwSt11char_traitsIwESaIwEE6insertE[PRwjmv]*;
- _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EE[PRwjmv]*;
- _ZNSbIwSt11char_traitsIwESaIwEE[67][j-z]*E[PRwjmv]*;
- _ZNSbIwSt11char_traitsIwESaIwEE7[a-z]*EES6_[NPRjm]*;
+# _ZNSbIwSt11char_traitsIwESaIwEE[67][a-b]*E[PRwjmvy]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE6appendE[PRwjmvy]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE6assignE[PRwjmvy]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertE[PRwjmvy]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS2_EE[PRwjmvy]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE[67][j-z]*E[PRwjmvy]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE7[a-z]*EES6_[NPRjmy]*;
_ZNSbIwSt11char_traitsIwESaIwEE7[a-z]*EES6_S[56]*;
_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC*;
_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv;
- _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructE[jm]wRKS1_;
+ _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructE[jmy]wRKS1_;
_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv;
_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_chars*;
_ZNSbIwSt11char_traitsIwESaIwEE[0-9][0-9]_M_replace*;
@@ -259,10 +264,10 @@ GLIBCXX_3.4 {
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep15_M_set_sharableEv;
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep7_M_grab*;
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_clone*;
- _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createE[jm][jm]*;
+ _ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createE[jmy][jmy]*;
_ZNSbIwSt11char_traitsIwESaIwEE7_M_dataEPw;
_ZNSbIwSt11char_traitsIwESaIwEE7_M_leakEv;
- _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateE[jm][jm][jm];
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateE[jmy][jmy][jmy];
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE;
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_max_sizeE;
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep11_S_terminalE;
@@ -285,7 +290,7 @@ GLIBCXX_3.4 {
_ZNKSbIwSt11char_traitsIwESaIwEE7compare*;
_ZNKSbIwSt11char_traitsIwESaIwEE5c_strEv;
_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv;
- _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPw[jm][jm];
+ _ZNKSbIwSt11char_traitsIwESaIwEE4copyEPw[jmy][jmy];
# std::basic_streambuf
_ZNSt15basic_streambufI[cw]St11char_traitsI[cw]EE[CD]*;
@@ -354,7 +359,9 @@ GLIBCXX_3.4 {
_ZNKSi[0-9][a-z]*;
_ZNSi[0-9][a-h]*;
_ZNSi[0-9][j-z]*;
- _ZNSi6ignoreE[il][il];
+ # 'x' here and below matches 'long long' where it
+ # is used for signed sizetypes on LLP64 platforms.
+ _ZNSi6ignoreE[ilx][ilx];
_ZNSirsE*[^g];
# std::basic_istream<wchar_t>
@@ -363,7 +370,7 @@ GLIBCXX_3.4 {
_ZNKSt13basic_istreamIwSt11char_traitsIwEE[0-9][a-z]*;
_ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][a-h]*;
_ZNSt13basic_istreamIwSt11char_traitsIwEE[0-9][j-z]*;
- _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[il][ijlm];
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[ilx][ijlmx];
_ZNSt13basic_istreamIwSt11char_traitsIwEErsE*[^g];
# std::istream operators and extractors
@@ -380,7 +387,7 @@ GLIBCXX_3.4 {
_ZNSoC*;
_ZNSoD*;
_ZNKSo6sentrycvbEv;
- _ZNSo8_M_writeEPKc[il];
+ _ZNSo8_M_writeEPKc[ilx];
_ZNSo[0-9][a-z]*;
_ZNSolsE*[^g];
@@ -394,7 +401,7 @@ GLIBCXX_3.4 {
_ZNSt13basic_ostreamIwSt11char_traitsIwEE5tellpEv;
_ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKw*;
_ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentry*;
- _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKw[il];
+ _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_writeEPKw[ilx];
_ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*[^g];
# std::ostream operators and inserters
@@ -533,9 +540,9 @@ GLIBCXX_3.4 {
_ZSt24__throw_invalid_argumentPKc;
# operator new(size_t)
- _Znw[jm];
+ _Znw[jmy];
# operator new(size_t, std::nothrow_t const&)
- _Znw[jm]RKSt9nothrow_t;
+ _Znw[jmy]RKSt9nothrow_t;
# operator delete(void*)
_ZdlPv;
@@ -543,9 +550,9 @@ GLIBCXX_3.4 {
_ZdlPvRKSt9nothrow_t;
# operator new[](size_t)
- _Zna[jm];
+ _Zna[jmy];
# operator new[](size_t, std::nothrow_t const&)
- _Zna[jm]RKSt9nothrow_t;
+ _Zna[jmy]RKSt9nothrow_t;
# operator delete[](void*)
_ZdaPv;
@@ -700,26 +707,26 @@ GLIBCXX_3.4 {
# GLIBCXX_ABI compatibility only.
# std::string
_ZNKSs11_M_disjunctEPKc;
- _ZNKSs15_M_check_lengthE[jm][jm]PKc;
+ _ZNKSs15_M_check_lengthE[jmy][jmy]PKc;
_ZNSs4_Rep26_M_set_length_and_sharableE*;
- _ZNSs7_M_copyEPcPKc[jm];
- _ZNSs7_M_moveEPcPKc[jm];
- _ZNSs9_M_assignEPc[jm]c;
+ _ZNSs7_M_copyEPcPKc[jmy];
+ _ZNSs7_M_moveEPcPKc[jmy];
+ _ZNSs9_M_assignEPc[jmy]c;
# std::wstring
_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw;
- _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthE[jm][jm]PKc;
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthE[jmy][jmy]PKc;
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableE*;
- _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKw[jm];
- _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKw[jm];
- _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPw[jm]w;
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKw[jmy];
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKw[jmy];
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPw[jmy]w;
_ZNKSt13basic_fstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
_ZNKSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
_ZNKSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
- _ZNSi6ignoreE[ilv];
- _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[ilv];
+ _ZNSi6ignoreE[ilvx];
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[ilvx];
_ZNSt11char_traitsI[cw]E2eqERK[cw]S2_;
@@ -747,8 +754,8 @@ GLIBCXX_3.4.2 {
_ZN9__gnu_cxx18stdio_sync_filebufI[cw]St11char_traitsI[cw]EE4fileEv;
- _ZN9__gnu_cxx17__pool_alloc_base9_M_refillE[jm];
- _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listE[jm];
+ _ZN9__gnu_cxx17__pool_alloc_base9_M_refillE[jmy];
+ _ZN9__gnu_cxx17__pool_alloc_base16_M_get_free_listE[jmy];
_ZN9__gnu_cxx17__pool_alloc_base12_M_get_mutexEv;
} GLIBCXX_3.4.1;
@@ -783,8 +790,8 @@ GLIBCXX_3.4.4 {
_ZN9__gnu_cxx6__poolILb1EE13_M_initializeEPFvPvE;
_ZN9__gnu_cxx6__poolILb1EE21_M_destroy_thread_keyEPv;
_ZN9__gnu_cxx6__poolILb1EE16_M_get_thread_idEv;
- _ZN9__gnu_cxx6__poolILb[01]EE16_M_reserve_blockE[jm][jm];
- _ZN9__gnu_cxx6__poolILb[01]EE16_M_reclaim_blockEPc[jm];
+ _ZN9__gnu_cxx6__poolILb[01]EE16_M_reserve_blockE[jmy][jmy];
+ _ZN9__gnu_cxx6__poolILb[01]EE16_M_reclaim_blockEPc[jmy];
_ZN9__gnu_cxx6__poolILb[01]EE10_M_destroyEv;
_ZN9__gnu_cxx9free_list6_M_getE*;
@@ -796,26 +803,26 @@ GLIBCXX_3.4.5 {
# std::string
_ZNKSs11_M_disjunctEPKc;
- _ZNKSs15_M_check_lengthE[jm][jm]PKc;
+ _ZNKSs15_M_check_lengthE[jmy][jmy]PKc;
_ZNSs4_Rep26_M_set_length_and_sharableE*;
- _ZNSs7_M_copyEPcPKc[jm];
- _ZNSs7_M_moveEPcPKc[jm];
- _ZNSs9_M_assignEPc[jm]c;
+ _ZNSs7_M_copyEPcPKc[jmy];
+ _ZNSs7_M_moveEPcPKc[jmy];
+ _ZNSs9_M_assignEPc[jmy]c;
# std::wstring
_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw;
- _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthE[jm][jm]PKc;
+ _ZNKSbIwSt11char_traitsIwESaIwEE15_M_check_lengthE[jmy][jmy]PKc;
_ZNSbIwSt11char_traitsIwESaIwEE4_Rep26_M_set_length_and_sharableE*;
- _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKw[jm];
- _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKw[jm];
- _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPw[jm]w;
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_copyEPwPKw[jmy];
+ _ZNSbIwSt11char_traitsIwESaIwEE7_M_moveEPwPKw[jmy];
+ _ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPw[jmy]w;
_ZNKSt13basic_fstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
_ZNKSt14basic_ifstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
_ZNKSt14basic_ofstreamI[cw]St11char_traitsI[cw]EE7is_openEv;
- _ZNSi6ignoreE[ilv];
- _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[ilv];
+ _ZNSi6ignoreE[ilvx];
+ _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[ilvx];
_ZNSt11char_traitsI[cw]E2eqERK[cw]S2_;
@@ -825,7 +832,7 @@ GLIBCXX_3.4.5 {
GLIBCXX_3.4.6 {
- _ZSt17__copy_streambufsI[cw]St11char_traitsI[cw]EEiPSt15basic_streambuf*;
+ _ZSt17__copy_streambufsI[cw]St11char_traitsI[cw]EE[ix]PSt15basic_streambuf*;
_ZNSt8ios_base17_M_call_callbacksENS_5eventE;
_ZNSt8ios_base20_M_dispose_callbacksEv;
_ZNSt6locale5facet13_S_get_c_nameEv;
@@ -840,7 +847,7 @@ GLIBCXX_3.4.6 {
GLIBCXX_3.4.7 {
- _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetE[jm];
+ _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetE[jmy];
} GLIBCXX_3.4.6;
@@ -863,7 +870,7 @@ GLIBCXX_3.4.9 {
_ZNSi10_M_extractI[^g]*;
_ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractI[^g]*;
- _ZSt21__copy_streambufs_eofI[cw]St11char_traitsI[cw]EE[il]PSt15basic_streambuf*;
+ _ZSt21__copy_streambufs_eofI[cw]St11char_traitsI[cw]EE[ilx]PSt15basic_streambuf*;
_ZSt16__ostream_insert*;
@@ -1068,6 +1075,8 @@ GLIBCXX_3.4.14 {
_ZNSs18_S_construct_aux_2*;
_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2*;
+ _ZSt25__throw_bad_function_callv;
+
} GLIBCXX_3.4.13;
# Symbols in the support library (libsupc++) have their own tag.
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 894ab7bbe7a..6bd3c2273e5 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -843,8 +843,15 @@ enable_version_specific_runtime_libs
ac_precious_vars='build_alias
host_alias
target_alias
-CPP
+CC
+CFLAGS
+LDFLAGS
+LIBS
CPPFLAGS
+CXX
+CXXFLAGS
+CCC
+CPP
CXXCPP'
@@ -3485,26 +3492,9 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-# We're almost certainly being configured before anything else which uses
-# C++, so all of our AC_PROG_* discoveries will be cached. It's vital that
-# we not cache the value of CXX that we "discover" here, because it's set
-# to something unique for us and libjava. Other target libraries need to
-# find CXX for themselves. We yank the rug out from under the normal AC_*
-# process by sneakily renaming the cache variable. This also lets us debug
-# the value of "our" CXX in postmortems.
-#
-# We must also force CXX to /not/ be a precious variable, otherwise the
-# wrong (non-multilib-adjusted) value will be used in multilibs. This
-# little trick also affects CPPFLAGS, CXXFLAGS, and LDFLAGS. And as a side
-# effect, CXXFLAGS is no longer automagically subst'd, so we have to do
-# that ourselves. Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
-#
# -fno-builtin must be present here so that a non-conflicting form of
# std::exit can be guessed by AC_PROG_CXX, and used in later tests.
-
-
-
save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fno-builtin"
ac_ext=c
@@ -4317,11 +4307,11 @@ if test -z "$CXX"; then
set dummy $ac_tool_prefix$ac_prog; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
-if test "${glibcxx_cv_prog_CXX+set}" = set; then :
+if test "${ac_cv_prog_CXX+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CXX"; then
- glibcxx_cv_prog_CXX="$CXX" # Let the user override the test.
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
@@ -4330,7 +4320,7 @@ do
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- glibcxx_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
@@ -4340,7 +4330,7 @@ IFS=$as_save_IFS
fi
fi
-CXX=$glibcxx_cv_prog_CXX
+CXX=$ac_cv_prog_CXX
if test -n "$CXX"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
$as_echo "$CXX" >&6; }
@@ -4560,9 +4550,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
CXXFLAGS="$save_CXXFLAGS"
-
-
-
# Runs configure.host, and assorted other critical bits. Sets
# up critical shell variables.
@@ -11454,7 +11441,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11457 "configure"
+#line 11444 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11560,7 +11547,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11563 "configure"
+#line 11550 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14897,7 +14884,7 @@ fi
#
# Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
cat > conftest.$ac_ext << EOF
-#line 14900 "configure"
+#line 14887 "configure"
struct S { ~S(); };
void bar();
void foo()
@@ -15265,7 +15252,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
# Fake what AC_TRY_COMPILE does.
cat > conftest.$ac_ext << EOF
-#line 15268 "configure"
+#line 15255 "configure"
int main()
{
typedef bool atomic_type;
@@ -15302,7 +15289,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15305 "configure"
+#line 15292 "configure"
int main()
{
typedef short atomic_type;
@@ -15339,7 +15326,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15342 "configure"
+#line 15329 "configure"
int main()
{
// NB: _Atomic_word not necessarily int.
@@ -15377,7 +15364,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
rm -f conftest*
cat > conftest.$ac_ext << EOF
-#line 15380 "configure"
+#line 15367 "configure"
int main()
{
typedef long long atomic_type;
@@ -15453,7 +15440,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
# unnecessary for this test.
cat > conftest.$ac_ext << EOF
-#line 15456 "configure"
+#line 15443 "configure"
int main()
{
_Decimal32 d1;
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 1fd8119b51d..2ee2bdbce28 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -78,34 +78,14 @@ AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dependencies -Wall -Wno-portability
AH_TEMPLATE(PACKAGE, [Name of package])
AH_TEMPLATE(VERSION, [Version number of package])
-# We're almost certainly being configured before anything else which uses
-# C++, so all of our AC_PROG_* discoveries will be cached. It's vital that
-# we not cache the value of CXX that we "discover" here, because it's set
-# to something unique for us and libjava. Other target libraries need to
-# find CXX for themselves. We yank the rug out from under the normal AC_*
-# process by sneakily renaming the cache variable. This also lets us debug
-# the value of "our" CXX in postmortems.
-#
-# We must also force CXX to /not/ be a precious variable, otherwise the
-# wrong (non-multilib-adjusted) value will be used in multilibs. This
-# little trick also affects CPPFLAGS, CXXFLAGS, and LDFLAGS. And as a side
-# effect, CXXFLAGS is no longer automagically subst'd, so we have to do
-# that ourselves. Un-preciousing AC_PROG_CC also affects CC and CFLAGS.
-#
# -fno-builtin must be present here so that a non-conflicting form of
# std::exit can be guessed by AC_PROG_CXX, and used in later tests.
-m4_define([ac_cv_prog_CXX],[glibcxx_cv_prog_CXX])
-m4_rename([_AC_ARG_VAR_PRECIOUS],[glibcxx_PRECIOUS])
-m4_define([_AC_ARG_VAR_PRECIOUS],[])
save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -fno-builtin"
AC_PROG_CC
AC_PROG_CXX
CXXFLAGS="$save_CXXFLAGS"
-m4_rename_force([glibcxx_PRECIOUS],[_AC_ARG_VAR_PRECIOUS])
-AC_SUBST(CFLAGS)
-AC_SUBST(CXXFLAGS)
# Runs configure.host, and assorted other critical bits. Sets
# up critical shell variables.
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index 1c5e7f64e55..a3cdbdf1c46 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -815,6 +815,13 @@ requirements of the license of GCC.
</term>
<listitem><para>Update / add the signatures.
</para></listitem></varlistentry>
+
+ <varlistentry><term><ulink url="../ext/lwg-active.html#865">865</ulink>:
+ <emphasis>More algorithms that throw away information</emphasis>
+ </term>
+ <listitem><para>The traditional HP / SGI return type and value is blessed
+ by the resolution of the DR.
+ </para></listitem></varlistentry>
</variablelist>
</sect2>
diff --git a/libstdc++-v3/doc/xml/manual/test.xml b/libstdc++-v3/doc/xml/manual/test.xml
index 887f4035686..3da168ec45b 100644
--- a/libstdc++-v3/doc/xml/manual/test.xml
+++ b/libstdc++-v3/doc/xml/manual/test.xml
@@ -1,6 +1,6 @@
<sect1 id="manual.intro.setup.test" xreflabel="Testing">
<?dbhtml filename="test.html"?>
-
+
<sect1info>
<keywordset>
<keyword>
@@ -48,7 +48,7 @@ regressions, ABI, and performance.
that are packaged in a separate testing library.
</para>
-<para>
+<para>
All test cases for functionality required by the runtime components
of the C++ standard (ISO 14882) are files within the following
directories.
@@ -65,6 +65,9 @@ regressions, ABI, and performance.
25_algorithms
26_numerics
27_io
+28_regex
+29_atomics
+30_threads
</programlisting>
<para>
@@ -77,9 +80,8 @@ backward Tests for backwards compatibility and deprecated features.
demangle Tests for __cxa_demangle, the IA 64 C++ ABI demangler
ext Tests for extensions.
performance Tests for performance analysis, and performance regressions.
-thread Tests for threads.
</programlisting>
-
+
<para>
Some directories don't have test files, but instead contain
auxiliary information:
@@ -104,7 +106,7 @@ util Files for libtestc++, utilities and testing routines.
</para>
<programlisting>
21_strings/find.cc
- </programlisting>
+ </programlisting>
<para>
However, that practice soon became a liability as the test cases
became huge and unwieldy, and testing new or extended
@@ -123,11 +125,11 @@ util Files for libtestc++, utilities and testing routines.
21_strings/basic_string/find/wchar_t/1.cc
21_strings/basic_string/find/wchar_t/2.cc
21_strings/basic_string/find/wchar_t/3.cc
- </programlisting>
+ </programlisting>
<para>
All new tests should be written with the policy of one test
- case, one file in mind.
+ case, one file in mind.
</para>
</sect3>
@@ -140,7 +142,7 @@ util Files for libtestc++, utilities and testing routines.
used within the testsuite to designate particular kinds of
tests.
</para>
-
+
<itemizedlist>
<listitem>
<para>
@@ -151,10 +153,10 @@ util Files for libtestc++, utilities and testing routines.
to finish or pass. At the moment, the interactive tests are not
run by default. Instead, they are run by hand, like:
</para>
- <programlisting>
+ <programlisting>
g++ 27_io/objects/char/3_xin.cc
cat 27_io/objects/char/3_xin.in | a.out
- </programlisting>
+ </programlisting>
</listitem>
<listitem>
<para>
@@ -232,7 +234,7 @@ cat 27_io/objects/char/3_xin.in | a.out
<sect3 id="test.run.basic">
<title>Basic</title>
-
+
<para>
You can check the status of the build without installing it
using the dejagnu harness, much like the rest of the gcc
@@ -254,7 +256,7 @@ cat 27_io/objects/char/3_xin.in | a.out
the exact command line passed to the compiler, the compiler
output, and the executable output (if any).
</para>
-
+
<para>
Archives of test results for various versions and platforms are
available on the GCC website in the <ulink
@@ -266,7 +268,7 @@ cat 27_io/objects/char/3_xin.in | a.out
combination of source version, operating system, and host CPU.
</para>
</sect3>
-
+
<sect3 id="test.run.variations">
<title>Variations</title>
<para>
@@ -322,7 +324,7 @@ make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=calmrisc32-sid"
make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=arm-sim"
</programlisting>
- <para>
+ <para>
Also, here is an example of how to run the libstdc++ testsuite
for a multilibed build directory with different ABI settings:
</para>
@@ -330,7 +332,7 @@ make check-target-libstdc++-v3 RUNTESTFLAGS="--target_board=arm-sim"
<programlisting>
make check-target-libstdc++-v3 RUNTESTFLAGS='--target_board \"unix{-mabi=32,,-mabi=64}\"'
</programlisting>
-
+
<para>
You can run the tests with a compiler and library that have
already been installed. Make sure that the compiler (e.g.,
@@ -354,7 +356,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
testsuites in parallel from the same directory.
</para>
- <para>
+ <para>
In addition, there are some testing options that are mostly of
interest to library maintainers and system integrators. As such,
these tests may not work on all cpu and host combinations, and
@@ -378,7 +380,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
<para>
<emphasis>testsuite_files</emphasis>
</para>
- <para>
+ <para>
This is a list of all the test cases that will be run. Each
test case is on a separate line, given with an absolute path
from the <emphasis>libsrcdir/testsuite</emphasis> directory.
@@ -389,7 +391,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
<para>
<emphasis>testsuite_files_interactive</emphasis>
</para>
- <para>
+ <para>
This is a list of all the interactive test cases, using the
same format as the file list above. These tests are not run
by default.
@@ -400,7 +402,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
<para>
<emphasis>testsuite_files_performance</emphasis>
</para>
- <para>
+ <para>
This is a list of all the performance test cases, using the
same format as the file list above. These tests are not run
by default.
@@ -411,7 +413,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
<para>
<emphasis>testsuite_thread</emphasis>
</para>
- <para>
+ <para>
This file indicates that the host system can run tests which
involved multiple threads.
</para>
@@ -421,7 +423,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
<para>
<emphasis>testsuite_wchar_t</emphasis>
</para>
- <para>
+ <para>
This file indicates that the host system can run the wchar_t
tests, and corresponds to the macro definition <code>
_GLIBCXX_USE_WCHAR_T</code> in the file c++config.h.
@@ -432,11 +434,11 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
<programlisting>
make check-abi
</programlisting>
-
+
<para>
The library ABI can be tested. This involves testing the shared
library against an ABI-defining previous version of symbol
- exports.
+ exports.
</para>
<programlisting>
@@ -507,7 +509,7 @@ runtest --tool libstdc++ --srcdir=/path/to/gcc/libstdc++-v3/testsuite
<para>
The first step in making a new test case is to choose the correct
directory and file name, given the organization as previously
- described.
+ described.
</para>
<para>
@@ -638,7 +640,7 @@ up in the normal.exp file.
<sect3 id="test.harness.dejagnu">
<title>Dejagnu Harness Details</title>
- <para>
+ <para>
Underlying details of testing for conformance and regressions are
abstracted via the GNU Dejagnu package. This is similar to the
rest of GCC.
@@ -684,7 +686,7 @@ only default variables.
<sect3 id="test.harness.utils">
<title>Utilities</title>
- <para>
+ <para>
</para>
<para>
The testsuite directory also contains some files that implement
@@ -709,11 +711,11 @@ only default variables.
<emphasis>testsuite_abi_check.cc</emphasis>
</para>
<para>
- Creates the executable <emphasis>abi_check</emphasis>.
- Used to check correctness of symbol versioning, visibility of
- exported symbols, and compatibility on symbols in the shared
- library, for hosts that support this feature. More information
- can be found in the ABI documentation <link linkend="appendix.porting.abi">here</link>
+ Creates the executable <emphasis>abi_check</emphasis>.
+ Used to check correctness of symbol versioning, visibility of
+ exported symbols, and compatibility on symbols in the shared
+ library, for hosts that support this feature. More information
+ can be found in the ABI documentation <link linkend="appendix.porting.abi">here</link>
</para>
</listitem>
<listitem>
@@ -722,11 +724,11 @@ only default variables.
<emphasis>testsuite_allocator.cc</emphasis>
</para>
<para>
- Contains specialized allocators that keep track of construction
- and destruction. Also, support for overriding global new and
- delete operators, including verification that new and delete
- are called during execution, and that allocation over max_size
- fails.
+ Contains specialized allocators that keep track of construction
+ and destruction. Also, support for overriding global new and
+ delete operators, including verification that new and delete
+ are called during execution, and that allocation over max_size
+ fails.
</para>
</listitem>
<listitem>
@@ -734,9 +736,9 @@ only default variables.
<emphasis>testsuite_character.h</emphasis>
</para>
<para>
- Contains <code>std::char_traits</code> and
- <code>std::codecvt</code> specializations for a user-defined
- POD.
+ Contains <code>std::char_traits</code> and
+ <code>std::codecvt</code> specializations for a user-defined
+ POD.
</para>
</listitem>
<listitem>
@@ -748,20 +750,20 @@ only default variables.
A large number of utilities, including:
</para>
<itemizedlist>
- <listitem><para>VERIFY</para></listitem>
- <listitem><para>set_memory_limits</para></listitem>
- <listitem><para>verify_demangle</para></listitem>
- <listitem><para>run_tests_wrapped_locale</para></listitem>
- <listitem><para>run_tests_wrapped_env</para></listitem>
- <listitem><para>try_named_locale</para></listitem>
- <listitem><para>try_mkfifo</para></listitem>
- <listitem><para>func_callback</para></listitem>
- <listitem><para>counter</para></listitem>
- <listitem><para>copy_tracker</para></listitem>
- <listitem><para>copy_constructor</para></listitem>
- <listitem><para>assignment_operator</para></listitem>
- <listitem><para>destructor</para></listitem>
- <listitem>
+ <listitem><para>VERIFY</para></listitem>
+ <listitem><para>set_memory_limits</para></listitem>
+ <listitem><para>verify_demangle</para></listitem>
+ <listitem><para>run_tests_wrapped_locale</para></listitem>
+ <listitem><para>run_tests_wrapped_env</para></listitem>
+ <listitem><para>try_named_locale</para></listitem>
+ <listitem><para>try_mkfifo</para></listitem>
+ <listitem><para>func_callback</para></listitem>
+ <listitem><para>counter</para></listitem>
+ <listitem><para>copy_tracker</para></listitem>
+ <listitem><para>copy_constructor</para></listitem>
+ <listitem><para>assignment_operator</para></listitem>
+ <listitem><para>destructor</para></listitem>
+ <listitem>
<para>pod_char, pod_int and associated char_traits specializations</para>
</listitem>
</itemizedlist>
@@ -792,13 +794,239 @@ only default variables.
reporting functions including:
</para>
<itemizedlist>
- <listitem><para>time_counter</para></listitem>
- <listitem><para>resource_counter</para></listitem>
- <listitem><para>report_performance</para></listitem>
+ <listitem><para>time_counter</para></listitem>
+ <listitem><para>resource_counter</para></listitem>
+ <listitem><para>report_performance</para></listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</sect3>
</sect2>
+
+<sect2 id="test.special">
+<title>Special Topics</title>
+
+<sect3 id="test.exception.safety">
+<title>
+ Qualifying Exception Safety Guarantees
+ <indexterm>
+ <primary>Test</primary>
+ <secondary>Exception Safety</secondary>
+ </indexterm>
+</title>
+
+<sect4 id="test.exception.safety.overview">
+<title>Overview</title>
+
+ <para>
+ Testing is composed of running a particular test sequence,
+ and looking at what happens to the surrounding code when
+ exceptions are thrown. Each test is composed of measuring
+ initial state, executing a particular sequence of code under
+ some instrumented conditions, measuring a final state, and
+ then examining the differences between the two states.
+ </para>
+
+ <para>
+ Test sequences are composed of constructed code sequences
+ that exercise a particular function or member function, and
+ either confirm no exceptions were generated, or confirm the
+ consistency/coherency of the test subject in the event of a
+ thrown exception.
+ </para>
+
+ <para>
+ Random code paths can be constructed using the the basic test
+ sequences and instrumentation as above, only combined in a
+ random or pseudo-random way.
+ </para>
+
+ <para> To compute the code paths that throw, test instruments
+ are used that throw on allocation events
+ (<classname>__gnu_cxx::throw_allocator_random</classname>
+ and <classname>__gnu_cxx::throw_allocator_limit</classname>)
+ and copy, assignment, comparison, increment, swap, and
+ various operators
+ (<classname>__gnu_cxx::throw_type_random</classname>
+ and <classname>__gnu_cxx::throw_type_limit</classname>). Looping
+ through a given test sequence and conditionally throwing in
+ all instrumented places. Then, when the test sequence
+ completes without an exception being thrown, assume all
+ potential error paths have been exercised in a sequential
+ manner.
+ </para>
+</sect4>
+
+
+<sect4 id="test.exception.safety.status">
+<title>
+ Existing tests
+</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Ad Hoc
+ </para>
+ <para>
+ For example,
+ <filename>testsuite/23_containers/list/modifiers/3.cc</filename>.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ Policy Based Data Structures
+ </para>
+ <para>
+ For example, take the test
+ functor <classname>rand_reg_test</classname> in
+ in <filename>testsuite/ext/pb_ds/regression/tree_no_data_map_rand.cc</filename>. This uses <classname>container_rand_regression_test</classname> in
+<filename>testsuite/util/regression/rand/assoc/container_rand_regression_test.h</filename>.
+
+ </para>
+
+ <para>
+ Which has several tests for container member functions,
+Includes control and test container objects. Configuration includes
+random seed, iterations, number of distinct values, and the
+probability that and exception will be thrown. Assumes instantiating
+container uses an extension
+allocator, <classname>__gnu_cxx::throw_allocator_random</classname>,
+as the allocator type.
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ C++0x Container Requirements.
+ </para>
+
+ <para>
+ Coverage is currently limited to testing container
+ requirements for exception safety,
+ although <classname>__gnu_cxx::throw_type</classname> meets
+ the additional type requirements for testing numeric data
+ structures and instantiating algorithms.
+ </para>
+
+ <para>
+ Of particular interest is extending testing to algorithms and
+ then to parallel algorithms. Also io, and locales.
+ </para>
+ </listitem>
+ </itemizedlist>
+</sect4>
+
+
+<sect4 id="test.exception.safety.containers">
+<title>
+C++0x Requirements Test Sequence Descriptions
+</title>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Basic
+ </para>
+
+ <para>
+ Basic consistency on exception propagation tests. For
+ each container, an object of that container is constructed,
+ a specific member function is exercised in
+ a <literal>try</literal> block, and then any thrown
+ exceptions lead to error checking in the appropriate
+ <literal>catch</literal> block. The container's use of
+ resources is compared to the container's use prior to the
+ test block. Resource monitoring is limited to allocations
+ made through the container's <type>allocator_type</type>,
+ which should be sufficient for container data
+ structures. Included in these tests are member functions
+ are <type>iterator</type> and <type>const_iterator</type>
+ operations, <function>pop_front</function>, <function>pop_back</function>, <function>push_front</function>, <function>push_back</function>, <function>insert</function>, <function>erase</function>, <function>swap</function>, <function>clear</function>,
+ and <function>rehash</function>. The container in question is
+ instantiated with two instrumented template arguments,
+ with <classname>__gnu_cxx::throw_allocator_limit</classname>
+ as the allocator type, and
+ with <classname>__gnu_cxx::throw_type_limit</classname> as
+ the value type. This allows the test to loop through
+ conditional throw points.
+ </para>
+
+ <para>
+ The general form is demonstrated in
+ <filename>testsuite/23_containers/list/requirements/exception/basic.cc
+ </filename>. The instantiating test object is <classname>__gnu_test::basic_safety</classname> and is detailed in <filename>testsuite/util/exception/safety.h</filename>.
+ </para>
+ </listitem>
+
+
+ <listitem>
+ <para>
+ Generation Prohibited
+ </para>
+
+ <para>
+ Exception generation tests. For each container, an object of
+ that container is constructed and all member functions
+ required to not throw exceptions are exercised. Included in
+ these tests are member functions
+ are <type>iterator</type> and <type>const_iterator</type> operations, <function>erase</function>, <function>pop_front</function>, <function>pop_back</function>, <function>swap</function>,
+ and <function>clear</function>. The container in question is
+ instantiated with two instrumented template arguments,
+ with <classname>__gnu_cxx::throw_allocator_random</classname>
+ as the allocator type, and
+ with <classname>__gnu_cxx::throw_type_random</classname> as
+ the value type. This test does not loop, an instead is sudden
+ death: first error fails.
+ </para>
+ <para>
+ The general form is demonstrated in
+ <filename>testsuite/23_containers/list/requirements/exception/generation_prohibited.cc
+ </filename>. The instantiating test object is <classname>__gnu_test::generation_prohibited</classname> and is detailed in <filename>testsuite/util/exception/safety.h</filename>.
+ </para>
+ </listitem>
+
+
+ <listitem>
+ <para>
+ Propagation Consistent
+ </para>
+
+ <para>
+ Container rollback on exception propagation tests. For
+ each container, an object of that container is constructed,
+ a specific member function that requires rollback to a previous
+ known good state is exercised in
+ a <literal>try</literal> block, and then any thrown
+ exceptions lead to error checking in the appropriate
+ <literal>catch</literal> block. The container is compared to
+ the container's last known good state using such parameters
+ as size, contents, and iterator references. Included in these
+ tests are member functions
+ are <function>push_front</function>, <function>push_back</function>, <function>insert</function>,
+ and <function>rehash</function>. The container in question is
+ instantiated with two instrumented template arguments,
+ with <classname>__gnu_cxx::throw_allocator_limit</classname>
+ as the allocator type, and
+ with <classname>__gnu_cxx::throw_type_limit</classname> as
+ the value type. This allows the test to loop through
+ conditional throw points.
+ </para>
+
+ <para>
+ The general form demonstrated in
+ <filename>testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
+ </filename>. The instantiating test object is <classname>__gnu_test::propagation_coherent</classname> and is detailed in <filename>testsuite/util/exception/safety.h</filename>.
+ </para>
+ </listitem>
+ </itemizedlist>
+
+</sect4>
+
+</sect3>
+
+</sect2>
+
</sect1>
diff --git a/libstdc++-v3/include/bits/algorithmfwd.h b/libstdc++-v3/include/bits/algorithmfwd.h
index e33a14c3bdc..7625ee4af51 100644
--- a/libstdc++-v3/include/bits/algorithmfwd.h
+++ b/libstdc++-v3/include/bits/algorithmfwd.h
@@ -236,13 +236,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void
fill(_FIter, _FIter, const _Tp&);
-/*
- XXX NB: return type different from ISO C++.
- template<typename _OIter, typename _Size, typename _Tp>
- void
- fill_n(_OIter, _Size, const _Tp&);
-*/
-
template<typename _OIter, typename _Size, typename _Tp>
_OIter
fill_n(_OIter, _Size, const _Tp&);
@@ -620,13 +613,6 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
void
generate(_FIter, _FIter, _Generator);
-/*
- XXX NB: return type different from ISO C++.
- template<typename _OIter, typename _Size, typename _Tp>
- void
- generate_n(_OIter, _Size, _Generator);
-*/
-
template<typename _OIter, typename _Size, typename _Generator>
_OIter
generate_n(_OIter, _Size, _Generator);
diff --git a/libstdc++-v3/include/bits/functexcept.h b/libstdc++-v3/include/bits/functexcept.h
index 62174819118..5b2e9fc0455 100644
--- a/libstdc++-v3/include/bits/functexcept.h
+++ b/libstdc++-v3/include/bits/functexcept.h
@@ -91,6 +91,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
void
__throw_future_error(int) __attribute__((__noreturn__));
+ // Helpers for exception objects in <functional>
+ void
+ __throw_bad_function_call() __attribute__((__noreturn__));
+
_GLIBCXX_END_NAMESPACE
#endif
diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h
index 088414d097f..f6c98f8f59c 100644
--- a/libstdc++-v3/include/bits/stl_algo.h
+++ b/libstdc++-v3/include/bits/stl_algo.h
@@ -4921,6 +4921,9 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
*
* Performs the assignment @c *i = @p gen() for each @c i in the range
* @p [first,first+n).
+ *
+ * _GLIBCXX_RESOLVE_LIB_DEFECTS
+ * DR 865. More algorithms that throw away information
*/
template<typename _OutputIterator, typename _Size, typename _Generator>
_OutputIterator
diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h
index f9c3ab2b428..bc04723439e 100644
--- a/libstdc++-v3/include/bits/stl_algobase.h
+++ b/libstdc++-v3/include/bits/stl_algobase.h
@@ -781,6 +781,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
* This function fills a range with copies of the same value. For char
* types filling contiguous areas of memory, this becomes an inline call
* to @c memset or @ wmemset.
+ *
+ * _GLIBCXX_RESOLVE_LIB_DEFECTS
+ * DR 865. More algorithms that throw away information
*/
template<typename _OI, typename _Size, typename _Tp>
inline _OI
diff --git a/libstdc++-v3/include/bits/stl_deque.h b/libstdc++-v3/include/bits/stl_deque.h
index 7f601cbf0fb..d7589f71d7a 100644
--- a/libstdc++-v3/include/bits/stl_deque.h
+++ b/libstdc++-v3/include/bits/stl_deque.h
@@ -72,11 +72,19 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
* This function started off as a compiler kludge from SGI, but seems to
* be a useful wrapper around a repeated constant expression. The '512' is
* tunable (and no other code needs to change), but no investigation has
- * been done since inheriting the SGI code.
+ * been done since inheriting the SGI code. Touch _GLIBCXX_DEQUE_BUF_SIZE
+ * only if you know what you are doing, however: changing it breaks the
+ * binary compatibility!!
*/
+
+#ifndef _GLIBCXX_DEQUE_BUF_SIZE
+#define _GLIBCXX_DEQUE_BUF_SIZE 512
+#endif
+
inline size_t
__deque_buf_size(size_t __size)
- { return __size < 512 ? size_t(512 / __size) : size_t(1); }
+ { return (__size < _GLIBCXX_DEQUE_BUF_SIZE
+ ? size_t(_GLIBCXX_DEQUE_BUF_SIZE / __size) : size_t(1)); }
/**
@@ -1798,6 +1806,8 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
swap(deque<_Tp,_Alloc>& __x, deque<_Tp,_Alloc>& __y)
{ __x.swap(__y); }
+#undef _GLIBCXX_DEQUE_BUF_SIZE
+
_GLIBCXX_END_NESTED_NAMESPACE
#endif /* _STL_DEQUE_H */
diff --git a/libstdc++-v3/include/ext/throw_allocator.h b/libstdc++-v3/include/ext/throw_allocator.h
index 69daa15f5db..fd939b2e168 100644
--- a/libstdc++-v3/include/ext/throw_allocator.h
+++ b/libstdc++-v3/include/ext/throw_allocator.h
@@ -36,9 +36,11 @@
/** @file ext/throw_allocator.h
* This file is a GNU extension to the Standard C++ Library.
*
- * Contains an exception-throwing allocator, useful for testing
- * exception safety. In addition, allocation addresses are stored and
- * sanity checked.
+ * Contains two exception-generating types (throw_value, throw_allocator)
+ * intended to be used as value and allocator types while testing
+ * exception safety in templatized containers and algorithms. The
+ * allocator has additional log and debug features. The exception
+ * generated is of type forced_exception_error.
*/
#ifndef _THROW_ALLOCATOR_H
@@ -64,27 +66,30 @@
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
/**
- * @brief Thown by throw_allocator.
+ * @brief Thown by exception safety machinery.
* @ingroup exceptions
*/
- struct forced_exception_error : public std::exception
+ struct forced_error : public std::exception
{ };
- // Substitute for concurrence_error object in the case of -fno-exceptions.
+ // Substitute for forced_error object when -fno-exceptions.
inline void
- __throw_forced_exception_error()
+ __throw_forced_error()
{
#if __EXCEPTIONS
- throw forced_exception_error();
+ throw forced_error();
#else
__builtin_abort();
#endif
}
- // Base class for checking address and label information about
- // allocations. Create a std::map between the allocated address
- // (void*) and a datum for annotations, which are a pair of numbers
- // corresponding to label and allocated size.
+
+ /**
+ * @brief Base class for checking address and label information
+ * about allocations. Create a std::map between the allocated
+ * address (void*) and a datum for annotations, which are a pair of
+ * numbers corresponding to label and allocated size.
+ */
struct annotate_base
{
annotate_base()
@@ -92,7 +97,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
label();
map();
}
-
+
static void
set_label(size_t l)
{ label() = l; }
@@ -106,7 +111,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
{
if (p == NULL)
{
- std::string error("throw_allocator_base::insert null insert!\n");
+ std::string error("annotate_base::insert null insert!\n");
log_to_string(error, make_entry(p, size));
std::__throw_logic_error(error.c_str());
}
@@ -114,7 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
const_iterator found = map().find(p);
if (found != map().end())
{
- std::string error("throw_allocator_base::insert double insert!\n");
+ std::string error("annotate_base::insert double insert!\n");
log_to_string(error, make_entry(p, size));
log_to_string(error, *found);
std::__throw_logic_error(error.c_str());
@@ -130,7 +135,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
map().erase(p);
}
- // See if a particular address and size has been allocated.
+ // See if a particular address and allocation size has been saved.
inline void
check_allocated(void* p, size_t size)
{
@@ -142,7 +147,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
log_to_string(error, make_entry(p, size));
std::__throw_logic_error(error.c_str());
}
-
+
if (found->second.second != size)
{
std::string error("annotate_base::check_allocated by value "
@@ -166,7 +171,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
log_to_string(found, *beg);
++beg;
}
-
+
if (!found.empty())
{
std::string error("annotate_base::check_allocated by label\n");
@@ -213,15 +218,15 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
static size_t&
label()
{
- static size_t ll;
- return ll;
+ static size_t _S_label(std::numeric_limits<size_t>::max());
+ return _S_label;
}
static map_type&
map()
{
- static map_type mp;
- return mp;
+ static map_type _S_map;
+ return _S_map;
}
};
@@ -237,47 +242,133 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
return os << error;
}
- /// Base class for probability control and throw.
- struct probability_base
+
+ /**
+ * @brief Base struct for condition policy.
+ *
+ * Requires a public member function with the signature
+ * void throw_conditionally()
+ */
+ struct condition_base
+ {
+ virtual ~condition_base() { };
+ };
+
+
+ /**
+ * @brief Base class for incremental control and throw.
+ */
+ struct limit_condition : public condition_base
{
- // Scope-level probability adjustor objects: set probability for
- // throw at the beginning of a scope block, and restores to
- // previous probability when object is destroyed on exiting the
- // block.
+ // Scope-level adjustor objects: set limit for throw at the
+ // beginning of a scope block, and restores to previous limit when
+ // object is destroyed on exiting the block.
struct adjustor_base
{
private:
- const double _M_prob;
+ const size_t _M_orig;
public:
- adjustor_base() : _M_prob(get_probability()) { }
+ adjustor_base() : _M_orig(limit()) { }
+
+ virtual
+ ~adjustor_base() { set_limit(_M_orig); }
+ };
+
+ /// Never enter the condition.
+ struct never_adjustor : public adjustor_base
+ {
+ never_adjustor() { set_limit(std::numeric_limits<size_t>::max()); }
+ };
+
+ /// Always enter the condition.
+ struct always_adjustor : public adjustor_base
+ {
+ always_adjustor() { set_limit(count()); }
+ };
+
+ /// Enter the nth condition.
+ struct limit_adjustor : public adjustor_base
+ {
+ limit_adjustor(const size_t __l) { set_limit(__l); }
+ };
+
+ // Increment _S_count every time called.
+ // If _S_count matches the limit count, throw.
+ static void
+ throw_conditionally()
+ {
+ if (count() == limit())
+ __throw_forced_error();
+ ++count();
+ }
+
+ static size_t&
+ count()
+ {
+ static size_t _S_count(0);
+ return _S_count;
+ }
+
+ static size_t&
+ limit()
+ {
+ static size_t _S_limit(std::numeric_limits<size_t>::max());
+ return _S_limit;
+ }
+
+ // Zero the throw counter, set limit to argument.
+ static void
+ set_limit(const size_t __l)
+ {
+ limit() = __l;
+ count() = 0;
+ }
+ };
+
+
+ /**
+ * @brief Base class for random probability control and throw.
+ */
+ struct random_condition : public condition_base
+ {
+ // Scope-level adjustor objects: set probability for throw at the
+ // beginning of a scope block, and restores to previous
+ // probability when object is destroyed on exiting the block.
+ struct adjustor_base
+ {
+ private:
+ const double _M_orig;
+
+ public:
+ adjustor_base() : _M_orig(probability()) { }
virtual ~adjustor_base()
- { set_probability(_M_prob); }
+ { set_probability(_M_orig); }
};
- // Group condition.
+ /// Group condition.
struct group_adjustor : public adjustor_base
{
group_adjustor(size_t size)
- { set_probability(1 - std::pow(double(1 - get_probability()),
+ { set_probability(1 - std::pow(double(1 - probability()),
double(0.5 / (size + 1))));
}
};
- // Never enter the condition.
+ /// Never enter the condition.
struct never_adjustor : public adjustor_base
{
never_adjustor() { set_probability(0); }
};
- // Always enter the condition.
+ /// Always enter the condition.
struct always_adjustor : public adjustor_base
{
always_adjustor() { set_probability(1); }
};
- probability_base()
+ random_condition()
{
probability();
engine();
@@ -287,15 +378,11 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
set_probability(double __p)
{ probability() = __p; }
- static double&
- get_probability()
- { return probability(); }
-
- void
+ static void
throw_conditionally()
{
- if (generate() < get_probability())
- __throw_forced_exception_error();
+ if (generate() < probability())
+ __throw_forced_error();
}
void
@@ -311,7 +398,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
typedef std::tr1::mt19937 engine_type;
#endif
- double
+ static double
generate()
{
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -327,7 +414,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
double random = generator();
if (random < distribution.min() || random > distribution.max())
{
- std::string __s("throw_allocator::throw_conditionally");
+ std::string __s("random_condition::generate");
__s += "\n";
__s += "random number generated is: ";
char buf[40];
@@ -342,54 +429,186 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
static double&
probability()
{
- static double __p;
- return __p;
+ static double _S_p;
+ return _S_p;
}
static engine_type&
engine()
{
- static engine_type __e;
- return __e;
+ static engine_type _S_e;
+ return _S_e;
}
};
+
/**
- * @brief Allocator class with logging and exception control.
+ * @brief Class with exception generation control. Intended to be
+ * used as a value_type in templatized code.
+ *
+ * Note: Destructor not allowed to throw.
+ */
+ template<typename _Cond>
+ struct throw_value_base : public _Cond
+ {
+ typedef _Cond condition_type;
+
+ using condition_type::throw_conditionally;
+
+ std::size_t _M_i;
+
+ throw_value_base() : _M_i(0)
+ { throw_conditionally(); }
+
+ throw_value_base(const throw_value_base& __v)
+ : _M_i(__v._M_i)
+ { throw_conditionally(); }
+
+ explicit throw_value_base(const std::size_t __i)
+ : _M_i(__i)
+ { throw_conditionally(); }
+
+ throw_value_base&
+ operator=(const throw_value_base& __v)
+ {
+ throw_conditionally();
+ _M_i = __v._M_i;
+ return *this;
+ }
+
+ throw_value_base&
+ operator++()
+ {
+ throw_conditionally();
+ ++_M_i;
+ return *this;
+ }
+ };
+
+ template<typename _Cond>
+ inline void
+ swap(throw_value_base<_Cond>& __a, throw_value_base<_Cond>& __b)
+ {
+ typedef throw_value_base<_Cond> throw_value;
+ throw_value::throw_conditionally();
+ throw_value orig(__a);
+ __a = __b;
+ __b = orig;
+ }
+
+ // General instantiable types requirements.
+ template<typename _Cond>
+ inline bool
+ operator==(const throw_value_base<_Cond>& __a,
+ const throw_value_base<_Cond>& __b)
+ {
+ typedef throw_value_base<_Cond> throw_value;
+ throw_value::throw_conditionally();
+ bool __ret = __a._M_i == __b._M_i;
+ return __ret;
+ }
+
+ template<typename _Cond>
+ inline bool
+ operator<(const throw_value_base<_Cond>& __a,
+ const throw_value_base<_Cond>& __b)
+ {
+ typedef throw_value_base<_Cond> throw_value;
+ throw_value::throw_conditionally();
+ bool __ret = __a._M_i < __b._M_i;
+ return __ret;
+ }
+
+ // Numeric algorithms instantiable types requirements.
+ template<typename _Cond>
+ inline throw_value_base<_Cond>
+ operator+(const throw_value_base<_Cond>& __a,
+ const throw_value_base<_Cond>& __b)
+ {
+ typedef throw_value_base<_Cond> throw_value;
+ throw_value::throw_conditionally();
+ throw_value __ret(__a._M_i + __b._M_i);
+ return __ret;
+ }
+
+ template<typename _Cond>
+ inline throw_value_base<_Cond>
+ operator-(const throw_value_base<_Cond>& __a,
+ const throw_value_base<_Cond>& __b)
+ {
+ typedef throw_value_base<_Cond> throw_value;
+ throw_value::throw_conditionally();
+ throw_value __ret(__a._M_i - __b._M_i);
+ return __ret;
+ }
+
+ template<typename _Cond>
+ inline throw_value_base<_Cond>
+ operator*(const throw_value_base<_Cond>& __a,
+ const throw_value_base<_Cond>& __b)
+ {
+ typedef throw_value_base<_Cond> throw_value;
+ throw_value::throw_conditionally();
+ throw_value __ret(__a._M_i * __b._M_i);
+ return __ret;
+ }
+
+ /// Type throwing via limit condition.
+ struct throw_value_limit : public throw_value_base<limit_condition>
+ {
+ typedef throw_value_base<limit_condition> base_type;
+
+ throw_value_limit() { }
+
+ throw_value_limit(const throw_value_limit& __other)
+ : base_type(__other._M_i) { }
+
+ explicit throw_value_limit(const std::size_t __i) : base_type(__i) { }
+ };
+
+ /// Type throwing via random condition.
+ struct throw_value_random : public throw_value_base<random_condition>
+ {
+ typedef throw_value_base<random_condition> base_type;
+
+ throw_value_random() { }
+
+ throw_value_random(const throw_value_random& __other)
+ : base_type(__other._M_i) { }
+
+
+ explicit throw_value_random(const std::size_t __i) : base_type(__i) { }
+ };
+
+
+ /**
+ * @brief Allocator class with logging and exception generation control.
+ * Intended to be used as an allocator_type in templatized code.
* @ingroup allocators
+ *
+ * Note: Deallocate not allowed to throw.
*/
- template<typename T>
- class throw_allocator
- : public probability_base, public annotate_base
+ template<typename _Tp, typename _Cond>
+ class throw_allocator_base
+ : public annotate_base, public _Cond
{
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
- typedef T value_type;
+ typedef _Tp value_type;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type& reference;
typedef const value_type& const_reference;
private:
- std::allocator<value_type> _M_allocator;
+ typedef _Cond condition_type;
- public:
- template<typename U>
- struct rebind
- {
- typedef throw_allocator<U> other;
- };
-
- throw_allocator() throw() { }
-
- throw_allocator(const throw_allocator&) throw() { }
-
- template<typename U>
- throw_allocator(const throw_allocator<U>&) throw() { }
+ std::allocator<value_type> _M_allocator;
- ~throw_allocator() throw() { }
+ using condition_type::throw_conditionally;
+ public:
size_type
max_size() const throw()
{ return _M_allocator.max_size(); }
@@ -407,7 +626,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
}
void
- construct(pointer __p, const T& val)
+ construct(pointer __p, const value_type& val)
{ return _M_allocator.construct(__p, val); }
#ifdef __GXX_EXPERIMENTAL_CXX0X__
@@ -435,19 +654,97 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
annotate_base::check_allocated(__p, __t);
}
- using annotate_base::check_allocated;
- };
+ void
+ check_allocated(size_type __n)
+ { annotate_base::check_allocated(__n); }
+ };
- template<typename T>
+ template<typename _Tp, typename _Cond>
inline bool
- operator==(const throw_allocator<T>&, const throw_allocator<T>&)
+ operator==(const throw_allocator_base<_Tp, _Cond>&,
+ const throw_allocator_base<_Tp, _Cond>&)
{ return true; }
- template<typename T>
+ template<typename _Tp, typename _Cond>
inline bool
- operator!=(const throw_allocator<T>&, const throw_allocator<T>&)
+ operator!=(const throw_allocator_base<_Tp, _Cond>&,
+ const throw_allocator_base<_Tp, _Cond>&)
{ return false; }
+ /// Allocator throwing via limit condition.
+ template<typename _Tp>
+ struct throw_allocator_limit
+ : public throw_allocator_base<_Tp, limit_condition>
+ {
+ template<typename _Tp1>
+ struct rebind
+ { typedef throw_allocator_limit<_Tp1> other; };
+
+ throw_allocator_limit() throw() { }
+
+ throw_allocator_limit(const throw_allocator_limit&) throw() { }
+
+ template<typename _Tp1>
+ throw_allocator_limit(const throw_allocator_limit<_Tp1>&) throw() { }
+
+ ~throw_allocator_limit() throw() { }
+ };
+
+ /// Allocator throwing via random condition.
+ template<typename _Tp>
+ struct throw_allocator_random
+ : public throw_allocator_base<_Tp, random_condition>
+ {
+ template<typename _Tp1>
+ struct rebind
+ { typedef throw_allocator_random<_Tp1> other; };
+
+ throw_allocator_random() throw() { }
+
+ throw_allocator_random(const throw_allocator_random&) throw() { }
+
+ template<typename _Tp1>
+ throw_allocator_random(const throw_allocator_random<_Tp1>&) throw() { }
+
+ ~throw_allocator_random() throw() { }
+ };
+
_GLIBCXX_END_NAMESPACE
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+
+# include <bits/functional_hash.h>
+
+namespace std
+{
+ /// Explicit specialization of std::hash for __gnu_cxx::throw_value_limit.
+ template<>
+ struct hash<__gnu_cxx::throw_value_limit>
+ : public std::unary_function<__gnu_cxx::throw_value_limit, size_t>
+ {
+ size_t
+ operator()(__gnu_cxx::throw_value_limit __val) const
+ {
+ std::hash<std::size_t> h;
+ size_t __result = h(__val._M_i);
+ return __result;
+ }
+ };
+
+ /// Explicit specialization of std::hash for __gnu_cxx::throw_value_limit.
+ template<>
+ struct hash<__gnu_cxx::throw_value_random>
+ : public std::unary_function<__gnu_cxx::throw_value_random, size_t>
+ {
+ size_t
+ operator()(__gnu_cxx::throw_value_random __val) const
+ {
+ std::hash<std::size_t> h;
+ size_t __result = h(__val._M_i);
+ return __result;
+ }
+ };
+} // end namespace std
+#endif
+
#endif
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index eb10b348ad1..19503bdf05e 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -1571,8 +1571,8 @@ namespace std
}
static void
- _M_init_functor(_Any_data& __functor, const _Functor& __f)
- { _M_init_functor(__functor, __f, _Local_storage()); }
+ _M_init_functor(_Any_data& __functor, _Functor&& __f)
+ { _M_init_functor(__functor, std::move(__f), _Local_storage()); }
template<typename _Signature>
static bool
@@ -1595,13 +1595,13 @@ namespace std
{ return true; }
private:
- static void
- _M_init_functor(_Any_data& __functor, const _Functor& __f, true_type)
- { new (__functor._M_access()) _Functor(__f); }
+ static void
+ _M_init_functor(_Any_data& __functor, _Functor&& __f, true_type)
+ { new (__functor._M_access()) _Functor(std::move(__f)); }
static void
- _M_init_functor(_Any_data& __functor, const _Functor& __f, false_type)
- { __functor._M_access<_Functor*>() = new _Functor(__f); }
+ _M_init_functor(_Any_data& __functor, _Functor&& __f, false_type)
+ { __functor._M_access<_Functor*>() = new _Functor(std::move(__f)); }
};
template<typename _Functor>
@@ -1927,9 +1927,9 @@ namespace std
template<typename _Functor>
typename __gnu_cxx::__enable_if<!is_integral<_Functor>::value,
function&>::__type
- operator=(_Functor __f)
+ operator=(_Functor&& __f)
{
- function(__f).swap(*this);
+ function(std::forward<_Functor>(__f)).swap(*this);
return *this;
}
@@ -1969,9 +1969,10 @@ namespace std
/*
template<typename _Functor, typename _Alloc>
void
- assign(_Functor __f, const _Alloc& __a)
+ assign(_Functor&& __f, const _Alloc& __a)
{
- function(__f, __a).swap(*this);
+ function(allocator_arg, __a,
+ std::forward<_Functor>(__f)).swap(*this);
}
*/
@@ -2066,7 +2067,7 @@ namespace std
{
_M_invoker = &_My_handler::_M_invoke;
_M_manager = &_My_handler::_M_manager;
- _My_handler::_M_init_functor(_M_functor, __f);
+ _My_handler::_M_init_functor(_M_functor, std::move(__f));
}
}
@@ -2076,13 +2077,7 @@ namespace std
operator()(_ArgTypes... __args) const
{
if (_M_empty())
- {
-#if __EXCEPTIONS
- throw bad_function_call();
-#else
- __builtin_abort();
-#endif
- }
+ __throw_bad_function_call();
return _M_invoker(_M_functor, std::forward<_ArgTypes>(__args)...);
}
diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index b8c54b6075f..8f9975dea1a 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -42,6 +42,7 @@
#include <system_error>
#include <exception>
#include <cstdatomic>
+#include <bits/functexcept.h>
namespace std
{
@@ -172,7 +173,7 @@ namespace std
void
_M_set(_Res&& __res)
{
- ::new (_M_addr()) _Res(_Move_result<_Res>::_S_move(__res));
+ ::new (_M_addr()) _Res(std::move(__res));
_M_initialized = true;
}
@@ -183,27 +184,6 @@ namespace std
};
- /// Workaround for CWG issue 664 and c++/34022
- template<typename _Res, bool = is_scalar<_Res>::value>
- struct _Move_result;
-
- /// Specialization for scalar types returns rvalue not rvalue-reference.
- template<typename _Res>
- struct _Move_result<_Res, true>
- {
- typedef _Res __rval_type;
- static _Res _S_move(_Res __res) { return __res; }
- };
-
- /// Specialization for non-scalar types returns rvalue-reference.
- template<typename _Res>
- struct _Move_result<_Res, false>
- {
- typedef _Res&& __rval_type;
- static _Res&& _S_move(_Res& __res) { return std::move(__res); }
- };
-
-
// TODO: use template alias when available
/*
template<typename _Res>
@@ -426,7 +406,6 @@ namespace std
typedef __basic_future<_Res> _Base_type;
typedef typename _Base_type::__state_type __state_type;
- typedef __future_base::_Move_result<_Res> _Mover;
explicit
unique_future(const __state_type& __state) : _Base_type(__state) { }
@@ -440,9 +419,9 @@ namespace std
unique_future& operator=(const unique_future&) = delete;
/// Retrieving the value
- typename _Mover::__rval_type
+ _Res&&
get()
- { return _Mover::_S_move(this->_M_get_result()._M_value()); }
+ { return std::move(this->_M_get_result()._M_value()); }
};
/// Partial specialization for unique_future<R&>
@@ -586,7 +565,6 @@ namespace std
template<typename> friend class packaged_task;
typedef __future_base::_State _State;
- typedef __future_base::_Move_result<_Res> _Mover;
typedef __future_base::_Result<_Res> result_type;
shared_ptr<_State> _M_future;
@@ -654,7 +632,7 @@ namespace std
set_value(_Res&& __r)
{
if (!_M_satisfied())
- _M_storage->_M_set(_Mover::_S_move(__r));
+ _M_storage->_M_set(std::move(__r));
_M_future->_M_set_result(std::move(_M_storage));
}
@@ -940,11 +918,9 @@ namespace std
}
__catch (const future_error& __e)
{
-#ifdef __EXCEPTIONS
if (__e.code() == future_errc::future_already_retrieved)
- throw std::bad_function_call();
- throw;
-#endif
+ __throw_bad_function_call();
+ __throw_exception_again;
}
}
@@ -953,13 +929,7 @@ namespace std
operator()(_ArgTypes... __args)
{
if (!static_cast<bool>(_M_task) || _M_promise._M_satisfied())
- {
-#ifdef __EXCEPTIONS
- throw std::bad_function_call();
-#else
- __builtin_abort();
-#endif
- }
+ __throw_bad_function_call();
__try
{
diff --git a/libstdc++-v3/src/functexcept.cc b/libstdc++-v3/src/functexcept.cc
index 352a6b70aef..d47eccbe11c 100644
--- a/libstdc++-v3/src/functexcept.cc
+++ b/libstdc++-v3/src/functexcept.cc
@@ -29,6 +29,7 @@
#include <ios>
#include <system_error>
#include <future>
+#include <functional>
#ifdef _GLIBCXX_USE_NLS
# include <libintl.h>
@@ -104,6 +105,9 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__throw_future_error(int __i)
{ throw future_error(future_errc(__i)); }
+ void
+ __throw_bad_function_call()
+ { throw bad_function_call(); }
#else
void
__throw_bad_exception(void)
@@ -169,6 +173,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
__throw_future_error(int)
{ std::abort(); }
+ void
+ __throw_bad_function_call()
+ { std::abort(); }
+
#endif //__EXCEPTIONS
_GLIBCXX_END_NAMESPACE
diff --git a/libstdc++-v3/src/locale_init.cc b/libstdc++-v3/src/locale_init.cc
index 1a479742517..893b6063d5c 100644
--- a/libstdc++-v3/src/locale_init.cc
+++ b/libstdc++-v3/src/locale_init.cc
@@ -208,9 +208,25 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
locale::locale() throw() : _M_impl(0)
{
_S_initialize();
- __gnu_cxx::__scoped_lock sentry(get_locale_mutex());
- _S_global->_M_add_reference();
+
+ // Checked locking to optimize the common case where _S_global
+ // still points to _S_classic (locale::_S_initialize_once()):
+ // - If they are the same, just increment the reference count and
+ // we are done. This effectively constructs a C locale object
+ // identical to the static c_locale.
+ // - Otherwise, _S_global can and may be destroyed due to
+ // locale::global() call on another thread, in which case we
+ // fall back to lock protected access to both _S_global and
+ // its reference count.
_M_impl = _S_global;
+ if (_M_impl == _S_classic)
+ _M_impl->_M_add_reference();
+ else
+ {
+ __gnu_cxx::__scoped_lock sentry(get_locale_mutex());
+ _S_global->_M_add_reference();
+ _M_impl = _S_global;
+ }
}
locale
diff --git a/libstdc++-v3/src/thread.cc b/libstdc++-v3/src/thread.cc
index 334e5cb8f1f..879e864edd4 100644
--- a/libstdc++-v3/src/thread.cc
+++ b/libstdc++-v3/src/thread.cc
@@ -83,6 +83,9 @@ namespace std
void
thread::_M_start_thread(__shared_base_type __b)
{
+ if (!__gthread_active_p())
+ __throw_system_error(int(errc::operation_not_permitted));
+
__b->_M_this_ptr = __b;
int __e = __gthread_create(&_M_id._M_thread,
&execute_native_thread_routine, __b.get());
diff --git a/libstdc++-v3/testsuite/20_util/function/assign/move_target.cc b/libstdc++-v3/testsuite/20_util/function/assign/move_target.cc
new file mode 100644
index 00000000000..0a1c189e504
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/assign/move_target.cc
@@ -0,0 +1,47 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <functional>
+
+struct moveable
+{
+ moveable() = default;
+ ~moveable() = default;
+ // target object must be CopyConstructible,
+ // but should not be copied during this test
+ moveable(const moveable& c) { throw "copied"; }
+ moveable& operator=(const moveable&) = delete;
+ moveable(moveable&&) { }
+
+ void operator()() const { }
+};
+
+void test01()
+{
+ std::function<void ()> f;
+ f = moveable();
+ f();
+}
+
+int main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/20_util/function/cons/move_target.cc b/libstdc++-v3/testsuite/20_util/function/cons/move_target.cc
new file mode 100644
index 00000000000..2396ca10171
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/cons/move_target.cc
@@ -0,0 +1,46 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <functional>
+
+struct moveable
+{
+ moveable() = default;
+ ~moveable() = default;
+ // target object must be CopyConstructible,
+ // but should not be copied during this test
+ moveable(const moveable& c) { throw "copied"; }
+ moveable& operator=(const moveable&) = delete;
+ moveable(moveable&&) { }
+
+ void operator()() const { }
+};
+
+void test01()
+{
+ std::function<void ()> f = moveable();
+ f();
+}
+
+int main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..0393ac71d16
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/bitset/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers.
+
+#include <bitset>
+
+template class std::bitset<10>;
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
index f7439944837..314a13f64e7 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1494 }
+// { dg-error "no matching" "" { target *-*-* } 1502 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
index b1136f59cf7..2ae51b836d8 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1433 }
+// { dg-error "no matching" "" { target *-*-* } 1441 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
index 8752a7e7b10..22bb275068b 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1433 }
+// { dg-error "no matching" "" { target *-*-* } 1441 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
index 8cf322e8219..cdacae483f9 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc
@@ -18,7 +18,7 @@
// <http://www.gnu.org/licenses/>.
// { dg-do compile }
-// { dg-error "no matching" "" { target *-*-* } 1578 }
+// { dg-error "no matching" "" { target *-*-* } 1586 }
// { dg-excess-errors "" }
#include <deque>
diff --git a/libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..21997008251
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/deque/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <deque>
+
+template class std::deque<int>;
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 e9195ddbc64..eb286e0f54d 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc
@@ -23,7 +23,7 @@
int main()
{
typedef int value_type;
- typedef __gnu_cxx::throw_allocator<value_type> allocator_type;
+ typedef __gnu_cxx::throw_allocator_random<value_type> allocator_type;
typedef std::list<value_type, allocator_type> list_type;
insert1<list_type>();
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 c3ec6628f3d..aebbe0ba537 100644
--- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
+++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h
@@ -47,7 +47,7 @@ void insert1()
list1.insert(list1.begin(), 10, 99);
VERIFY( false );
}
- catch (__gnu_cxx::forced_exception_error&)
+ catch (__gnu_cxx::forced_error&)
{
VERIFY( true );
}
@@ -74,7 +74,7 @@ void insert1()
list2.insert(list2.begin(), data, data + 10);
VERIFY( false );
}
- catch (__gnu_cxx::forced_exception_error&)
+ catch (__gnu_cxx::forced_error&)
{
VERIFY( true );
}
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/exception/basic.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/exception/basic.cc
new file mode 100644
index 00000000000..33232f965f6
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/exception/basic.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+
+// 2009-11-30 Benjamin Kosnik <benjamin@redhat.com>
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <list>
+#include <exception/safety.h>
+
+void
+value()
+{
+ typedef __gnu_cxx::throw_value_limit value_type;
+ typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
+ typedef std::list<value_type, allocator_type> test_type;
+ __gnu_test::basic_safety<test_type> test;
+}
+
+// Container requirement testing, exceptional behavior
+int main()
+{
+ value();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/exception/generation_prohibited.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/exception/generation_prohibited.cc
new file mode 100644
index 00000000000..f3d16028e2a
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/exception/generation_prohibited.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+
+// 2009-09-09 Benjamin Kosnik <benjamin@redhat.com>
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <list>
+#include <exception/safety.h>
+
+// Container requirement testing, exceptional behavior
+int main()
+{
+ typedef __gnu_cxx::throw_value_random value_type;
+ typedef __gnu_cxx::throw_allocator_random<value_type> allocator_type;
+ typedef std::list<value_type, allocator_type> test_type;
+ __gnu_test::generation_prohibited<test_type> test;
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/exception/propagation_consistent.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/exception/propagation_consistent.cc
new file mode 100644
index 00000000000..02d8d0b254f
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/exception/propagation_consistent.cc
@@ -0,0 +1,34 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-require-cstdint "" }
+
+// 2009-09-09 Benjamin Kosnik <benjamin@redhat.com>
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <list>
+#include <exception/safety.h>
+
+// Container requirement testing, exceptional behavior
+int main()
+{
+ typedef __gnu_cxx::throw_value_limit value_type;
+ typedef __gnu_cxx::throw_allocator_limit<value_type> allocator_type;
+ typedef std::list<value_type, allocator_type> test_type;
+ __gnu_test::propagation_consistent<test_type> test;
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..78e026a7fd0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/list/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <list>
+
+template class std::list<int>;
diff --git a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
index 031e4a749c3..647fef7f808 100644
--- a/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/operators/1_neg.cc
@@ -41,5 +41,5 @@ void test01()
test &= itr == mapByName.end(); // { dg-error "no" }
}
-// { dg-error "candidates are" "" { target *-*-* } 212 }
-// { dg-error "candidates are" "" { target *-*-* } 216 }
+// { dg-error "candidate is" "" { target *-*-* } 212 }
+// { dg-error "candidate is" "" { target *-*-* } 216 }
diff --git a/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..3b35d54b0b1
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/map/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+
+template class std::map<int, double>;
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..be8fcb04917
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multimap/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <map>
+
+template class std::multimap<int, double>;
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..cb522b2e5c8
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/multiset/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+
+template class std::multiset<int>;
diff --git a/libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..54a25271f1d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/priority_queue/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers.
+
+#include <queue>
+
+template class std::priority_queue<int>;
diff --git a/libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..7daf02999ee
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/queue/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers.
+
+#include <queue>
+
+template class std::queue<int>;
diff --git a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
index 9f12a6bcfcf..6765fc1d1da 100644
--- a/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/operators/1_neg.cc
@@ -39,5 +39,5 @@ void test01()
test &= itr == setByName.end(); // { dg-error "no" }
}
-// { dg-error "candidates are" "" { target *-*-* } 287 }
-// { dg-error "candidates are" "" { target *-*-* } 291 }
+// { dg-error "candidate is" "" { target *-*-* } 287 }
+// { dg-error "candidate is" "" { target *-*-* } 291 }
diff --git a/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..e957decf042
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/set/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <set>
+
+template class std::set<int>;
diff --git a/libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..93307bcf43d
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/stack/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers.
+
+#include <stack>
+
+template class std::stack<int>;
diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1_c++0x.cc
new file mode 100644
index 00000000000..2e5787702a0
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/explicit_instantiation/1_c++0x.cc
@@ -0,0 +1,25 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// This file tests explicit instantiation of library containers
+
+#include <vector>
+
+template class std::vector<int>;
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
index db3baf35772..031ce0ba38e 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/assign_neg.cc
@@ -33,4 +33,4 @@ void test01()
}
// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 912 }
+// { dg-error "deleted function" "" { target *-*-* } 890 }
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
index 8e57d3198f4..65cf9fdbf9c 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/copy_neg.cc
@@ -32,4 +32,4 @@ void test01()
}
// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 911 }
+// { dg-error "deleted function" "" { target *-*-* } 889 }
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
index 5e16d145ccc..54347408c53 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/assign_neg.cc
@@ -33,4 +33,4 @@ void test01()
}
// { dg-error "used here" "" { target *-*-* } 32 }
-// { dg-error "deleted function" "" { target *-*-* } 630 }
+// { dg-error "deleted function" "" { target *-*-* } 608 }
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
index 1e857977927..79d2e16639f 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/copy_neg.cc
@@ -32,4 +32,4 @@ void test01()
}
// { dg-error "used here" "" { target *-*-* } 31 }
-// { dg-error "deleted function" "" { target *-*-* } 614 }
+// { dg-error "deleted function" "" { target *-*-* } 592 }
diff --git a/libstdc++-v3/testsuite/30_threads/shared_future/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/shared_future/cons/assign_neg.cc
index 26211fe1c76..0f284cd0a26 100644
--- a/libstdc++-v3/testsuite/30_threads/shared_future/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/shared_future/cons/assign_neg.cc
@@ -35,4 +35,4 @@ void test01()
}
// { dg-error "used here" "" { target *-*-* } 34 }
-// { dg-error "deleted function" "" { target *-*-* } 514 }
+// { dg-error "deleted function" "" { target *-*-* } 493 }
diff --git a/libstdc++-v3/testsuite/30_threads/unique_future/cons/assign_neg.cc b/libstdc++-v3/testsuite/30_threads/unique_future/cons/assign_neg.cc
index e29148ee785..69caf12edb4 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_future/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_future/cons/assign_neg.cc
@@ -35,4 +35,4 @@ void test01()
}
// { dg-error "used here" "" { target *-*-* } 34 }
-// { dg-error "deleted function" "" { target *-*-* } 440 }
+// { dg-error "deleted function" "" { target *-*-* } 419 }
diff --git a/libstdc++-v3/testsuite/30_threads/unique_future/cons/copy_neg.cc b/libstdc++-v3/testsuite/30_threads/unique_future/cons/copy_neg.cc
index 8134c7d9219..43e940cfa76 100644
--- a/libstdc++-v3/testsuite/30_threads/unique_future/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/30_threads/unique_future/cons/copy_neg.cc
@@ -34,4 +34,4 @@ void test01()
}
// { dg-error "used here" "" { target *-*-* } 33 }
-// { dg-error "deleted function" "" { target *-*-* } 439 }
+// { dg-error "deleted function" "" { target *-*-* } 418 }
diff --git a/libstdc++-v3/testsuite/ext/forced_exception_error/cons_virtual_derivation.cc b/libstdc++-v3/testsuite/ext/forced_error/cons_virtual_derivation.cc
index ba6b1f49013..f505a796ed0 100644
--- a/libstdc++-v3/testsuite/ext/forced_exception_error/cons_virtual_derivation.cc
+++ b/libstdc++-v3/testsuite/ext/forced_error/cons_virtual_derivation.cc
@@ -24,7 +24,7 @@
int main()
{
- typedef __gnu_cxx::forced_exception_error test_type;
+ typedef __gnu_cxx::forced_error test_type;
__gnu_test::diamond_derivation<test_type, true>::test();
return 0;
}
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc b/libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc
index 1c7a6278bce..b4d099671e2 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/check_allocate_max_size.cc
@@ -24,7 +24,7 @@
int main()
{
typedef int value_type;
- typedef __gnu_cxx::throw_allocator<value_type> allocator_type;
+ typedef __gnu_cxx::throw_allocator_random<value_type> allocator_type;
__gnu_test::check_allocate_max_size<allocator_type>();
return 0;
}
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc b/libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc
index 1a98078c825..3f9d37ab12d 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/check_deallocate_null.cc
@@ -24,7 +24,7 @@
int main()
{
typedef int value_type;
- typedef __gnu_cxx::throw_allocator<value_type> allocator_type;
+ typedef __gnu_cxx::throw_allocator_random<value_type> allocator_type;
try { __gnu_test::check_deallocate_null<allocator_type>(); }
catch (std::logic_error&)
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc b/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc
index cfc38ee02f6..181a1ebc78e 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/check_delete.cc
@@ -24,7 +24,7 @@
int main()
{
- typedef __gnu_cxx::throw_allocator<unsigned int> allocator_type;
+ typedef __gnu_cxx::throw_allocator_random<unsigned int> allocator_type;
__gnu_test::check_delete<allocator_type, true>();
return 0;
}
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc b/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc
index 2d42891766b..4338471a02a 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/check_new.cc
@@ -24,7 +24,7 @@
int main()
{
- typedef __gnu_cxx::throw_allocator<unsigned int> allocator_type;
+ typedef __gnu_cxx::throw_allocator_random<unsigned int> allocator_type;
__gnu_test::check_new<allocator_type, true>();
return 0;
}
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc
index c53517ebc13..65ef6dbb661 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_global.cc
@@ -25,7 +25,7 @@
typedef char char_t;
typedef std::char_traits<char_t> traits_t;
-typedef __gnu_cxx::throw_allocator<char_t> allocator_t;
+typedef __gnu_cxx::throw_allocator_random<char_t> allocator_t;
typedef std::basic_string<char_t, traits_t, allocator_t> string_t;
string_t s("bayou bend");
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc
index c2e918ccc25..4f00928c69b 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/deallocate_local.cc
@@ -24,7 +24,7 @@
typedef char char_t;
typedef std::char_traits<char_t> traits_t;
-typedef __gnu_cxx::throw_allocator<char_t> allocator_t;
+typedef __gnu_cxx::throw_allocator_random<char_t> allocator_t;
typedef std::basic_string<char_t, traits_t, allocator_t> string_t;
int main()
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc b/libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc
index 659807d0be6..c2600446ff2 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/explicit_instantiation.cc
@@ -21,4 +21,5 @@
#include <cstdlib>
#include <ext/throw_allocator.h>
-template class __gnu_cxx::throw_allocator<int>;
+template class __gnu_cxx::throw_allocator_random<int>;
+template class __gnu_cxx::throw_allocator_limit<int>;
diff --git a/libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc b/libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc
index 395cacc0348..fd1ee8df499 100644
--- a/libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc
+++ b/libstdc++-v3/testsuite/ext/throw_allocator/variadic_construct.cc
@@ -29,7 +29,7 @@ void test01()
{
bool test __attribute__((unused)) = true;
typedef std::pair<int, char> pair_type;
- __gnu_cxx::throw_allocator<pair_type> alloc1;
+ __gnu_cxx::throw_allocator_random<pair_type> alloc1;
pair_type* ptp1 = alloc1.allocate(1);
alloc1.construct(ptp1, 3, 'a');
diff --git a/libstdc++-v3/testsuite/ext/throw_value/cons.cc b/libstdc++-v3/testsuite/ext/throw_value/cons.cc
new file mode 100644
index 00000000000..fa3f3f71ca0
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/throw_value/cons.cc
@@ -0,0 +1,43 @@
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <type_traits>
+#include <ext/throw_allocator.h>
+
+void foo1()
+{
+ typedef __gnu_cxx::throw_value_limit value_type;
+ value_type v1;
+ value_type v2(v2);
+ value_type v3(value_type());
+}
+
+bool foo2()
+{
+ typedef __gnu_cxx::throw_value_limit value_type;
+ bool b = std::is_convertible<value_type, value_type>::value;
+ return b;
+}
+
+int main()
+{
+ foo1();
+ foo2();
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/util/exception/safety.h b/libstdc++-v3/testsuite/util/exception/safety.h
new file mode 100644
index 00000000000..ce9dad4f7ba
--- /dev/null
+++ b/libstdc++-v3/testsuite/util/exception/safety.h
@@ -0,0 +1,1066 @@
+// -*- C++ -*-
+
+// Copyright (C) 2009 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License as published by the Free Software
+// Foundation; either version 3, or (at your option) any later
+// version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef _GLIBCXX_EXCEPTION_SAFETY_H
+#define _GLIBCXX_EXCEPTION_SAFETY_H
+
+#include <testsuite_container_traits.h>
+#include <ext/throw_allocator.h>
+
+// Container requirement testing.
+namespace __gnu_test
+{
+ // Base class for exception testing, contains utilities.
+ struct setup_base
+ {
+ typedef std::size_t size_type;
+ typedef std::uniform_int_distribution<size_type> distribution_type;
+ typedef std::mt19937 engine_type;
+
+ // Return randomly generated integer on range [0, __max_size].
+ static size_type
+ generate(size_type __max_size)
+ {
+ // Make the generator static...
+ const engine_type engine;
+ const distribution_type distribution;
+ static auto generator = std::bind(distribution, engine,
+ std::placeholders::_1);
+
+ // ... but set the range for this particular invocation here.
+ const typename distribution_type::param_type p(0, __max_size);
+ size_type random = generator(p);
+ if (random < distribution.min() || random > distribution.max())
+ {
+ std::string __s("setup_base::generate");
+ __s += "\n";
+ __s += "random number generated is: ";
+ char buf[40];
+ __builtin_sprintf(buf, "%lu", random);
+ __s += buf;
+ __s += " on range [";
+ __builtin_sprintf(buf, "%lu", distribution.min());
+ __s += buf;
+ __s += ", ";
+ __builtin_sprintf(buf, "%lu", distribution.max());
+ __s += buf;
+ __s += "]\n";
+ std::__throw_out_of_range(__s.c_str());
+ }
+ return random;
+ }
+
+ // Given an instantiating type, return a unique value.
+ template<typename _Tp>
+ struct generate_unique
+ {
+ typedef _Tp value_type;
+
+ operator value_type()
+ {
+ static value_type __ret;
+ ++__ret;
+ return __ret;
+ }
+ };
+
+ // Partial specialization for pair.
+ template<typename _Tp1, typename _Tp2>
+ struct generate_unique<std::pair<const _Tp1, _Tp2>>
+ {
+ typedef _Tp1 first_type;
+ typedef _Tp2 second_type;
+ typedef std::pair<const _Tp1, _Tp2> pair_type;
+
+ operator pair_type()
+ {
+ static first_type _S_1;
+ static second_type _S_2;
+ ++_S_1;
+ ++_S_2;
+ return pair_type(_S_1, _S_2);
+ }
+ };
+
+ // Partial specialization for throw_value
+ template<typename _Cond>
+ struct generate_unique<__gnu_cxx::throw_value_base<_Cond>>
+ {
+ typedef __gnu_cxx::throw_value_base<_Cond> value_type;
+
+ operator value_type()
+ {
+ static size_t _S_i(0);
+ return value_type(_S_i++);
+ }
+ };
+
+
+ // Construct container of size n directly. _Tp == container type.
+ template<typename _Tp>
+ struct make_container_base
+ {
+ _Tp _M_container;
+
+ make_container_base() = default;
+ make_container_base(const size_type n): _M_container(n) { }
+
+ operator _Tp&() { return _M_container; }
+ };
+
+ // Construct container of size n, via multiple insertions. For
+ // associated and unordered types, unique value_type elements are
+ // necessary.
+ template<typename _Tp, bool = traits<_Tp>::is_mapped::value>
+ struct make_insert_container_base
+ : public make_container_base<_Tp>
+ {
+ using make_container_base<_Tp>::_M_container;
+ typedef typename _Tp::value_type value_type;
+
+ make_insert_container_base(const size_type n)
+ {
+ for (size_type i = 0; i < n; ++i)
+ {
+ value_type v = generate_unique<value_type>();
+ _M_container.insert(v);
+ }
+ assert(_M_container.size() == n);
+ }
+ };
+
+ template<typename _Tp>
+ struct make_insert_container_base<_Tp, false>
+ : public make_container_base<_Tp>
+ {
+ using make_container_base<_Tp>::_M_container;
+ typedef typename _Tp::value_type value_type;
+
+ make_insert_container_base(const size_type n)
+ {
+ for (size_type i = 0; i < n; ++i)
+ {
+ value_type v = generate_unique<value_type>();
+ _M_container.insert(_M_container.end(), v);
+ }
+ assert(_M_container.size() == n);
+ }
+ };
+
+ template<typename _Tp, bool = traits<_Tp>::has_size_type_constructor::value>
+ struct make_container_n;
+
+ // Specialization for non-associative types that have a constructor with
+ // a size argument.
+ template<typename _Tp>
+ struct make_container_n<_Tp, true>
+ : public make_container_base<_Tp>
+ {
+ make_container_n(const size_type n) : make_container_base<_Tp>(n) { }
+ };
+
+ template<typename _Tp>
+ struct make_container_n<_Tp, false>
+ : public make_insert_container_base<_Tp>
+ {
+ make_container_n(const size_type n)
+ : make_insert_container_base<_Tp>(n) { }
+ };
+
+
+ // Randomly size and populate a given container reference.
+ // NB: Responsibility for turning off exceptions lies with caller.
+ template<typename _Tp, bool = traits<_Tp>::is_allocator_aware::value>
+ struct populate
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::allocator_type allocator_type;
+ typedef typename container_type::value_type value_type;
+
+ populate(_Tp& __container)
+ {
+ const allocator_type a = __container.get_allocator();
+
+ // Size test container.
+ const size_type max_elements = 100;
+ size_type n = generate(max_elements);
+
+ // Construct new container.
+ make_container_n<container_type> made(n);
+ container_type& tmp = made;
+ std::swap(tmp, __container);
+ }
+ };
+
+ // Partial specialization, empty.
+ template<typename _Tp>
+ struct populate<_Tp, false>
+ {
+ populate(_Tp&) { }
+ };
+
+ // Compare two containers for equivalence.
+ // Right now, that means size.
+ // Returns true if equal, throws if not.
+ template<typename _Tp>
+ static bool
+ compare(const _Tp& __control, const _Tp& __test)
+ {
+ // Make sure test container is in a consistent state, as
+ // compared to the control container.
+ // NB: Should be equivalent to __test != __control, but
+ // computed without equivalence operators
+ const size_type szt = std::distance(__test.begin(), __test.end());
+ const size_type szc = std::distance(__control.begin(),
+ __control.end());
+ bool __equal_size = szt == szc;
+
+ // Should test iterator validity before and after exception.
+ bool __equal_it = std::equal(__test.begin(), __test.end(),
+ __control.begin());
+
+ if (!__equal_size || !__equal_it)
+ throw std::logic_error("setup_base::compare containers not equal");
+
+ return true;
+ }
+ };
+
+
+ // Containing structure holding functors.
+ struct functor_base : public setup_base
+ {
+ // Abstract the erase function.
+ template<typename _Tp>
+ struct erase_base
+ {
+ typedef typename _Tp::iterator iterator;
+
+ iterator (_Tp::* _F_erase_point)(iterator);
+ iterator (_Tp::* _F_erase_range)(iterator, iterator);
+
+ erase_base()
+ : _F_erase_point(&_Tp::erase), _F_erase_range(&_Tp::erase) { }
+ };
+
+ // Specialization, as forward_list has erase_after.
+ template<typename _Tp1, typename _Tp2>
+ struct erase_base<std::forward_list<_Tp1, _Tp2>>
+ {
+ typedef std::forward_list<_Tp1, _Tp2> container_type;
+ typedef typename container_type::iterator iterator;
+ typedef typename container_type::const_iterator const_iterator;
+
+ void (container_type::* _F_erase_point)(const_iterator);
+ void (container_type::* _F_erase_range)(const_iterator, const_iterator);
+
+ erase_base()
+ : _F_erase_point(&container_type::erase_after),
+ _F_erase_range(&container_type::erase_after) { }
+ };
+
+ template<typename _Tp, bool = traits<_Tp>::has_erase::value>
+ struct erase_point : public erase_base<_Tp>
+ {
+ using erase_base<_Tp>::_F_erase_point;
+
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ // NB: Should be equivalent to size() member function, but
+ // computed with begin() and end().
+ const size_type sz = std::distance(__container.begin(),
+ __container.end());
+
+ // NB: Lowest common denominator: use forward iterator operations.
+ auto i = __container.begin();
+ std::advance(i, generate(sz));
+
+ // Makes it easier to think of this as __container.erase(i)
+ (__container.*_F_erase_point)(i);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct erase_point<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+ };
+
+
+ template<typename _Tp, bool = traits<_Tp>::has_erase::value>
+ struct erase_range : public erase_base<_Tp>
+ {
+ using erase_base<_Tp>::_F_erase_range;
+
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ const size_type sz = std::distance(__container.begin(),
+ __container.end());
+ size_type s1 = generate(sz);
+ size_type s2 = generate(sz);
+ auto i1 = __container.begin();
+ auto i2 = __container.begin();
+ std::advance(i1, std::min(s1, s2));
+ std::advance(i2, std::max(s1, s2));
+
+ // Makes it easier to think of this as __container.erase(i1, i2).
+ (__container.*_F_erase_range)(i1, i2);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct erase_range<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+ };
+
+
+ template<typename _Tp, bool = traits<_Tp>::has_push_pop::value>
+ struct pop_front
+ {
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ __container.pop_front();
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct pop_front<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+ };
+
+
+ template<typename _Tp, bool = traits<_Tp>::has_push_pop::value
+ && traits<_Tp>::is_reversible::value>
+ struct pop_back
+ {
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ __container.pop_back();
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct pop_back<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+ };
+
+
+ template<typename _Tp, bool = traits<_Tp>::has_push_pop::value>
+ struct push_front
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::value_type value_type;
+
+ void
+ operator()(_Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ __test.push_front(cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+
+ // Assumes containers start out equivalent.
+ void
+ operator()(_Tp& __control, _Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ __test.push_front(cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct push_front<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+
+ void
+ operator()(_Tp&, _Tp&) { }
+ };
+
+
+ template<typename _Tp, bool = traits<_Tp>::has_push_pop::value
+ && traits<_Tp>::is_reversible::value>
+ struct push_back
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::value_type value_type;
+
+ void
+ operator()(_Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ __test.push_back(cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+
+ // Assumes containers start out equivalent.
+ void
+ operator()(_Tp& __control, _Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ __test.push_back(cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct push_back<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+
+ void
+ operator()(_Tp&, _Tp&) { }
+ };
+
+
+ // Abstract the insert function into two parts:
+ // 1, insert_base_functions == holds function pointer
+ // 2, insert_base == links function pointer to class insert method
+ template<typename _Tp>
+ struct insert_base
+ {
+ typedef typename _Tp::iterator iterator;
+ typedef typename _Tp::value_type value_type;
+
+ iterator (_Tp::* _F_insert_point)(iterator, const value_type&);
+
+ insert_base() : _F_insert_point(&_Tp::insert) { }
+ };
+
+ // Specialization, as string insertion has a different signature.
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+ struct insert_base<std::basic_string<_Tp1, _Tp2, _Tp3>>
+ {
+ typedef std::basic_string<_Tp1, _Tp2, _Tp3> container_type;
+ typedef typename container_type::iterator iterator;
+ typedef typename container_type::value_type value_type;
+
+ iterator (container_type::* _F_insert_point)(iterator, value_type);
+
+ insert_base() : _F_insert_point(&container_type::insert) { }
+ };
+
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+ struct insert_base<__gnu_cxx::__versa_string<_Tp1, _Tp2, _Tp3>>
+ {
+ typedef __gnu_cxx::__versa_string<_Tp1, _Tp2, _Tp3> container_type;
+ typedef typename container_type::iterator iterator;
+ typedef typename container_type::value_type value_type;
+
+ iterator (container_type::* _F_insert_point)(iterator, value_type);
+
+ insert_base() : _F_insert_point(&container_type::insert) { }
+ };
+
+ // Specialization, as forward_list insertion has a different signature.
+ template<typename _Tp1, typename _Tp2>
+ struct insert_base<std::forward_list<_Tp1, _Tp2>>
+ {
+ typedef std::forward_list<_Tp1, _Tp2> container_type;
+ typedef typename container_type::iterator iterator;
+ typedef typename container_type::const_iterator const_iterator;
+ typedef typename container_type::value_type value_type;
+
+ iterator (container_type::* _F_insert_point)(const_iterator,
+ const value_type&);
+
+ insert_base() : _F_insert_point(&container_type::insert_after) { }
+ };
+
+ template<typename _Tp, bool = traits<_Tp>::has_insert::value>
+ struct insert_point : public insert_base<_Tp>
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::value_type value_type;
+ using insert_base<_Tp>::_F_insert_point;
+
+ void
+ operator()(_Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ const size_type sz = std::distance(__test.begin(), __test.end());
+ size_type s = generate(sz);
+ auto i = __test.begin();
+ std::advance(i, s);
+ (__test.*_F_insert_point)(i, cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+
+ // Assumes containers start out equivalent.
+ void
+ operator()(_Tp& __control, _Tp& __test)
+ {
+ try
+ {
+ const value_type cv = generate_unique<value_type>();
+ const size_type sz = std::distance(__test.begin(), __test.end());
+ size_type s = generate(sz);
+ auto i = __test.begin();
+ std::advance(i, s);
+ (__test.*_F_insert_point)(i, cv);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct insert_point<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+
+ void
+ operator()(_Tp&, _Tp&) { }
+ };
+
+
+ template<typename _Tp, bool = traits<_Tp>::is_associative::value
+ || traits<_Tp>::is_unordered::value>
+ struct clear
+ {
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ __container.clear();
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct clear<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+ };
+
+
+ template<typename _Tp, bool = traits<_Tp>::is_unordered::value>
+ struct rehash
+ {
+ void
+ operator()(_Tp& __test)
+ {
+ try
+ {
+ size_type s = generate(__test.bucket_count());
+ __test.rehash(s);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+
+ void
+ operator()(_Tp& __control, _Tp& __test)
+ {
+ try
+ {
+ size_type s = generate(__test.bucket_count());
+ __test.rehash(s);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ {
+ // Also check hash status.
+ bool fail(false);
+ if (__control.load_factor() != __test.load_factor())
+ fail = true;
+ if (__control.max_load_factor() != __test.max_load_factor())
+ fail = true;
+ if (__control.bucket_count() != __test.bucket_count())
+ fail = true;
+ if (__control.max_bucket_count() != __test.max_bucket_count())
+ fail = true;
+
+ if (fail)
+ {
+ char buf[40];
+ std::string __s("setup_base::rehash "
+ "containers not equal");
+ __s += "\n";
+ __s += "\n";
+ __s += "\t\t\tcontrol : test";
+ __s += "\n";
+ __s += "load_factor\t\t";
+ __builtin_sprintf(buf, "%lu", __control.load_factor());
+ __s += buf;
+ __s += " : ";
+ __builtin_sprintf(buf, "%lu", __test.load_factor());
+ __s += buf;
+ __s += "\n";
+
+ __s += "max_load_factor\t\t";
+ __builtin_sprintf(buf, "%lu", __control.max_load_factor());
+ __s += buf;
+ __s += " : ";
+ __builtin_sprintf(buf, "%lu", __test.max_load_factor());
+ __s += buf;
+ __s += "\n";
+
+ __s += "bucket_count\t\t";
+ __builtin_sprintf(buf, "%lu", __control.bucket_count());
+ __s += buf;
+ __s += " : ";
+ __builtin_sprintf(buf, "%lu", __test.bucket_count());
+ __s += buf;
+ __s += "\n";
+
+ __s += "max_bucket_count\t";
+ __builtin_sprintf(buf, "%lu", __control.max_bucket_count());
+ __s += buf;
+ __s += " : ";
+ __builtin_sprintf(buf, "%lu", __test.max_bucket_count());
+ __s += buf;
+ __s += "\n";
+
+ std::__throw_logic_error(__s.c_str());
+ }
+ }
+ }
+ };
+
+ // Specialization, empty.
+ template<typename _Tp>
+ struct rehash<_Tp, false>
+ {
+ void
+ operator()(_Tp&) { }
+
+ void
+ operator()(_Tp&, _Tp&) { }
+ };
+
+
+ template<typename _Tp>
+ struct swap
+ {
+ _Tp _M_other;
+
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ __container.swap(_M_other);
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+
+ template<typename _Tp>
+ struct iterator_operations
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::iterator iterator;
+
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ // Any will do.
+ iterator i = __container.begin();
+ iterator __attribute__((unused)) icopy(i);
+ iterator __attribute__((unused)) iassign = i;
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+
+
+ template<typename _Tp>
+ struct const_iterator_operations
+ {
+ typedef _Tp container_type;
+ typedef typename container_type::const_iterator const_iterator;
+
+ void
+ operator()(_Tp& __container)
+ {
+ try
+ {
+ // Any will do.
+ const_iterator i = __container.begin();
+ const_iterator __attribute__((unused)) icopy(i);
+ const_iterator __attribute__((unused)) iassign = i;
+ }
+ catch(const __gnu_cxx::forced_error&)
+ { throw; }
+ }
+ };
+ };
+
+ // Base class for exception tests.
+ template<typename _Tp>
+ struct test_base: public functor_base
+ {
+ typedef _Tp container_type;
+
+ typedef functor_base base_type;
+ typedef populate<container_type> populate;
+ typedef make_container_n<container_type> make_container_n;
+
+ typedef clear<container_type> clear;
+ typedef erase_point<container_type> erase_point;
+ typedef erase_range<container_type> erase_range;
+ typedef insert_point<container_type> insert_point;
+ typedef pop_front<container_type> pop_front;
+ typedef pop_back<container_type> pop_back;
+ typedef push_front<container_type> push_front;
+ typedef push_back<container_type> push_back;
+ typedef rehash<container_type> rehash;
+ typedef swap<container_type> swap;
+ typedef iterator_operations<container_type> iterator_ops;
+ typedef const_iterator_operations<container_type> const_iterator_ops;
+
+ using base_type::compare;
+
+ // Functor objects.
+ clear _M_clear;
+ erase_point _M_erasep;
+ erase_range _M_eraser;
+ insert_point _M_insertp;
+ pop_front _M_popf;
+ pop_back _M_popb;
+ push_front _M_pushf;
+ push_back _M_pushb;
+ rehash _M_rehash;
+ swap _M_swap;
+
+ iterator_ops _M_iops;
+ const_iterator_ops _M_ciops;
+ };
+
+
+ // Run through all member functions for basic exception safety
+ // guarantee: no resource leaks when exceptions are thrown.
+ //
+ // Types of resources checked: memory.
+ //
+ // For each member function, use throw_value and throw_allocator as
+ // value_type and allocator_type to force potential exception safety
+ // errors.
+ //
+ // NB: Assumes
+ // _Tp::value_type is __gnu_cxx::throw_value_*
+ // _Tp::allocator_type is __gnu_cxx::throw_allocator_*
+ // And that the _Cond template parameter for them both is
+ // __gnu_cxx::limit_condition.
+ template<typename _Tp>
+ struct basic_safety : public test_base<_Tp>
+ {
+ typedef _Tp container_type;
+ typedef test_base<container_type> base_type;
+ typedef typename base_type::populate populate;
+ typedef std::function<void(container_type&)> function_type;
+ typedef __gnu_cxx::limit_condition condition_type;
+
+ using base_type::generate;
+
+ container_type _M_container;
+ std::vector<function_type> _M_functions;
+
+ basic_safety() { run(); }
+
+ void
+ run()
+ {
+ // Setup.
+ condition_type::never_adjustor off;
+
+ // Construct containers.
+ populate p1(_M_container);
+ populate p2(base_type::_M_swap._M_other);
+
+ // Construct list of member functions to exercise.
+ _M_functions.push_back(function_type(base_type::_M_iops));
+ _M_functions.push_back(function_type(base_type::_M_ciops));
+
+ _M_functions.push_back(function_type(base_type::_M_erasep));
+ _M_functions.push_back(function_type(base_type::_M_eraser));
+ _M_functions.push_back(function_type(base_type::_M_insertp));
+ _M_functions.push_back(function_type(base_type::_M_popf));
+ _M_functions.push_back(function_type(base_type::_M_popb));
+ _M_functions.push_back(function_type(base_type::_M_pushf));
+ _M_functions.push_back(function_type(base_type::_M_pushb));
+ _M_functions.push_back(function_type(base_type::_M_rehash));
+ _M_functions.push_back(function_type(base_type::_M_swap));
+
+ // Last.
+ _M_functions.push_back(function_type(base_type::_M_clear));
+
+ // Run tests.
+ auto i = _M_functions.begin();
+ for (auto i = _M_functions.begin(); i != _M_functions.end(); ++i)
+ {
+ function_type& f = *i;
+ run_steps_to_limit(f);
+ }
+ }
+
+ template<typename _Funct>
+ void
+ run_steps_to_limit(const _Funct& __f)
+ {
+ size_t i(1);
+ bool exit(false);
+ auto a = _M_container.get_allocator();
+
+ do
+ {
+ // Use the current step as an allocator label.
+ a.set_label(i);
+
+ try
+ {
+ condition_type::limit_adjustor limit(i);
+ __f(_M_container);
+
+ // If we get here, done.
+ exit = true;
+ }
+ catch(const __gnu_cxx::forced_error&)
+ {
+ // Check this step for allocations.
+ // NB: Will throw std::logic_error if allocations.
+ a.check_allocated(i);
+
+ // Check memory allocated with operator new.
+
+ ++i;
+ }
+ }
+ while (!exit);
+
+ // Log count info.
+ std::cout << __f.target_type().name() << std::endl;
+ std::cout << "end count " << i << std::endl;
+ }
+ };
+
+
+ // Run through all member functions with a no throw requirement, sudden death.
+ // all: member functions erase, pop_back, pop_front, swap
+ // iterator copy ctor, assignment operator
+ // unordered and associative: clear
+ // NB: Assumes _Tp::allocator_type is __gnu_cxx::throw_allocator_random.
+ template<typename _Tp>
+ struct generation_prohibited : public test_base<_Tp>
+ {
+ typedef _Tp container_type;
+ typedef test_base<container_type> base_type;
+ typedef typename base_type::populate populate;
+ typedef __gnu_cxx::random_condition condition_type;
+
+ container_type _M_container;
+
+ generation_prohibited() { run(); }
+
+ void
+ run()
+ {
+ // Furthermore, assumes that the test functor will throw
+ // forced_exception via throw_allocator, that all errors are
+ // propagated and in error. Sudden death!
+
+ // Setup.
+ {
+ condition_type::never_adjustor off;
+ populate p1(_M_container);
+ populate p2(base_type::_M_swap._M_other);
+ }
+
+ // Run tests.
+ {
+ condition_type::always_adjustor on;
+
+ _M_erasep(_M_container);
+ _M_eraser(_M_container);
+
+ _M_popf(_M_container);
+ _M_popb(_M_container);
+
+ _M_iops(_M_container);
+ _M_ciops(_M_container);
+
+ _M_swap(_M_container);
+
+ // Last.
+ _M_clear(_M_container);
+ }
+ }
+ };
+
+
+ // Test strong exception guarantee.
+ // Run through all member functions with a roll-back, consistent
+ // coherent requirement.
+ // all: member functions insert of a single element, push_back, push_front
+ // unordered: rehash
+ template<typename _Tp>
+ struct propagation_consistent : public test_base<_Tp>
+ {
+ typedef _Tp container_type;
+ typedef test_base<container_type> base_type;
+ typedef typename base_type::populate populate;
+ typedef std::function<void(container_type&)> function_type;
+ typedef __gnu_cxx::limit_condition condition_type;
+
+ using base_type::compare;
+
+ container_type _M_container_test;
+ container_type _M_container_control;
+ std::vector<function_type> _M_functions;
+
+ propagation_consistent() { run(); }
+
+ void
+ sync()
+ { _M_container_test = _M_container_control; }
+
+ // Run test.
+ void
+ run()
+ {
+ // Setup.
+ condition_type::never_adjustor off;
+
+ // Construct containers.
+ populate p(_M_container_control);
+ sync();
+
+ // Construct list of member functions to exercise.
+ _M_functions.push_back(function_type(base_type::_M_pushf));
+ _M_functions.push_back(function_type(base_type::_M_pushb));
+ _M_functions.push_back(function_type(base_type::_M_insertp));
+ _M_functions.push_back(function_type(base_type::_M_rehash));
+
+ // Run tests.
+ auto i = _M_functions.begin();
+ for (auto i = _M_functions.begin(); i != _M_functions.end(); ++i)
+ {
+ function_type& f = *i;
+ run_steps_to_limit(f);
+ }
+ }
+
+ template<typename _Funct>
+ void
+ run_steps_to_limit(const _Funct& __f)
+ {
+ size_t i(1);
+ bool exit(false);
+
+ do
+ {
+ sync();
+
+ try
+ {
+ condition_type::limit_adjustor limit(i);
+ __f(_M_container_test);
+
+ // If we get here, done.
+ exit = true;
+ }
+ catch(const __gnu_cxx::forced_error&)
+ {
+ compare(_M_container_control, _M_container_test);
+ ++i;
+ }
+ }
+ while (!exit);
+
+ // Log count info.
+ std::cout << __f.target_type().name() << std::endl;
+ std::cout << "end count " << i << std::endl;
+ }
+ };
+
+} // namespace __gnu_test
+
+#endif
diff --git a/libstdc++-v3/testsuite/util/regression/basic_type.hpp b/libstdc++-v3/testsuite/util/regression/basic_type.hpp
index 6d12bd68f77..9fe6ef24d41 100644
--- a/libstdc++-v3/testsuite/util/regression/basic_type.hpp
+++ b/libstdc++-v3/testsuite/util/regression/basic_type.hpp
@@ -46,7 +46,7 @@ namespace test
{
#define PB_DS_BASE_C_DEC \
std::basic_string<char, std::char_traits<char>, \
- __gnu_cxx::throw_allocator<char> >
+ __gnu_cxx::throw_allocator_random<char> >
struct basic_type : public PB_DS_BASE_C_DEC
{
diff --git a/libstdc++-v3/testsuite/util/regression/common_type.hpp b/libstdc++-v3/testsuite/util/regression/common_type.hpp
index 9e6a80d68fc..37705bc2d7d 100644
--- a/libstdc++-v3/testsuite/util/regression/common_type.hpp
+++ b/libstdc++-v3/testsuite/util/regression/common_type.hpp
@@ -46,7 +46,7 @@ namespace __gnu_pbds
{
namespace test
{
- typedef __gnu_cxx::throw_allocator<basic_type> alloc_type;
+ typedef __gnu_cxx::throw_allocator_random<basic_type> alloc_type;
struct hash
{
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
index 393463a4dc0..ca443321216 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.h
@@ -80,7 +80,7 @@ namespace detail
typedef typename test_traits::native_type native_type;
typedef twister_rand_gen gen;
typedef __gnu_pbds::container_traits<Cntnr> container_traits;
- typedef __gnu_cxx::throw_allocator<char> alloc_t;
+ typedef __gnu_cxx::throw_allocator_random<char> alloc_t;
enum op
{
diff --git a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
index d995a049ed6..43cdb9f2b62 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
+++ b/libstdc++-v3/testsuite/util/regression/rand/assoc/container_rand_regression_test.tcc
@@ -66,7 +66,7 @@ default_constructor()
{
m_p_c = new Cntnr;
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -107,7 +107,7 @@ copy_constructor()
p_c = new Cntnr(*m_p_c);
std::swap(p_c, m_p_c);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -134,7 +134,7 @@ assignment_operator()
* p_c =* m_p_c;
std::swap(p_c, m_p_c);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -210,7 +210,7 @@ it_constructor_imp(__gnu_pbds::cc_hash_tag)
};
std::swap(p_c, m_p_c);
}
- catch (__gnu_cxx::forced_exception_error&)
+ catch (__gnu_cxx::forced_error&)
{
done = false;
}
@@ -293,7 +293,7 @@ it_constructor_imp(__gnu_pbds::gp_hash_tag)
};
std::swap(p_c, m_p_c);
}
- catch (__gnu_cxx::forced_exception_error&)
+ catch (__gnu_cxx::forced_error&)
{
done = false;
}
@@ -329,7 +329,7 @@ it_constructor_imp(__gnu_pbds::tree_tag)
};
std::swap(p_c, m_p_c);
}
- catch (__gnu_cxx::forced_exception_error&)
+ catch (__gnu_cxx::forced_error&)
{
done = false;
}
@@ -354,7 +354,7 @@ it_constructor_imp(__gnu_pbds::list_update_tag)
p_c = new Cntnr(m_p_c->begin(), m_p_c->end());
std::swap(p_c, m_p_c);
}
- catch (__gnu_cxx::forced_exception_error&)
+ catch (__gnu_cxx::forced_error&)
{
done = false;
}
@@ -392,7 +392,7 @@ it_constructor_imp(__gnu_pbds::pat_trie_tag)
std::swap(p_c, m_p_c);
}
- catch (__gnu_cxx::forced_exception_error&)
+ catch (__gnu_cxx::forced_error&)
{
done = false;
}
@@ -1088,7 +1088,7 @@ insert()
}
m_native_c.insert(test_traits::native_value(v));
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -1139,7 +1139,7 @@ subscript_imp(__gnu_pbds::detail::false_type)
m_native_c[test_traits::native_value(v).first] =
test_traits::native_value(v).second;
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -1164,7 +1164,7 @@ subscript_imp(__gnu_pbds::detail::true_type)
(*m_p_c)[v] = __gnu_pbds::null_mapped_type();
m_native_c.insert(test_traits::native_value(v));
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -1213,7 +1213,7 @@ erase()
PB_DS_THROW_IF_FAILED(m_p_c->find(k) == m_p_c->end(), "",
m_p_c, &m_native_c);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
@@ -1251,7 +1251,7 @@ erase_if()
PB_DS_THROW_IF_FAILED(ersd == native_ersd,
ersd << " " << native_ersd, m_p_c, &m_native_c);
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
PB_DS_THROW_IF_FAILED(container_traits::erase_can_throw,
@@ -1329,7 +1329,7 @@ erase_it_imp(__gnu_pbds::detail::true_type)
if (range_guarantee)
PB_DS_THROW_IF_FAILED(next_ers_it == next_it, "", m_p_c, &m_native_c);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
PB_DS_THROW_IF_FAILED(container_traits::erase_can_throw, container_traits::erase_can_throw, m_p_c, &m_native_c);
@@ -1392,7 +1392,7 @@ erase_rev_it_imp(__gnu_pbds::detail::true_type)
if (native_it != m_native_c.end())
m_native_c.erase(native_it);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
PB_DS_THROW_IF_FAILED(container_traits::erase_can_throw,
@@ -1763,7 +1763,7 @@ split_join_imp(__gnu_pbds::detail::true_type)
PB_DS_THROW_IF_FAILED(rhs.empty(), rhs.size(), m_p_c, &m_native_c);
m_p_c->swap(lhs);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
PB_DS_THROW_IF_FAILED(container_traits::split_join_can_throw,
diff --git a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
index fe8ae6ba7ed..f964911facb 100644
--- a/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
+++ b/libstdc++-v3/testsuite/util/regression/rand/priority_queue/container_rand_regression_test.tcc
@@ -66,7 +66,7 @@ default_constructor()
{
m_p_c = new Cntnr;
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -110,7 +110,7 @@ copy_constructor()
p_c = new Cntnr(*m_p_c);
std::swap(p_c, m_p_c);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -139,7 +139,7 @@ assignment_operator()
*p_c = *m_p_c;
std::swap(p_c, m_p_c);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -180,7 +180,7 @@ it_constructor()
std::swap(p_c, m_p_c);
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -433,7 +433,7 @@ push()
_GLIBCXX_THROW_IF(sz != m_p_c->size() - 1, sz, m_p_c, &m_native_c);
m_native_c.push(test_traits::native_value(v));
}
- catch(__gnu_cxx::forced_exception_error& )
+ catch(__gnu_cxx::forced_error&)
{
done = false;
}
@@ -475,7 +475,7 @@ modify()
m_native_c.modify(native_v, new_native_v);
}
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
_GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
@@ -517,7 +517,7 @@ pop()
m_native_c.pop();
}
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
_GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
@@ -560,7 +560,7 @@ erase_if()
_GLIBCXX_THROW_IF(ersd != native_ersd, ersd << " " << native_ersd,
m_p_c, &m_native_c);
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
_GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
@@ -592,7 +592,7 @@ erase_it()
m_p_c->erase(it);
}
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
_GLIBCXX_THROW_IF(true, "", m_p_c, &m_native_c);
@@ -715,7 +715,7 @@ split_join()
_GLIBCXX_THROW_IF(rhs.size() != 0, rhs.size(), m_p_c, &m_native_c);
_GLIBCXX_THROW_IF(!rhs.empty(), rhs.size(), m_p_c, &m_native_c);
}
- catch(__gnu_cxx::forced_exception_error&)
+ catch(__gnu_cxx::forced_error&)
{
done = false;
const bool b = __gnu_pbds::container_traits<cntnr>::split_join_can_throw;
diff --git a/libstdc++-v3/testsuite/util/testsuite_container_traits.h b/libstdc++-v3/testsuite/util/testsuite_container_traits.h
index 7c4b1a27097..85d04c5728c 100644
--- a/libstdc++-v3/testsuite/util/testsuite_container_traits.h
+++ b/libstdc++-v3/testsuite/util/testsuite_container_traits.h
@@ -24,8 +24,9 @@
#include <ext/vstring.h>
namespace __gnu_test
-{
+{
// Container traits.
+ // Base class with default false values for all traits.
struct traits_base
{
// Type, nested type, and typedef related traits.
@@ -37,6 +38,11 @@ namespace __gnu_test
typedef std::false_type is_associative;
typedef std::false_type is_unordered;
typedef std::false_type is_mapped;
+
+ typedef std::false_type has_erase;
+ typedef std::false_type has_insert;
+ typedef std::false_type has_push_pop;
+ typedef std::false_type has_size_type_constructor;
};
// Primary template does nothing. Specialize on each type under
@@ -46,40 +52,55 @@ namespace __gnu_test
// Specialize for each container.
template<typename _Tp, size_t _Np>
- struct traits<std::array<_Tp, _Np> > : public traits_base
+ struct traits<std::array<_Tp, _Np>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
};
- template<typename _Tp>
- struct traits<std::deque<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2>
+ struct traits<std::deque<_Tp1, _Tp2>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
+
+ typedef std::true_type has_erase;
+ typedef std::true_type has_insert;
+ typedef std::true_type has_push_pop;
+ typedef std::true_type has_size_type_constructor;
};
- template<typename _Tp>
- struct traits<std::forward_list<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2>
+ struct traits<std::forward_list<_Tp1, _Tp2>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
+
+ typedef std::true_type has_erase;
+ typedef std::true_type has_insert;
+ typedef std::true_type has_push_pop;
+ typedef std::true_type has_size_type_constructor;
};
- template<typename _Tp>
- struct traits<std::list<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2>
+ struct traits<std::list<_Tp1, _Tp2>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
+
+ typedef std::true_type has_erase;
+ typedef std::true_type has_insert;
+ typedef std::true_type has_push_pop;
+ typedef std::true_type has_size_type_constructor;
};
- template<typename _Kp, typename _Tp>
- struct traits<std::map<_Kp, _Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
+ struct traits<std::map<_Tp1, _Tp2, _Tp3, _Tp4>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
@@ -87,10 +108,12 @@ namespace __gnu_test
typedef std::true_type is_pointer_aware;
typedef std::true_type is_associative;
typedef std::true_type is_mapped;
+
+ typedef std::true_type has_insert;
};
- template<typename _Kp, typename _Tp>
- struct traits<std::multimap<_Kp, _Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
+ struct traits<std::multimap<_Tp1, _Tp2, _Tp3, _Tp4>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
@@ -100,108 +123,142 @@ namespace __gnu_test
typedef std::true_type is_mapped;
};
- template<typename _Tp>
- struct traits<std::multiset<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+ struct traits<std::multiset<_Tp1, _Tp2, _Tp3>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_associative;
+
+ typedef std::true_type has_insert;
};
- template<typename _Tp>
- struct traits<std::priority_queue<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2>
+ struct traits<std::priority_queue<_Tp1, _Tp2>> : public traits_base
{
typedef std::true_type is_adaptor;
};
- template<typename _Tp>
- struct traits<std::queue<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2>
+ struct traits<std::queue<_Tp1, _Tp2>> : public traits_base
{
typedef std::true_type is_adaptor;
};
- template<typename _Tp>
- struct traits<std::set<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+ struct traits<std::set<_Tp1, _Tp2, _Tp3>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_associative;
+
+ typedef std::true_type has_insert;
};
- template<typename _Tp>
- struct traits<std::stack<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2>
+ struct traits<std::stack<_Tp1, _Tp2> > : public traits_base
{
typedef std::true_type is_adaptor;
};
- template<typename _Kp, typename _Tp>
- struct traits<std::unordered_map<_Kp, _Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3,
+ typename _Tp4, typename _Tp5>
+ struct traits<std::unordered_map<_Tp1, _Tp2, _Tp3, _Tp4, _Tp5>>
+ : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered;
typedef std::true_type is_mapped;
+
+ typedef std::true_type has_size_type_constructor;
+ typedef std::true_type has_insert;
};
- template<typename _Kp, typename _Tp>
- struct traits<std::unordered_multimap<_Kp, _Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3,
+ typename _Tp4, typename _Tp5>
+ struct traits<std::unordered_multimap<_Tp1, _Tp2, _Tp3, _Tp4, _Tp5>>
+ : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered;
typedef std::true_type is_mapped;
+
+ typedef std::true_type has_size_type_constructor;
};
- template<typename _Tp>
- struct traits<std::unordered_multiset<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
+ struct traits<std::unordered_multiset<_Tp1, _Tp2, _Tp3, _Tp4>>
+ : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered;
+
+ typedef std::true_type has_insert;
};
- template<typename _Tp>
- struct traits<std::unordered_set<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3, typename _Tp4>
+ struct traits<std::unordered_set<_Tp1, _Tp2, _Tp3, _Tp4>>
+ : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
typedef std::true_type is_unordered;
+
+ typedef std::true_type has_size_type_constructor;
+ typedef std::true_type has_insert;
};
- template<typename _Tp>
- struct traits<std::vector<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2>
+ struct traits<std::vector<_Tp1, _Tp2>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
+
+ typedef std::true_type has_erase;
+ typedef std::true_type has_insert;
+ typedef std::true_type has_size_type_constructor;
};
- template<typename _Tp>
- struct traits<std::basic_string<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3>
+ struct traits<std::basic_string<_Tp1, _Tp2, _Tp3>> : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
+
+ typedef std::true_type has_erase;
+ typedef std::true_type has_insert;
};
- template<typename _Tp>
- struct traits<__gnu_cxx::__versa_string<_Tp> > : public traits_base
+ template<typename _Tp1, typename _Tp2, typename _Tp3,
+ template <typename, typename, typename> class _Tp4>
+ struct traits<__gnu_cxx::__versa_string<_Tp1, _Tp2, _Tp3, _Tp4>>
+ : public traits_base
{
typedef std::true_type is_container;
typedef std::true_type is_reversible;
typedef std::true_type is_allocator_aware;
typedef std::true_type is_pointer_aware;
+
+ typedef std::true_type has_erase;
+
+ // XXX no vstring<rc>::insert
+ // typedef std::true_type has_insert;
};
} // namespace __gnu_test
-#endif
+#endif