diff options
author | Jeff Law <law@redhat.com> | 2009-10-23 20:45:33 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 2009-10-23 20:45:33 +0000 |
commit | 1842abc1729f8464ebb6841bbba53c16e2ef85e4 (patch) | |
tree | 11cd53c01c82fef4a36dc441c177c8f5791e42b5 | |
parent | 7cb10b40862da77eb3b5b1d8849fcf9586cc76ee (diff) | |
parent | 4305ca1e7fb07a4366633371d39928486f440d40 (diff) |
Merge from trunkreload-v2
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/reload-v2@153515 138bc75d-0d04-0410-961f-82ee72b054a4
504 files changed, 23124 insertions, 11299 deletions
diff --git a/ChangeLog b/ChangeLog index 853bf1b7f2c..d8cbbd8dffd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2009-10-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * configure.ac (CLooG test): Use = with test. + * configure: Regenerate. + +2009-10-22 Richard Guenther <rguenther@suse.de> + + * configure.ac: Do not set LIBS for ppl/cloog checks. Disable + cloog if the ppl version check failed. Move flags saving + before setting in libelf check. + * configure: Regenerate. + +2009-10-21 Richard Guenther <rguenther@suse.de> + + * configure.ac: Adjust the ppl and cloog configure to work as + documented. Disable cloog if ppl was disabled. Omit the version + checks if they were disabled. + * configure: Re-generate. + +2009-10-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + * configure.ac: Add 'lto' to enable_languages, not + new_enable_languages, and only if not already present. + * configure: Regenerate. + 2009-10-10 Gerald Pfeifer <gerald@pfeifer.com> * README: Refer to the various COPYING* files instead of just diff --git a/MAINTAINERS b/MAINTAINERS index 4f75f969c20..0b122acc12a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -454,6 +454,7 @@ Ghassan Shobaki ghassan.shobaki@amd.com Johannes Singler singler@ira.uka.de Franz Sirl franz.sirl-kernel@lauterbach.com Jan Sjodin jan.sjodin@amd.com +Edward Smith-Rowland 3dw4rd@verizon.net Michael Sokolov msokolov@ivan.Harhan.ORG Richard Stallman rms@gnu.org Basile Starynkevitch basile@starynkevitch.net diff --git a/config/ChangeLog b/config/ChangeLog index ceea52ed782..4d50df66bbe 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2009-10-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * acx.m4 (ACX_CHECK_CYGWIN_CAT_WORKS): Use = with test. + 2009-09-09 Paolo Bonzini <bonzini@gnu.org> * stdint.m4 (GCC_HEADER_STDINT): Revert changes to this macro in diff --git a/config/acx.m4 b/config/acx.m4 index cea08b7204f..b559c03ebdf 100644 --- a/config/acx.m4 +++ b/config/acx.m4 @@ -605,7 +605,7 @@ dnl # See binutils PR 4334 for more details. AC_DEFUN([ACX_CHECK_CYGWIN_CAT_WORKS],[ AC_MSG_CHECKING([to see if cat works as expected]) echo a >cygwin-cat-check -if test `cat cygwin-cat-check` == a ; then +if test `cat cygwin-cat-check` = a ; then rm cygwin-cat-check AC_MSG_RESULT(yes) else diff --git a/configure b/configure index 76084ed5158..4af7b475754 100755 --- a/configure +++ b/configure @@ -3855,7 +3855,7 @@ case "${host}" in { $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if cat works as expected" >&5 $as_echo_n "checking to see if cat works as expected... " >&6; } echo a >cygwin-cat-check -if test `cat cygwin-cat-check` == a ; then +if test `cat cygwin-cat-check` = a ; then rm cygwin-cat-check { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } @@ -5750,7 +5750,7 @@ pplinc= if test "${with_ppl+set}" = set; then : withval=$with_ppl; else - with_ppl=no + with_ppl=yes fi @@ -5770,10 +5770,11 @@ case $with_ppl in no) ppllibs= ;; + yes) + ;; *) ppllibs="-L$with_ppl/lib -lppl_c -lppl -lgmpxx" pplinc="-I$with_ppl/include $pplinc" - LIBS="$ppllibs $LIBS" ;; esac if test "x$with_ppl_include" != x; then @@ -5781,12 +5782,10 @@ if test "x$with_ppl_include" != x; then fi if test "x$with_ppl_lib" != x; then ppllibs="-L$with_ppl_lib -lppl_c -lppl -lgmpxx" - LIBS="$ppllibs $LIBS" fi if test "x$with_ppl$with_ppl_include$with_ppl_lib" = x && test -d ${srcdir}/ppl; then ppllibs='-L$$r/$(HOST_SUBDIR)/ppl/.libs -L$$r/$(HOST_SUBDIR)/ppl/_libs -lppl_c -lppl -lgmpxx ' pplinc='-I$$r/$(HOST_SUBDIR)/ppl/include -I$$s/ppl/include ' - LIBS="$ppllibs $LIBS" fi # Check whether --enable-ppl-version-check was given. @@ -5797,7 +5796,7 @@ else fi -if test "${ENABLE_PPL_CHECK}" = "yes"; then +if test "x$with_ppl" != "xno" -a "${ENABLE_PPL_CHECK}" = "yes"; then saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $pplinc $gmpinc" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version $ppl_major_version.$ppl_minor_version of PPL" >&5 @@ -5822,7 +5821,7 @@ if ac_fn_c_try_compile "$LINENO"; then : $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; }; ppllibs= ; pplinc= +$as_echo "no" >&6; }; ppllibs= ; pplinc= ; with_ppl=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$saved_CFLAGS" @@ -5842,7 +5841,7 @@ clooginc=" -DCLOOG_PPL_BACKEND " if test "${with_cloog+set}" = set; then : withval=$with_cloog; else - with_cloog=no + with_cloog=yes fi @@ -5858,15 +5857,20 @@ if test "${with_cloog_lib+set}" = set; then : fi +if test "x$with_ppl" = "xno"; then + with_cloog=no +fi + case $with_cloog in no) clooglibs= clooginc= ;; + yes) + ;; *) clooglibs="-L$with_cloog/lib -lcloog" clooginc="-I$with_cloog/include -DCLOOG_PPL_BACKEND " - LIBS="$clooglibs $LIBS" ;; esac if test "x$with_cloog_include" != x; then @@ -5874,12 +5878,10 @@ if test "x$with_cloog_include" != x; then fi if test "x$with_cloog_lib" != x; then clooglibs="-L$with_cloog_lib -lcloog" - LIBS="$clooglibs $LIBS" fi if test "x$with_cloog$with_cloog_include$with_cloog_lib" = x && test -d ${srcdir}/cloog; then clooglibs='-L$$r/$(HOST_SUBDIR)/cloog/.libs -L$$r/$(HOST_SUBDIR)/cloog/_libs -lcloog ' clooginc='-I$$r/$(HOST_SUBDIR)/cloog/include -I$$s/cloog/include -DCLOOG_PPL_BACKEND ' - LIBS="$clooglibs $LIBS" fi # Check whether --enable-cloog-version-check was given. @@ -5890,7 +5892,7 @@ else fi -if test "${ENABLE_CLOOG_CHECK}" = "yes"; then +if test "x$with_cloog" != "xno" -a "${ENABLE_CLOOG_CHECK}" = "yes"; then saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $clooginc $gmpinc $pplinc" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct version of CLooG" >&5 @@ -5957,6 +5959,10 @@ if test "${with_libelf_lib+set}" = set; then : fi + saved_CFLAGS="$CFLAGS" + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + case $with_libelf in "") libelflibs="-lelf" @@ -5985,10 +5991,6 @@ fi LIBS="$libelflibs $LIBS" fi - saved_CFLAGS="$CFLAGS" - saved_CPPFLAGS="$CPPFLAGS" - saved_LIBS="$LIBS" - CFLAGS="$CFLAGS $libelfinc" CPPFLAGS="$CPPFLAGS $libelfinc" LIBS="$LIBS $libelflibs" @@ -6593,7 +6595,10 @@ if test -d ${srcdir}/gcc; then # If LTO is enabled, add the LTO front end. extra_host_libiberty_configure_flags= if test "$enable_lto" = "yes" ; then - new_enable_languages="${new_enable_languages}lto," + case ,${enable_languages}, in + *,lto,*) ;; + *) enable_languages="${enable_languages},lto" ;; + esac if test "${ENABLE_GOLD}" = "yes" ; then configdirs="$configdirs lto-plugin" extra_host_libiberty_configure_flags=--enable-shared diff --git a/configure.ac b/configure.ac index c961fe8ba98..7fdf357febf 100644 --- a/configure.ac +++ b/configure.ac @@ -1514,7 +1514,7 @@ pplinc= AC_ARG_WITH(ppl, [ --with-ppl=PATH Specify prefix directory for the installed PPL package Equivalent to --with-ppl-include=PATH/include - plus --with-ppl-lib=PATH/lib],, with_ppl=no) + plus --with-ppl-lib=PATH/lib],, with_ppl=yes) AC_ARG_WITH(ppl_include, [ --with-ppl-include=PATH Specify directory for installed PPL include files]) AC_ARG_WITH(ppl_lib, [ --with-ppl-lib=PATH Specify the directory for the installed PPL library]) @@ -1522,10 +1522,11 @@ case $with_ppl in no) ppllibs= ;; + yes) + ;; *) ppllibs="-L$with_ppl/lib -lppl_c -lppl -lgmpxx" pplinc="-I$with_ppl/include $pplinc" - LIBS="$ppllibs $LIBS" ;; esac if test "x$with_ppl_include" != x; then @@ -1533,12 +1534,10 @@ if test "x$with_ppl_include" != x; then fi if test "x$with_ppl_lib" != x; then ppllibs="-L$with_ppl_lib -lppl_c -lppl -lgmpxx" - LIBS="$ppllibs $LIBS" fi if test "x$with_ppl$with_ppl_include$with_ppl_lib" = x && test -d ${srcdir}/ppl; then ppllibs='-L$$r/$(HOST_SUBDIR)/ppl/.libs -L$$r/$(HOST_SUBDIR)/ppl/_libs -lppl_c -lppl -lgmpxx ' pplinc='-I$$r/$(HOST_SUBDIR)/ppl/include -I$$s/ppl/include ' - LIBS="$ppllibs $LIBS" fi AC_ARG_ENABLE(ppl-version-check, @@ -1546,7 +1545,7 @@ AC_ARG_ENABLE(ppl-version-check, ENABLE_PPL_CHECK=$enableval, ENABLE_PPL_CHECK=yes) -if test "${ENABLE_PPL_CHECK}" = "yes"; then +if test "x$with_ppl" != "xno" -a "${ENABLE_PPL_CHECK}" = "yes"; then saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $pplinc $gmpinc" AC_MSG_CHECKING([for version $ppl_major_version.$ppl_minor_version of PPL]) @@ -1554,7 +1553,7 @@ if test "${ENABLE_PPL_CHECK}" = "yes"; then #if PPL_VERSION_MAJOR != $ppl_major_version || PPL_VERSION_MINOR != $ppl_minor_version choke me #endif - ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); ppllibs= ; pplinc= ]) + ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); ppllibs= ; pplinc= ; with_ppl=no ]) CFLAGS="$saved_CFLAGS" fi @@ -1569,19 +1568,24 @@ clooginc=" -DCLOOG_PPL_BACKEND " AC_ARG_WITH(cloog, [ --with-cloog=PATH Specify prefix directory for the installed CLooG-PPL package Equivalent to --with-cloog-include=PATH/include - plus --with-cloog-lib=PATH/lib],, with_cloog=no) + plus --with-cloog-lib=PATH/lib],, with_cloog=yes) AC_ARG_WITH(cloog_include, [ --with-cloog-include=PATH Specify directory for installed CLooG include files]) AC_ARG_WITH(cloog_lib, [ --with-cloog-lib=PATH Specify the directory for the installed CLooG library]) +if test "x$with_ppl" = "xno"; then + with_cloog=no +fi + case $with_cloog in no) clooglibs= clooginc= ;; + yes) + ;; *) clooglibs="-L$with_cloog/lib -lcloog" clooginc="-I$with_cloog/include -DCLOOG_PPL_BACKEND " - LIBS="$clooglibs $LIBS" ;; esac if test "x$with_cloog_include" != x; then @@ -1589,12 +1593,10 @@ if test "x$with_cloog_include" != x; then fi if test "x$with_cloog_lib" != x; then clooglibs="-L$with_cloog_lib -lcloog" - LIBS="$clooglibs $LIBS" fi if test "x$with_cloog$with_cloog_include$with_cloog_lib" = x && test -d ${srcdir}/cloog; then clooglibs='-L$$r/$(HOST_SUBDIR)/cloog/.libs -L$$r/$(HOST_SUBDIR)/cloog/_libs -lcloog ' clooginc='-I$$r/$(HOST_SUBDIR)/cloog/include -I$$s/cloog/include -DCLOOG_PPL_BACKEND ' - LIBS="$clooglibs $LIBS" fi AC_ARG_ENABLE(cloog-version-check, @@ -1602,7 +1604,7 @@ AC_ARG_ENABLE(cloog-version-check, ENABLE_CLOOG_CHECK=$enableval, ENABLE_CLOOG_CHECK=yes) -if test "${ENABLE_CLOOG_CHECK}" = "yes"; then +if test "x$with_cloog" != "xno" -a "${ENABLE_CLOOG_CHECK}" = "yes"; then saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $clooginc $gmpinc $pplinc" AC_MSG_CHECKING([for correct version of CLooG]) @@ -1634,6 +1636,10 @@ if test x"$enable_lto" = x"yes" ; then AC_ARG_WITH(libelf_lib, [ --with-libelf-lib=PATH Specify the directory for the installed libelf library]) + saved_CFLAGS="$CFLAGS" + saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" + case $with_libelf in "") libelflibs="-lelf" @@ -1662,10 +1668,6 @@ if test x"$enable_lto" = x"yes" ; then LIBS="$libelflibs $LIBS" fi - saved_CFLAGS="$CFLAGS" - saved_CPPFLAGS="$CPPFLAGS" - saved_LIBS="$LIBS" - CFLAGS="$CFLAGS $libelfinc" CPPFLAGS="$CPPFLAGS $libelfinc" LIBS="$LIBS $libelflibs" @@ -1811,7 +1813,10 @@ if test -d ${srcdir}/gcc; then # If LTO is enabled, add the LTO front end. extra_host_libiberty_configure_flags= if test "$enable_lto" = "yes" ; then - new_enable_languages="${new_enable_languages}lto," + case ,${enable_languages}, in + *,lto,*) ;; + *) enable_languages="${enable_languages},lto" ;; + esac if test "${ENABLE_GOLD}" = "yes" ; then configdirs="$configdirs lto-plugin" extra_host_libiberty_configure_flags=--enable-shared diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index 37258669eed..5ba356d40f6 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,9 @@ +2009-10-21 Steve Ellcey <sje@cup.hp.com> + + * inclhack.def (hpux_stdint_least_fast): Simplify. + * fixincl.x: Regenerate. + * tests/base/stdint.h: Update. + 2009-09-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * inclhack.def (isc_fmod, isc_omits_with_stdc) diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x index b9b9b040f4d..2d6e1fcd9cf 100644 --- a/fixincludes/fixincl.x +++ b/fixincludes/fixincl.x @@ -2,11 +2,11 @@ * * DO NOT EDIT THIS FILE (fixincl.x) * - * It has been AutoGen-ed Tuesday September 15, 2009 at 06:55:13 AM CEST + * It has been AutoGen-ed Tuesday October 20, 2009 at 04:21:49 PM PDT * From the definitions inclhack.def * and the template file fixincl */ -/* DO NOT SVN-MERGE THIS FILE, EITHER Di 15. Sep 06:55:13 CEST 2009 +/* DO NOT SVN-MERGE THIS FILE, EITHER Tue Oct 20 16:21:49 PDT 2009 * * You must regenerate it. Use the ./genfixes script. * @@ -4082,11 +4082,7 @@ static tTestDesc aHpux_Stdint_Least_FastTests[] = { */ static const char* apzHpux_Stdint_Least_FastPatch[] = { "format", - "#ifdef __LP64__\n\ -# define\tUINT_%164_MAX\tULONG_MAX\n\ -#else\n\ -%0\n\ -#endif", + "# define\tUINT_%164_MAX\t__UINT64_MAX__", (char*)NULL }; /* * * * * * * * * * * * * * * * * * * * * * * * * * diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 72841b31f7a..da4a94ce9f9 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -2213,16 +2213,9 @@ fix = { select = "^[ \t]*#[ \t]*define[ \t]+UINT_(LEAST|FAST)64_MAX[ \t]+ULLONG_MAX"; c_fix = format; - c-fix-arg = <<- _EOFix_ - #ifdef __LP64__ - # define UINT_%164_MAX ULONG_MAX - #else - %0 - #endif - _EOFix_; - test-text = <<- _EOFix_ - # define UINT_FAST64_MAX ULLONG_MAX - # define UINT_LEAST64_MAX ULLONG_MAX + c-fix-arg = "# define UINT_%164_MAX __UINT64_MAX__"; + test-text = "# define UINT_FAST64_MAX ULLONG_MAX\n" + "# define UINT_LEAST64_MAX ULLONG_MAX\n"; _EOFix_; }; diff --git a/fixincludes/tests/base/stdint.h b/fixincludes/tests/base/stdint.h index 1c59442182f..3159505f3c3 100644 --- a/fixincludes/tests/base/stdint.h +++ b/fixincludes/tests/base/stdint.h @@ -146,16 +146,9 @@ #if defined( HPUX_STDINT_LEAST_FAST_CHECK ) -#ifdef __LP64__ -# define UINT_FAST64_MAX ULONG_MAX -#else -# define UINT_FAST64_MAX ULLONG_MAX -#endif -#ifdef __LP64__ -# define UINT_LEAST64_MAX ULONG_MAX -#else -# define UINT_LEAST64_MAX ULLONG_MAX -#endif +# define UINT_FAST64_MAX __UINT64_MAX__ +# define UINT_LEAST64_MAX __UINT64_MAX__ + #endif /* HPUX_STDINT_LEAST_FAST_CHECK */ diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b79f323a11e..e7068a9a543 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,1018 @@ +2009-10-23 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/41787 + * config/rs6000/rs6000.c (struct machine_function): Add + vsx_or_altivec_used_p to record if vector types are used. + (rs6000_expand_to_rtl_hook): Rename from + rs6000_alloc_sdmode_stack_slot. If VSX, check to see if there are + any vector operations, so if there are, we can set VRSAVE to + non-zero when only floating point vector registers are used. + (TARGET_EXPAND_TO_RTL_HOOK): Use rs6000_expand_to_rtl_hook. + (rs6000_check_vector_mode): Inner function to check if vector + types are used in the code. + (compute_vrsave_mask): If VSX, make sure VRSAVE is non-zero if + vector instructions are used. + + * config/rs6000/rs6000.h (HARD_REGNO_CALL_PART_CLOBBERED): + Indicate that VSX registers which overlap floating point + registers, can't be used across a call, since the ABI only states + the scalar part of the register will be saved and restored. + +2009-10-23 Joseph Myers <joseph@codesourcery.com> + + PR c/41673 + * alias.c (get_alias_set): Call langhook before returning 0 for + types with structural equality. + * c-common.c (c_common_get_alias_set): Use alias set of element + type for arrays with structural comparison. + +2009-10-23 Richard Guenther <rguenther@suse.de> + + PR middle-end/41805 + * cfgexpand.c (expand_call_stmt): Use gimple_has_side_effects and + gimple_call_nothrow_p. + +2009-10-23 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/41778 + * tree-ssa-pre.c (do_regular_insertion): Only insert if a + redundancy along a path in the CFG we want to optimize for speed + is going to be removed. + (execute_pre): Do partial-PRE only if the function is to be + optimized for speed. + (gate_pre): Do not turn off all of PRE when not optimizing a + function for speed. + +2009-10-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * builtins.c (fold_builtin_cabs): Use validate_arg(). + (fold_builtin_cexp): Fix if-logic. + (fold_builtin_1): Check subtype for BUILT_IN_CIMAG. + +2009-10-22 Jeff Law <law@redhat.com> + + * ira-lives.c (process_single_reg_class_operands): Update the + hard reg costs for all the hard registers desired by the + single reg class operand. + +2009-10-22 Richard Sandiford <rdsandiford@googlemail.com> + + * simplify-rtx.c (simplify_replace_fn_rtx): Add a fallback case + for rtxes that aren't handled specially. + +2009-10-22 Richard Sandiford <rdsandiford@googlemail.com> + + * rtl.h (shallow_copy_rtvec): Declare. + * rtl.c (shallow_copy_rtvec): New function. + * cselib.c (cselib_subst_to_values): Use it. Only modify an + rtx field if the subrtx has changed. + +2009-10-22 Anatoly Sokolov <aesok@post.ru> + + * config/m32c/m32c.c (m32c_function_value_regno_p): New function. + (m32c_function_value): Make static, add new 'outgoing' argument. + (m32c_libcall_value): Make static, add new 'fun' argument. + (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE): Declare. + * config/m32c/m32c.h: (FUNCTION_VALUE, LIBCALL_VALUE): Remove. + (FUNCTION_VALUE_REGNO_P): Redefine, use m32c_function_value_regno_p. + * config/m32c/m32c-protos.h (m32c_function_value_regno_p): Declare. + (m32c_function_value, m32c_libcall_value): Delete declaration. + +2009-10-22 Diego Novillo <dnovillo@google.com> + + * Makefile.in (PLUGIN_HEADERS): Add output.h and IPA_UTILS_H. + +2009-10-22 Razya Ladelsky <razya@il.ibm.com> + + * testsuite/gcc.dg/autopar/outer-4.c: Adjust scan. + * testsuite/gcc.dg/autopar/outer-5.c: Adjust scan. + * testsuite/gcc.dg/autopar/outer-5.c: Add scan optimized. + * tree-cfg.c (gimple_duplicate_sese_tail): Fix typos/indentation/white + space. + +2009-10-22 Richard Guenther <rguenther@suse.de> + + * lto-streamer.h (lto_symtab_merge_cgraph_nodes): Declare. + * lto-symtab.c (struct lto_symtab_entry_def): Add node member. + (lto_symtab_merge): Do not merge cgraph nodes here. + (lto_symtab_resolve_can_prevail_p): Simplify. + (lto_symtab_resolve_symbols): Store cgraph node. + (lto_symtab_merge_decls_1): Simplify. Do not drop non-prevailing + functions from the symtab. + (lto_symtab_merge_cgraph_nodes_1): New function. + (lto_symtab_merge_cgraph_nodes): Likewise. + +2009-10-22 Richard Guenther <rguenther@suse.de> + + PR lto/41791 + * lto-streamer-out.c (lto_output_location): Stream the + system header flag. + * lto-streamer-in.c (lto_input_location): Likewise. + +2009-10-22 Razya Ladelsky <razya@il.ibm.com> + + * cfgloopmanip.c (duplicate_subloops): Export. + * tree-parloops.c (loop_parallel_p): Dump if loop is innermost. + (transform_to_exit_first_loop): Duplicate bbs starting from + header up to loop->latch instead of exit->src. + Initialize control variable to the correct number of iterations. + (gather_scalar_reductions): Do not register double reductions. + (parallelize_loops): Dump which loop is tested. + Indicate whether the parallelized loop is inner or not. + Remove the innermost-loop requirement. + * cfgloop.h (duplicate_subloops): Export. + * tree-cfg.c (add_phi_args_after_redirect): New function. + (gimple_duplicate_sese_tail): Remove the no-subloops constraint. + Call duplicate_subloops. + Update number of iterations at the exit condition. + Don't redirect nexits always to the loop exit. + Redirect copied edges from latch to the loop exit. + * testsuite/libgomp.graphite/force-parallel-2.c: Adjust scan. + * testsuite/gcc.dg/autopar/outer-1.c: New testcase. + * testsuite/gcc.dg/autopar/outer-2.c: New testcase. + * testsuite/gcc.dg/autopar/outer-3.c: New testcase. + * testsuite/gcc.dg/autopar/outer-4.c: New testcase. + * testsuite/gcc.dg/autopar/outer-5.c: New testcase. + * testsuite/gcc.dg/autopar/outer-6.c: New testcase. + +2009-10-22 Jan Hubicka <jh@suse.cz> + + * ipa-cp.c (ipcp_read_summary): Remove now invalid FIXME and + flag_ltrans check. + * ipa-inline.c (cgraph_mark_inline_edge, + cgraph_decide_inlining_of_small_function, + cgraph_decide_inlining, inline_read_summary): Disable indirect inlining + for WPA for time being. + + PR tree-optimize/40556 + * ipa-inline.c (cgraph_early_inlining): Fix iterations condition. + +2009-10-22 Richard Guenther <rguenther@suse.de> + + * lto-streamer.h (lto_symtab_clear_resolution): Remove. + * lto-symtab.c (lto_symtab_clear_resolution): Likewise. + +2009-10-22 Jan Hubicka <jh@suse.cz> + + PR lto/41730 + * ipa-reference.c (has_proper_scope_for_analysis): Add fixme about + global vars. + (check_call): Handle only indirect calls. + (propagate_bits): Update comment. + (write_node_summary_p): Turn bogus check to assert. + (ipa_reference_write_summary): Stream calls_read_all properly. + (ipa_reference_read_summary): Stream in calls_read_all properly. + (read_write_all_from_decl): New function. + (propagate): Handle OVERWRITABLE nodes and external calls here. + * ipa-pre-const.c (check_call): In IPA mode handle indirect calls + only. + (analyze_function): Do not check visibility here. + (add_new_function): We summary OVERWRITABLE too. + (generate_summary): Stream OVERWRITABLE nodes too. + (propagate): Handle external calls and OVERWRITABLE nodes here. + (local_pure_const): Check visibility here. + +2009-10-22 Jan Hubicka <jh@suse.cz> + + * ipa-cp.c (ipcp_write_summary, ipcp_read_summary): New functions. + (pass_ipa_cp): Register them. + (ipcp_init_stage): Analyze all functions for whopr/lto. + (ipcp_propagate_stage): Skip external calls. + (ipcp_iterate_stage): Call ipa_update_after_lto_read if needed. + * ipa-reference.c (write_node_summary_p): Fix thinko about availability. + * cgraphunit.c (ipa_passes): When in lto, ne er produce new summaries; + when in ltrans, skip executing of ipa passes since everything should've + been done. + * ipa-inline.c (cgraph_decide_inlining): Remove FIXMEs. + (inline_generate_summary): Likewise. + (inline_read_summary): New function. + (inline_write_summary): New function. + (pass_ipa_inline): Register new hooks. + * ipa-prop.c: Inlcude lto-streamer.h + (ipa_edge_args_vector): Update declaration. + (ipa_count_arguments, ipa_compute_jump_functions, + ipa_free_edge_args_substructures): Move ipa_edge_args_vector into ggc. + (ipa_write_jump_function, ipa_read_jump_function, ipa_write_node_info, + ipa_read_node_info): New static functions. + (ipa_prop_write_jump_functions, ipa_prop_read_jump_functions): Update. + (duplicate_array): Use xmalloc. + (duplicate_ggc_array): New. + (ipa_edge_duplication_hook): Use it. + (ipa_update_after_lto_read): New function. + * ipa-prop.h (ipa_prop_write_jump_functions, + ipa_prop_read_jump_functions): Declare. + (ipa_pass_through_data, ipa_ancestor_jf_data, ipa_member_ptr_cst, + jump_func_value, ipa_member_ptr_cst, ipa_edge_args): Add GTY markers. + (ipa_edge_args_vector): Move into GGC. + (ipa_check_create_edge_args): Update. + (ipa_update_after_lto_read): New. + * passes.c (ipa_write_summaries_1): When in wpa, do not write summaries. + (ipa_read_summaries): When in ltrans, so not read summaries. + * lto-streamer.c (lto_get_section_name): Add LTO_section_jump_functions. + * lto-streamer.h (LTO_section_jump_functions): New section. + (produce_asm): Declare. + * lto-cgraph.c (output_cgraph): Output edges in reverse order. + * lto-streamer-out.c (produce_asm): Export. + * lto-streamer-in.c: Include tree-pass.h + (input_function): Free dominance info when done. + (lto_read_body): Push ipa_inline in ltrans stage. + * gengtype.c (open_base_files): Add ipa-prop.h into includes. + * Makefile.in (GTFILES): Add ipa-prop.h + +2009-10-22 Matthias Klose <doko@ubuntu.com> + + * doc/install.texi: Document --enable-browser-plugin. + +2009-10-21 Vladimir Makarov <vmakarov@redhat.com> + + * doc/invoke.texi (fira-loop-pressure): Update default value. + * opts.c (decode_options): Remove default value setting for + flag_ira_loop_pressure. + * config/ia64/ia64.c (ia64_override_options): Set + flag_ira_loop_pressure up for -O3. + * config/rs6000/rs6000.c (rs6000_override_options): Ditto. + +2009-10-21 Sebastian Pop <sebastian.pop@amd.com> + + PR tree-optimization/41497 + * tree-scalar-evolution.c (analyze_evolution_in_loop): Return + chrec_dont_know if the evolution function returned by follow_ssa_edge + is constant in the analyzed loop and is not compatible with the + initial value before the loop. + * tree-chrec.h (no_evolution_in_loop_p): Call STRIP_NOPS. + +2009-10-21 Joseph Myers <joseph@codesourcery.com> + + * config/sh/sh.c (nonpic_symbol_mentioned_p): Allow UNSPEC_TPOFF. + +2009-10-21 Jakub Jelinek <jakub@redhat.com> + + PR other/25507 + * doc/invoke.texi: Document -print-multi-os-directory. + +2009-10-21 Jack Howarth <howarth@bromo.med.uc.edu> + + PR c++/41313 + * gcc/config/darwin10.h: Use default_emit_unwind_label. + * gcc/config/darwin.c: Disable -freorder-blocks-and-partition + when darwin_emit_unwind_label is used. + +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * tree-vect-stmts.c (exist_non_indexing_operands_for_use_p): Tweak + order of checks. + +2009-10-20 Richard Henderson <rth@redhat.com> + + * tree-eh.c (lower_try_finally_copy): Do lower_eh_constructs_1 + before emit_post_landing_pad. + +2009-10-20 Adam Nemet <anemet@caviumnetworks.com> + + * config/mips/mips.c (mips_binary_cost): Add new argument speed. + Use when calling rtx_costs. + (mips_rtx_costs): Fix formatting. Use argument speed rather than the + global optimize_size. Pass speed to mips_binary_cost. + +2009-10-20 Jakub Jelinek <jakub@redhat.com> + + * config/rs6000/rs6000.c (def_builtin): Set TREE_READONLY instead + of TREE_CONSTANT. + +2009-10-20 Richard Sandiford <rdsandiford@googlemail.com> + + * rtl.h (simplify_replace_fn_rtx): Declare. + (wrap_constant, unwrap_constant): Delete. + * cfgexpand.c (unwrap_constant, wrap_constant): Delete. + (expand_debug_expr): Don't call wrap_constant. + * combine.c (rtx_subst_pair): Only define for AUTO_INC_DEC. + (auto_adjust_pair): Fold into... + (propagate_for_debug_subst): ...here. Only define for AUTO_INC_DEC. + Just return a new value. + (propagate_for_debug): Use simplify_replace_fn_rtx for AUTO_INC_DEC, + otherwise use simplify_replace_rtx. + * cselib.c (wrap_constant): Reinstate old definition. + (cselib_expand_value_rtx_1): Don't wrap constants. + * gcse.c (try_replace_reg): Don't use copy_rtx in the call to + simplify_replace_rtx. + (bypass_block): Fix formatting in calls to simplify_replace_rtx. + * reload1.c (reload): Skip all uses for an insn before adjusting it. + Use simplify_replace_rtx. + * simplify-rtx.c (simplify_replace_fn_rtx): New function, + adapted from... + (simplify_replace_rtx): ...here. Turn into a wrapper for + simplify_replace_fn_rtx. + (simplify_unary_operation): Don't unwrap CONSTs. + * var-tracking.c (check_wrap_constant): Delete. + (vt_expand_loc_callback): Don't call it. + (vt_expand_loc): Likewise. + +2009-10-20 Pascal Obry <obry@adacore.com> + Eric Botcazou <ebotcazou@adacore.com> + + * config/i386/cygming.h (DWARF_FRAME_REGNUM): Add enclosing parens. + +2009-10-20 Michael Matz <matz@suse.de> + + * loop-invariant.c (create_new_invariant): Use different magic number. + +2009-10-20 Richard Earnshaw <rearnsha@arm.com> + + PR target/39247 + * arm.c (arm_override_options): Forcibly disable hot/cold block + partitioning. + +2009-10-20 Alexandre Oliva <aoliva@redhat.com> + + PR debug/41739 + * haifa-sched.c (try_ready): Skip debug deps updating speculation + status. + +2009-10-20 Richard Guenther <rguenther@suse.de> + + * ggc-page.c: Include cfgloop.h. + (struct max_alignment): Drop long double, add void *. + (extra_order_size_table): Add low non-power-of-two multiples + of MAX_ALIGNMENT. Drop small type-based entries, add + tree_type, cgraph_node and loop. + * alloc-pool.c (struct allocation_object_def): Drop long double + aligning element. + +2009-10-20 Jakub Jelinek <jakub@redhat.com> + + PR debug/41340 + * loop-invariant.c (calculate_loop_reg_pressure): Don't count regs + referenced just in DEBUG_INSNs. + +2009-10-20 Richard Guenther <rguenther@suse.de> + + PR lto/41761 + * gimple.c (gimple_register_type): Make sure we register + the types main variant first. + +2009-10-20 Richard Guenther <rguenther@suse.de> + + * gimple.c (gimple_types_compatible_p): Simplify. Move + cheap checks before hashtable queries. Add checks for + TYPE_NONALIASED_COMPONENT and DECL_NONADDRESSABLE_P. + +2009-10-20 Eric Botcazou <ebotcazou@adacore.com> + + * tree-sra.c (build_ref_for_offset_1) <RECORD_TYPE>: Skip fields + without size or with size that can't be represented as a host integer. + +2009-10-20 Alexandre Oliva <aoliva@redhat.com> + + * tree-ssa-dce.c (eliminate_unnecessary_stmts): Don't regard + the removal of a debug stmt as a significant change. + +2009-10-20 Wolfgang Gellerich <gellerich@de.ibm.com> + + * config/s390/s390.md: Added agen condition to operand + forwarding bypasses. + Added bypass for early address generation use of int results. + Updated comments. + +2009-10-20 Stefan Dösinger <stefan@codeweavers.com> + + * config/i386/i386.c: Remove signal.h #include. + +2009-10-20 Jie Zhang <jie.zhang@analog.com> + + * simplify-rtx.c (simplify_const_unary_operation): Handle SS_ABS. + * doc/rtl.texi: Document ss_abs. + +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + * c-common.c (c_parse_error): Handle CPP_UTF8STRING. + * c-lex.c (c_lex_with_flags): Likewise. Test C_LEX_STRING_NO_JOIN + instead of C_LEX_RAW_STRINGS. + (lex_string): Handle CPP_UTF8STRING. + * c-parser.c (c_parser_postfix_expression): Likewise. + * c-pragma.h (C_LEX_RAW_STRINGS): Rename to ... + (C_LEX_STRING_NO_JOIN): ... this. + +2009-10-19 Anatoly Sokolov <aesok@post.ru> + + * config/cris/cris.c (cris_function_value, cris_libcall_value, + cris_function_value_regno_p): New functions. + (cris_promote_function_mode): Update comment. + (TARGET_FUNCTION_VALUE, TARGET_LIBCALL_VALUE): Declare. + * config/cris/cris.h (FUNCTION_VALUE, LIBCALL_VALUE): Remove. + (FUNCTION_VALUE_REGNO_P): Redefine, use cris_function_value_regno_p. + * config/cris/cris-protos.h (cris_function_value_regno_p): Declare. + +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + * unwind-dw2.c (execute_stack_op): Fix operand order for + DW_OP_le, DW_OP_ge, DW_OP_lt and DW_OP_gt. + +2009-10-19 Eric Botcazou <ebotcazou@adacore.com> + + * gimple-low.c (struct lower_data): Add cannot_fallthru field. + (lower_stmt) <GIMPLE_BIND>: Add comment. + <GIMPLE_COND, GIMPLE_GOTO, GIMPLE_SWITCH>: Set cannot_fallthru to true + and return. + <GIMPLE_RETURN>: Remove the statement if cannot_fallthru is set. + Otherwise lower it and set cannot_fallthru to true. + <GIMPLE_TRY>: Update cannot_fallthru for GIMPLE_TRY_FINALLY and return. + <GIMPLE_CATCH, GIMPLE_EH_FILTER>: Set cannot_fallthru to false. + <GIMPLE_CALL>: Set cannot_fallthru to false for BUILT_IN_SETJMP and + to true for a noreturn call. Do not remove statements. + <GIMPLE_OMP_PARALLEL, GIMPLE_OMP_TASK>: Set cannot_fallthru to false. + Set cannot_fallthru to false on function exit. + (gimple_stmt_may_fallthru) <GIMPLE_SWITCH>: Really return false. + <GIMPLE_ASSIGN>: Remove. + +2009-10-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.c (s390_z10_optimize_cmp): Don't touch FP compares. + +2009-10-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.c (s390_z10_optimize_cmp): Use + next/prev_active_insn to skip DEBUG_INSNs as well. + +2009-10-19 Joseph Myers <joseph@codesourcery.com> + + * config/arm/arm.c (output_move_neon): Use DImode in call to + adjust_address. + +2009-10-19 Matthias Klose <doko@ubuntu.com> + + PR target/40134 + * config.gcc (arm*-*-linux-*eabi): Use config/t-slibgcc-libgcc. + +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + * cfgexpand.c (expand_debug_expr): Fail if bitpos < 0 for non-MEM op0. + +2009-10-17 Andy Hutchinson <hutchinsonandy@gcc.gnu.org> + + PR middle-end/41738 + * optabs.c (expand_binop): Make mode of shift count expression mode + of shift count not target. + Remove indent nit. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * tree-nested.c (convert_nonlocal_reference_stmt) <GIMPLE_COND>: New + case. Force using values to replace references within the statement. + (convert_local_reference_stmt): Likewise. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gimple-low.c (lower_stmt) <GIMPLE_CALL>: If the call is noreturn, + remove a subsequent GOTO or RETURN statement. + +2009-10-17 Andy Hutchinson <hutchinsonandy@aim.com> + + * config/avr.md (*movqi): Add zero as equally preferable constraint + as general register. + (*movhi): Ditto. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * print-tree.c (print_node): Fix string for DECL_STRUCT_FUNCTION. + +2009-10-17 Richard Guenther <rguenther@suse.de> + + * lto-streamer-in.c (lto_input_location): Try to reuse previous maps. + +2009-10-17 Richard Guenther <rguenther@suse.de> + + * lto-streamer-in.c (input_gimple_stmt): Fixup FIELD_DECL + operands in COMPONENT_REFs. + +2009-10-17 Anatoly Sokolov <aesok@post.ru> + + * targhooks.c (default_libcall_value): Don't use LIBCALL_VALUE macro + if not defined. Change type of second argument to const_rtx. + (default_function_value): Call gcc_unreachable if FUNCTION_VALUE + macro not defined. + * targhooks.h (default_libcall_value): Update prototype. + * target.h (struct gcc_target): Change type of second argument of + libcall_value to const_rtx. + * config/arm/arm.c (arm_libcall_value): Change type of second argument + to const_rtx. + (arm_libcall_uses_aapcs_base): Change type of argument to const_rtx. + * doc/tm.texi (TARGET_LIBCALL_VALUE): Revise documentation. + +2009-10-17 Jakub Jelinek <jakub@redhat.com> + + PR debug/40521 + * debug.h (struct gcc_debug_hooks): Add assembly_start hook. + * cgraphunit.c (cgraph_optimize): Call it. + * dwarf2out.c (dwarf2out_init): Move .cfi_sections printing into... + (dwarf2out_assembly_start): ... here. New hook. + (dwarf2out_debug_hooks): Add dwarf2out_assembly_start. + * debug.c (do_nothing_debug_hooks): Do nothing for assembly_start + hook. + * dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Likewise. + * sdbout.c (sdb_debug_hooks): Likewise. + * vmsdbgout.c (vmsdbg_debug_hooks): Add vmsdbgout_assembly_start. + (vmsdbgout_assembly_start): New hook. + +2009-10-17 Alexandre Oliva <aoliva@redhat.com> + + * rtl.h (RTL_LOCATION): Fix typo. + +2009-10-17 Alexandre Oliva <aoliva@redhat.com> + + * print-rtl.c (print_rtx): Print locators in asm_operands + and asm_input. + +2009-10-17 Alexandre Oliva <aoliva@redhat.com> + + PR debug/41535 + * sched-deps.c (depl_on_debug_p): New. + (attach_dep_link): Reject debug deps before nondebug deps. + (add_to_deps_list): Insert debug deps after nondebug deps. + (sd_lists_empty_p): Stop at first nonempty list. Disregard debug + deps. + (sd_add_dep): Do not reject debug deps. + (add_insn_mem_dependence): Don't count debug deps. + (remove_from_deps): Likewise. + (sched_analyze_2): Set up mem deps on debug insns. + (sched_analyze_insn): Record reg uses for deps on debug insns. + * haifa-sched.c (schedule_insn): Reset deferred debug insn. Don't + try_ready nondebug insn after debug insn. + * ddg.c (create_ddg_dep_from_intra_loop_link, + create_ddg_dep_no_link): Don't reject debug deps. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + * lto-symtab.c (merge_incomplete_and_complete_type): Remove. + (maybe_merge_incomplete_and_complete_type): Likewise. + (lto_symtab_merge): Do not call them. Do not warn for + complete vs. incomplete compatible types. + (lto_symtab_merge_decls_2): Simplify. + * gimple.c (gimple_force_type_merge): Remove. + (gimple_types_compatible_p): Make it static. + * gimple.h (gimple_force_type_merge): Remove. + (gimple_types_compatible_p): Likewise. + +2009-10-16 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (mem_loc_descriptor) <case ZERO_EXTRACT>: Cast + DWARF2_ADDR_SIZE to int to avoid signed vs. unsigned warnings. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/41728 + * tree-ssa-dom.c (optimize_stmt): Mark the stmt modified + if fold_stmt did anything. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR lto/41715 + * lto-streamer-in.c (lto_input_tree_ref): Revert last change. + (maybe_fixup_handled_component): New function. + (input_gimple_stmt): Fixup mismatched decl replacements. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR lto/41713 + * lto-streamer-out.c (lto_output_tree_ref): Handle DEBUG_EXPR_DECL + the same as VAR_DECL. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + * gimple.c (iterative_hash_gimple_type): For integer types + also hash their minimum and maximum values and the string flag. + For array types hash their domain and the string flag. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + * gimple.c (gimple_types_compatible_p): Restrict completing + types to record or unions. Simplify completion. + Do not merge records or unions with different + TYPE_STRUCTURAL_EQUALITY_P tag. + (iterative_hash_gimple_type): Restrict non-recursing into + pointer targets for records and unions. + +2009-10-15 Jakub Jelinek <jakub@redhat.com> + + PR debug/41717 + * cfgexpand.c (expand_debug_expr): Handle CONJ_EXPR. + * dwarf2out.c (mem_loc_descriptor): Don't handle + POST_INT/POST_DEC/POST_MODIFY like SUBREG. For SUBREG + punt if it is not lowpart subreg or if inner mode isn't + MODE_INT. + +2009-10-16 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.c (s390_z10_optimize_cmp): Skip notes when + investigating previous or next insns. + +2009-10-16 Eric Botcazou <ebotcazou@adacore.com> + + * tree-sra.c (build_ref_for_offset_1): Update comment. + +2009-10-16 Wolfgang Gellerich <gellerich@de.ibm.com> + + * config/s390/s390.md (atype): Added missing values. + +2009-10-15 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR target/41702 + * pa.md (casesi): Use sign extended index in call to gen_casesi64p. + (casesi64p): Update pattern to reflect above. + +2009-10-15 Steve Ellcey <sje@cup.hp.com> + + PR rtl-optimization/41697 + * sel-sched-ir.h (_eligible_successor_edge_p): Check successor count. + +2009-10-15 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/23983 + * config/rs6000/predicates.md: Update copyright year. + * config/rs6000/altivec.md: Ditto. + + * config/rs6000/t-rs6000 (TM_H): Add rs6000-builtin.def. + (MD_INCLUDES): Add a2.md. + + * config/rs6000/rs6000.c (rs6000_builtin_decls): Change + RS6000_BUILTIN_COUNT to MAX_RS6000_BUILTINS. + (builtin_classify): New static vector to classify various builtins + to get the tree attributes correct. + (def_builtin): Set the attributes of builtins based on what the + builtin does (i.e. memory operation, floating point, saturation + need special attributes, others are pure functions). + + * config/rs6000/rs6000.h (enum rs6000_btc): New enum to classify + the builtins. + (enum rs6000_builtins): Include rs6000-builtin.def to define the + builtins. Change the end marker to MAX_RS6000_BUILTINS from + RS6000_BUILTIN_COUNT. + (rs6000_builtin_decls): Change RS6000_BUILTIN_COUNT to + MAX_RS6000_BUILTINS. + + * config/rs6000/rs6000-builtin.def: New file that combines the + builtin enumeration name and attributes. + +2009-10-15 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/linux.h (ASM_SPEC): Add --32. + +2009-10-15 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (dwarf_tag_name): Handle DW_TAG_rvalue_reference_type + and DW_TAG_template_alias. + (dwarf_attr_name): Handle DW_AT_main_subprogram, + DW_AT_data_bit_offset, DW_AT_const_expr, DW_AT_enum_class, + DW_AT_linkage_name, DW_AT_GNU_guarded_by, DW_AT_GNU_pt_guarded_by, + DW_AT_GNU_guarded, DW_AT_GNU_pt_guarded, DW_AT_GNU_locks_excluded, + DW_AT_GNU_exclusive_locks_required, DW_AT_GNU_shared_locks_required + and DW_AT_GNU_odr_signature. + (dwarf_form_name): Handle DW_FORM_sec_offset, DW_FORM_exprloc, + DW_FORM_flag_present and DW_FORM_ref_sig8. + (output_signature): Only print name on the first byte. + (output_die): Likewise for dw_val_class_data8. + +2009-10-15 Alexander Monakov <amonakov@ispras.ru> + + * doc/invoke.texi: Clarify that most optimizations are not enabled + without -O. + +2009-10-15 Richard Guenther <rguenther@suse.de> + + PR lto/41668 + * gimple.c (compare_type_names_p): Handle anonymous names + differently based on new mode argument. + (gimple_types_compatible_p): For structs also compare the tags. + (iterative_hash_type_name): Rename to ... + (iterative_hash_name): ... this. Hash all names. + (iterative_hash_gimple_type): Fix hashing the struct tag of + pointer targets. Hash field decl names. + +2009-10-15 Richard Guenther <rguenther@suse.de> + + PR lto/41669 + * gimple.c (gimple_get_alias_set): Avoid recursing on + invalid type topology. + +2009-10-15 Andrew Pinski <andrew_pinski@playstation.sony.com> + + * config/spu/spu.c (get_branch_target): Use extract_asm_operands. + +2009-10-15 Richard Guenther <rguenther@suse.de> + + * tree.c (free_lang_data_in_decl): Free DECL_FCONTEXT. + +2009-10-15 Jakub Jelinek <jakub@redhat.com> + + * config/rs6000/option-defaults.h (OPTION_DEFAULT_SPECS): Don't + add --with-tune{,-32,-64} configured default for -mtune if explicit + -mcpu is used. + +2009-10-14 Daniel Gutson <dgutson@codesourcery.com> + + * config/arm/neon.md (neon_vshll_n<mode>): Checking Bounds fixed. + +2009-10-14 DJ Delorie <dj@redhat.com> + + * config/h8300/h8300.c (F): New. + (Fpa): New. + (h8300_emit_stack_adjustment): Call them. + (push): Likewise. + (h8300_push_pop): Likewise. + (h8300_expand_prologue): Likewise. + * config/h8300/h8300.h (DWARF2_DEBUGGING_INFO): Define. + (MUST_USE_SJLJ_EXCEPTIONS): Define. + (INCOMING_RETURN_ADDR_RTX): Define. + (INCOMING_FRAME_SP_OFFSET): Define. + (DWARF_CIE_DATA_ALIGNMENT): Define. + +2009-10-14 Jakub Jelinek <jakub@redhat.com> + + * stor-layout.c (place_field): Don't emit -Wpadded warnings for + fields in builtin structs. + (finalize_record_size): Likewise. + +2009-10-14 Richard Guenther <rguenther@suse.de> + + * gimple.c (gtc_ob): New global. + (struct type_pair_d): Replace pointers with type UIDs. + (type_pair_hash): Adjust. + (type_pair_eq): Likewise. + (lookup_type_pair): Likewise. Allocate from an obstack. + (gimple_force_type_merge): Adjust. + (gimple_types_compatible_p): Likewise. + (free_gimple_type_tables): Free the obstack. + +2009-10-14 Jakub Jelinek <jakub@redhat.com> + + * tree-parloops.c (separate_decls_in_region_debug_bind): Drop debug + stmts setting DEBUG_EXPR_DECLs. + + * cfgexpand.c (expand_debug_expr): Ignore zero-length bitfields. + Don't crash if mode1 is VOIDmode. + +2009-09-26 Vladimir Makarov <vmakarov@redhat.com> + + * params.def (PARAM_IRA_LOOP_RESERVED_REGS): New. + * params.h (IRA_LOOP_RESERVED_REGS): New. + * tree-pass.h (pass_subregs_of_mode_init, + pass_subregs_of_mode_finish): Remove. + * passes.c (pass_subregs_of_mode_init, + pass_subregs_of_mode_finish): Remove. + (pass_reginfo_init): Move before loop optimizations. + * config/i386/i386.h (STACK_REG_COVER_CLASS): Define. + * common.opt (fira-loop-pressure): New. + * toplev.h (flag_ira_loop_pressure): New. + * rtl.h (init_subregs_of_mode, finish_subregs_of_mode): New externals. + * reginfo.c (init_subregs_of_mode, finish_subregs_of_mode): + Make external and void type functions. + (gate_subregs_of_mode_init, pass_subregs_of_mode_init, + pass_subregs_of_mode_finish): Remove. + * ira-costs.c (init_costs): Call init_subregs_of_mode. + * regmove.c: Include ira.h. + (regmove_optimize): Call ira_set_pseudo_classes after IRA based + register pressure calculation in loops. + * loop-invariant.c: Include REGS_H and ira.h. + (struct loop_data): New members max_reg_pressure, regs_ref, and + regs_live. + (struct invariant): New member orig_regno. + (curr_loop): New variable. + (find_exits): Initialize regs_ref and regs_live. + (create_new_invariant): Initialize orig_regno. + (get_cover_class_and_nregs): New. + (get_inv_cost): Make aregs_needed an array. Use regs_needed as an + array. Add code for flag_ira_loop_pressure. + (gain_for_invariant): Make new_regs an array. Add code for + flag_ira_loop_pressure. + (best_gain_for_invariant): Ditto. + (set_move_mark): New parameter gain. Use it for debugging output. + (find_invariants_to_move): Make regs_needed and new_regs an array. + Add code for flag_ira_loop_pressure. + (move_invariant_reg): Set up orig_regno. + (move_invariants): Set up reg classes for pseudos for + flag_ira_loop_pressure. + (free_loop_data): Clear regs_ref and regs_live. + (curr_regs_live, curr_reg_pressure, regs_set, n_regs_set, + get_regno_cover_class, change_pressure, mark_regno_live, + mark_regno_death, mark_reg_store, mark_reg_clobber, + mark_reg_death, mark_ref_regs, calculate_loop_reg_pressure): New. + (move_loop_invariants): Calculate pressure. Initialize curr_loop. + * ira.c (ira): Call ira_set_pseudo_classes after IRA based + register pressure calculation in loops if new regs were added. + Call finish_subregs_of_mode. + * opts.c (decode_options): Set up flag_ira_loop_pressure. + * Makefile.in (loop-invariant.o): Add ira.h. + (regmove.o): Ditto. + * doc/invoke.texi (-fira-loop-pressure, ira-loop-reserved-regs): + Describe. + * doc/tm.texi (STACK_REG_COVER_CLASS): Describe. + +2009-10-14 Richard Guenther <rguenther@suse.de> + + * lto-symtab.c (lto_symtab_compatible): Fold in ... + (lto_symtab_merge): ... here. Rewrite both to take the + prevailing and a to-be-merged entry and to queue diagnostics properly. + (lto_symtab_resolve_replaceable_p): New predicate for + symbol resolution. + (lto_symtab_resolve_can_prevail_p): Likewise. + (lto_symtab_resolve_symbols): Rewrite. Fold in code that + handles merging commons by choosing the largest decl. Fold + in code that gives ODR errors. + (lto_symtab_merge_decls_2): Simplify a lot. Emit queued + diagnostics here. + (lto_symtab_merge_decls_1): Re-structure. Deal with the + case of no prevailing decl here. Diagnose mismatches + in object types here. Drop all but the prevailing decls. + (lto_symtab_prevailing_decl): Return the single prevailing decl. + * lto-streamer-in.c (lto_input_tree_ref): Deal with + VIEW_CONVERT_EXPRs in decl slots. Unshare the tree in this case. + +2009-10-14 Richard Guenther <rguenther@suse.de> + + PR lto/41521 + * lto-streamer-in.c (input_bb): Replace debug stmts with + nops instead of dropping them. + +2009-10-14 Nick Clifton <nickc@redhat.com> + + * gcc/doc/extended.texi: Replace the dash character with @minus{} + in situations where it is being used as a minus symbol. + * gcc/doc/tm.texi: Likewise. + * gcc/doc/md.texi: Likewise. + +2009-10-14 Jakub Jelinek <jakub@redhat.com> + + PR preprocessor/41543 + * input.h (BUILTINS_LOCATION): Change to 1 from 2. + Assert BUILTINS_LOCATION < RESERVED_LOCATION_COUNT. + * tree.c: Include intl.h. + (expand_location): Handle BUILTINS_LOCATION. + * Makefile.in (tree.o): Depend on intl.h. + + PR debug/41695 + * dwarf2out.c (dwarf2out_var_location): Always clear + last_postcall_label when changing last_label. + +2009-10-14 Pascal Obry <obry@adacore.com> + + * gcc.c (DEFAULT_SWITCH_CURTAILS_COMPILATION): Add -E. + (process_command): Handle -E as done with -c and -S. Do not add + the target executable suffix to the output file when -E is used. + (main): Adjust error message accordingly. + +2009-10-14 Alexandre Oliva <aoliva@redhat.com> + + PR debug/41343 + PR debug/41447 + PR debug/41264 + PR debug/41338 + * tree.c (tree_node_structure_for_code): DEBUG_EXPR_DECL uses + decl with rtl. + (tree_code_size): Likewise. + +2009-10-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * builtins.c (fold_builtin_1): Support complex "arc" functions. + * real.h (HAVE_mpc_arc): Define. + +2009-10-14 Kaz Kojima <kkojima@gcc.gnu.org> + + * config/sh/sh.c (TARGET_BUILTIN_DECL): Define. + (struct builtin_description): Add fndecl field. + (bdesc): Remove const qualifier. Update initializer. + (sh_media_init_builtins): Remove const qualifier for d. Record + the result of add_builtin_function to the fndecl field. + (sh_builtin_decl): New. + (sh_media_builtin_decl): New. + +2009-10-14 Hans-Peter Nilsson <hp@axis.com> + + PR target/38948 + * config/cris/cris.h (SECONDARY_RELOAD_CLASS): Handle reload + requests between special registers. + +2009-10-13 Eric Botcazou <ebotcazou@adacore.com> + + * dwarf2out.c (mem_loc_descriptor): Accept UNGT as well. + +2009-10-13 Richard Henderson <rth@redhat.com> + + PR tree-optimization/41377 + * tree-eh.c (unsplit_eh): Propagate degenerate PHIs. + (cleanup_empty_eh_merge_phis): New change_region parameter; + pass it on to redirect_eh_edge_1. Update callers. + (cleanup_empty_eh_unsplit): Don't require an existing EH label + at the destination block. + +2009-10-13 Basile Starynkevitch <basile@starynkevitch.net> + + * passes.c (register_pass): Replaced gcc_unreachable by + fatal_error on failure. Mentions plugins in comments & messages. + +2009-10-13 Jakub Jelinek <jakub@redhat.com> + + PR target/41693 + * rtl.h (DEBUG_EXPR_TREE_DECL): Define. + * sched-vis.c (print_value): Use it. + * cselib.c (cselib_hash_rtx): Likewise. + * print-rtl.c (print_rtx): Likewise. + * cfgexpand.c (expand_debug_rtx): Likewise. + * var-tracking.c (vt_expand_loc_callback): Likewise. + +2009-10-13 Richard Guenther <rguenther@suse.de> + + PR lto/41565 + * opts.c (handle_option): Split out code to handle setting + the options flag var ... + (set_option): ... here. + * opts.h (set_option): Declare. + * lto-opts.c (register_user_option_p): Include -fexceptions + and all position independent code variants. + (handle_common_option): Remove. + (lto_reissue_options): Use set_option. + +2009-10-13 Martin Jambor <mjambor@suse.cz> + + PR tree-optimization/41661 + * ipa-prop.c (compute_complex_pass_through): Allow only operations + that are tcc_comparisons or do not change the type in any + un-usleless way. + * ipa-cp.c (ipcp_lattice_from_jfunc): Request boolean type when + folding tcc_comparison operations. + +2009-10-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.c (s390_encode_section_info): Handle BLKmode + properly. + +2009-10-12 Alexandre Oliva <aoliva@redhat.com> + + PR debug/41343 + PR debug/41447 + PR debug/41264 + PR debug/41338 + * tree.def (DEBUG_EXPR_DECL): New. + * rtl.def (DEBUG_EXPR): New. + * gengtype.c (adjust_field_rtx_def): Handle it. + * tree-ssa.c (propagate_var_def_into_debug_stmts): Rename to... + (insert_debug_temp_for_var_def): ... this. Drop support for + moving. Take iterator for def stmt; insert debug stmt before it. + Scan early for use count and kind in debug stmts. + (propagate_defs_into_debug_stmts): Rename to... + (insert_debug_temps_for_defs): ... this. Likewise. + * tree.h (DEBUG_TEMP_UID): New. + * tree.c (next_debug_decl_uid): New. + (make_node_stat): Count debug decls separately. + (copy_node_stat): Likewise. + * cfgexpand.c (expand_debug_expr): Handle DEBUG_EXPR_DECL. + * var-tracking.c (dv_is_decl_p): Recognize it. + (VALUE_RECURSED_INTO): Apply to DEBUG_EXPRs too. + (track_expr_p): Track expanded DEBUG_EXPR_DECLs. + (vt_expand_loc_callback): Expand DEBUG_EXPRs. + (emit_note_insn_var_location): Don't emit notes for DEBUG_EXPR_DECLs. + * cselib.c (rtx_equal_for_cselib_p): Handle DEBUG_EXPR. + (cselib_hash_rtx): Likewise. + (cselib_expand_value_rtx_1): Use callback for DEBUG_EXPR. + * tree-ssa-operands.c (get_expr_operands): Skip DEBUG_EXPR_DECLs in + debug bind stmts. + * emit-rtl.c (verify_rtx_sharing): Handle DEBUG_EXPR and VALUE. + (copy_rtx_if_shared_1, reset_used_flags, set_used_flags): Likewise. + * rtl.c (copy_rtx): Likewise. + (rtx_equal_p_cb, rtx_equal_p): Handle DEBUG_EXPR. + * print-rtl.c (print_rtx): Likewise. + * sched-vis.c (print_value): Likewise. + (print_insn): Handle DEBUG_EXPR_DECL. + * tree-dump.c (dequeue_and_dump): Likewise. + * tree-pretty-print.c (dump_decl_name, dump_generic_node): Likewise. + * gimple-iterator (gsi_replace): Check for same lhs. + (gsi_remove): Insert debug temps. + * tree-ssa-loop-im.c (rewrite_reciprocal): Replace with same lhs. + (move_computations_stmt): Drop explicit propagation into debug stmts. + (rewrite_bittest): Likewise. Use gsi_remove for propagation. + * tree-ssa-reassoc.c (rewrite_expr_tree, linearize_expr): Likewise. + * tree-ssa-sink.c (statement_sink_location): Likewise. + * tree-ssa-forwprop (forward_propagate_addr_expr): Likewise. + * tree-ssanames.c (release_ssa_name): Adjust for rename. + * tree-flow.h: Likewise. + * tree-ssa-dce.c (mark_stmt_if_obviously_necessary): Don't mark + debug temps without values. + (eliminate_unnecessary_stmts): Don't discard just-inserted + debug stmts. + +2009-10-12 Hans-Peter Nilsson <hp@axis.com> + + PR target/26515 + * config/cris/cris.md (andu): Check that operand 1 is one of the + general registers. Fix typo in head comment. + +2009-10-12 Stefan Dösinger <stefan@codeweavers.com> + + * config/i386/i386.md (vswapmov): New. + * config/i386/i386.c (ix86_handle_fndecl_attribute): New. + (ix86_function_ms_hook_prologue): New. + (ix86_expand_prologue): Handle ms_hook_prologue attribute. + * configure.ac: Test for swap suffix support in as. + * configure: Rebuild. + 2009-10-12 Jakub Jelinek <jakub@redhat.com> PR target/41680 @@ -7,8 +1022,7 @@ 2009-10-12 Uros Bizjak <ubizjak@gmail.com> - * config/i386/i386.md (*setcc_<mode>_2): Do not use ix86_expand_clear - to zero operand 0. + * config/i386/i386.md (*setcc_<mode>_2): Remove insn pattern. 2009-10-12 Dodji Seketeli <dodji@redhat.com> @@ -118,7 +1132,7 @@ (ASM_CPU_SPEC): Pass %(asm_cpu_476) for -mcpu=476 and -mcpu=476fp. (processor_type): Add PROCESSOR_PPC476. (EXTRA_SPECS): Add asm_cpu_476 string. - * config/rs6000/rs6000.md: (define_attr "type"): Add isel attribute. + * config/rs6000/rs6000.md (define_attr "type"): Add isel attribute. (define_attr "cpu"): Add ppc476. Include 476.md. Update comments for 476. @@ -1695,7 +2709,7 @@ (x86_64-*-*): Ditto. * config/i386/smmintrin.h: Move instructions in mmintrin-common.h back to smmintrin.h. - * config/i386/cpuid.h: (bit_SSE5): Remove SSE5 bit. + * config/i386/cpuid.h (bit_SSE5): Remove SSE5 bit. * config/i386/x86intrin.h: Remove SSE5. * config/i386/mmintrin-common.h: Delete file. * doc/extend.texi (x86 intrinsics): Remove SSE5 flags and builtins. @@ -7763,7 +8777,7 @@ (function_value): Adjust for above modification. (alpha_va_start) <TARGET_ABI_OPEN_VMS>: Use virtual_incoming_args_rtx as base object, not next_arg. - * config/alpha/vms.h: (DEFAULT_PCC_STRUCT_RETURN): Define as 0. + * config/alpha/vms.h (DEFAULT_PCC_STRUCT_RETURN): Define as 0. 2009-08-11 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> @@ -7856,7 +8870,7 @@ * config/alpha/vms.h (ASM_OUTPUT_EXTERNAL): Define. (DO_CRTL_NAMES): Define. (LIB_SPEC): Remove. - * config/alpha/vms64.h: (POINTERS_EXTEND_UNSIGNED): Remove undef. + * config/alpha/vms64.h (POINTERS_EXTEND_UNSIGNED): Remove undef. (LONG_TYPE_SIZE): Define. (TARGET_OS_CPP_BUILTINS): Define with __LONG_POINTERS=1 (SUBTARGET_SWITCHES): Define malloc64 switch. @@ -9748,7 +10762,7 @@ combined_args_to_skip and args_to_skip. * tree-inline.c (update_clone_info): New function. (tree_function_versioning): Call update_clone_info. - * cgraphunit.c: (cgraph_materialize_clone): Dump materialized + * cgraphunit.c (cgraph_materialize_clone): Dump materialized functions. (cgraph_materialize_all_clones): More extensive dumping, working with combined_args_to_skip rather than args_to_skip. @@ -10078,7 +11092,7 @@ * doc/sourcebuild.texi: Document install-plugin target. * configure.ac: Added install-plugin target to language makefiles. * configure: Regenerate. - * Makefile.in: (install-plugin): Install more headers, + * Makefile.in (install-plugin): Install more headers, depend on lang.install-plugin. 2009-07-15 Manuel López-Ibáñez <manu@gcc.gnu.org> @@ -10407,7 +11421,7 @@ 2009-07-08 DJ Delorie <dj@redhat.com> - * config/mep/mep.c: (mep_option_can_inline_p): New. + * config/mep/mep.c (mep_option_can_inline_p): New. (TARGET_OPTION_CAN_INLINE_P): Define. 2009-07-08 Mark Wielaard <mjw@redhat.com> @@ -12631,10 +13645,10 @@ (LARGEST_EXPONENT_IS_NORMAL): Define. * config/arm/arm-protos.h (arm_emit_fp16_const): Declare. * config/arm/arm-modes.def (HFmode): Define. - * config/arm/vfp.md: (*movhf_vfp): New. + * config/arm/vfp.md (*movhf_vfp): New. (extendhfsf2): New. (truncsfhf2): New. - * config/arm/arm.md: (fpu): Add neon_fp16. + * config/arm/arm.md (fpu): Add neon_fp16. (floatsihf2, floatdihf2): New. (fix_trunchfsi2, fix_trunchfdi2): New. (truncdfhf2): New. @@ -13348,7 +14362,7 @@ (c_parser_expr_list): Same. (c_parser_omp_atomic): Same. (c_parser_omp_for_loop): Same. - * c-tree.h: (struct c_declarator): Add comment to id_loc. + * c-tree.h (struct c_declarator): Add comment to id_loc. (build_array_declarator): New argument. * c-decl.c (build_array_declarator): Add location argument. (grokdeclarator): Set id_loc for cdk_array. @@ -16064,7 +17078,7 @@ * hooks.h (hook_tree_const_tree_null): Declare. * target.h (struct gcc_target): Add invalid_parameter_type, invalid_return_type, promoted_type, and convert_to_type fields. - * target-def.h: (TARGET_INVALID_PARAMETER_TYPE): Define. + * target-def.h (TARGET_INVALID_PARAMETER_TYPE): Define. (TARGET_INVALID_RETURN_TYPE): Define. (TARGET_PROMOTED_TYPE): Define. (TARGET_CONVERT_TO_TYPE): Define. @@ -18481,7 +19495,7 @@ 2009-05-04 Michael Eager <eager@eagercon.com> - * gcc/config.gcc: (powerpc-xilinx-eabi*): Add tm t-xilinx + * gcc/config.gcc (powerpc-xilinx-eabi*): Add tm t-xilinx * config/rs6000/t-xilinx: New 2009-05-04 Paolo Bonzini <bonzini@gnu.org> @@ -19509,7 +20523,7 @@ * ssaexpand.h (struct ssaexpand): Member 'values' is a bitmap. (get_gimple_for_ssa_name): Adjust, lookup using SSA_NAME_DEF_STMT. - * tree-ssa-live.h: (find_replaceable_exprs): Return a bitmap. + * tree-ssa-live.h (find_replaceable_exprs): Return a bitmap. (dump_replaceable_exprs): Take a bitmap. * cfgexpand.c (gimple_cond_pred_to_tree): Handle bitmap instead of array. @@ -20513,7 +21527,7 @@ * cfghooks.c (tidy_fallthru_edges): Remove find_basic_blocks references from comments. - * cfgbuild.c: (count_basic_blocks): Delete. + * cfgbuild.c (count_basic_blocks): Delete. (find_basic_blocks_1): Delete. (find_basic_blocks): Delete. * except.c (finish_eh_generation): Make static. Move comment from @@ -23752,7 +24766,7 @@ * config/vax/builtins.md (jbbssiqi, jbbssihi, jbbssisi, jbbcciqi, jbbccihi, jbbccisi): Remova trailing whitespace. * config/vax/constraints.md: Likewise. - * config/vax/elf.h: (ASM_PREFERRED_EH_DATA_FORMAT): Likewise. + * config/vax/elf.h (ASM_PREFERRED_EH_DATA_FORMAT): Likewise. * config/vax/openbsd1.h (OBSD_OLD_GAS): Likewise. * config/vax/predicates.md: Likewise. * config/vax/vax.c (print_operand_address, vax_output_int_move, diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index ea0930452d6..1dc1d7a6c52 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20091012 +20091023 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index f018ca774f5..ea57af4db53 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2244,7 +2244,7 @@ tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ langhooks.h $(REAL_H) gt-tree.h $(TREE_INLINE_H) tree-iterator.h \ $(BASIC_BLOCK_H) $(TREE_FLOW_H) $(OBSTACK_H) pointer-set.h fixed-value.h \ tree-pass.h $(LANGHOOKS_DEF_H) $(DIAGNOSTIC_H) $(CGRAPH_H) $(TIMEVAR_H) \ - $(EXCEPT_H) debug.h + $(EXCEPT_H) debug.h intl.h tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(TREE_H) langhooks.h $(TOPLEV_H) $(SPLAY_TREE_H) $(TREE_DUMP_H) \ tree-iterator.h $(TREE_PASS_H) $(DIAGNOSTIC_H) $(REAL_H) fixed-value.h @@ -3077,9 +3077,9 @@ loop-iv.o : loop-iv.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(BASIC_BLOCK_H) \ hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) coretypes.h $(TM_H) $(OBSTACK_H) \ output.h intl.h $(TOPLEV_H) $(DF_H) $(HASHTAB_H) loop-invariant.o : loop-invariant.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ - $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) $(RECOG_H) coretypes.h \ - $(TM_H) $(TM_P_H) $(FUNCTION_H) $(FLAGS_H) $(DF_H) $(OBSTACK_H) output.h \ - $(HASHTAB_H) $(EXCEPT_H) $(PARAMS_H) + $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(EXPR_H) $(RECOG_H) \ + coretypes.h $(TM_H) $(TM_P_H) $(FUNCTION_H) $(FLAGS_H) $(DF_H) \ + $(OBSTACK_H) output.h $(HASHTAB_H) $(EXCEPT_H) $(PARAMS_H) $(REGS_H) ira.h cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \ $(BASIC_BLOCK_H) hard-reg-set.h $(CFGLOOP_H) $(CFGLAYOUT_H) output.h \ coretypes.h $(TM_H) cfghooks.h $(OBSTACK_H) $(TREE_FLOW_H) @@ -3199,7 +3199,7 @@ ira-reload.o: ira-reload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ insn-config.h $(TIMEVAR_H) $(TREE_PASS_H) $(DF_H)\ $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \ - $(EXPR_H) $(BASIC_BLOCK_H) $(TOPLEV_H) $(TM_P_H) $(EXCEPT_H) reload.h + $(EXPR_H) $(BASIC_BLOCK_H) $(TOPLEV_H) $(TM_P_H) $(EXCEPT_H) ira.h reload.h combine-stack-adj.o : combine-stack-adj.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(RTL_H) insn-config.h $(TIMEVAR_H) $(TREE_PASS_H) \ $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \ @@ -3592,6 +3592,7 @@ GTFILES = $(CPP_ID_DATA_H) $(srcdir)/input.h $(srcdir)/coretypes.h \ $(srcdir)/tree-ssa-structalias.c \ $(srcdir)/lto-symtab.c \ $(srcdir)/tree-ssa-alias.h \ + $(srcdir)/ipa-prop.h \ @all_gtfiles@ # Compute the list of GT header files from the corresponding C sources, @@ -4266,7 +4267,7 @@ PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(host_xm_file_list) $(host_xm_include_list) $(xm_include_list) \ intl.h $(PLUGIN_VERSION_H) $(DIAGNOSTIC_H) $(C_COMMON_H) $(C_PRETTY_PRINT_H) \ tree-iterator.h $(PLUGIN_H) $(TREE_FLOW_H) langhooks.h incpath.h \ - tree-ssa-sccvn.h real.h + tree-ssa-sccvn.h real.h output.h $(IPA_UTILS_H) # Install the headers needed to build a plugin. install-plugin: installdirs lang.install-plugin diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 13df4f3a704..e4761d82e1f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,113 @@ +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interfaces/decl.c (build_subst_list): Convert the expression of + the constraint to the type of the discriminant. + +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interfaces/decl.c (gnat_to_gnu_entity): Do not create a new + TYPE_DECL when a type is padded if there is already one and reset + TYPE_STUB_DECL in this case. + +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interfaces/utils.c (create_subprog_decl): Do not redefine + main_identifier_node. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils.c (convert): When converting to a padded type + with an inner type of self-referential size, pad the expression before + doing the unchecked conversion. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/utils2.c (build_binary_op) <ARRAY_RANGE_REF>: Make + sure the element type is consistent. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (addressable_p): Handle bitwise operations. + +2009-10-16 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/ada-tree.h (TYPE_FAT_POINTER_P): Swap with... + (TYPE_IS_FAT_POINTER_P): ...this. + (TYPE_THIN_POINTER_P): Rename into... + (TYPE_IS_THIN_POINTER_P): ...this. + (TYPE_FAT_OR_THIN_POINTER_P): Rename into... + (TYPE_IS_FAT_OR_THIN_POINTER_P): ...this. + (TYPE_IS_PADDING_P): Change definition, move old one to... + (TYPE_PADDING_P): ...this. + * gcc-interface/decl.c (gnat_to_gnu_entity): Adjust for above changes. + (get_unpadded_type): Likewise. + (gnat_to_gnu_component_type): Likewise. + (gnat_to_gnu_param): Likewise. + (relate_alias_sets): Likewise. + (make_packable_type): Likewise. + (maybe_pad_type): Likewise. + (gnat_to_gnu_field): Likewise. + (is_variable_size): Likewise. + (annotate_object): Likewise. + (validate_size): Likewise. + (set_rm_size): Likewise. + (make_type_from_size): Likewise. + (rm_size): Likewise. + * gcc-interface/misc.c (gnat_print_type): Likewise. + (gnat_get_alias_set): Likewise. + * gcc-interface/trans.c (Identifier_to_gnu): Likewise. + (Attribute_to_gnu): Likewise. + (call_to_gnu): Likewise. + (gnat_to_gnu): Likewise. + (add_decl_expr): Likewise. + (convert_with_check): Likewise. + (addressable_p): Likewise. + (maybe_implicit_deref): Likewise. + (protect_multiple_eval): Likewise. + (gnat_stabilize_reference_1): Likewise. + * gcc-interface/utils.c (gnat_pushdecl): Likewise. + (finish_record_type): Likewise. + (rest_of_record_type_compilation): Likewise. + (create_type_decl): Likewise. + (gnat_types_compatible_p): Likewise. + (build_template): Likewise. + (convert_vms_descriptor64): Likewise. + (convert_vms_descriptor32): Likewise. + (build_unc_object_type_from_ptr): Likewise. + (update_pointer_to): Likewise. + (convert_to_fat_pointer): Likewise. + (convert_to_fat_pointer): Likewise. + (convert): Likewise. + (remove_conversions): Likewise. + (maybe_unconstrained_array): Likewise. + (unchecked_convert): Likewise. + (handle_vector_type_attribute): Likewise. + * gcc-interface/utils2.c (build_binary_op): Likewise. + (build_unary_op): Likewise. + (build_allocator): Likewise. + +2009-10-16 Eric Botcazou <ebotcazou@adacore.com> + + * exp_dbug.ads: Adjust type names in comments. + * gcc-interface/decl.c (maybe_pad_type): Remove NAME_TRAILER parameter, + add new IS_COMPONENT_TYPE parameter. Adjust. Remove dead code. + (gnat_to_gnu_entity): Adjust for above change. + (gnat_to_gnu_component_type): Likewise. + (gnat_to_gnu_field): Likewise. + * gcc-interface/trans.c (call_to_gnu): Likewise. Do not unnecessarily + call max_size. + * gcc-interface/utils.c (finish_record_type): Remove obsolete code. + * gcc-interface/gigi.h (maybe_pad_type): Adjust prototype. + +2009-10-16 Joel Sherrill <joel.sherrill@oarcorp.com> + + * s-osinte-rtems.ads: Add mutex type to pthread_mutexattr_t + * s-stchop-rtems.adb: Correct binding to rtems_stack_checker_is_blown. + +2009-10-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * env.c [__alpha__ && __osf__] (AES_SOURCE): Define. + 2009-10-10 Samuel Tardieu <sam@rfc1149.net> * sem_eval.adb: Give a more precise error message. diff --git a/gcc/ada/env.c b/gcc/ada/env.c index ac6e835df9f..d9486977433 100644 --- a/gcc/ada/env.c +++ b/gcc/ada/env.c @@ -29,8 +29,11 @@ * * ****************************************************************************/ -/* Tru64 UNIX <stdlib.h> declares unsetenv() only if _BSD. */ +/* Tru64 UNIX V4.0F <stdlib.h> declares unsetenv() only if AES_SOURCE (which + is plain broken, this should be _AES_SOURCE instead as everywhere else; + Tru64 UNIX V5.1B declares it only if _BSD. */ #if defined (__alpha__) && defined (__osf__) +#define AES_SOURCE #define _BSD #endif diff --git a/gcc/ada/exp_dbug.ads b/gcc/ada/exp_dbug.ads index 3c3144641d8..1d26bb3ef75 100644 --- a/gcc/ada/exp_dbug.ads +++ b/gcc/ada/exp_dbug.ads @@ -873,12 +873,12 @@ package Exp_Dbug is -- the element type for AT1 might have a type defined as if it had -- been written: -- - -- type at1___C_PAD is record null; end record; - -- for at1___C_PAD'Size use 16 * 8; + -- type at1___PAD is record null; end record; + -- for at1___PAD'Size use 16 * 8; -- -- and there would also be -- - -- type at1___C_PAD___XVS is record t1: Integer; end record; + -- type at1___PAD___XVS is record t1: Integer; end record; -- type t1 is ... -- -- Had the subtype Int been dynamic: @@ -888,7 +888,7 @@ package Exp_Dbug is -- Then the compiler would also generate a declaration whose effect -- would be -- - -- at1___C_PAD___XVZ: constant Integer := 32 + M * 8 + padding term; + -- at1___PAD___XVZ: constant Integer := 32 + M * 8 + padding term; -- -- Not all unconstrained types are so encoded; the XVS convention may be -- unnecessary for unconstrained types of fixed size. However, this diff --git a/gcc/ada/gcc-interface/ada-tree.h b/gcc/ada/gcc-interface/ada-tree.h index 94b18bde6b5..67a16ef0eb8 100644 --- a/gcc/ada/gcc-interface/ada-tree.h +++ b/gcc/ada/gcc-interface/ada-tree.h @@ -65,11 +65,11 @@ do { \ /* For RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE, nonzero if this is a record being used as a fat pointer (only true for RECORD_TYPE). */ -#define TYPE_IS_FAT_POINTER_P(NODE) \ +#define TYPE_FAT_POINTER_P(NODE) \ TYPE_LANG_FLAG_0 (RECORD_OR_UNION_CHECK (NODE)) -#define TYPE_FAT_POINTER_P(NODE) \ - (TREE_CODE (NODE) == RECORD_TYPE && TYPE_IS_FAT_POINTER_P (NODE)) +#define TYPE_IS_FAT_POINTER_P(NODE) \ + (TREE_CODE (NODE) == RECORD_TYPE && TYPE_FAT_POINTER_P (NODE)) /* For integral types and array types, nonzero if this is a packed array type used for bit-packed types. Such types should not be extended to a larger @@ -117,15 +117,15 @@ do { \ TYPE_LANG_FLAG_3 (INTEGER_TYPE_CHECK (NODE)) /* True if NODE is a thin pointer. */ -#define TYPE_THIN_POINTER_P(NODE) \ +#define TYPE_IS_THIN_POINTER_P(NODE) \ (POINTER_TYPE_P (NODE) \ && TREE_CODE (TREE_TYPE (NODE)) == RECORD_TYPE \ && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (NODE))) /* True if TYPE is either a fat or thin pointer to an unconstrained array. */ -#define TYPE_FAT_OR_THIN_POINTER_P(NODE) \ - (TYPE_FAT_POINTER_P (NODE) || TYPE_THIN_POINTER_P (NODE)) +#define TYPE_IS_FAT_OR_THIN_POINTER_P(NODE) \ + (TYPE_IS_FAT_POINTER_P (NODE) || TYPE_IS_THIN_POINTER_P (NODE)) /* For INTEGER_TYPEs, nonzero if the type has a biased representation. */ #define TYPE_BIASED_REPRESENTATION_P(NODE) \ @@ -143,7 +143,6 @@ do { \ is a dummy type, made to correspond to a private or incomplete type. */ #define TYPE_DUMMY_P(NODE) TYPE_LANG_FLAG_4 (NODE) -/* True if TYPE is such a dummy type. */ #define TYPE_IS_DUMMY_P(NODE) \ ((TREE_CODE (NODE) == VOID_TYPE || TREE_CODE (NODE) == RECORD_TYPE \ || TREE_CODE (NODE) == UNION_TYPE || TREE_CODE (NODE) == ENUMERAL_TYPE) \ @@ -160,7 +159,10 @@ do { \ /* For a RECORD_TYPE, nonzero if this was made just to supply needed padding or alignment. */ -#define TYPE_IS_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE)) +#define TYPE_PADDING_P(NODE) TYPE_LANG_FLAG_5 (RECORD_TYPE_CHECK (NODE)) + +#define TYPE_IS_PADDING_P(NODE) \ + (TREE_CODE (NODE) == RECORD_TYPE && TYPE_PADDING_P (NODE)) /* True if TYPE can alias any other types. */ #define TYPE_UNIVERSAL_ALIASING_P(NODE) TYPE_LANG_FLAG_6 (NODE) diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index f2f0f159abd..d0b52f2e745 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -633,7 +633,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) else gnu_type = maybe_pad_type (gnu_type, NULL_TREE, align, gnat_entity, - "PAD", false, definition, true); + false, false, definition, true); } /* If we are defining the object, see if it has a Size value and @@ -676,8 +676,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) despite having a nominal type with self-referential size, we can get the size directly from it. */ if (TREE_CODE (gnu_expr) == COMPONENT_REF - && TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))) - == RECORD_TYPE && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))) && TREE_CODE (TREE_OPERAND (gnu_expr, 0)) == VAR_DECL @@ -838,7 +836,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnu_object_size = gnu_size ? gnu_size : TYPE_SIZE (gnu_type); if (gnu_size || align > 0) gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity, - "PAD", false, definition, + false, false, definition, gnu_size ? true : false); /* If this is a renaming, avoid as much as possible to create a new @@ -852,8 +850,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* If the renamed object had padding, strip off the reference to the inner object and reset our type. */ if ((TREE_CODE (gnu_expr) == COMPONENT_REF - && TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_expr, 0))) - == RECORD_TYPE && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0)))) /* Strip useless conversions around the object. */ || (TREE_CODE (gnu_expr) == NOP_EXPR @@ -1017,16 +1013,15 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) && !gnu_expr && TREE_CODE (gnu_type) == RECORD_TYPE && (TYPE_CONTAINS_TEMPLATE_P (gnu_type) - /* Beware that padding might have been introduced - via maybe_pad_type above. */ - || (TYPE_IS_PADDING_P (gnu_type) + /* Beware that padding might have been introduced above. */ + || (TYPE_PADDING_P (gnu_type) && TREE_CODE (TREE_TYPE (TYPE_FIELDS (gnu_type))) == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (TYPE_FIELDS (gnu_type)))))) { tree template_field - = TYPE_IS_PADDING_P (gnu_type) + = TYPE_PADDING_P (gnu_type) ? TYPE_FIELDS (TREE_TYPE (TYPE_FIELDS (gnu_type))) : TYPE_FIELDS (gnu_type); @@ -1050,17 +1045,16 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) if (gnu_expr && TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)) - && !(TREE_CODE (gnu_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_type) - && (CONTAINS_PLACEHOLDER_P - (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type))))))) + && !(TYPE_IS_PADDING_P (gnu_type) + && CONTAINS_PLACEHOLDER_P + (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type)))))) gnu_expr = convert (gnu_type, gnu_expr); /* If this is a pointer and it does not have an initializing expression, initialize it to NULL, unless the object is imported. */ if (definition - && (POINTER_TYPE_P (gnu_type) || TYPE_FAT_POINTER_P (gnu_type)) + && (POINTER_TYPE_P (gnu_type) || TYPE_IS_FAT_POINTER_P (gnu_type)) && !Is_Imported (gnat_entity) && !gnu_expr) gnu_expr = integer_zero_node; @@ -1279,10 +1273,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) if (gnu_expr && TREE_CODE (gnu_type) != UNCONSTRAINED_ARRAY_TYPE && !CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)) - && !(TREE_CODE (gnu_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_type) - && (CONTAINS_PLACEHOLDER_P - (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type))))))) + && !(TYPE_IS_PADDING_P (gnu_type) + && CONTAINS_PLACEHOLDER_P + (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (gnu_type)))))) gnu_expr = convert (gnu_type, gnu_expr); /* If this name is external or there was a name specified, use it, @@ -1304,8 +1297,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) && gnu_expr && TREE_CONSTANT (gnu_expr) && AGGREGATE_TYPE_P (gnu_type) && host_integerp (TYPE_SIZE_UNIT (gnu_type), 1) - && !(TREE_CODE (gnu_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_type) + && !(TYPE_IS_PADDING_P (gnu_type) && !host_integerp (TYPE_SIZE_UNIT (TREE_TYPE (TYPE_FIELDS (gnu_type))), 1))) static_p = true; @@ -1687,7 +1679,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnu_field_type, gnu_type, 1, 0, 0, 0); finish_record_type (gnu_type, gnu_field, 0, false); - TYPE_IS_PADDING_P (gnu_type) = 1; + TYPE_PADDING_P (gnu_type) = 1; relate_alias_sets (gnu_type, gnu_field_type, ALIAS_SET_COPY); } @@ -1835,7 +1827,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* Do not finalize this record type since the types of its fields are still incomplete at this point. */ finish_record_type (gnu_fat_type, tem, 0, true); - TYPE_IS_FAT_POINTER_P (gnu_fat_type) = 1; + TYPE_FAT_POINTER_P (gnu_fat_type) = 1; /* Build a reference to the template from a PLACEHOLDER_EXPR that is the fat pointer. This will be used to access the individual @@ -2477,7 +2469,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) gnu_inner = gnu_type; while (TREE_CODE (gnu_inner) == RECORD_TYPE && (TYPE_JUSTIFIED_MODULAR_P (gnu_inner) - || TYPE_IS_PADDING_P (gnu_inner))) + || TYPE_PADDING_P (gnu_inner))) gnu_inner = TREE_TYPE (TYPE_FIELDS (gnu_inner)); /* We need to attach the index type to the type we just made so @@ -2986,8 +2978,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) copy_and_substitute_in_size (gnu_type, gnu_base_type, gnu_subst_list); - if (TREE_CODE (gnu_base_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_base_type)) + if (TYPE_IS_PADDING_P (gnu_base_type)) gnu_unpad_base_type = TREE_TYPE (TYPE_FIELDS (gnu_base_type)); else gnu_unpad_base_type = gnu_base_type; @@ -3097,7 +3088,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) { gnu_size = DECL_SIZE (gnu_old_field); if (TREE_CODE (gnu_field_type) == RECORD_TYPE - && !TYPE_IS_FAT_POINTER_P (gnu_field_type) + && !TYPE_FAT_POINTER_P (gnu_field_type) && host_integerp (TYPE_SIZE (gnu_field_type), 1)) gnu_field_type = make_packable_type (gnu_field_type, true); @@ -3465,7 +3456,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* Make sure we can place this into a register. */ TYPE_ALIGN (gnu_type) = MIN (BIGGEST_ALIGNMENT, 2 * POINTER_SIZE); - TYPE_IS_FAT_POINTER_P (gnu_type) = 1; + TYPE_FAT_POINTER_P (gnu_type) = 1; /* Do not finalize this record type since the types of its fields are incomplete. */ @@ -3599,11 +3590,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) if ((! in_main_unit || is_from_limited_with) && made_dummy) { tree gnu_old_type - = TYPE_FAT_POINTER_P (gnu_type) + = TYPE_IS_FAT_POINTER_P (gnu_type) ? TYPE_UNCONSTRAINED_ARRAY (gnu_type) : TREE_TYPE (gnu_type); if (esize == POINTER_SIZE - && (got_fat_p || TYPE_FAT_POINTER_P (gnu_type))) + && (got_fat_p || TYPE_IS_FAT_POINTER_P (gnu_type))) gnu_type = build_pointer_type (TYPE_OBJECT_RECORD_TYPE @@ -3915,8 +3906,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) /* If the type is a padded type and the underlying type would not be passed by reference or this function has a foreign convention, return the underlying type. */ - else if (TREE_CODE (gnu_return_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_return_type) + else if (TYPE_IS_PADDING_P (gnu_return_type) && (!default_pass_by_ref (TREE_TYPE (TYPE_FIELDS (gnu_return_type))) || Has_Foreign_Convention (gnat_entity))) @@ -4054,7 +4044,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) between two calls, so they can't be CSE'ed. The latter case also handles by-ref parameters. */ if (POINTER_TYPE_P (gnu_param_type) - || TYPE_FAT_POINTER_P (gnu_param_type)) + || TYPE_IS_FAT_POINTER_P (gnu_param_type)) const_flag = false; } @@ -4417,7 +4407,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) else if ((TREE_CODE (gnu_type) == RECORD_TYPE || TREE_CODE (gnu_type) == UNION_TYPE || TREE_CODE (gnu_type) == QUAL_UNION_TYPE) - && !TYPE_IS_FAT_POINTER_P (gnu_type)) + && !TYPE_FAT_POINTER_P (gnu_type)) size = rm_size (gnu_type); else size = TYPE_SIZE (gnu_type); @@ -4446,10 +4436,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) us when we make the new TYPE_DECL below. */ if (gnu_size || align > 0) gnu_type = maybe_pad_type (gnu_type, gnu_size, align, gnat_entity, - "PAD", true, definition, false); + false, !gnu_decl, definition, false); - if (TREE_CODE (gnu_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_type)) + if (TYPE_IS_PADDING_P (gnu_type)) { gnu_entity_name = TYPE_NAME (gnu_type); if (TREE_CODE (gnu_entity_name) == TYPE_DECL) @@ -4566,7 +4555,10 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) !Comes_From_Source (gnat_entity), debug_info_p, gnat_entity); else - TREE_TYPE (gnu_decl) = gnu_type; + { + TREE_TYPE (gnu_decl) = gnu_type; + TYPE_STUB_DECL (gnu_type) = gnu_decl; + } } if (is_type && !TYPE_IS_DUMMY_P (TREE_TYPE (gnu_decl))) @@ -4705,8 +4697,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) tree gnu_low_bound, gnu_high_bound; /* If this is a padded type, we need to use the underlying type. */ - if (TREE_CODE (gnu_scalar_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_scalar_type)) + if (TYPE_IS_PADDING_P (gnu_scalar_type)) gnu_scalar_type = TREE_TYPE (TYPE_FIELDS (gnu_scalar_type)); /* If this is a floating point type and we haven't set a floating @@ -4852,7 +4843,7 @@ get_unpadded_type (Entity_Id gnat_entity) { tree type = gnat_to_gnu_type (gnat_entity); - if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)) + if (TYPE_IS_PADDING_P (type)) type = TREE_TYPE (TYPE_FIELDS (type)); return type; @@ -4985,7 +4976,7 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition, && !Has_Aliased_Components (gnat_array) && !Strict_Alignment (Component_Type (gnat_array)) && TREE_CODE (gnu_type) == RECORD_TYPE - && !TYPE_IS_FAT_POINTER_P (gnu_type) + && !TYPE_FAT_POINTER_P (gnu_type) && host_integerp (TYPE_SIZE (gnu_type), 1)) gnu_type = make_packable_type (gnu_type, false); @@ -5037,7 +5028,7 @@ gnat_to_gnu_component_type (Entity_Id gnat_array, bool definition, orig_type = gnu_type; gnu_type = maybe_pad_type (gnu_type, gnu_comp_size, 0, gnat_array, - "C_PAD", false, definition, true); + true, false, definition, true); /* If a padding record was made, declare it now since it will never be declared otherwise. This is necessary to ensure that its subtrees @@ -5089,8 +5080,7 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, /* If this is either a foreign function or if the underlying type won't be passed by reference, strip off possible padding type. */ - if (TREE_CODE (gnu_param_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_param_type)) + if (TYPE_IS_PADDING_P (gnu_param_type)) { tree unpadded_type = TREE_TYPE (TYPE_FIELDS (gnu_param_type)); @@ -5162,7 +5152,7 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech, } /* Fat pointers are passed as thin pointers for foreign conventions. */ - else if (foreign && TYPE_FAT_POINTER_P (gnu_param_type)) + else if (foreign && TYPE_IS_FAT_POINTER_P (gnu_param_type)) gnu_param_type = make_type_from_size (gnu_param_type, size_int (POINTER_SIZE), 0); @@ -5463,7 +5453,7 @@ relate_alias_sets (tree gnu_new_type, tree gnu_old_type, enum alias_set_op op) see the inner types. */ while (TREE_CODE (gnu_old_type) == RECORD_TYPE && (TYPE_JUSTIFIED_MODULAR_P (gnu_old_type) - || TYPE_IS_PADDING_P (gnu_old_type))) + || TYPE_PADDING_P (gnu_old_type))) gnu_old_type = TREE_TYPE (TYPE_FIELDS (gnu_old_type)); /* Unconstrained array types are deemed incomplete and would thus be given @@ -5929,7 +5919,7 @@ make_packable_type (tree type, bool in_record) TYPE_JUSTIFIED_MODULAR_P (new_type) = TYPE_JUSTIFIED_MODULAR_P (type); TYPE_CONTAINS_TEMPLATE_P (new_type) = TYPE_CONTAINS_TEMPLATE_P (type); if (TREE_CODE (type) == RECORD_TYPE) - TYPE_IS_PADDING_P (new_type) = TYPE_IS_PADDING_P (type); + TYPE_PADDING_P (new_type) = TYPE_PADDING_P (type); /* If we are in a record and have a small size, set the alignment to try for an integral mode. Otherwise set it to try for a smaller @@ -5972,7 +5962,7 @@ make_packable_type (tree type, bool in_record) if ((TREE_CODE (new_field_type) == RECORD_TYPE || TREE_CODE (new_field_type) == UNION_TYPE || TREE_CODE (new_field_type) == QUAL_UNION_TYPE) - && !TYPE_IS_FAT_POINTER_P (new_field_type) + && !TYPE_FAT_POINTER_P (new_field_type) && host_integerp (TYPE_SIZE (new_field_type), 1)) new_field_type = make_packable_type (new_field_type, true); @@ -5984,7 +5974,7 @@ make_packable_type (tree type, bool in_record) && (TREE_CODE (new_field_type) == RECORD_TYPE || TREE_CODE (new_field_type) == UNION_TYPE || TREE_CODE (new_field_type) == QUAL_UNION_TYPE) - && !TYPE_IS_FAT_POINTER_P (new_field_type) + && !TYPE_FAT_POINTER_P (new_field_type) && !TYPE_CONTAINS_TEMPLATE_P (new_field_type) && TYPE_ADA_SIZE (new_field_type)) new_size = TYPE_ADA_SIZE (new_field_type); @@ -6013,8 +6003,7 @@ make_packable_type (tree type, bool in_record) /* If this is a padding record, we never want to make the size smaller than what was specified. For QUAL_UNION_TYPE, also copy the size. */ - if ((TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)) - || TREE_CODE (type) == QUAL_UNION_TYPE) + if (TYPE_IS_PADDING_P (type) || TREE_CODE (type) == QUAL_UNION_TYPE) { TYPE_SIZE (new_type) = TYPE_SIZE (type); TYPE_SIZE_UNIT (new_type) = TYPE_SIZE_UNIT (type); @@ -6046,25 +6035,20 @@ make_packable_type (tree type, bool in_record) /* Ensure that TYPE has SIZE and ALIGN. Make and return a new padded type if needed. We have already verified that SIZE and TYPE are large enough. - - GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and - to issue a warning. - - IS_USER_TYPE is true if we must complete the original type. - - DEFINITION is true if this type is being defined. - - SAME_RM_SIZE is true if the RM size of the resulting type is to be set - to SIZE too; otherwise, it's set to the RM size of the original type. */ + GNAT_ENTITY is used to name the resulting record and to issue a warning. + IS_COMPONENT_TYPE is true if this is being done for the component type + of an array. IS_USER_TYPE is true if we must complete the original type. + DEFINITION is true if this type is being defined. SAME_RM_SIZE is true + if the RM size of the resulting type is to be set to SIZE too; otherwise, + it's set to the RM size of the original type. */ tree maybe_pad_type (tree type, tree size, unsigned int align, - Entity_Id gnat_entity, const char *name_trailer, + Entity_Id gnat_entity, bool is_component_type, bool is_user_type, bool definition, bool same_rm_size) { tree orig_rm_size = same_rm_size ? NULL_TREE : rm_size (type); tree orig_size = TYPE_SIZE (type); - unsigned int orig_align = align; tree record, field; /* If TYPE is a padded type, see if it agrees with any size and alignment @@ -6072,7 +6056,7 @@ maybe_pad_type (tree type, tree size, unsigned int align, off the padding, since we will either be returning the inner type or repadding it. If no size or alignment is specified, use that of the original padded type. */ - if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)) + if (TYPE_IS_PADDING_P (type)) { if ((!size || operand_equal_p (round_up (size, @@ -6121,18 +6105,15 @@ maybe_pad_type (tree type, tree size, unsigned int align, generate incorrect debugging information. So make a new record type and name. */ record = make_node (RECORD_TYPE); - TYPE_IS_PADDING_P (record) = 1; + TYPE_PADDING_P (record) = 1; if (Present (gnat_entity)) - TYPE_NAME (record) = create_concat_name (gnat_entity, name_trailer); + TYPE_NAME (record) = create_concat_name (gnat_entity, "PAD"); TYPE_VOLATILE (record) = Present (gnat_entity) && Treat_As_Volatile (gnat_entity); TYPE_ALIGN (record) = align; - if (orig_align) - TYPE_USER_ALIGN (record) = align; - TYPE_SIZE (record) = size ? size : orig_size; TYPE_SIZE_UNIT (record) = convert (sizetype, @@ -6256,7 +6237,7 @@ maybe_pad_type (tree type, tree size, unsigned int align, post_error_ne_tree ("{^ }bits of & unused?", gnat_error_node, gnat_entity, size_diffop (size, orig_size)); - else if (name_trailer[0] == 'C') + else if (is_component_type) post_error_ne_tree ("component of& padded{ by ^ bits}?", gnat_entity, gnat_entity, size_diffop (size, orig_size)); @@ -6447,7 +6428,7 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed, from a component clause. */ if (TREE_CODE (gnu_field_type) == RECORD_TYPE - && !TYPE_IS_FAT_POINTER_P (gnu_field_type) + && !TYPE_FAT_POINTER_P (gnu_field_type) && host_integerp (TYPE_SIZE (gnu_field_type), 1) && (packed == 1 || (gnu_size @@ -6634,7 +6615,7 @@ gnat_to_gnu_field (Entity_Id gnat_field, tree gnu_record_type, int packed, orig_field_type = gnu_field_type; gnu_field_type = maybe_pad_type (gnu_field_type, gnu_size, 0, gnat_field, - "PAD", false, definition, true); + false, false, definition, true); /* If a padding record was made, declare it now since it will never be declared otherwise. This is necessary to ensure that its subtrees @@ -6677,8 +6658,7 @@ is_variable_size (tree type) if (!TREE_CONSTANT (TYPE_SIZE (type))) return true; - if (TREE_CODE (type) == RECORD_TYPE - && TYPE_IS_PADDING_P (type) + if (TYPE_IS_PADDING_P (type) && !TREE_CONSTANT (DECL_SIZE (TYPE_FIELDS (type)))) return true; @@ -7227,7 +7207,7 @@ annotate_object (Entity_Id gnat_entity, tree gnu_type, tree size, bool by_ref) { if (by_ref) { - if (TYPE_FAT_POINTER_P (gnu_type)) + if (TYPE_IS_FAT_POINTER_P (gnu_type)) gnu_type = TYPE_UNCONSTRAINED_ARRAY (gnu_type); else gnu_type = TREE_TYPE (gnu_type); @@ -7394,12 +7374,16 @@ build_subst_list (Entity_Id gnat_subtype, Entity_Id gnat_type, bool definition) gnat_value = Next_Elmt (gnat_value)) /* Ignore access discriminants. */ if (!Is_Access_Type (Etype (Node (gnat_value)))) - gnu_list = tree_cons (gnat_to_gnu_field_decl (gnat_discrim), - elaborate_expression - (Node (gnat_value), gnat_subtype, - get_entity_name (gnat_discrim), definition, - true, false), - gnu_list); + { + tree gnu_field = gnat_to_gnu_field_decl (gnat_discrim); + gnu_list = tree_cons (gnu_field, + convert (TREE_TYPE (gnu_field), + elaborate_expression + (Node (gnat_value), gnat_subtype, + get_entity_name (gnat_discrim), + definition, true, false)), + gnu_list); + } return gnu_list; } @@ -7542,7 +7526,7 @@ validate_size (Uint uint_size, tree gnu_type, Entity_Id gnat_object, /* If this is an access type or a fat pointer, the minimum size is that given by the smallest integral mode that's valid for pointers. */ - if ((TREE_CODE (gnu_type) == POINTER_TYPE) || TYPE_FAT_POINTER_P (gnu_type)) + if (TREE_CODE (gnu_type) == POINTER_TYPE || TYPE_IS_FAT_POINTER_P (gnu_type)) { enum machine_mode p_mode; @@ -7636,8 +7620,7 @@ set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity) || (AGGREGATE_TYPE_P (gnu_type) && !(TREE_CODE (gnu_type) == ARRAY_TYPE && TYPE_PACKED_ARRAY_TYPE_P (gnu_type)) - && !(TREE_CODE (gnu_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_type) + && !(TYPE_IS_PADDING_P (gnu_type) && TREE_CODE (TREE_TYPE (TYPE_FIELDS (gnu_type))) == ARRAY_TYPE && TYPE_PACKED_ARRAY_TYPE_P (TREE_TYPE (TYPE_FIELDS (gnu_type)))) && tree_int_cst_lt (size, old_size))) @@ -7660,7 +7643,7 @@ set_rm_size (Uint uint_size, tree gnu_type, Entity_Id gnat_entity) else if ((TREE_CODE (gnu_type) == RECORD_TYPE || TREE_CODE (gnu_type) == UNION_TYPE || TREE_CODE (gnu_type) == QUAL_UNION_TYPE) - && !TYPE_IS_FAT_POINTER_P (gnu_type)) + && !TYPE_FAT_POINTER_P (gnu_type)) SET_TYPE_ADA_SIZE (gnu_type, size); } @@ -7727,7 +7710,7 @@ make_type_from_size (tree type, tree size_tree, bool for_biased) case RECORD_TYPE: /* Do something if this is a fat pointer, in which case we may need to return the thin pointer. */ - if (TYPE_IS_FAT_POINTER_P (type) && size < POINTER_SIZE * 2) + if (TYPE_FAT_POINTER_P (type) && size < POINTER_SIZE * 2) { enum machine_mode p_mode = mode_for_size (size, MODE_INT, 0); if (!targetm.valid_pointer_mode (p_mode)) @@ -7742,7 +7725,7 @@ make_type_from_size (tree type, tree size_tree, bool for_biased) case POINTER_TYPE: /* Only do something if this is a thin pointer, in which case we may need to return the fat pointer. */ - if (TYPE_THIN_POINTER_P (type) && size >= POINTER_SIZE * 2) + if (TYPE_IS_THIN_POINTER_P (type) && size >= POINTER_SIZE * 2) return build_pointer_type (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))); break; @@ -8393,7 +8376,7 @@ rm_size (tree gnu_type) if ((TREE_CODE (gnu_type) == RECORD_TYPE || TREE_CODE (gnu_type) == UNION_TYPE || TREE_CODE (gnu_type) == QUAL_UNION_TYPE) - && !TYPE_IS_FAT_POINTER_P (gnu_type) + && !TYPE_FAT_POINTER_P (gnu_type) && TYPE_ADA_SIZE (gnu_type)) return TYPE_ADA_SIZE (gnu_type); diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h index ea1a65d485b..f376b22e2cc 100644 --- a/gcc/ada/gcc-interface/gigi.h +++ b/gcc/ada/gcc-interface/gigi.h @@ -124,21 +124,16 @@ extern tree make_aligning_type (tree type, unsigned int align, tree size, /* Ensure that TYPE has SIZE and ALIGN. Make and return a new padded type if needed. We have already verified that SIZE and TYPE are large enough. - - GNAT_ENTITY and NAME_TRAILER are used to name the resulting record and - to issue a warning. - - IS_USER_TYPE is true if we must be sure we complete the original type. - - DEFINITION is true if this type is being defined. - - SAME_RM_SIZE is true if the RM_Size of the resulting type is to be - set to its TYPE_SIZE; otherwise, it's set to the RM_Size of the original - type. */ + GNAT_ENTITY is used to name the resulting record and to issue a warning. + IS_COMPONENT_TYPE is true if this is being done for the component type + of an array. IS_USER_TYPE is true if we must complete the original type. + DEFINITION is true if this type is being defined. SAME_RM_SIZE is true + if the RM size of the resulting type is to be set to SIZE too; otherwise, + it's set to the RM size of the original type. */ extern tree maybe_pad_type (tree type, tree size, unsigned int align, - Entity_Id gnat_entity, const char *name_trailer, + Entity_Id gnat_entity, bool is_component_type, bool is_user_type, bool definition, - bool same_rm_size); + bool same_rm_size); /* Given a GNU tree and a GNAT list of choices, generate an expression to test the value passed against the list of choices. */ diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index 67823789ab3..570bd111a95 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -527,7 +527,7 @@ gnat_print_type (FILE *file, tree node, int indent) break; case RECORD_TYPE: - if (TYPE_IS_FAT_POINTER_P (node) || TYPE_CONTAINS_TEMPLATE_P (node)) + if (TYPE_FAT_POINTER_P (node) || TYPE_CONTAINS_TEMPLATE_P (node)) print_node (file, "unconstrained array", TYPE_UNCONSTRAINED_ARRAY (node), indent + 4); else @@ -600,8 +600,7 @@ static alias_set_type gnat_get_alias_set (tree type) { /* If this is a padding type, use the type of the first field. */ - if (TREE_CODE (type) == RECORD_TYPE - && TYPE_IS_PADDING_P (type)) + if (TYPE_IS_PADDING_P (type)) return get_alias_set (TREE_TYPE (TYPE_FIELDS (type))); /* If the type is an unconstrained array, use the type of the diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index d94d1f45bfc..271581a65e8 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -946,8 +946,7 @@ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p) || Is_Constr_Subt_For_UN_Aliased (gnat_temp_type)) { gnu_result_type = TREE_TYPE (gnu_result); - if (TREE_CODE (gnu_result_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_result_type)) + if (TYPE_IS_PADDING_P (gnu_result_type)) gnu_result_type = TREE_TYPE (TYPE_FIELDS (gnu_result_type)); } @@ -1256,7 +1255,7 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) /* If this is an unconstrained array, we know the object has been allocated with the template in front of the object. So compute the template address. */ - if (TYPE_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) + if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = convert (build_pointer_type (TYPE_OBJECT_RECORD_TYPE @@ -1334,8 +1333,7 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) of the relevant field. Using the MAX of those two produces the right result in all case. Don't use the size of the field if it's a self-referential type, since that's never what's wanted. */ - if (TREE_CODE (gnu_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_type) + if (TYPE_IS_PADDING_P (gnu_type) && TREE_CODE (gnu_expr) == COMPONENT_REF) { gnu_result = rm_size (gnu_type); @@ -1353,7 +1351,7 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) tree gnu_ptr_type = TREE_TYPE (gnat_to_gnu (Prefix (gnat_deref))); - if (TYPE_FAT_OR_THIN_POINTER_P (gnu_ptr_type) + if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type) && Present (gnat_actual_subtype)) { tree gnu_actual_obj_type @@ -1403,9 +1401,7 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) unsigned int align; if (TREE_CODE (gnu_prefix) == COMPONENT_REF - && (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))) - == RECORD_TYPE) - && (TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))))) + && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))) gnu_prefix = TREE_OPERAND (gnu_prefix, 0); gnu_type = TREE_TYPE (gnu_prefix); @@ -1742,9 +1738,7 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute) case Attr_Component_Size: if (TREE_CODE (gnu_prefix) == COMPONENT_REF - && (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))) - == RECORD_TYPE) - && (TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0))))) + && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_prefix, 0)))) gnu_prefix = TREE_OPERAND (gnu_prefix, 0); gnu_prefix = maybe_implicit_deref (gnu_prefix); @@ -2423,22 +2417,27 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) } } - /* If we are calling by supplying a pointer to a target, set up that - pointer as the first argument. Use GNU_TARGET if one was passed; - otherwise, make a target by building a variable of the maximum size - of the type. */ + /* If we are calling by supplying a pointer to a target, set up that pointer + as the first argument. Use GNU_TARGET if one was passed; otherwise, make + a target by building a variable and use the maximum size of the type if + it has self-referential size. */ if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type)) { - tree gnu_real_ret_type + tree gnu_ret_type = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (gnu_subprog_type))); if (!gnu_target) { - tree gnu_obj_type - = maybe_pad_type (gnu_real_ret_type, - max_size (TYPE_SIZE (gnu_real_ret_type), true), - 0, Etype (Name (gnat_node)), "PAD", false, - false, false); + tree gnu_obj_type; + + if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_ret_type))) + gnu_obj_type + = maybe_pad_type (gnu_ret_type, + max_size (TYPE_SIZE (gnu_ret_type), true), + 0, Etype (Name (gnat_node)), false, false, + false, true); + else + gnu_obj_type = gnu_ret_type; /* ??? We may be about to create a static temporary if we happen to be at the global binding level. That's a regression from what @@ -2454,7 +2453,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) gnu_actual_list = tree_cons (NULL_TREE, build_unary_op (ADDR_EXPR, NULL_TREE, - unchecked_convert (gnu_real_ret_type, + unchecked_convert (gnu_ret_type, gnu_target, false)), NULL_TREE); @@ -2557,10 +2556,8 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) /* Otherwise remove unpadding from the object and reset the copy. */ else if (TREE_CODE (gnu_name) == COMPONENT_REF - && ((TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_name, 0))) - == RECORD_TYPE) - && (TYPE_IS_PADDING_P - (TREE_TYPE (TREE_OPERAND (gnu_name, 0)))))) + && TYPE_IS_PADDING_P + (TREE_TYPE (TREE_OPERAND (gnu_name, 0)))) gnu_name = gnu_copy = TREE_OPERAND (gnu_name, 0); /* Otherwise convert to the nominal type of the object if it's @@ -2599,7 +2596,6 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) /* If this was a procedure call, we may not have removed any padding. So do it here for the part we will use as an input, if any. */ if (Ekind (gnat_formal) != E_Out_Parameter - && TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE && TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual))) gnu_actual = convert (get_unpadded_type (Etype (gnat_actual)), gnu_actual); @@ -2669,8 +2665,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) gnu_actual = gnu_name; /* If we have a padded type, be sure we've removed padding. */ - if (TREE_CODE (TREE_TYPE (gnu_actual)) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)) + if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_actual)) && TREE_CODE (gnu_actual) != SAVE_EXPR) gnu_actual = convert (get_unpadded_type (Etype (gnat_actual)), gnu_actual); @@ -2703,8 +2698,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) gnu_actual = maybe_implicit_deref (gnu_actual); gnu_actual = maybe_unconstrained_array (gnu_actual); - if (TREE_CODE (gnu_formal_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (gnu_formal_type)) + if (TYPE_IS_PADDING_P (gnu_formal_type)) { gnu_formal_type = TREE_TYPE (TYPE_FIELDS (gnu_formal_type)); gnu_actual = convert (gnu_formal_type, gnu_actual); @@ -2896,8 +2890,7 @@ call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target) = maybe_unconstrained_array (TREE_VALUE (gnu_name_list)); /* If the result is a padded type, remove the padding. */ - if (TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (gnu_result))) + if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_result))) gnu_result = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_result))), gnu_result); @@ -3856,8 +3849,7 @@ gnat_to_gnu (Node_Id gnat_node) gnu_array_object = maybe_unconstrained_array (gnu_array_object); /* If we got a padded type, remove it too. */ - if (TREE_CODE (TREE_TYPE (gnu_array_object)) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (gnu_array_object))) + if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_array_object))) gnu_array_object = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_array_object))), gnu_array_object); @@ -4713,12 +4705,10 @@ gnat_to_gnu (Node_Id gnat_node) type is self-referential since we want to allocate the fixed size in that case. */ if (TREE_CODE (gnu_ret_val) == COMPONENT_REF - && (TREE_CODE (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0))) - == RECORD_TYPE) - && (TYPE_IS_PADDING_P - (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0)))) - && (CONTAINS_PLACEHOLDER_P - (TYPE_SIZE (TREE_TYPE (gnu_ret_val))))) + && TYPE_IS_PADDING_P + (TREE_TYPE (TREE_OPERAND (gnu_ret_val, 0))) + && CONTAINS_PLACEHOLDER_P + (TYPE_SIZE (TREE_TYPE (gnu_ret_val)))) gnu_ret_val = TREE_OPERAND (gnu_ret_val, 0); if (TYPE_RETURNS_BY_REF_P (gnu_subprog_type) @@ -5151,7 +5141,7 @@ gnat_to_gnu (Node_Id gnat_node) a fat pointer, then go back below to a thin pointer. The reason for this is that we need a fat pointer someplace in order to properly compute the size. */ - if (TYPE_THIN_POINTER_P (TREE_TYPE (gnu_ptr))) + if (TYPE_IS_THIN_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = build_unary_op (ADDR_EXPR, NULL_TREE, build_unary_op (INDIRECT_REF, NULL_TREE, gnu_ptr)); @@ -5160,7 +5150,7 @@ gnat_to_gnu (Node_Id gnat_node) have been allocated with the template in front of the object. So pass the template address, but get the total size. Do this by converting to a thin pointer. */ - if (TYPE_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) + if (TYPE_IS_FAT_POINTER_P (TREE_TYPE (gnu_ptr))) gnu_ptr = convert (build_pointer_type (TYPE_OBJECT_RECORD_TYPE @@ -5174,7 +5164,7 @@ gnat_to_gnu (Node_Id gnat_node) gnu_actual_obj_type = gnat_to_gnu_type (Actual_Designated_Subtype (gnat_node)); - if (TYPE_FAT_OR_THIN_POINTER_P (gnu_ptr_type)) + if (TYPE_IS_FAT_OR_THIN_POINTER_P (gnu_ptr_type)) gnu_actual_obj_type = build_unc_object_type_from_ptr (gnu_ptr_type, gnu_actual_obj_type, @@ -5286,10 +5276,10 @@ gnat_to_gnu (Node_Id gnat_node) /* But if the result is a fat pointer type, we have no mechanism to do that, so we unconditionally warn in problematic cases. */ - else if (TYPE_FAT_POINTER_P (gnu_target_type)) + else if (TYPE_IS_FAT_POINTER_P (gnu_target_type)) { tree gnu_source_array_type - = TYPE_FAT_POINTER_P (gnu_source_type) + = TYPE_IS_FAT_POINTER_P (gnu_source_type) ? TREE_TYPE (TREE_TYPE (TYPE_FIELDS (gnu_source_type))) : NULL_TREE; tree gnu_target_array_type @@ -5297,7 +5287,7 @@ gnat_to_gnu (Node_Id gnat_node) if ((TYPE_DUMMY_P (gnu_target_array_type) || get_alias_set (gnu_target_array_type) != 0) - && (!TYPE_FAT_POINTER_P (gnu_source_type) + && (!TYPE_IS_FAT_POINTER_P (gnu_source_type) || (TYPE_DUMMY_P (gnu_source_array_type) != TYPE_DUMMY_P (gnu_target_array_type)) || (TYPE_DUMMY_P (gnu_source_array_type) @@ -5438,8 +5428,7 @@ gnat_to_gnu (Node_Id gnat_node) size: in that case it must be an object of unconstrained type with a default discriminant and we want to avoid copying too much data. */ - if (TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (gnu_result)) + if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_result)) && CONTAINS_PLACEHOLDER_P (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_result)))))) gnu_result = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_result))), @@ -5459,8 +5448,7 @@ gnat_to_gnu (Node_Id gnat_node) && TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE)) { /* Remove any padding. */ - if (TREE_CODE (TREE_TYPE (gnu_result)) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (gnu_result))) + if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_result))) gnu_result = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_result))), gnu_result); } @@ -5602,7 +5590,7 @@ add_decl_expr (tree gnu_decl, Entity_Id gnat_entity) { /* If GNU_DECL has a padded type, convert it to the unpadded type so the assignment is done properly. */ - if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)) + if (TYPE_IS_PADDING_P (type)) t = convert (TREE_TYPE (TYPE_FIELDS (type)), gnu_decl); else t = gnu_decl; @@ -6786,8 +6774,7 @@ convert_with_check (Entity_Id gnat_type, tree gnu_expr, bool overflowp, = FP_ARITH_MAY_WIDEN ? longest_float_type_node : gnu_in_basetype; /* FIXME: Should not have padding in the first place. */ - if (TREE_CODE (calc_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (calc_type)) + if (TYPE_IS_PADDING_P (calc_type)) calc_type = TREE_TYPE (TYPE_FIELDS (calc_type)); /* Compute the exact value calc_type'Pred (0.5) at compile time. */ @@ -6962,6 +6949,10 @@ addressable_p (tree gnu_expr, tree gnu_type) case CALL_EXPR: case PLUS_EXPR: case MINUS_EXPR: + case BIT_IOR_EXPR: + case BIT_XOR_EXPR: + case BIT_AND_EXPR: + case BIT_NOT_EXPR: /* All rvalues are deemed addressable since taking their address will force a temporary to be created by the middle-end. */ return true; @@ -6984,7 +6975,7 @@ addressable_p (tree gnu_expr, tree gnu_type) || DECL_ALIGN (TREE_OPERAND (gnu_expr, 1)) >= TYPE_ALIGN (TREE_TYPE (gnu_expr)))) /* The field of a padding record is always addressable. */ - || TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0)))) + || TYPE_PADDING_P (TREE_TYPE (TREE_OPERAND (gnu_expr, 0)))) && addressable_p (TREE_OPERAND (gnu_expr, 0), NULL_TREE)); case ARRAY_REF: case ARRAY_RANGE_REF: @@ -7264,13 +7255,12 @@ static tree maybe_implicit_deref (tree exp) { /* If the type is a pointer, dereference it. */ - - if (POINTER_TYPE_P (TREE_TYPE (exp)) || TYPE_FAT_POINTER_P (TREE_TYPE (exp))) + if (POINTER_TYPE_P (TREE_TYPE (exp)) + || TYPE_IS_FAT_POINTER_P (TREE_TYPE (exp))) exp = build_unary_op (INDIRECT_REF, NULL_TREE, exp); /* If we got a padded type, remove it too. */ - if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (exp))) + if (TYPE_IS_PADDING_P (TREE_TYPE (exp))) exp = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (exp))), exp); return exp; @@ -7308,7 +7298,7 @@ protect_multiple_eval (tree exp) /* If this is a fat pointer or something that can be placed into a register, just make a SAVE_EXPR. */ - if (TYPE_FAT_POINTER_P (type) || TYPE_MODE (type) != BLKmode) + if (TYPE_IS_FAT_POINTER_P (type) || TYPE_MODE (type) != BLKmode) return save_expr (exp); /* Otherwise, reference, protect the address and dereference. */ @@ -7493,7 +7483,7 @@ gnat_stabilize_reference_1 (tree e, bool force) fat pointer. This may be more efficient, but will also allow us to more easily find the match for the PLACEHOLDER_EXPR. */ if (code == COMPONENT_REF - && TYPE_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0)))) + && TYPE_IS_FAT_POINTER_P (TREE_TYPE (TREE_OPERAND (e, 0)))) result = build3 (COMPONENT_REF, type, gnat_stabilize_reference_1 (TREE_OPERAND (e, 0), force), diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 7acb2ce2de4..b1e2e588347 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -490,7 +490,7 @@ gnat_pushdecl (tree decl, Node_Id gnat_node) if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL)) ; - else if (TYPE_FAT_POINTER_P (t)) + else if (TYPE_IS_FAT_POINTER_P (t)) { tree tt = build_variant_type_copy (t); TYPE_NAME (tt) = decl; @@ -643,7 +643,7 @@ finish_record_type (tree record_type, tree fieldlist, int rep_level, if ((TREE_CODE (type) == RECORD_TYPE || TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == QUAL_UNION_TYPE) - && !TYPE_IS_FAT_POINTER_P (type) + && !TYPE_FAT_POINTER_P (type) && !TYPE_CONTAINS_TEMPLATE_P (type) && TYPE_ADA_SIZE (type)) this_ada_size = TYPE_ADA_SIZE (type); @@ -739,21 +739,15 @@ finish_record_type (tree record_type, tree fieldlist, int rep_level, if (code == QUAL_UNION_TYPE) nreverse (fieldlist); - /* If the type is discriminated, it can be used to access all its - constrained subtypes, so force structural equality checks. */ - if (CONTAINS_PLACEHOLDER_P (size)) - SET_TYPE_STRUCTURAL_EQUALITY (record_type); - if (rep_level < 2) { /* If this is a padding record, we never want to make the size smaller than what was specified in it, if any. */ - if (TREE_CODE (record_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (record_type) && TYPE_SIZE (record_type)) + if (TYPE_IS_PADDING_P (record_type) && TYPE_SIZE (record_type)) size = TYPE_SIZE (record_type); /* Now set any of the values we've just computed that apply. */ - if (!TYPE_IS_FAT_POINTER_P (record_type) + if (!TYPE_FAT_POINTER_P (record_type) && !TYPE_CONTAINS_TEMPLATE_P (record_type)) SET_TYPE_ADA_SIZE (record_type, ada_size); @@ -815,9 +809,7 @@ rest_of_record_type_compilation (tree record_type) that tells the debugger how the record is laid out. See exp_dbug.ads. But don't do this for records that are padding since they confuse GDB. */ - if (var_size - && !(TREE_CODE (record_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (record_type))) + if (var_size && !TYPE_IS_PADDING_P (record_type)) { tree new_record_type = make_node (TREE_CODE (record_type) == QUAL_UNION_TYPE @@ -1306,7 +1298,7 @@ create_type_decl (tree type_name, tree type, struct attrib *attr_list, if (code == UNCONSTRAINED_ARRAY_TYPE || !debug_info_p) DECL_IGNORED_P (type_decl) = 1; else if (code != ENUMERAL_TYPE - && (code != RECORD_TYPE || TYPE_IS_FAT_POINTER_P (type)) + && (code != RECORD_TYPE || TYPE_FAT_POINTER_P (type)) && !((code == POINTER_TYPE || code == REFERENCE_TYPE) && TYPE_IS_DUMMY_P (TREE_TYPE (type))) && !(code == RECORD_TYPE @@ -1874,9 +1866,9 @@ create_subprog_decl (tree subprog_name, tree asm_name, to be declared as the "main" function literally by default. Ada program entry points are typically declared with a different name within the binder generated file, exported as 'main' to satisfy the - system expectations. Redirect main_identifier_node in this case. */ + system expectations. Force main_identifier_node in this case. */ if (asm_name == main_identifier_node) - main_identifier_node = DECL_NAME (subprog_decl); + DECL_NAME (subprog_decl) = main_identifier_node; } process_attributes (subprog_decl, attr_list); @@ -2291,7 +2283,7 @@ gnat_types_compatible_p (tree t1, tree t2) /* Padding record types are also compatible if they pad the same type and have the same constant size. */ if (code == RECORD_TYPE - && TYPE_IS_PADDING_P (t1) && TYPE_IS_PADDING_P (t2) + && TYPE_PADDING_P (t1) && TYPE_PADDING_P (t2) && TREE_TYPE (TYPE_FIELDS (t1)) == TREE_TYPE (TYPE_FIELDS (t2)) && tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2))) return 1; @@ -2441,7 +2433,7 @@ build_template (tree template_type, tree array_type, tree expr) tree field; while (TREE_CODE (array_type) == RECORD_TYPE - && (TYPE_IS_PADDING_P (array_type) + && (TYPE_PADDING_P (array_type) || TYPE_JUSTIFIED_MODULAR_P (array_type))) array_type = TREE_TYPE (TYPE_FIELDS (array_type)); @@ -3155,7 +3147,7 @@ convert_vms_descriptor64 (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) if (POINTER_TYPE_P (gnu_type)) return convert (gnu_type, gnu_expr64); - else if (TYPE_FAT_POINTER_P (gnu_type)) + else if (TYPE_IS_FAT_POINTER_P (gnu_type)) { tree p_array_type = TREE_TYPE (TYPE_FIELDS (gnu_type)); tree p_bounds_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_type))); @@ -3304,7 +3296,7 @@ convert_vms_descriptor32 (tree gnu_type, tree gnu_expr, Entity_Id gnat_subprog) if (POINTER_TYPE_P (gnu_type)) return convert (gnu_type, gnu_expr32); - else if (TYPE_FAT_POINTER_P (gnu_type)) + else if (TYPE_IS_FAT_POINTER_P (gnu_type)) { tree p_array_type = TREE_TYPE (TYPE_FIELDS (gnu_type)); tree p_bounds_type = TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (gnu_type))); @@ -3542,10 +3534,10 @@ build_unc_object_type_from_ptr (tree thin_fat_ptr_type, tree object_type, { tree template_type; - gcc_assert (TYPE_FAT_OR_THIN_POINTER_P (thin_fat_ptr_type)); + gcc_assert (TYPE_IS_FAT_OR_THIN_POINTER_P (thin_fat_ptr_type)); template_type - = (TYPE_FAT_POINTER_P (thin_fat_ptr_type) + = (TYPE_IS_FAT_POINTER_P (thin_fat_ptr_type) ? TREE_TYPE (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (thin_fat_ptr_type)))) : TREE_TYPE (TYPE_FIELDS (TREE_TYPE (thin_fat_ptr_type)))); return build_unc_object_type (template_type, object_type, name); @@ -3641,7 +3633,7 @@ update_pointer_to (tree old_type, tree new_type) /* Now deal with the unconstrained array case. In this case the "pointer" is actually a RECORD_TYPE where both fields are pointers to dummy nodes. Turn them into pointers to the correct types using update_pointer_to. */ - else if (!TYPE_FAT_POINTER_P (ptr)) + else if (!TYPE_IS_FAT_POINTER_P (ptr)) gcc_unreachable (); else @@ -3742,7 +3734,7 @@ convert_to_fat_pointer (tree type, tree expr) NULL_TREE))); /* If EXPR is a thin pointer, make template and data from the record.. */ - else if (TYPE_THIN_POINTER_P (etype)) + else if (TYPE_IS_THIN_POINTER_P (etype)) { tree fields = TYPE_FIELDS (TREE_TYPE (etype)); @@ -3792,7 +3784,7 @@ convert_to_fat_pointer (tree type, tree expr) static tree convert_to_thin_pointer (tree type, tree expr) { - if (!TYPE_FAT_POINTER_P (TREE_TYPE (expr))) + if (!TYPE_IS_FAT_POINTER_P (TREE_TYPE (expr))) expr = convert_to_fat_pointer (TREE_TYPE (TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))), expr); @@ -3827,7 +3819,7 @@ convert (tree type, tree expr) as an unchecked conversion. Likewise if one is a mere variant of the other, so we avoid a pointless unpad/repad sequence. */ else if (code == RECORD_TYPE && ecode == RECORD_TYPE - && TYPE_IS_PADDING_P (type) && TYPE_IS_PADDING_P (etype) + && TYPE_PADDING_P (type) && TYPE_PADDING_P (etype) && (!TREE_CONSTANT (TYPE_SIZE (type)) || !TREE_CONSTANT (TYPE_SIZE (etype)) || gnat_types_compatible_p (type, etype) @@ -3837,7 +3829,7 @@ convert (tree type, tree expr) /* If the output type has padding, convert to the inner type and make a constructor to build the record, unless a variable size is involved. */ - else if (code == RECORD_TYPE && TYPE_IS_PADDING_P (type)) + else if (code == RECORD_TYPE && TYPE_PADDING_P (type)) { /* If we previously converted from another type and our type is of variable size, remove the conversion to avoid the need for @@ -3855,7 +3847,6 @@ convert (tree type, tree expr) variable-sized temporaries. Likewise if the padding is a variant of the other, so we avoid a pointless unpad/repad sequence. */ if (TREE_CODE (expr) == COMPONENT_REF - && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == RECORD_TYPE && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (expr, 0))) && (!TREE_CONSTANT (TYPE_SIZE (type)) || gnat_types_compatible_p (type, @@ -3865,12 +3856,17 @@ convert (tree type, tree expr) == TYPE_NAME (TREE_TYPE (TYPE_FIELDS (type)))))) return convert (type, TREE_OPERAND (expr, 0)); - /* If the result type is a padded type with a self-referentially-sized - field and the expression type is a record, do this as an unchecked - conversion. */ + /* If the inner type is of self-referential size and the expression type + is a record, do this as an unchecked conversion. But first pad the + expression if possible to have the same size on both sides. */ if (TREE_CODE (etype) == RECORD_TYPE && CONTAINS_PLACEHOLDER_P (DECL_SIZE (TYPE_FIELDS (type)))) - return unchecked_convert (type, expr, false); + { + if (TREE_CONSTANT (TYPE_SIZE (etype))) + expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0, Empty, + false, false, false, true), expr); + return unchecked_convert (type, expr, false); + } /* If we are converting between array types with variable size, do the final conversion as an unchecked conversion, again to avoid the need @@ -3898,7 +3894,7 @@ convert (tree type, tree expr) The conditions ordering is arranged to ensure that the output type is not a padding type here, as it is not clear whether the conversion would always be correct if this was to happen. */ - else if (ecode == RECORD_TYPE && TYPE_IS_PADDING_P (etype)) + else if (ecode == RECORD_TYPE && TYPE_PADDING_P (etype)) { tree unpadded; @@ -4147,7 +4143,8 @@ convert (tree type, tree expr) /* Otherwise, we may just bypass the input view conversion unless one of the types is a fat pointer, which is handled by specialized code below which relies on exact type matching. */ - else if (!TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype)) + else if (!TYPE_IS_FAT_POINTER_P (type) + && !TYPE_IS_FAT_POINTER_P (etype)) return convert (type, op0); } } @@ -4166,7 +4163,7 @@ convert (tree type, tree expr) || TREE_CODE (type) == UNION_TYPE) && (TREE_CODE (etype) == RECORD_TYPE || TREE_CODE (etype) == UNION_TYPE) - && !TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype)) + && !TYPE_IS_FAT_POINTER_P (type) && !TYPE_IS_FAT_POINTER_P (etype)) return build_unary_op (INDIRECT_REF, NULL_TREE, convert (build_pointer_type (type), TREE_OPERAND (expr, 0))); @@ -4177,7 +4174,7 @@ convert (tree type, tree expr) } /* Check for converting to a pointer to an unconstrained array. */ - if (TYPE_FAT_POINTER_P (type) && !TYPE_FAT_POINTER_P (etype)) + if (TYPE_IS_FAT_POINTER_P (type) && !TYPE_IS_FAT_POINTER_P (etype)) return convert_to_fat_pointer (type, expr); /* If we are converting between two aggregate or vector types that are mere @@ -4249,7 +4246,7 @@ convert (tree type, tree expr) /* If converting between two pointers to records denoting both a template and type, adjust if needed to account for any differing offsets, since one might be negative. */ - if (TYPE_THIN_POINTER_P (etype) && TYPE_THIN_POINTER_P (type)) + if (TYPE_IS_THIN_POINTER_P (etype) && TYPE_IS_THIN_POINTER_P (type)) { tree bit_diff = size_diffop (bit_position (TYPE_FIELDS (TREE_TYPE (etype))), @@ -4267,13 +4264,13 @@ convert (tree type, tree expr) } /* If converting to a thin pointer, handle specially. */ - if (TYPE_THIN_POINTER_P (type) + if (TYPE_IS_THIN_POINTER_P (type) && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))) return convert_to_thin_pointer (type, expr); /* If converting fat pointer to normal pointer, get the pointer to the array and then convert it. */ - else if (TYPE_FAT_POINTER_P (etype)) + else if (TYPE_IS_FAT_POINTER_P (etype)) expr = build_component_ref (expr, get_identifier ("P_ARRAY"), NULL_TREE, false); @@ -4370,8 +4367,7 @@ remove_conversions (tree exp, bool true_address) break; case COMPONENT_REF: - if (TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (exp, 0)))) + if (TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (exp, 0)))) return remove_conversions (TREE_OPERAND (exp, 0), true_address); break; @@ -4420,7 +4416,7 @@ maybe_unconstrained_array (tree exp) case RECORD_TYPE: /* If this is a padded type, convert to the unpadded type and see if it contains a template. */ - if (TYPE_IS_PADDING_P (TREE_TYPE (exp))) + if (TYPE_PADDING_P (TREE_TYPE (exp))) { new_exp = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (exp))), exp); if (TREE_CODE (TREE_TYPE (new_exp)) == RECORD_TYPE @@ -4523,13 +4519,13 @@ unchecked_convert (tree type, tree expr, bool notrunc_p) if ((((INTEGRAL_TYPE_P (type) && !(TREE_CODE (type) == INTEGER_TYPE && TYPE_VAX_FLOATING_POINT_P (type))) - || (POINTER_TYPE_P (type) && ! TYPE_THIN_POINTER_P (type)) + || (POINTER_TYPE_P (type) && ! TYPE_IS_THIN_POINTER_P (type)) || (TREE_CODE (type) == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (type))) && ((INTEGRAL_TYPE_P (etype) && !(TREE_CODE (etype) == INTEGER_TYPE && TYPE_VAX_FLOATING_POINT_P (etype))) - || (POINTER_TYPE_P (etype) && !TYPE_THIN_POINTER_P (etype)) + || (POINTER_TYPE_P (etype) && !TYPE_IS_THIN_POINTER_P (etype)) || (TREE_CODE (etype) == RECORD_TYPE && TYPE_JUSTIFIED_MODULAR_P (etype)))) || TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE) @@ -5509,7 +5505,7 @@ handle_vector_type_attribute (tree *node, tree name, tree ARG_UNUSED (args), /* Get the representative array type, possibly nested within a padding record e.g. for alignment purposes. */ - if (TREE_CODE (rep_type) == RECORD_TYPE && TYPE_IS_PADDING_P (rep_type)) + if (TYPE_IS_PADDING_P (rep_type)) rep_type = TREE_TYPE (TYPE_FIELDS (rep_type)); if (TREE_CODE (rep_type) != ARRAY_TYPE) diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c index f8a3dfbd525..7176740f453 100644 --- a/gcc/ada/gcc-interface/utils2.c +++ b/gcc/ada/gcc-interface/utils2.c @@ -654,12 +654,9 @@ build_binary_op (enum tree_code op_code, tree result_type, can convert the constructor to the inner type, to avoid putting a VIEW_CONVERT_EXPR on the LHS. But don't do so if we wouldn't have actually copied anything. */ - else if (TREE_CODE (left_type) == RECORD_TYPE - && TYPE_IS_PADDING_P (left_type) + else if (TYPE_IS_PADDING_P (left_type) && TREE_CONSTANT (TYPE_SIZE (left_type)) && ((TREE_CODE (right_operand) == COMPONENT_REF - && TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0))) - == RECORD_TYPE && TYPE_IS_PADDING_P (TREE_TYPE (TREE_OPERAND (right_operand, 0))) && gnat_types_compatible_p @@ -758,6 +755,12 @@ build_binary_op (enum tree_code op_code, tree result_type, left_type = TREE_TYPE (left_operand); } + /* For a range, make sure the element type is consistent. */ + if (op_code == ARRAY_RANGE_REF + && TREE_TYPE (operation_type) != TREE_TYPE (left_type)) + operation_type = build_array_type (TREE_TYPE (left_type), + TYPE_DOMAIN (operation_type)); + /* Then convert the right operand to its base type. This will prevent unneeded sign conversions when sizetype is wider than integer. */ right_operand = convert (right_base_type, right_operand); @@ -836,8 +839,8 @@ build_binary_op (enum tree_code op_code, tree result_type, convert both operands to that type. */ if (left_base_type != right_base_type) { - if (TYPE_FAT_POINTER_P (left_base_type) - && TYPE_FAT_POINTER_P (right_base_type) + if (TYPE_IS_FAT_POINTER_P (left_base_type) + && TYPE_IS_FAT_POINTER_P (right_base_type) && TYPE_MAIN_VARIANT (left_base_type) == TYPE_MAIN_VARIANT (right_base_type)) best_type = left_base_type; @@ -872,7 +875,7 @@ build_binary_op (enum tree_code op_code, tree result_type, /* If we are comparing a fat pointer against zero, we need to just compare the data pointer. */ - else if (TYPE_FAT_POINTER_P (left_base_type) + else if (TYPE_IS_FAT_POINTER_P (left_base_type) && TREE_CODE (right_operand) == CONSTRUCTOR && integer_zerop (VEC_index (constructor_elt, CONSTRUCTOR_ELTS (right_operand), @@ -1117,11 +1120,10 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) /* If INNER is a padding type whose field has a self-referential size, convert to that inner type. We know the offset is zero and we need to have that type visible. */ - if (TREE_CODE (TREE_TYPE (inner)) == RECORD_TYPE - && TYPE_IS_PADDING_P (TREE_TYPE (inner)) - && (CONTAINS_PLACEHOLDER_P - (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS - (TREE_TYPE (inner))))))) + if (TYPE_IS_PADDING_P (TREE_TYPE (inner)) + && CONTAINS_PLACEHOLDER_P + (TYPE_SIZE (TREE_TYPE (TYPE_FIELDS + (TREE_TYPE (inner)))))) inner = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (inner))), inner); @@ -1154,13 +1156,11 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) /* If this is just a constructor for a padded record, we can just take the address of the single field and convert it to a pointer to our type. */ - if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)) + if (TYPE_IS_PADDING_P (type)) { - result = (VEC_index (constructor_elt, - CONSTRUCTOR_ELTS (operand), - 0) - ->value); - + result = VEC_index (constructor_elt, + CONSTRUCTOR_ELTS (operand), + 0)->value; result = convert (build_pointer_type (TREE_TYPE (operand)), build_unary_op (ADDR_EXPR, NULL_TREE, result)); break; @@ -1202,8 +1202,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) /* If we are taking the address of a padded record whose field is contains a template, take the address of the template. */ - if (TREE_CODE (type) == RECORD_TYPE - && TYPE_IS_PADDING_P (type) + if (TYPE_IS_PADDING_P (type) && TREE_CODE (TREE_TYPE (TYPE_FIELDS (type))) == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (TYPE_FIELDS (type)))) { @@ -1226,7 +1225,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) make up an expression to do so. This will never survive to the backend. If TYPE is a thin pointer, first convert the operand to a fat pointer. */ - if (TYPE_THIN_POINTER_P (type) + if (TYPE_IS_THIN_POINTER_P (type) && TYPE_UNCONSTRAINED_ARRAY (TREE_TYPE (type))) { operand @@ -1235,7 +1234,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) type = TREE_TYPE (operand); } - if (TYPE_FAT_POINTER_P (type)) + if (TYPE_IS_FAT_POINTER_P (type)) { result = build1 (UNCONSTRAINED_ARRAY_REF, TYPE_UNCONSTRAINED_ARRAY (type), operand); @@ -1252,7 +1251,7 @@ build_unary_op (enum tree_code op_code, tree result_type, tree operand) } side_effects - = (!TYPE_FAT_POINTER_P (type) && TYPE_VOLATILE (TREE_TYPE (type))); + = (!TYPE_IS_FAT_POINTER_P (type) && TYPE_VOLATILE (TREE_TYPE (type))); break; case NEGATE_EXPR: @@ -2027,7 +2026,7 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc, /* If RESULT_TYPE is a fat or thin pointer, set SIZE to be the sum of the sizes of the object and its template. Allocate the whole thing and fill in the parts that are known. */ - else if (TYPE_FAT_OR_THIN_POINTER_P (result_type)) + else if (TYPE_IS_FAT_OR_THIN_POINTER_P (result_type)) { tree storage_type = build_unc_object_type_from_ptr (result_type, type, @@ -2049,10 +2048,9 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc, gnat_proc, gnat_pool, gnat_node); storage = convert (storage_ptr_type, protect_multiple_eval (storage)); - if (TREE_CODE (type) == RECORD_TYPE && TYPE_IS_PADDING_P (type)) + if (TYPE_IS_PADDING_P (type)) { type = TREE_TYPE (TYPE_FIELDS (type)); - if (init) init = convert (type, init); } diff --git a/gcc/ada/s-osinte-rtems.ads b/gcc/ada/s-osinte-rtems.ads index 5e3d9192014..70e4a27e0a4 100644 --- a/gcc/ada/s-osinte-rtems.ads +++ b/gcc/ada/s-osinte-rtems.ads @@ -625,6 +625,7 @@ private process_shared : int; prio_ceiling : int; protocol : int; + mutex_type : int; recursive : int; end record; pragma Convention (C, pthread_mutexattr_t); diff --git a/gcc/ada/s-stchop-rtems.adb b/gcc/ada/s-stchop-rtems.adb index 615950e7fee..ac0cfd0f489 100644 --- a/gcc/ada/s-stchop-rtems.adb +++ b/gcc/ada/s-stchop-rtems.adb @@ -80,8 +80,9 @@ package body System.Stack_Checking.Operations is is pragma Unreferenced (Stack_Address); - -- RTEMS has a routine to check this. So use it. - function rtems_stack_checker_is_blown return Interfaces.C.int; + -- RTEMS has a routine to check if the stack is blown. + -- It returns a C99 bool. + function rtems_stack_checker_is_blown return Interfaces.C.unsigned_char; pragma Import (C, rtems_stack_checker_is_blown, "rtems_stack_checker_is_blown"); diff --git a/gcc/alias.c b/gcc/alias.c index 694498ab55a..09ec775c5d0 100644 --- a/gcc/alias.c +++ b/gcc/alias.c @@ -691,7 +691,14 @@ get_alias_set (tree t) requires structural comparisons to identify compatible types use alias set zero. */ if (TYPE_STRUCTURAL_EQUALITY_P (t)) - return 0; + { + /* Allow the language to specify another alias set for this + type. */ + set = lang_hooks.get_alias_set (t); + if (set != -1) + return set; + return 0; + } t = TYPE_CANONICAL (t); /* Canonical types shouldn't form a tree nor should the canonical type require structural equality checks. */ diff --git a/gcc/alloc-pool.c b/gcc/alloc-pool.c index c9d990464ad..cb5d83d23ee 100644 --- a/gcc/alloc-pool.c +++ b/gcc/alloc-pool.c @@ -41,10 +41,10 @@ typedef struct allocation_object_def /* Because we want any type of data to be well aligned after the ID, the following elements are here. They are never accessed so - the allocated object may be even smaller than this structure. */ + the allocated object may be even smaller than this structure. + We do not care about alignment for floating-point types. */ char *align_p; HOST_WIDEST_INT align_i; - long double align_ld; } u; } allocation_object; diff --git a/gcc/builtins.c b/gcc/builtins.c index 55228d22c40..1243d72048b 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -7194,7 +7194,7 @@ fold_builtin_cabs (location_t loc, tree arg, tree type, tree fndecl) { tree res; - if (TREE_CODE (TREE_TYPE (arg)) != COMPLEX_TYPE + if (!validate_arg (arg, COMPLEX_TYPE) || TREE_CODE (TREE_TYPE (TREE_TYPE (arg))) != REAL_TYPE) return NULL_TREE; @@ -7583,7 +7583,7 @@ fold_builtin_cexp (location_t loc, tree arg0, tree type) #endif if (!validate_arg (arg0, COMPLEX_TYPE) - && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) + || TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) != REAL_TYPE) return NULL_TREE; #ifdef HAVE_mpc @@ -10017,7 +10017,8 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0, bool ignore) break; CASE_FLT_FN (BUILT_IN_CIMAG): - if (validate_arg (arg0, COMPLEX_TYPE)) + if (validate_arg (arg0, COMPLEX_TYPE) + && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) return non_lvalue_loc (loc, fold_build1_loc (loc, IMAGPART_EXPR, type, arg0)); break; @@ -10063,7 +10064,45 @@ fold_builtin_1 (location_t loc, tree fndecl, tree arg0, bool ignore) && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) return do_mpc_arg1 (arg0, type, mpc_sqrt); break; -#endif + +#ifdef HAVE_mpc_arc + CASE_FLT_FN (BUILT_IN_CASIN): + if (validate_arg (arg0, COMPLEX_TYPE) + && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) + return do_mpc_arg1 (arg0, type, mpc_asin); + break; + + CASE_FLT_FN (BUILT_IN_CACOS): + if (validate_arg (arg0, COMPLEX_TYPE) + && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) + return do_mpc_arg1 (arg0, type, mpc_acos); + break; + + CASE_FLT_FN (BUILT_IN_CATAN): + if (validate_arg (arg0, COMPLEX_TYPE) + && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) + return do_mpc_arg1 (arg0, type, mpc_atan); + break; + + CASE_FLT_FN (BUILT_IN_CASINH): + if (validate_arg (arg0, COMPLEX_TYPE) + && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) + return do_mpc_arg1 (arg0, type, mpc_asinh); + break; + + CASE_FLT_FN (BUILT_IN_CACOSH): + if (validate_arg (arg0, COMPLEX_TYPE) + && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) + return do_mpc_arg1 (arg0, type, mpc_acosh); + break; + + CASE_FLT_FN (BUILT_IN_CATANH): + if (validate_arg (arg0, COMPLEX_TYPE) + && TREE_CODE (TREE_TYPE (TREE_TYPE (arg0))) == REAL_TYPE) + return do_mpc_arg1 (arg0, type, mpc_atanh); + break; +#endif /* HAVE_mpc_arc */ +#endif /* HAVE_mpc */ CASE_FLT_FN (BUILT_IN_CABS): return fold_builtin_cabs (loc, arg0, type, fndecl); diff --git a/gcc/c-common.c b/gcc/c-common.c index fb2a84ebbf4..8a6d15b9d9b 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -4183,6 +4183,15 @@ c_common_get_alias_set (tree t) tree u; PTR *slot; + /* For VLAs, use the alias set of the element type rather than the + default of alias set 0 for types compared structurally. */ + if (TYPE_P (t) && TYPE_STRUCTURAL_EQUALITY_P (t)) + { + if (TREE_CODE (t) == ARRAY_TYPE) + return get_alias_set (TREE_TYPE (t)); + return -1; + } + /* Permit type-punning when accessing a union, provided the access is directly through the union. For example, this code does not permit taking the address of a union member and then storing @@ -8181,7 +8190,8 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type, else if (token_type == CPP_STRING || token_type == CPP_WSTRING || token_type == CPP_STRING16 - || token_type == CPP_STRING32) + || token_type == CPP_STRING32 + || token_type == CPP_UTF8STRING) message = catenate_messages (gmsgid, " before string constant"); else if (token_type == CPP_NUMBER) message = catenate_messages (gmsgid, " before numeric constant"); diff --git a/gcc/c-lex.c b/gcc/c-lex.c index 0c6cdab9dff..fd3df8c0a48 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -365,6 +365,7 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags, case CPP_WSTRING: case CPP_STRING16: case CPP_STRING32: + case CPP_UTF8STRING: type = lex_string (tok, value, true, true); break; @@ -423,7 +424,8 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags, case CPP_WSTRING: case CPP_STRING16: case CPP_STRING32: - if ((lex_flags & C_LEX_RAW_STRINGS) == 0) + case CPP_UTF8STRING: + if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0) { type = lex_string (tok, value, false, (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0); @@ -871,12 +873,13 @@ interpret_fixed (const cpp_token *token, unsigned int flags) return value; } -/* Convert a series of STRING, WSTRING, STRING16 and/or STRING32 tokens - into a tree, performing string constant concatenation. TOK is the - first of these. VALP is the location to write the string into. - OBJC_STRING indicates whether an '@' token preceded the incoming token. +/* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or + UTF8STRING tokens into a tree, performing string constant + concatenation. TOK is the first of these. VALP is the location + to write the string into. OBJC_STRING indicates whether an '@' token + preceded the incoming token. Returns the CPP token type of the result (CPP_STRING, CPP_WSTRING, - CPP_STRING32, CPP_STRING16, or CPP_OBJC_STRING). + CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING). This is unfortunately more work than it should be. If any of the strings in the series has an L prefix, the result is a wide string @@ -921,6 +924,7 @@ lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate) case CPP_WSTRING: case CPP_STRING16: case CPP_STRING32: + case CPP_UTF8STRING: if (type != tok->type) { if (type == CPP_STRING) @@ -966,6 +970,7 @@ lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate) { default: case CPP_STRING: + case CPP_UTF8STRING: value = build_string (1, ""); break; case CPP_STRING16: @@ -991,6 +996,7 @@ lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate) { default: case CPP_STRING: + case CPP_UTF8STRING: TREE_TYPE (value) = char_array_type_node; break; case CPP_STRING16: diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 3f6e949fe8e..767d97fbe58 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -5349,6 +5349,7 @@ c_parser_postfix_expression (c_parser *parser) case CPP_STRING16: case CPP_STRING32: case CPP_WSTRING: + case CPP_UTF8STRING: expr.value = c_parser_peek_token (parser)->value; expr.original_code = STRING_CST; c_parser_consume_token (parser); diff --git a/gcc/c-pragma.h b/gcc/c-pragma.h index 188afb8dbaa..be085ee1115 100644 --- a/gcc/c-pragma.h +++ b/gcc/c-pragma.h @@ -118,9 +118,9 @@ extern enum cpp_ttype pragma_lex (tree *); so that 0 means to translate and join strings. */ #define C_LEX_STRING_NO_TRANSLATE 1 /* Do not lex strings into execution character set. */ -#define C_LEX_RAW_STRINGS 2 /* Return raw strings -- no - concatenation, no - translation. */ +#define C_LEX_STRING_NO_JOIN 2 /* Do not concatenate strings + nor translate them into execution + character set. */ /* This is not actually available to pragma parsers. It's merely a convenient location to declare this function for c-lex, after diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 2117ee3bc52..be46028fa58 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1768,10 +1768,10 @@ expand_call_stmt (gimple stmt) for (i = 0; i < gimple_call_num_args (stmt); i++) CALL_EXPR_ARG (exp, i) = gimple_call_arg (stmt, i); - if (!(gimple_call_flags (stmt) & (ECF_CONST | ECF_PURE))) + if (gimple_has_side_effects (stmt)) TREE_SIDE_EFFECTS (exp) = 1; - if (gimple_call_flags (stmt) & ECF_NOTHROW) + if (gimple_call_nothrow_p (stmt)) TREE_NOTHROW (exp) = 1; CALL_EXPR_TAILCALL (exp) = gimple_call_tail_p (stmt); @@ -2194,46 +2194,6 @@ round_udiv_adjust (enum machine_mode mode, rtx mod, rtx op1) const1_rtx, const0_rtx); } -/* Wrap modeless constants in CONST:MODE. */ -rtx -wrap_constant (enum machine_mode mode, rtx x) -{ - if (GET_MODE (x) != VOIDmode) - return x; - - if (CONST_INT_P (x) - || GET_CODE (x) == CONST_FIXED - || GET_CODE (x) == CONST_DOUBLE - || GET_CODE (x) == LABEL_REF) - { - gcc_assert (mode != VOIDmode); - - x = gen_rtx_CONST (mode, x); - } - - return x; -} - -/* Remove CONST wrapper added by wrap_constant(). */ -rtx -unwrap_constant (rtx x) -{ - rtx ret = x; - - if (GET_CODE (x) != CONST) - return x; - - x = XEXP (x, 0); - - if (CONST_INT_P (x) - || GET_CODE (x) == CONST_FIXED - || GET_CODE (x) == CONST_DOUBLE - || GET_CODE (x) == LABEL_REF) - ret = x; - - return ret; -} - /* Convert X to MODE, that must be Pmode or ptr_mode, without emitting any rtl. */ @@ -2356,11 +2316,21 @@ expand_debug_expr (tree exp) case COMPLEX_CST: gcc_assert (COMPLEX_MODE_P (mode)); op0 = expand_debug_expr (TREE_REALPART (exp)); - op0 = wrap_constant (GET_MODE_INNER (mode), op0); op1 = expand_debug_expr (TREE_IMAGPART (exp)); - op1 = wrap_constant (GET_MODE_INNER (mode), op1); return gen_rtx_CONCAT (mode, op0, op1); + case DEBUG_EXPR_DECL: + op0 = DECL_RTL_IF_SET (exp); + + if (op0) + return op0; + + op0 = gen_rtx_DEBUG_EXPR (mode); + DEBUG_EXPR_TREE_DECL (op0) = exp; + SET_DECL_RTL (exp, op0); + + return op0; + case VAR_DECL: case PARM_DECL: case FUNCTION_DECL: @@ -2512,6 +2482,9 @@ expand_debug_expr (tree exp) &mode1, &unsignedp, &volatilep, false); rtx orig_op0; + if (bitsize == 0) + return NULL; + orig_op0 = op0 = expand_debug_expr (tem); if (!op0) @@ -2549,6 +2522,9 @@ expand_debug_expr (tree exp) if (MEM_P (op0)) { + if (mode1 == VOIDmode) + /* Bitfield. */ + mode1 = smallest_mode_for_size (bitsize, MODE_INT); if (bitpos >= BITS_PER_UNIT) { op0 = adjust_address_nv (op0, mode1, bitpos / BITS_PER_UNIT); @@ -2556,7 +2532,8 @@ expand_debug_expr (tree exp) } else if (bitpos < 0) { - int units = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT; + HOST_WIDE_INT units + = (-bitpos + BITS_PER_UNIT - 1) / BITS_PER_UNIT; op0 = adjust_address_nv (op0, mode1, units); bitpos += units * BITS_PER_UNIT; } @@ -2574,6 +2551,9 @@ expand_debug_expr (tree exp) if (bitpos == 0 && mode == GET_MODE (op0)) return op0; + if (bitpos < 0) + return NULL; + if ((bitpos % BITS_PER_UNIT) == 0 && bitsize == GET_MODE_BITSIZE (mode1)) { @@ -2850,6 +2830,46 @@ expand_debug_expr (tree exp) op1 = gen_rtx_CONST (GET_MODE_INNER (mode), op1); return gen_rtx_CONCAT (mode, op0, op1); + case CONJ_EXPR: + if (GET_CODE (op0) == CONCAT) + return gen_rtx_CONCAT (mode, XEXP (op0, 0), + gen_rtx_NEG (GET_MODE_INNER (mode), + XEXP (op0, 1))); + else + { + enum machine_mode imode = GET_MODE_INNER (mode); + rtx re, im; + + if (MEM_P (op0)) + { + re = adjust_address_nv (op0, imode, 0); + im = adjust_address_nv (op0, imode, GET_MODE_SIZE (imode)); + } + else + { + enum machine_mode ifmode = int_mode_for_mode (mode); + enum machine_mode ihmode = int_mode_for_mode (imode); + rtx halfsize; + if (ifmode == BLKmode || ihmode == BLKmode) + return NULL; + halfsize = GEN_INT (GET_MODE_BITSIZE (ihmode)); + re = op0; + if (mode != ifmode) + re = gen_rtx_SUBREG (ifmode, re, 0); + re = gen_rtx_ZERO_EXTRACT (ihmode, re, halfsize, const0_rtx); + if (imode != ihmode) + re = gen_rtx_SUBREG (imode, re, 0); + im = copy_rtx (op0); + if (mode != ifmode) + im = gen_rtx_SUBREG (ifmode, im, 0); + im = gen_rtx_ZERO_EXTRACT (ihmode, im, halfsize, halfsize); + if (imode != ihmode) + im = gen_rtx_SUBREG (imode, im, 0); + } + im = gen_rtx_NEG (imode, im); + return gen_rtx_CONCAT (mode, re, im); + } + case ADDR_EXPR: op0 = expand_debug_expr (TREE_OPERAND (exp, 0)); if (!op0 || !MEM_P (op0)) diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index d6c26bf0ba0..4abdf8bfe15 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -288,6 +288,7 @@ extern edge create_empty_if_region_on_edge (edge, tree); extern struct loop *create_empty_loop_on_edge (edge, tree, tree, tree, tree, tree *, tree *, struct loop *); extern struct loop * duplicate_loop (struct loop *, struct loop *); +extern void duplicate_subloops (struct loop *, struct loop *); extern bool duplicate_loop_to_header_edge (struct loop *, edge, unsigned, sbitmap, edge, VEC (edge, heap) **, int); diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index a357a2fd77a..6f24415a72d 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -32,7 +32,6 @@ along with GCC; see the file COPYING3. If not see #include "output.h" #include "tree-flow.h" -static void duplicate_subloops (struct loop *, struct loop *); static void copy_loops_to (struct loop **, int, struct loop *); static void loop_redirect_edge (edge, basic_block); @@ -886,7 +885,7 @@ duplicate_loop (struct loop *loop, struct loop *target) /* Copies structure of subloops of LOOP into TARGET loop, placing newly created loops into loop tree. */ -static void +void duplicate_subloops (struct loop *loop, struct loop *target) { struct loop *aloop, *cloop; diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 9a97bef2962..7b8b738ed1f 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1375,15 +1375,16 @@ ipa_passes (void) set_cfun (NULL); current_function_decl = NULL; cgraph_process_new_functions (); - } - execute_ipa_summary_passes ((struct ipa_opt_pass_d *) all_regular_ipa_passes); + execute_ipa_summary_passes ((struct ipa_opt_pass_d *) all_regular_ipa_passes); + } execute_ipa_summary_passes ((struct ipa_opt_pass_d *) all_lto_gen_passes); if (!in_lto_p) ipa_write_summaries (); - execute_ipa_pass_list (all_regular_ipa_passes); + if (!flag_ltrans) + execute_ipa_pass_list (all_regular_ipa_passes); bitmap_obstack_release (NULL); } @@ -1441,6 +1442,7 @@ cgraph_optimize (void) timevar_pop (TV_CGRAPHOPT); /* Output everything. */ + (*debug_hooks->assembly_start) (); if (!quiet_flag) fprintf (stderr, "Assembling functions:\n"); #ifdef ENABLE_CHECKING diff --git a/gcc/combine.c b/gcc/combine.c index af9cea2fe2a..129cd4dff39 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -2264,68 +2264,33 @@ cleanup_auto_inc_dec (rtx src, bool after, enum machine_mode mem_mode) return x; } -#endif /* Auxiliary data structure for propagate_for_debug_stmt. */ struct rtx_subst_pair { - rtx from, to; - bool changed; -#ifdef AUTO_INC_DEC + rtx to; bool adjusted; bool after; -#endif }; -/* Clean up any auto-updates in PAIR->to the first time it is called - for a PAIR. PAIR->adjusted is used to tell whether we've cleaned - up before. */ +/* DATA points to an rtx_subst_pair. Return the value that should be + substituted. */ -static void -auto_adjust_pair (struct rtx_subst_pair *pair ATTRIBUTE_UNUSED) +static rtx +propagate_for_debug_subst (rtx from ATTRIBUTE_UNUSED, void *data) { -#ifdef AUTO_INC_DEC + struct rtx_subst_pair *pair = (struct rtx_subst_pair *)data; + if (!pair->adjusted) { pair->adjusted = true; pair->to = cleanup_auto_inc_dec (pair->to, pair->after, VOIDmode); + return pair->to; } -#endif -} - -/* If *LOC is the same as FROM in the struct rtx_subst_pair passed as - DATA, replace it with a copy of TO. Handle SUBREGs of *LOC as - well. */ - -static int -propagate_for_debug_subst (rtx *loc, void *data) -{ - struct rtx_subst_pair *pair = (struct rtx_subst_pair *)data; - rtx from = pair->from, to = pair->to; - rtx x = *loc, s = x; - - if (rtx_equal_p (x, from) - || (GET_CODE (x) == SUBREG && rtx_equal_p ((s = SUBREG_REG (x)), from))) - { - auto_adjust_pair (pair); - if (pair->to != to) - to = pair->to; - else - to = copy_rtx (to); - if (s != x) - { - gcc_assert (GET_CODE (x) == SUBREG && SUBREG_REG (x) == s); - to = simplify_gen_subreg (GET_MODE (x), to, - GET_MODE (from), SUBREG_BYTE (x)); - } - *loc = wrap_constant (GET_MODE (x), to); - pair->changed = true; - return -1; - } - - return 0; + return copy_rtx (pair->to); } +#endif /* Replace occurrences of DEST with SRC in DEBUG_INSNs between INSN and LAST. If MOVE holds, debug insns must also be moved past @@ -2334,14 +2299,11 @@ propagate_for_debug_subst (rtx *loc, void *data) static void propagate_for_debug (rtx insn, rtx last, rtx dest, rtx src, bool move) { - struct rtx_subst_pair p; - rtx next, move_pos = move ? last : NULL_RTX; - - p.from = dest; - p.to = src; - p.changed = false; + rtx next, move_pos = move ? last : NULL_RTX, loc; #ifdef AUTO_INC_DEC + struct rtx_subst_pair p; + p.to = src; p.adjusted = false; p.after = move; #endif @@ -2353,11 +2315,15 @@ propagate_for_debug (rtx insn, rtx last, rtx dest, rtx src, bool move) next = NEXT_INSN (insn); if (DEBUG_INSN_P (insn)) { - for_each_rtx (&INSN_VAR_LOCATION_LOC (insn), - propagate_for_debug_subst, &p); - if (!p.changed) +#ifdef AUTO_INC_DEC + loc = simplify_replace_fn_rtx (INSN_VAR_LOCATION_LOC (insn), + dest, propagate_for_debug_subst, &p); +#else + loc = simplify_replace_rtx (INSN_VAR_LOCATION_LOC (insn), dest, src); +#endif + if (loc == INSN_VAR_LOCATION_LOC (insn)) continue; - p.changed = false; + INSN_VAR_LOCATION_LOC (insn) = loc; if (move_pos) { remove_insn (insn); diff --git a/gcc/common.opt b/gcc/common.opt index dd2d8155c5e..b57234a92ab 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -717,6 +717,11 @@ fira-coalesce Common Report Var(flag_ira_coalesce) Init(0) Do optimistic coalescing. +fira-loop-pressure +Common Report Var(flag_ira_loop_pressure) +Use IRA based register pressure calculation +in RTL loop optimizations. + fira-share-save-slots Common Report Var(flag_ira_share_save_slots) Init(1) Share slots for saving different hard registers. diff --git a/gcc/config.gcc b/gcc/config.gcc index e83382c1059..7666dd61861 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -722,7 +722,7 @@ arm*-*-linux*) # ARM GNU/Linux with ELF case ${target} in arm*-*-linux-*eabi) tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h" - tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi" + tmake_file="$tmake_file arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi t-slibgcc-libgcc" # The BPABI long long divmod functions return a 128-bit value in # registers r0-r3. Correctly modeling that requires the use of # TImode. diff --git a/gcc/config.in b/gcc/config.in index 4c3da5baed7..a3e9069e129 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -315,6 +315,12 @@ #endif +/* Define if your assembler supports the swap suffix. */ +#ifndef USED_FOR_TARGET +#undef HAVE_AS_IX86_SWAP +#endif + + /* Define if your assembler supports the lituse_jsrdirect relocation. */ #ifndef USED_FOR_TARGET #undef HAVE_AS_JSRDIRECT_RELOCS diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index fb4e59fff47..93c35901116 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -133,7 +133,7 @@ static enum machine_mode arm_promote_function_mode (const_tree, const_tree, int); static bool arm_return_in_memory (const_tree, const_tree); static rtx arm_function_value (const_tree, const_tree, bool); -static rtx arm_libcall_value (enum machine_mode, rtx); +static rtx arm_libcall_value (enum machine_mode, const_rtx); static void arm_internal_label (FILE *, const char *, unsigned long); static void arm_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, @@ -1864,6 +1864,16 @@ arm_override_options (void) max_insns_skipped = 3; } + /* Hot/Cold partitioning is not currently supported, since we can't + handle literal pool placement in that case. */ + if (flag_reorder_blocks_and_partition) + { + inform (input_location, + "-freorder-blocks-and-partition not supported on this architecture"); + flag_reorder_blocks_and_partition = 0; + flag_reorder_blocks = 1; + } + /* Ideally we would want to use CFI directives to generate debug info. However this also creates the .eh_frame section, so disable them until GAS can handle @@ -3264,7 +3274,7 @@ add_libcall (htab_t htab, rtx libcall) } static bool -arm_libcall_uses_aapcs_base (rtx libcall) +arm_libcall_uses_aapcs_base (const_rtx libcall) { static bool init_done = false; static htab_t libcall_htab; @@ -3311,7 +3321,7 @@ arm_libcall_uses_aapcs_base (rtx libcall) } rtx -arm_libcall_value (enum machine_mode mode, rtx libcall) +arm_libcall_value (enum machine_mode mode, const_rtx libcall) { if (TARGET_AAPCS_BASED && arm_pcs_default != ARM_PCS_AAPCS && GET_MODE_CLASS (mode) == MODE_FLOAT) @@ -12269,7 +12279,7 @@ output_move_neon (rtx *operands) { /* We're only using DImode here because it's a convenient size. */ ops[0] = gen_rtx_REG (DImode, REGNO (reg) + 2 * i); - ops[1] = adjust_address (mem, SImode, 8 * i); + ops[1] = adjust_address (mem, DImode, 8 * i); if (reg_overlap_mentioned_p (ops[0], mem)) { gcc_assert (overlap == -1); diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 85bc3eed100..7d1ef111339 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -3655,7 +3655,8 @@ UNSPEC_VSHLL_N))] "TARGET_NEON" { - neon_const_bounds (operands[2], 0, neon_element_bits (<MODE>mode)); + /* The boundaries are: 0 < imm <= size. */ + neon_const_bounds (operands[2], 0, neon_element_bits (<MODE>mode) + 1); return "vshll.%T3%#<V_sz_elem>\t%q0, %P1, %2"; } [(set_attr "neon_type" "neon_shift_1")] diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index 5a15200ffe3..b2d6b44a57d 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -235,7 +235,7 @@ (define_insn "*movqi" [(set (match_operand:QI 0 "nonimmediate_operand" "=r,d,Qm,r,q,r,*r") - (match_operand:QI 1 "general_operand" "r,i,rL,Qm,r,q,i"))] + (match_operand:QI 1 "general_operand" "rL,i,rL,Qm,r,q,i"))] "(register_operand (operands[0],QImode) || register_operand (operands[1], QImode) || const0_rtx == operands[1])" "* return output_movqi (insn, operands, NULL);" @@ -336,7 +336,7 @@ (define_insn "*movhi" [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,m,d,*r,q,r") - (match_operand:HI 1 "general_operand" "r,m,rL,i,i,r,q"))] + (match_operand:HI 1 "general_operand" "rL,m,rL,i,i,r,q"))] "(register_operand (operands[0],HImode) || register_operand (operands[1],HImode) || const0_rtx == operands[1])" "* return output_movhi (insn, operands, NULL);" diff --git a/gcc/config/cris/cris-protos.h b/gcc/config/cris/cris-protos.h index db6aa9fe9ce..721c90ff887 100644 --- a/gcc/config/cris/cris-protos.h +++ b/gcc/config/cris/cris-protos.h @@ -71,3 +71,5 @@ extern void cris_override_options (void); extern int cris_initial_elimination_offset (int, int); extern void cris_init_expanders (void); + +extern bool cris_function_value_regno_p (const unsigned int); diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index bf00a57a3b6..225ad403dda 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -130,6 +130,9 @@ static bool cris_frame_pointer_required (void); static void cris_asm_trampoline_template (FILE *); static void cris_trampoline_init (rtx, tree, rtx); +static rtx cris_function_value(const_tree, const_tree, bool); +static rtx cris_libcall_value (enum machine_mode, const_rtx); + /* This is the parsed result of the "-max-stack-stackframe=" option. If it (still) is zero, then there was no such option given. */ int cris_max_stackframe = 0; @@ -197,6 +200,11 @@ int cris_cpu_version = CRIS_DEFAULT_CPU_VERSION; #undef TARGET_TRAMPOLINE_INIT #define TARGET_TRAMPOLINE_INIT cris_trampoline_init +#undef TARGET_FUNCTION_VALUE +#define TARGET_FUNCTION_VALUE cris_function_value +#undef TARGET_LIBCALL_VALUE +#define TARGET_LIBCALL_VALUE cris_libcall_value + struct gcc_target targetm = TARGET_INITIALIZER; /* Helper for cris_load_multiple_op and cris_ret_movem_op. */ @@ -3777,13 +3785,42 @@ cris_promote_function_mode (const_tree type ATTRIBUTE_UNUSED, int for_return) { /* Defining PROMOTE_FUNCTION_RETURN in gcc-2.7.2 uncovered bug 981110 (even - when modifying FUNCTION_VALUE to return the promoted mode). Maybe - pointless as of now, but let's keep the old behavior. */ + when modifying TARGET_FUNCTION_VALUE to return the promoted mode). + Maybe pointless as of now, but let's keep the old behavior. */ if (for_return == 1) return mode; return CRIS_PROMOTED_MODE (mode, *punsignedp, type); } +/* Let's assume all functions return in r[CRIS_FIRST_ARG_REG] for the + time being. */ + +static rtx +cris_function_value(const_tree type, + const_tree func ATTRIBUTE_UNUSED, + bool outgoing ATTRIBUTE_UNUSED) +{ + return gen_rtx_REG (TYPE_MODE (type), CRIS_FIRST_ARG_REG); +} + +/* Let's assume all functions return in r[CRIS_FIRST_ARG_REG] for the + time being. */ + +static rtx +cris_libcall_value (enum machine_mode mode, + const_rtx fun ATTRIBUTE_UNUSED) +{ + return gen_rtx_REG (mode, CRIS_FIRST_ARG_REG); +} + +/* Let's assume all functions return in r[CRIS_FIRST_ARG_REG] for the + time being. */ + +bool +cris_function_value_regno_p (const unsigned int regno) +{ + return (regno == CRIS_FIRST_ARG_REG); +} static int cris_arg_partial_bytes (CUMULATIVE_ARGS *ca, enum machine_mode mode, diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index 586f7ff2077..0fea7d77b39 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -630,12 +630,17 @@ enum reg_class ? GENERAL_REGS : (CLASS)) /* We can't move special registers to and from memory in smaller than - word_mode. */ -#define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \ - (((CLASS) != SPECIAL_REGS && (CLASS) != MOF_REGS) \ - || GET_MODE_SIZE (MODE) == 4 \ - || !MEM_P (X) \ - ? NO_REGS : GENERAL_REGS) + word_mode. We also can't move between special registers. Luckily, + -1, as returned by true_regnum for non-sub/registers, is valid as a + parameter to our REGNO_REG_CLASS, returning GENERAL_REGS, so we get + the effect that any X that isn't a special-register is treated as + a non-empty intersection with GENERAL_REGS. */ +#define SECONDARY_RELOAD_CLASS(CLASS, MODE, X) \ + ((((CLASS) == SPECIAL_REGS || (CLASS) == MOF_REGS) \ + && ((GET_MODE_SIZE (MODE) < 4 && MEM_P (X)) \ + || !reg_classes_intersect_p (REGNO_REG_CLASS (true_regnum (X)), \ + GENERAL_REGS))) \ + ? GENERAL_REGS : NO_REGS) /* FIXME: Fix regrename.c; it should check validity of replacements, not just with a silly pass-specific macro. We may miss some @@ -901,14 +906,8 @@ struct cum_args {int regs;}; /* Node: Scalar Return */ -/* Let's assume all functions return in r[CRIS_FIRST_ARG_REG] for the - time being. */ -#define FUNCTION_VALUE(VALTYPE, FUNC) \ - gen_rtx_REG (TYPE_MODE (VALTYPE), CRIS_FIRST_ARG_REG) +#define FUNCTION_VALUE_REGNO_P(N) cris_function_value_regno_p (N) -#define LIBCALL_VALUE(MODE) gen_rtx_REG (MODE, CRIS_FIRST_ARG_REG) - -#define FUNCTION_VALUE_REGNO_P(N) ((N) == CRIS_FIRST_ARG_REG) /* Node: Aggregate Return */ diff --git a/gcc/config/cris/cris.md b/gcc/config/cris/cris.md index 79eb8da3b0d..bd14a16337e 100644 --- a/gcc/config/cris/cris.md +++ b/gcc/config/cris/cris.md @@ -4936,7 +4936,7 @@ ;; It should be: ;; movu.b some_byte,reg_32 ;; and.b const,reg_32 -;; but is turns into: +;; but it turns into: ;; move.b some_byte,reg_32 ;; and.d const,reg_32 ;; Fix it here. @@ -4953,7 +4953,9 @@ "REGNO (operands[2]) == REGNO (operands[0]) && INTVAL (operands[3]) <= 65535 && INTVAL (operands[3]) >= 0 && !CRIS_CONST_OK_FOR_LETTER_P (INTVAL (operands[3]), 'I') - && !side_effects_p (operands[1])" + && !side_effects_p (operands[1]) + && (!REG_P (operands[1]) + || REGNO (operands[1]) <= CRIS_LAST_GENERAL_REGISTER)" ;; FIXME: CC0 valid except for M (i.e. CC_NOT_NEGATIVE). [(set (match_dup 0) (match_dup 4)) (set (match_dup 5) (match_dup 6))] diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index a8933e66348..b5c4fb8e0d9 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -1697,6 +1697,17 @@ darwin_override_options (void) if (dwarf_strict < 0) dwarf_strict = 1; + /* Disable -freorder-blocks-and-partition for darwin_emit_unwind_label. */ + if (flag_reorder_blocks_and_partition + && (targetm.asm_out.unwind_label == darwin_emit_unwind_label)) + { + inform (input_location, + "-freorder-blocks-and-partition does not work with exceptions " + "on this architecture"); + flag_reorder_blocks_and_partition = 0; + flag_reorder_blocks = 1; + } + if (flag_mkernel || flag_apple_kext) { /* -mkernel implies -fapple-kext for C++ */ diff --git a/gcc/config/darwin10.h b/gcc/config/darwin10.h index 65ba2632a8f..b1edf36ce3d 100644 --- a/gcc/config/darwin10.h +++ b/gcc/config/darwin10.h @@ -23,3 +23,8 @@ unwinder in libSystem is fixed to digest new epilog unwinding notes. */ #undef LIB_SPEC #define LIB_SPEC "%{!static:-no_compact_unwind -lSystem}" + +/* Unwind labels are no longer required in darwin10. */ + +#undef TARGET_ASM_EMIT_UNWIND_LABEL +#define TARGET_ASM_EMIT_UNWIND_LABEL default_emit_unwind_label diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 404595405f3..7bb1e7a6c5c 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -507,6 +507,32 @@ byte_reg (rtx x, int b) && call_used_regs[regno] \ && !current_function_is_leaf))) +/* We use this to wrap all emitted insns in the prologue. */ +static rtx +F (rtx x) +{ + RTX_FRAME_RELATED_P (x) = 1; + return x; +} + +/* Mark all the subexpressions of the PARALLEL rtx PAR as + frame-related. Return PAR. + + dwarf2out.c:dwarf2out_frame_debug_expr ignores sub-expressions of a + PARALLEL rtx other than the first if they do not have the + FRAME_RELATED flag set on them. */ +static rtx +Fpa (rtx par) +{ + int len = XVECLEN (par, 0); + int i; + + for (i = 0; i < len; i++) + F (XVECEXP (par, 0, i)); + + return par; +} + /* Output assembly language to FILE for the operation OP with operand size SIZE to adjust the stack pointer. */ @@ -526,22 +552,27 @@ h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size) && !(cfun->static_chain_decl != NULL && sign < 0)) { rtx r3 = gen_rtx_REG (Pmode, 3); - emit_insn (gen_movhi (r3, GEN_INT (sign * size))); - emit_insn (gen_addhi3 (stack_pointer_rtx, - stack_pointer_rtx, r3)); + F (emit_insn (gen_movhi (r3, GEN_INT (sign * size)))); + F (emit_insn (gen_addhi3 (stack_pointer_rtx, + stack_pointer_rtx, r3))); } else { /* The stack adjustment made here is further optimized by the splitter. In case of H8/300, the splitter always splits the - addition emitted here to make the adjustment - interrupt-safe. */ + addition emitted here to make the adjustment interrupt-safe. + FIXME: We don't always tag those, because we don't know what + the splitter will do. */ if (Pmode == HImode) - emit_insn (gen_addhi3 (stack_pointer_rtx, - stack_pointer_rtx, GEN_INT (sign * size))); + { + rtx x = emit_insn (gen_addhi3 (stack_pointer_rtx, + stack_pointer_rtx, GEN_INT (sign * size))); + if (size < 4) + F (x); + } else - emit_insn (gen_addsi3 (stack_pointer_rtx, - stack_pointer_rtx, GEN_INT (sign * size))); + F (emit_insn (gen_addsi3 (stack_pointer_rtx, + stack_pointer_rtx, GEN_INT (sign * size)))); } } @@ -591,7 +622,7 @@ push (int rn) x = gen_push_h8300hs_advanced (reg); else x = gen_push_h8300hs_normal (reg); - x = emit_insn (x); + x = F (emit_insn (x)); REG_NOTES (x) = gen_rtx_EXPR_LIST (REG_INC, stack_pointer_rtx, 0); } @@ -634,7 +665,7 @@ h8300_push_pop (int regno, int nregs, int pop_p, int return_p) { int i, j; rtvec vec; - rtx sp, offset; + rtx sp, offset, x; /* See whether we can use a simple push or pop. */ if (!return_p && nregs == 1) @@ -685,7 +716,10 @@ h8300_push_pop (int regno, int nregs, int pop_p, int return_p) RTVEC_ELT (vec, i + j) = gen_rtx_SET (VOIDmode, sp, gen_rtx_PLUS (Pmode, sp, offset)); - emit_insn (gen_rtx_PARALLEL (VOIDmode, vec)); + x = gen_rtx_PARALLEL (VOIDmode, vec); + if (!pop_p) + x = Fpa (x); + emit_insn (x); } /* Return true if X has the value sp + OFFSET. */ @@ -820,7 +854,7 @@ h8300_expand_prologue (void) { /* Push fp. */ push (HARD_FRAME_POINTER_REGNUM); - emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx); + F (emit_move_insn (hard_frame_pointer_rtx, stack_pointer_rtx)); } /* Push the rest of the registers in ascending order. */ diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index e0f0ea62f4e..9757afc2de3 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -147,6 +147,17 @@ extern const char * const *h8_reg_names; /* Show we can debug even without a frame pointer. */ /* #define CAN_DEBUG_WITHOUT_FP */ +/* We want dwarf2 info available to gdb... */ +#define DWARF2_DEBUGGING_INFO 1 +/* ... but we don't actually support full dwarf2 EH. */ +#define MUST_USE_SJLJ_EXCEPTIONS 1 + +/* The return address is pushed on the stack. */ +#define INCOMING_RETURN_ADDR_RTX gen_rtx_MEM (Pmode, gen_rtx_REG (Pmode, STACK_POINTER_REGNUM)) +#define INCOMING_FRAME_SP_OFFSET (POINTER_SIZE / 8) + +#define DWARF_CIE_DATA_ALIGNMENT 2 + /* Define this if addresses of constant functions shouldn't be put through pseudo regs where they can be cse'd. Desirable on machines where ordinary constants are expensive diff --git a/gcc/config/i386/cygming.h b/gcc/config/i386/cygming.h index 43003cc5cad..cdab21c91a2 100644 --- a/gcc/config/i386/cygming.h +++ b/gcc/config/i386/cygming.h @@ -49,8 +49,9 @@ along with GCC; see the file COPYING3. If not see target, always use the svr4_dbx_register_map for DWARF .eh_frame even if we don't use DWARF .debug_frame. */ #undef DWARF_FRAME_REGNUM -#define DWARF_FRAME_REGNUM(n) TARGET_64BIT \ - ? dbx64_register_map[(n)] : svr4_dbx_register_map[(n)] +#define DWARF_FRAME_REGNUM(n) \ + (TARGET_64BIT ? dbx64_register_map[(n)] \ + : svr4_dbx_register_map[(n)]) #ifdef HAVE_GAS_PE_SECREL32_RELOC /* Use section relative relocations for debugging offsets. Unlike diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b5bb6a0352f..6065f49a042 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4774,6 +4774,25 @@ ix86_function_type_abi (const_tree fntype) return ix86_abi; } +static bool +ix86_function_ms_hook_prologue (const_tree fntype) +{ + if (!TARGET_64BIT) + { + if (lookup_attribute ("ms_hook_prologue", DECL_ATTRIBUTES (fntype))) + { + if (decl_function_context (fntype) != NULL_TREE) + { + error_at (DECL_SOURCE_LOCATION (fntype), + "ms_hook_prologue is not compatible with nested function"); + } + + return true; + } + } + return false; +} + static enum calling_abi ix86_function_abi (const_tree fndecl) { @@ -8295,6 +8314,7 @@ ix86_expand_prologue (void) bool pic_reg_used; struct ix86_frame frame; HOST_WIDE_INT allocate; + int gen_frame_pointer = frame_pointer_needed; ix86_finalize_stack_realign_flags (); @@ -8307,6 +8327,46 @@ ix86_expand_prologue (void) ix86_compute_frame_layout (&frame); + if (ix86_function_ms_hook_prologue (current_function_decl)) + { + rtx push, mov; + + /* Make sure the function starts with + 8b ff movl.s %edi,%edi + 55 push %ebp + 8b ec movl.s %esp,%ebp + + This matches the hookable function prologue in Win32 API + functions in Microsoft Windows XP Service Pack 2 and newer. + Wine uses this to enable Windows apps to hook the Win32 API + functions provided by Wine. */ + insn = emit_insn (gen_vswapmov (gen_rtx_REG (SImode, DI_REG), + gen_rtx_REG (SImode, DI_REG))); + push = emit_insn (gen_push (hard_frame_pointer_rtx)); + mov = emit_insn (gen_vswapmov (hard_frame_pointer_rtx, + stack_pointer_rtx)); + + if (frame_pointer_needed && !(crtl->drap_reg + && crtl->stack_realign_needed)) + { + /* The push %ebp and movl.s %esp, %ebp already set up + the frame pointer. No need to do this again. */ + gen_frame_pointer = 0; + RTX_FRAME_RELATED_P (push) = 1; + RTX_FRAME_RELATED_P (mov) = 1; + if (ix86_cfa_state->reg == stack_pointer_rtx) + ix86_cfa_state->reg = hard_frame_pointer_rtx; + } + else + /* If the frame pointer is not needed, pop %ebp again. This + could be optimized for cases where ebp needs to be backed up + for some other reason. If stack realignment is needed, pop + the base pointer again, align the stack, and later regenerate + the frame pointer setup. The frame pointer generated by the + hook prologue is not aligned, so it can't be used. */ + insn = emit_insn ((*ix86_gen_pop1) (hard_frame_pointer_rtx)); + } + /* The first insn of a function that accepts its static chain on the stack is to push the register that would be filled in by a direct call. This insn will be skipped by the trampoline. */ @@ -8378,7 +8438,7 @@ ix86_expand_prologue (void) /* Note: AT&T enter does NOT have reversed args. Enter is probably slower on all targets. Also sdb doesn't like it. */ - if (frame_pointer_needed) + if (gen_frame_pointer) { insn = emit_insn (gen_push (hard_frame_pointer_rtx)); RTX_FRAME_RELATED_P (insn) = 1; @@ -8962,7 +9022,8 @@ ix86_expand_epilogue (int style) 0, red_offset, style == 2); pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, - GEN_INT (frame.nsseregs * 16 + frame.padding0), + GEN_INT (frame.nsseregs * 16 + + frame.padding0), style, false); } else if (frame.to_allocate || frame.padding0 || frame.nsseregs) @@ -26470,6 +26531,33 @@ ix86_handle_struct_attribute (tree *node, tree name, return NULL_TREE; } +static tree +ix86_handle_fndecl_attribute (tree *node, tree name, + tree args ATTRIBUTE_UNUSED, + int flags ATTRIBUTE_UNUSED, bool *no_add_attrs) +{ + if (TREE_CODE (*node) != FUNCTION_DECL) + { + warning (OPT_Wattributes, "%qE attribute only applies to functions", + name); + *no_add_attrs = true; + return NULL_TREE; + } + + if (TARGET_64BIT) + { + warning (OPT_Wattributes, "%qE attribute only available for 32-bit", + name); + return NULL_TREE; + } + +#ifndef HAVE_AS_IX86_SWAP + sorry ("ms_hook_prologue attribute needs assembler swap suffix support"); +#endif + + return NULL_TREE; +} + static bool ix86_ms_bitfield_layout_p (const_tree record_type) { @@ -29512,6 +29600,7 @@ static const struct attribute_spec ix86_attribute_table[] = /* ms_abi and sysv_abi calling convention function attributes. */ { "ms_abi", 0, 0, false, true, true, ix86_handle_abi_attribute }, { "sysv_abi", 0, 0, false, true, true, ix86_handle_abi_attribute }, + { "ms_hook_prologue", 0, 0, true, false, false, ix86_handle_fndecl_attribute }, /* End element. */ { NULL, 0, 0, false, false, false, NULL } }; diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 8d525727eec..33a50771471 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -873,6 +873,9 @@ enum target_cpu_default || ((MODE) == DFmode && (!TARGET_SSE2 || !TARGET_SSE_MATH)) \ || (MODE) == XFmode) +/* Cover class containing the stack registers. */ +#define STACK_REG_COVER_CLASS FLOAT_REGS + /* Number of actual hardware registers. The hardware registers are assigned numbers for the compiler from 0 to just below FIRST_PSEUDO_REGISTER. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 22ea39cf79b..408787b8ab4 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -241,6 +241,7 @@ (UNSPECV_RDTSC 18) (UNSPECV_RDTSCP 19) (UNSPECV_RDPMC 20) + (UNSPECV_VSWAPMOV 21) ]) ;; Constants to represent pcomtrue/pcomfalse variants @@ -13822,20 +13823,6 @@ operands[2] = gen_lowpart (QImode, operands[0]); }) -(define_insn_and_split "*setcc_<mode>_2" - [(set (match_operand:SWI48 0 "register_operand" "=q") - (match_operator:SWI48 1 "ix86_comparison_operator" - [(reg FLAGS_REG) (const_int 0)]))] - "TARGET_PARTIAL_REG_STALL" - "#" - "&& reload_completed" - [(set (match_dup 0) (const_int 0)) - (set (strict_low_part (match_dup 2)) (match_dup 1))] -{ - PUT_MODE (operands[1], QImode); - operands[2] = gen_lowpart (QImode, operands[0]); -}) - (define_insn "*setcc_qi" [(set (match_operand:QI 0 "nonimmediate_operand" "=qm") (match_operator:QI 1 "ix86_comparison_operator" @@ -14893,6 +14880,16 @@ (set_attr "length_immediate" "0") (set_attr "modrm" "0")]) +(define_insn "vswapmov" + [(set (match_operand:SI 0 "register_operand" "=r") + (match_operand:SI 1 "register_operand" "r")) + (unspec_volatile [(const_int 0)] UNSPECV_VSWAPMOV)] + "" + "movl.s\t{%1, %0|%0, %1}" + [(set_attr "length" "2") + (set_attr "length_immediate" "0") + (set_attr "modrm" "0")]) + ;; Pad to 16-byte boundary, max skip in op0. Used to avoid ;; branch prediction penalty for the third jump in a 16-byte ;; block on K8. diff --git a/gcc/config/i386/linux.h b/gcc/config/i386/linux.h index 9b51496a864..5e2e0136fcb 100644 --- a/gcc/config/i386/linux.h +++ b/gcc/config/i386/linux.h @@ -104,7 +104,7 @@ along with GCC; see the file COPYING3. If not see #undef ASM_SPEC #define ASM_SPEC \ - "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \ + "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} --32 \ %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}" #undef SUBTARGET_EXTRA_SPECS diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 75c8f0ee6c4..23fc7540ec0 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -5496,6 +5496,14 @@ ia64_override_options (void) if (TARGET_AUTO_PIC) target_flags |= MASK_CONST_GP; + /* Numerous experiment shows that IRA based loop pressure + calculation works better for RTL loop invariant motion on targets + with enough (>= 32) registers. It is an expensive optimization. + So it is on only for peak performance. */ + if (optimize >= 3) + flag_ira_loop_pressure = 1; + + ia64_flag_schedule_insns2 = flag_schedule_insns_after_reload; flag_schedule_insns_after_reload = 0; diff --git a/gcc/config/m32c/m32c-protos.h b/gcc/config/m32c/m32c-protos.h index e571fe9d25e..42b92feb506 100644 --- a/gcc/config/m32c/m32c-protos.h +++ b/gcc/config/m32c/m32c-protos.h @@ -49,7 +49,6 @@ int m32c_trampoline_size (void); #if defined(RTX_CODE) && defined(TREE_CODE) rtx m32c_function_arg (CUMULATIVE_ARGS *, MM, tree, int); -rtx m32c_function_value (const_tree, const_tree); #endif @@ -75,7 +74,7 @@ bool m32c_immd_dbl_mov (rtx *, MM); rtx m32c_incoming_return_addr_rtx (void); int m32c_legitimate_constant_p (rtx); int m32c_legitimize_reload_address (rtx *, MM, int, int, int); -rtx m32c_libcall_value (MM); +bool m32c_function_value_regno_p (const unsigned int); int m32c_limit_reload_class (MM, int); int m32c_memory_move_cost (MM, int, int); int m32c_modes_tieable_p (MM, MM); diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index 4eeedb183e7..1085aa7c25a 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -81,6 +81,9 @@ static bool m32c_strict_argument_naming (CUMULATIVE_ARGS *); static rtx m32c_struct_value_rtx (tree, int); static rtx m32c_subreg (enum machine_mode, rtx, enum machine_mode, int); static int need_to_save (int); +static rtx m32c_function_value (const_tree, const_tree, bool); +static rtx m32c_libcall_value (enum machine_mode, const_rtx); + int current_function_special_page_vector (rtx); #define SYMBOL_FLAG_FUNCVEC_FUNCTION (SYMBOL_FLAG_MACH_DEP << 0) @@ -1591,15 +1594,19 @@ m32c_valid_pointer_mode (enum machine_mode mode) /* How Scalar Function Values Are Returned */ -/* Implements LIBCALL_VALUE. Most values are returned in $r0, or some +/* Implements TARGET_LIBCALL_VALUE. Most values are returned in $r0, or some combination of registers starting there (r2r0 for longs, r3r1r2r0 for long long, r3r2r1r0 for doubles), except that that ABI currently doesn't work because it ends up using all available general registers and gcc often can't compile it. So, instead, we return anything bigger than 16 bits in "mem0" (effectively, a memory location). */ -rtx -m32c_libcall_value (enum machine_mode mode) + +#undef TARGET_LIBCALL_VALUE +#define TARGET_LIBCALL_VALUE m32c_libcall_value + +static rtx +m32c_libcall_value (enum machine_mode mode, const_rtx fun ATTRIBUTE_UNUSED) { /* return reg or parallel */ #if 0 @@ -1649,14 +1656,28 @@ m32c_libcall_value (enum machine_mode mode) return gen_rtx_REG (mode, R0_REGNO); } -/* Implements FUNCTION_VALUE. Functions and libcalls have the same +/* Implements TARGET_FUNCTION_VALUE. Functions and libcalls have the same conventions. */ -rtx -m32c_function_value (const_tree valtype, const_tree func ATTRIBUTE_UNUSED) + +#undef TARGET_FUNCTION_VALUE +#define TARGET_FUNCTION_VALUE m32c_function_value + +static rtx +m32c_function_value (const_tree valtype, + const_tree fn_decl_or_type ATTRIBUTE_UNUSED, + bool outgoing ATTRIBUTE_UNUSED) { /* return reg or parallel */ const enum machine_mode mode = TYPE_MODE (valtype); - return m32c_libcall_value (mode); + return m32c_libcall_value (mode, NULL_RTX); +} + +/* Implements FUNCTION_VALUE_REGNO_P. */ + +bool +m32c_function_value_regno_p (const unsigned int regno) +{ + return (regno == R0_REGNO || regno == MEM0_REGNO); } /* How Large Values Are Returned */ diff --git a/gcc/config/m32c/m32c.h b/gcc/config/m32c/m32c.h index 0f12158c0e4..c0914d3be02 100644 --- a/gcc/config/m32c/m32c.h +++ b/gcc/config/m32c/m32c.h @@ -533,10 +533,7 @@ typedef struct m32c_cumulative_args /* How Scalar Function Values Are Returned */ -#define FUNCTION_VALUE(VT,F) m32c_function_value (VT, F) -#define LIBCALL_VALUE(MODE) m32c_libcall_value (MODE) - -#define FUNCTION_VALUE_REGNO_P(r) ((r) == R0_REGNO || (r) == MEM0_REGNO) +#define FUNCTION_VALUE_REGNO_P(r) m32c_function_value_regno_p (r) /* How Large Values Are Returned */ diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index e44eb49b943..4b4353c95ac 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -3387,10 +3387,11 @@ mips_immediate_operand_p (int code, HOST_WIDE_INT x) /* Return the cost of binary operation X, given that the instruction sequence for a word-sized or smaller operation has cost SINGLE_COST - and that the sequence of a double-word operation has cost DOUBLE_COST. */ + and that the sequence of a double-word operation has cost DOUBLE_COST. + If SPEED is true, optimize for speed otherwise optimize for size. */ static int -mips_binary_cost (rtx x, int single_cost, int double_cost) +mips_binary_cost (rtx x, int single_cost, int double_cost, bool speed) { int cost; @@ -3399,8 +3400,8 @@ mips_binary_cost (rtx x, int single_cost, int double_cost) else cost = single_cost; return (cost - + rtx_cost (XEXP (x, 0), SET, !optimize_size) - + rtx_cost (XEXP (x, 1), GET_CODE (x), !optimize_size)); + + rtx_cost (XEXP (x, 0), SET, speed) + + rtx_cost (XEXP (x, 1), GET_CODE (x), speed)); } /* Return the cost of floating-point multiplications of mode MODE. */ @@ -3470,8 +3471,7 @@ mips_zero_extend_cost (enum machine_mode mode, rtx op) /* Implement TARGET_RTX_COSTS. */ static bool -mips_rtx_costs (rtx x, int code, int outer_code, int *total, - bool speed) +mips_rtx_costs (rtx x, int code, int outer_code, int *total, bool speed) { enum machine_mode mode = GET_MODE (x); bool float_mode_p = FLOAT_MODE_P (mode); @@ -3527,8 +3527,7 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total, operand needs to be forced into a register, we will often be able to hoist the constant load out of the loop, so the load should not contribute to the cost. */ - if (!optimize_size - || mips_immediate_operand_p (outer_code, INTVAL (x))) + if (speed || mips_immediate_operand_p (outer_code, INTVAL (x))) { *total = 0; return true; @@ -3626,7 +3625,8 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total, case IOR: case XOR: /* Double-word operations use two single-word operations. */ - *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (2)); + *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (2), + speed); return true; case ASHIFT: @@ -3635,9 +3635,11 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total, case ROTATE: case ROTATERT: if (CONSTANT_P (XEXP (x, 1))) - *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (4)); + *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (4), + speed); else - *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (12)); + *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (12), + speed); return true; case ABS: @@ -3673,7 +3675,8 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total, *total = mips_cost->fp_add; return false; } - *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (4)); + *total = mips_binary_cost (x, COSTS_N_INSNS (1), COSTS_N_INSNS (4), + speed); return true; case MINUS: @@ -3724,7 +3727,8 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total, an SLTU. The MIPS16 version then needs to move the result of the SLTU from $24 to a MIPS16 register. */ *total = mips_binary_cost (x, COSTS_N_INSNS (1), - COSTS_N_INSNS (TARGET_MIPS16 ? 5 : 4)); + COSTS_N_INSNS (TARGET_MIPS16 ? 5 : 4), + speed); return true; case NEG: @@ -3760,10 +3764,10 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total, else if (mode == DImode && !TARGET_64BIT) /* Synthesized from 2 mulsi3s, 1 mulsidi3 and two additions, where the mulsidi3 always includes an MFHI and an MFLO. */ - *total = (optimize_size - ? COSTS_N_INSNS (ISA_HAS_MUL3 ? 7 : 9) - : mips_cost->int_mult_si * 3 + 6); - else if (optimize_size) + *total = (speed + ? mips_cost->int_mult_si * 3 + 6 + : COSTS_N_INSNS (ISA_HAS_MUL3 ? 7 : 9)); + else if (!speed) *total = (ISA_HAS_MUL3 ? 1 : 2); else if (mode == DImode) *total = mips_cost->int_mult_di; @@ -3800,7 +3804,7 @@ mips_rtx_costs (rtx x, int code, int outer_code, int *total, case UDIV: case UMOD: - if (optimize_size) + if (!speed) { /* It is our responsibility to make division by a power of 2 as cheap as 2 register additions if we want the division diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 20f64449097..d10a40d55e1 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -7120,17 +7120,6 @@ operands[0] = index; } - /* In 64bit mode we must make sure to wipe the upper bits of the register - just in case the addition overflowed or we had random bits in the - high part of the register. */ - if (TARGET_64BIT) - { - rtx index = gen_reg_rtx (DImode); - - emit_insn (gen_extendsidi2 (index, operands[0])); - operands[0] = gen_rtx_SUBREG (SImode, index, 4); - } - if (!INT_5_BITS (operands[2])) operands[2] = force_reg (SImode, operands[2]); @@ -7149,6 +7138,17 @@ emit_jump_insn (gen_cbranchsi4 (test, operands[0], operands[2], operands[4])); } + /* In 64bit mode we must make sure to wipe the upper bits of the register + just in case the addition overflowed or we had random bits in the + high part of the register. */ + if (TARGET_64BIT) + { + rtx index = gen_reg_rtx (DImode); + + emit_insn (gen_extendsidi2 (index, operands[0])); + operands[0] = index; + } + if (TARGET_BIG_SWITCH) { if (TARGET_64BIT) @@ -7209,8 +7209,7 @@ ;;; 64-bit code, 32-bit relative branch table. (define_insn "casesi64p" [(set (pc) (mem:DI (plus:DI - (mult:DI (sign_extend:DI - (match_operand:SI 0 "register_operand" "r")) + (mult:DI (match_operand:DI 0 "register_operand" "r") (const_int 8)) (label_ref (match_operand 1 "" ""))))) (clobber (match_scratch:DI 2 "=&r")) diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md index 53b1054d200..6fbb7cdcdac 100644 --- a/gcc/config/rs6000/altivec.md +++ b/gcc/config/rs6000/altivec.md @@ -1,5 +1,5 @@ ;; AltiVec patterns. -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 +;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 ;; Free Software Foundation, Inc. ;; Contributed by Aldy Hernandez (aldy@quesejoda.com) diff --git a/gcc/config/rs6000/option-defaults.h b/gcc/config/rs6000/option-defaults.h index 682add7605d..7e117d731da 100644 --- a/gcc/config/rs6000/option-defaults.h +++ b/gcc/config/rs6000/option-defaults.h @@ -50,15 +50,15 @@ /* Support for a compile-time default CPU, et cetera. The rules are: --with-cpu is ignored if -mcpu is specified; likewise --with-cpu-32 and --with-cpu-64. - --with-tune is ignored if -mtune is specified; likewise --with-tune-32 - and --with-tune-64. + --with-tune is ignored if -mtune or -mcpu is specified; likewise + --with-tune-32 and --with-tune-64. --with-float is ignored if -mhard-float or -msoft-float are - specified. */ + specified. */ #define OPTION_DEFAULT_SPECS \ + {"tune", "%{!mtune=*:%{!mcpu=*:-mtune=%(VALUE)}}" }, \ + {"tune_32", "%{" OPT_ARCH32 ":%{!mtune=*:%{!mcpu=*:-mtune=%(VALUE)}}}" }, \ + {"tune_64", "%{" OPT_ARCH64 ":%{!mtune=*:%{!mcpu=*:-mtune=%(VALUE)}}}" }, \ {"cpu", "%{!mcpu=*:-mcpu=%(VALUE)}" }, \ {"cpu_32", "%{" OPT_ARCH32 ":%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ {"cpu_64", "%{" OPT_ARCH64 ":%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ - {"tune", "%{!mtune=*:-mtune=%(VALUE)}" }, \ - {"tune_32", "%{" OPT_ARCH32 ":%{!mtune=*:-mtune=%(VALUE)}}" }, \ - {"tune_64", "%{" OPT_ARCH64 ":%{!mtune=*:-mtune=%(VALUE)}}" }, \ {"float", "%{!msoft-float:%{!mhard-float:-m%(VALUE)-float}}" } diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index d03cce6f8a2..2d8a2a8d5d1 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -1,5 +1,5 @@ ;; Predicate definitions for POWER and PowerPC. -;; Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +;; Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. ;; ;; This file is part of GCC. ;; diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def new file mode 100644 index 00000000000..f5ad34882d4 --- /dev/null +++ b/gcc/config/rs6000/rs6000-builtin.def @@ -0,0 +1,990 @@ +/* Builtin functions for rs6000/powerpc. + Copyright (C) 2009 + Free Software Foundation, Inc. + Contributed by Michael Meissner (meissner@linux.vnet.ibm.com) + + This file is part of GCC. + + GCC 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. + + GCC 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. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + <http://www.gnu.org/licenses/>. */ + +/* Before including this file, two macros must be defined: + RS6000_BUILTIN -- 2 arguments, the enum name, and classification + RS6000_BUILTIN_EQUATE -- 2 arguments, enum name and value */ + +/* AltiVec builtins. */ +RS6000_BUILTIN(ALTIVEC_BUILTIN_ST_INTERNAL_4si, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_4si, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ST_INTERNAL_8hi, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_8hi, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ST_INTERNAL_16qi, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_16qi, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ST_INTERNAL_4sf, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LD_INTERNAL_4sf, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUBM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUHM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUWM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDCUW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUBS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDSBS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDSHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDUWS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VADDSWS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VAND, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VANDC, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VAVGUB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VAVGSB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VAVGUH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VAVGSH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VAVGUW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VAVGSW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCFUX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCFSX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCTSXS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCTUXS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPBFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQUB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQUH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQUW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGEFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTUB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTSB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTUH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTSH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTUW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTSW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEXPTEFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VLOGEFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMADDFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMAXUB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMAXSB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMAXUH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMAXSH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMAXUW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMAXSW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMAXFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMHADDSHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMHRADDSHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMLADDUHM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMRGHB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMRGHH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMRGHW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMRGLB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMRGLH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMRGLW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMSUMUBM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMSUMMBM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMSUMUHM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMSUMSHM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMSUMUHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMSUMSHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMINUB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMINSB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMINUH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMINSH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMINUW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMINSW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMINFP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULEUB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULEUB_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULESB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULEUH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULEUH_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULESH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULOUB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULOUB_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULOSB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULOUH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULOUH_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VMULOSH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VNMSUBFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VNOR, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VOR, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_2DI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_4SI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_8HI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSEL_16QI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_2DI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_4SI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_8HI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPERM_16QI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKUHUM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKUWUM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKPX, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKUHSS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKSHSS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKUWSS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKSWSS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKUHUS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKSHUS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKUWUS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VPKSWUS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VREFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRFIM, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRFIN, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRFIP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRFIZ, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRLB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRLH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRLW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VRSQRTEFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSL, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLO, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSPLTB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSPLTH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSPLTW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSPLTISB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSPLTISH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSPLTISW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSRB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSRH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSRW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSRAB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSRAH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSRAW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSR, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSRO, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBUBM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBUHM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBUWM, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBFP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBCUW, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBUBS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBSBS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBUHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBSHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBUWS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUBSWS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUM4UBS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUM4SBS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUM4SHS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUM2SWS, RS6000_BTC_SAT) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSUMSWS, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VXOR, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLDOI_16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLDOI_8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLDOI_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VSLDOI_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VUPKHSB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VUPKHPX, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VUPKHSH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VUPKLSB, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VUPKLPX, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VUPKLSH, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_MTVSCR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_MFVSCR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_DSSALL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_DSS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVSL, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVSR, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_DSTT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_DSTST, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_DSTSTT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_DST, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVEBX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVEHX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVEWX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVXL, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVLX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVLXL, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVRX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_LVRXL, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVEBX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVEHX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVEWX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVXL, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVLX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVLXL, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVRX, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_STVRXL, RS6000_BTC_MEM) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPBFP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQFP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQUB_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQUH_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQUW_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGEFP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTFP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTSB_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTSH_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTSW_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTUB_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTUH_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGTUW_P, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ABSS_V4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ABSS_V8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ABSS_V16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ABS_V4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ABS_V4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ABS_V8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_ABS_V16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_MASK_FOR_LOAD, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_MASK_FOR_STORE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_INIT_V4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_INIT_V8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_INIT_V16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_INIT_V4SF, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SET_V4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SET_V8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SET_V16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SET_V4SF, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_EXT_V4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_EXT_V8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_EXT_V16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_EXT_V4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(ALTIVEC_BUILTIN_COPYSIGN_V4SF, RS6000_BTC_CONST) + +/* Altivec overloaded builtins. */ +/* For now, don't set the classification for overloaded functions. + The function should be converted to the type specific instruction + before we get to the point about classifying the builtin type. */ +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPEQ_P, RS6000_BTC_MISC) +RS6000_BUILTIN_EQUATE(ALTIVEC_BUILTIN_OVERLOADED_FIRST, + ALTIVEC_BUILTIN_VCMPEQ_P) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGT_P, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VCMPGE_P, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ABS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ABSS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ADD, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ADDC, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ADDS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_AND, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ANDC, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_AVG, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_EXTRACT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CEIL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPEQ, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPEQUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPEQUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPEQUW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPGE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPGT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPLE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CMPLT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_COPYSIGN, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CTF, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CTS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_CTU, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_DST, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_DSTST, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_DSTSTT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_DSTT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_EXPTE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_FLOOR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LD, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LDE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LDL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LOGE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVEBX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVEHX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVEWX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVLX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVLXL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVRX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVRXL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVSL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_LVSR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MADD, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MADDS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MAX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MERGEH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MERGEL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MIN, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MLADD, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MPERM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MRADDS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MRGHB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MRGHH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MRGHW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MRGLB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MRGLH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MRGLW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MSUM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MSUMS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MTVSCR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MULE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_MULO, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_NEARBYINT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_NMSUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_NOR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_OR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_PACK, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_PACKPX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_PACKS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_PACKSU, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_PERM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_RE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_RL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_RINT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ROUND, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_RSQRTE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SEL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SLD, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SLL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SLO, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLAT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLAT_S16, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLAT_S32, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLAT_S8, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLAT_U16, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLAT_U32, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLAT_U8, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLTB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLTH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLTW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SQRT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SRA, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SRL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SRO, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_ST, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STVEBX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STVEHX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STVEWX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STVLX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STVLXL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STVRX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STVRXL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SUBC, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SUBS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SUM2S, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SUM4S, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SUMS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_TRUNC, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_UNPACKH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_UNPACKL, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDFP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDSBS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDSHS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDSWS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDUBM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDUBS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDUHM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDUHS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDUWM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VADDUWS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VAVGSB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VAVGSH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VAVGSW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VAVGUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VAVGUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VAVGUW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCFSX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCFUX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPEQFP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPEQUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPEQUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPEQUW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPGTFP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPGTSB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPGTSH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPGTSW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPGTUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPGTUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VCMPGTUW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMAXFP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMAXSB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMAXSH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMAXSW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMAXUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMAXUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMAXUW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMINFP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMINSB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMINSH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMINSW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMINUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMINUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMINUW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMRGHB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMRGHH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMRGHW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMRGLB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMRGLH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMRGLW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMSUMMBM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMSUMSHM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMSUMSHS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMSUMUBM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMSUMUHM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMSUMUHS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULESB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULESH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULEUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULEUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULOSB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULOSH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULOUB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VMULOUH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKSHSS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKSHUS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKSWSS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKSWUS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKUHUM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKUHUS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKUWUM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VPKUWUS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VRLB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VRLH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VRLW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSLB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSLH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSLW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSPLTB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSPLTH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSPLTW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSRAB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSRAH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSRAW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSRB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSRH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSRW, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBFP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBSBS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBSHS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBSWS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBUBM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBUBS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBUHM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBUHS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBUWM, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUBUWS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUM4SBS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUM4SHS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VSUM4UBS, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VUPKHPX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VUPKHSB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VUPKHSH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VUPKLPX, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VUPKLSB, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_VUPKLSH, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_XOR, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_STEP, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_PROMOTE, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_INSERT, RS6000_BTC_MISC) +RS6000_BUILTIN(ALTIVEC_BUILTIN_VEC_SPLATS, RS6000_BTC_MISC) +RS6000_BUILTIN_EQUATE(ALTIVEC_BUILTIN_OVERLOADED_LAST, + ALTIVEC_BUILTIN_VEC_SPLATS) + +/* SPE builtins. */ +RS6000_BUILTIN(SPE_BUILTIN_EVADDW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVAND, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVANDC, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVDIVWS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVDIVWU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVEQV, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSADD, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSDIV, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSMUL, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSSUB, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLDDX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLDHX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLDWX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLHHESPLATX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLHHOSSPLATX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLHHOUSPLATX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHEX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHOSX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHOUX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHSPLATX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWWSPLATX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMERGEHI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMERGEHILO, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMERGELO, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMERGELOHI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEGSMFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEGSMFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEGSMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEGSMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEGUMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEGUMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMFAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMFANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESMIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESSF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESSFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESSFAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESSFANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHESSIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEUMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEUMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEUMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEUMIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEUSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHEUSIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOGSMFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOGSMFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOGSMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOGSMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOGUMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOGUMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMFAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMFANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSMIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSSF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSSFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSSFAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSSFANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOSSIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOUMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOUMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOUMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOUMIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOUSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMHOUSIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSSF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSSFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHUMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHUMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLSMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLSMIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLSSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLSSIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLUMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLUMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLUMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLUMIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLUSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWLUSIANW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSSFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSSF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSSFA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSSFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWSSFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWUMI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWUMIA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWUMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWUMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVNAND, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVNOR, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVOR, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVORC, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVRLW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSLW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSRWS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSRWU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTDDX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTDHX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTDWX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWHEX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWHOX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWWEX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWWOX, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSUBFW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVXOR, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVABS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVADDSMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVADDSSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVADDUMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVADDUSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVCNTLSW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVCNTLZW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVEXTSB, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVEXTSH, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSABS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCFSF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCFSI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCFUF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCFUI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCTSF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCTSI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCTSIZ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCTUF, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCTUI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCTUIZ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSNABS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSNEG, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMRA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVNEG, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVRNDW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSUBFSMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSUBFSSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSUBFUMIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSUBFUSIAAW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVADDIW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLDD, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLDH, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLDW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLHHESPLAT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLHHOSSPLAT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLHHOUSPLAT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHE, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHOS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHOU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWHSPLAT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVLWWSPLAT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVRLWI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSLWI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSRWIS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSRWIU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTDD, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTDH, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTDW, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWHE, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWHO, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWWE, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSTWWO, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSUBIFW, RS6000_BTC_MISC) + + /* Compares. */ +RS6000_BUILTIN(SPE_BUILTIN_EVCMPEQ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVCMPGTS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVCMPGTU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVCMPLTS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVCMPLTU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCMPEQ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCMPGT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSCMPLT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSTSTEQ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSTSTGT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVFSTSTLT, RS6000_BTC_MISC) + +/* EVSEL compares. */ +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_CMPEQ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_CMPGTS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_CMPGTU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_CMPLTS, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_CMPLTU, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_FSCMPEQ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_FSCMPGT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_FSCMPLT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_FSTSTEQ, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_FSTSTGT, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSEL_FSTSTLT, RS6000_BTC_MISC) + +RS6000_BUILTIN(SPE_BUILTIN_EVSPLATFI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVSPLATI, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSSMAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHUSIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHUMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSSFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSSIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHSMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHUSIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHUMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGSSFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGSMFAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGSMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGUMIAA, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGSSFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGSMFAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGSMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_EVMWHGUMIAN, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_MTSPEFSCR, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_MFSPEFSCR, RS6000_BTC_MISC) +RS6000_BUILTIN(SPE_BUILTIN_BRINC, RS6000_BTC_MISC) + +/* PAIRED builtins. */ +RS6000_BUILTIN(PAIRED_BUILTIN_DIVV2SF3, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_ABSV2SF2, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_NEGV2SF2, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_SQRTV2SF2, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_ADDV2SF3, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_SUBV2SF3, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_RESV2SF2, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MULV2SF3, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MSUB, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MADD, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_NMSUB, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_NMADD, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_NABSV2SF2, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_SUM0, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_SUM1, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MULS0, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MULS1, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MERGE00, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MERGE01, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MERGE10, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MERGE11, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MADDS0, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_MADDS1, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_STX, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_LX, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_SELV2SF4, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_CMPU0, RS6000_BTC_MISC) +RS6000_BUILTIN(PAIRED_BUILTIN_CMPU1, RS6000_BTC_MISC) + + /* VSX builtins. */ +RS6000_BUILTIN(VSX_BUILTIN_LXSDX, RS6000_BTC_MEM) +RS6000_BUILTIN(VSX_BUILTIN_LXVD2X, RS6000_BTC_MEM) +RS6000_BUILTIN(VSX_BUILTIN_LXVDSX, RS6000_BTC_MEM) +RS6000_BUILTIN(VSX_BUILTIN_LXVW4X, RS6000_BTC_MEM) +RS6000_BUILTIN(VSX_BUILTIN_STXSDX, RS6000_BTC_MEM) +RS6000_BUILTIN(VSX_BUILTIN_STXVD2X, RS6000_BTC_MEM) +RS6000_BUILTIN(VSX_BUILTIN_STXVW4X, RS6000_BTC_MEM) +RS6000_BUILTIN(VSX_BUILTIN_XSABSDP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XSADDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCMPODP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCMPUDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCPSGNDP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XSCVDPSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCVDPSXDS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCVDPSXWS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCVDPUXDS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCVDPUXWS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCVSPDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCVSXDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSCVUXDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSDIVDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMADDADP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMADDMDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMAXDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMINDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMOVDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMSUBADP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMSUBMDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSMULDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSNABSDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSNEGDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSNMADDADP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSNMADDMDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSNMSUBADP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSNMSUBMDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSRDPI, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSRDPIC, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSRDPIM, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSRDPIP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSRDPIZ, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSREDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSRSQRTEDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSSQRTDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSSUBDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_CPSGNDP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_CPSGNSP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XSTDIVDP_FE, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSTDIVDP_FG, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSTSQRTDP_FE, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XSTSQRTDP_FG, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVABSDP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XVABSSP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XVADDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVADDSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPEQDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPEQSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGEDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGESP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGTDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGTSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPEQDP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPEQSP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGEDP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGESP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGTDP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCMPGTSP_P, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCPSGNDP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XVCPSGNSP, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XVCVDPSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVDPSXDS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVDPSXWS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVDPUXDS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVDPUXDS_UNS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVDPUXWS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSPDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSPSXDS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSPSXWS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSPUXDS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSPUXWS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSXDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSXDSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSXWDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVSXWSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVUXDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVUXDDP_UNS, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVUXDSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVUXWDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVCVUXWSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVDIVDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVDIVSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMADDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMADDSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMAXDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMAXSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMINDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMINSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMSUBDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMSUBSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMULDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVMULSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNABSDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNABSSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNEGDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNEGSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNMADDDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNMADDSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNMSUBDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVNMSUBSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRDPI, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRDPIC, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRDPIM, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRDPIP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRDPIZ, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVREDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRESP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRSPI, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRSPIC, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRSPIM, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRSPIP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRSPIZ, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRSQRTEDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVRSQRTESP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVSQRTDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVSQRTSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVSUBDP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVSUBSP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTDIVDP_FE, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTDIVDP_FG, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTDIVSP_FE, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTDIVSP_FG, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTSQRTDP_FE, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTSQRTDP_FG, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTSQRTSP_FE, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XVTSQRTSP_FG, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_2DI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_4SI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_8HI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSEL_16QI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_2DI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_4SI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_8HI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VPERM_16QI_UNS, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXPERMDI_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXPERMDI_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXPERMDI_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXPERMDI_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXPERMDI_8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXPERMDI_16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_CONCAT_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_CONCAT_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_SET_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_SET_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_SPLAT_2DF, RS6000_BTC_PURE) +RS6000_BUILTIN(VSX_BUILTIN_SPLAT_2DI, RS6000_BTC_PURE) +RS6000_BUILTIN(VSX_BUILTIN_XXMRGHW_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXMRGHW_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXMRGLW_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXMRGLW_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSLDWI_16QI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSLDWI_8HI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSLDWI_4SI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSLDWI_4SF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSLDWI_2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_XXSLDWI_2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VEC_INIT_V2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VEC_INIT_V2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VEC_SET_V2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VEC_SET_V2DI, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VEC_EXT_V2DF, RS6000_BTC_CONST) +RS6000_BUILTIN(VSX_BUILTIN_VEC_EXT_V2DI, RS6000_BTC_CONST) + +/* VSX overloaded builtins, add the overloaded functions not present in + Altivec. */ +RS6000_BUILTIN(VSX_BUILTIN_VEC_MUL, RS6000_BTC_MISC) +RS6000_BUILTIN_EQUATE(VSX_BUILTIN_OVERLOADED_FIRST, + VSX_BUILTIN_VEC_MUL) +RS6000_BUILTIN(VSX_BUILTIN_VEC_MSUB, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_NMADD, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUITLIN_VEC_NMSUB, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_DIV, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_XXMRGHW, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_XXMRGLW, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_XXPERMDI, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_XXSLDWI, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_XXSPLTD, RS6000_BTC_MISC) +RS6000_BUILTIN(VSX_BUILTIN_VEC_XXSPLTW, RS6000_BTC_MISC) +RS6000_BUILTIN_EQUATE(VSX_BUILTIN_OVERLOADED_LAST, + VSX_BUILTIN_VEC_XXSPLTW) + +/* Combined VSX/Altivec builtins. */ +RS6000_BUILTIN(VECTOR_BUILTIN_FLOAT_V4SI_V4SF, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VECTOR_BUILTIN_UNSFLOAT_V4SI_V4SF, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VECTOR_BUILTIN_FIX_V4SF_V4SI, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(VECTOR_BUILTIN_FIXUNS_V4SF_V4SI, RS6000_BTC_FP_PURE) + +/* Power7 builtins, that aren't VSX instructions. */ +RS6000_BUILTIN(POWER7_BUILTIN_BPERMD, RS6000_BTC_CONST) + +/* Miscellaneous builtins. */ +RS6000_BUILTIN(RS6000_BUILTIN_RECIP, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(RS6000_BUILTIN_RECIPF, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(RS6000_BUILTIN_RSQRTF, RS6000_BTC_FP_PURE) +RS6000_BUILTIN(RS6000_BUILTIN_BSWAP_HI, RS6000_BTC_CONST) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index dea4a5334b0..88649ea0735 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -130,6 +130,8 @@ typedef struct GTY(()) machine_function 64-bits wide and is allocated early enough so that the offset does not overflow the 16-bit load/store offset field. */ rtx sdmode_stack_slot; + /* True if any VSX or ALTIVEC vector type was used. */ + bool vsx_or_altivec_used_p; } machine_function; /* Target cpu type */ @@ -836,6 +838,21 @@ struct processor_costs ppca2_cost = { }; +/* Table that classifies rs6000 builtin functions (pure, const, etc.). */ +#undef RS6000_BUILTIN +#undef RS6000_BUILTIN_EQUATE +#define RS6000_BUILTIN(NAME, TYPE) TYPE, +#define RS6000_BUILTIN_EQUATE(NAME, VALUE) + +static const enum rs6000_btc builtin_classify[(int)RS6000_BUILTIN_COUNT] = +{ +#include "rs6000-builtin.def" +}; + +#undef RS6000_BUILTIN +#undef RS6000_BUILTIN_EQUATE + + static bool rs6000_function_ok_for_sibcall (tree, tree); static const char *rs6000_invalid_within_doloop (const_rtx); static bool rs6000_legitimate_address_p (enum machine_mode, rtx, bool); @@ -898,7 +915,7 @@ static void rs6000_elf_encode_section_info (tree, rtx, int) ATTRIBUTE_UNUSED; #endif static bool rs6000_use_blocks_for_constant_p (enum machine_mode, const_rtx); -static void rs6000_alloc_sdmode_stack_slot (void); +static void rs6000_expand_to_rtl_hook (void); static void rs6000_instantiate_decls (void); #if TARGET_XCOFF static void rs6000_xcoff_asm_output_anchor (rtx); @@ -1490,7 +1507,7 @@ static const struct attribute_spec rs6000_attribute_table[] = #define TARGET_BUILTIN_RECIPROCAL rs6000_builtin_reciprocal #undef TARGET_EXPAND_TO_RTL_HOOK -#define TARGET_EXPAND_TO_RTL_HOOK rs6000_alloc_sdmode_stack_slot +#define TARGET_EXPAND_TO_RTL_HOOK rs6000_expand_to_rtl_hook #undef TARGET_INSTANTIATE_DECLS #define TARGET_INSTANTIATE_DECLS rs6000_instantiate_decls @@ -2266,6 +2283,13 @@ rs6000_override_options (const char *default_cpu) | MASK_POPCNTD | MASK_VSX | MASK_ISEL | MASK_NO_UPDATE) }; + /* Numerous experiment shows that IRA based loop pressure + calculation works better for RTL loop invariant motion on targets + with enough (>= 32) registers. It is an expensive optimization. + So it is on only for peak performance. */ + if (optimize >= 3) + flag_ira_loop_pressure = 1; + /* Set the pointer size. */ if (TARGET_64BIT) { @@ -8494,13 +8518,54 @@ def_builtin (int mask, const char *name, tree type, int code) { if ((mask & target_flags) || TARGET_PAIRED_FLOAT) { + tree t; if (rs6000_builtin_decls[code]) fatal_error ("internal error: builtin function to %s already processed.", name); - rs6000_builtin_decls[code] = + rs6000_builtin_decls[code] = t = add_builtin_function (name, type, code, BUILT_IN_MD, NULL, NULL_TREE); + + gcc_assert (code >= 0 && code < (int)RS6000_BUILTIN_COUNT); + switch (builtin_classify[code]) + { + default: + gcc_unreachable (); + + /* assume builtin can do anything. */ + case RS6000_BTC_MISC: + break; + + /* const function, function only depends on the inputs. */ + case RS6000_BTC_CONST: + TREE_READONLY (t) = 1; + TREE_NOTHROW (t) = 1; + break; + + /* pure function, function can read global memory. */ + case RS6000_BTC_PURE: + DECL_PURE_P (t) = 1; + TREE_NOTHROW (t) = 1; + break; + + /* Function is a math function. If rounding mode is on, then treat + the function as not reading global memory, but it can have + arbitrary side effects. If it is off, then assume the function is + a const function. This mimics the ATTR_MATHFN_FPROUNDING + attribute in builtin-attribute.def that is used for the math + functions. */ + case RS6000_BTC_FP_PURE: + TREE_NOTHROW (t) = 1; + if (flag_rounding_math) + { + DECL_PURE_P (t) = 1; + DECL_IS_NOVOPS (t) = 1; + } + else + TREE_READONLY (t) = 1; + break; + } } } @@ -13127,6 +13192,38 @@ rs6000_check_sdmode (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED) return NULL_TREE; } +static tree +rs6000_check_vector_mode (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED) +{ + /* Don't walk into types. */ + if (*tp == NULL_TREE || *tp == error_mark_node || TYPE_P (*tp)) + { + *walk_subtrees = 0; + return NULL_TREE; + } + + switch (TREE_CODE (*tp)) + { + case VAR_DECL: + case PARM_DECL: + case FIELD_DECL: + case RESULT_DECL: + case SSA_NAME: + case REAL_CST: + case INDIRECT_REF: + case ALIGN_INDIRECT_REF: + case MISALIGNED_INDIRECT_REF: + case VIEW_CONVERT_EXPR: + if (VECTOR_MODE_P (TYPE_MODE (TREE_TYPE (*tp)))) + return *tp; + break; + default: + break; + } + + return NULL_TREE; +} + enum reload_reg_type { GPR_REGISTER_TYPE, VECTOR_REGISTER_TYPE, @@ -13567,11 +13664,17 @@ rs6000_ira_cover_classes (void) return (TARGET_VSX) ? cover_vsx : cover_pre_vsx; } -/* Allocate a 64-bit stack slot to be used for copying SDmode - values through if this function has any SDmode references. */ +/* Scan the trees looking for certain types. + + Allocate a 64-bit stack slot to be used for copying SDmode values through if + this function has any SDmode references. + + If VSX, note whether any vector operation was done so we can set VRSAVE to + non-zero, even if we just use the floating point registers to tell the + kernel to save the vector registers. */ static void -rs6000_alloc_sdmode_stack_slot (void) +rs6000_expand_to_rtl_hook (void) { tree t; basic_block bb; @@ -13579,6 +13682,24 @@ rs6000_alloc_sdmode_stack_slot (void) gcc_assert (cfun->machine->sdmode_stack_slot == NULL_RTX); + /* Check for vectors. */ + if (TARGET_VSX) + { + FOR_EACH_BB (bb) + for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) + { + if (walk_gimple_op (gsi_stmt (gsi), rs6000_check_vector_mode, + NULL)) + { + cfun->machine->vsx_or_altivec_used_p = true; + goto found_vector; + } + } + found_vector: + ; + } + + /* Check for SDmode being used. */ FOR_EACH_BB (bb) for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { @@ -16720,6 +16841,15 @@ compute_vrsave_mask (void) if (df_regs_ever_live_p (i)) mask |= ALTIVEC_REG_BIT (i); + /* If VSX is used, we might have used a traditional floating point register + in a vector mode without using any altivec registers. However the VRSAVE + register does not have room to indicate the floating point registers. + Modern kernels only look to see if the value is non-zero to determine if + they need to save the vector registers, so we just set an arbitrary + value if any vector type was used. */ + if (mask == 0 && TARGET_VSX && cfun->machine->vsx_or_altivec_used_p) + mask = 0xFFF; + if (mask == 0) return mask; diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index c8ab4369a39..4b1ca3d635a 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1033,10 +1033,12 @@ extern unsigned rs6000_pointer_size; #define HARD_REGNO_NREGS(REGNO, MODE) rs6000_hard_regno_nregs[(MODE)][(REGNO)] -#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \ - ((TARGET_32BIT && TARGET_POWERPC64 \ - && (GET_MODE_SIZE (MODE) > 4) \ - && INT_REGNO_P (REGNO)) ? 1 : 0) +#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE) \ + (((TARGET_32BIT && TARGET_POWERPC64 \ + && (GET_MODE_SIZE (MODE) > 4) \ + && INT_REGNO_P (REGNO)) ? 1 : 0) \ + || (TARGET_VSX && FP_REGNO_P (REGNO) \ + && GET_MODE_SIZE (MODE) > 8)) #define VSX_VECTOR_MODE(MODE) \ ((MODE) == V4SFmode \ @@ -2424,964 +2426,35 @@ extern int optimize; extern int flag_expensive_optimizations; extern int frame_pointer_needed; +/* Classification of the builtin functions to properly set the declaration tree + flags. */ +enum rs6000_btc +{ + RS6000_BTC_MISC, /* assume builtin can do anything */ + RS6000_BTC_CONST, /* builtin is a 'const' function. */ + RS6000_BTC_PURE, /* builtin is a 'pure' function. */ + RS6000_BTC_FP_PURE /* builtin is 'pure' if rounding math. */ +}; + +/* Convenience macros to document the instruction type. */ +#define RS6000_BTC_MEM RS6000_BTC_MISC /* load/store touches memory */ +#define RS6000_BTC_SAT RS6000_BTC_MISC /* VMX saturate sets VSCR register */ + +#undef RS6000_BUILTIN +#undef RS6000_BUILTIN_EQUATE +#define RS6000_BUILTIN(NAME, TYPE) NAME, +#define RS6000_BUILTIN_EQUATE(NAME, VALUE) NAME = VALUE, + enum rs6000_builtins { - /* AltiVec builtins. */ - ALTIVEC_BUILTIN_ST_INTERNAL_4si, - ALTIVEC_BUILTIN_LD_INTERNAL_4si, - ALTIVEC_BUILTIN_ST_INTERNAL_8hi, - ALTIVEC_BUILTIN_LD_INTERNAL_8hi, - ALTIVEC_BUILTIN_ST_INTERNAL_16qi, - ALTIVEC_BUILTIN_LD_INTERNAL_16qi, - ALTIVEC_BUILTIN_ST_INTERNAL_4sf, - ALTIVEC_BUILTIN_LD_INTERNAL_4sf, - ALTIVEC_BUILTIN_VADDUBM, - ALTIVEC_BUILTIN_VADDUHM, - ALTIVEC_BUILTIN_VADDUWM, - ALTIVEC_BUILTIN_VADDFP, - ALTIVEC_BUILTIN_VADDCUW, - ALTIVEC_BUILTIN_VADDUBS, - ALTIVEC_BUILTIN_VADDSBS, - ALTIVEC_BUILTIN_VADDUHS, - ALTIVEC_BUILTIN_VADDSHS, - ALTIVEC_BUILTIN_VADDUWS, - ALTIVEC_BUILTIN_VADDSWS, - ALTIVEC_BUILTIN_VAND, - ALTIVEC_BUILTIN_VANDC, - ALTIVEC_BUILTIN_VAVGUB, - ALTIVEC_BUILTIN_VAVGSB, - ALTIVEC_BUILTIN_VAVGUH, - ALTIVEC_BUILTIN_VAVGSH, - ALTIVEC_BUILTIN_VAVGUW, - ALTIVEC_BUILTIN_VAVGSW, - ALTIVEC_BUILTIN_VCFUX, - ALTIVEC_BUILTIN_VCFSX, - ALTIVEC_BUILTIN_VCTSXS, - ALTIVEC_BUILTIN_VCTUXS, - ALTIVEC_BUILTIN_VCMPBFP, - ALTIVEC_BUILTIN_VCMPEQUB, - ALTIVEC_BUILTIN_VCMPEQUH, - ALTIVEC_BUILTIN_VCMPEQUW, - ALTIVEC_BUILTIN_VCMPEQFP, - ALTIVEC_BUILTIN_VCMPGEFP, - ALTIVEC_BUILTIN_VCMPGTUB, - ALTIVEC_BUILTIN_VCMPGTSB, - ALTIVEC_BUILTIN_VCMPGTUH, - ALTIVEC_BUILTIN_VCMPGTSH, - ALTIVEC_BUILTIN_VCMPGTUW, - ALTIVEC_BUILTIN_VCMPGTSW, - ALTIVEC_BUILTIN_VCMPGTFP, - ALTIVEC_BUILTIN_VEXPTEFP, - ALTIVEC_BUILTIN_VLOGEFP, - ALTIVEC_BUILTIN_VMADDFP, - ALTIVEC_BUILTIN_VMAXUB, - ALTIVEC_BUILTIN_VMAXSB, - ALTIVEC_BUILTIN_VMAXUH, - ALTIVEC_BUILTIN_VMAXSH, - ALTIVEC_BUILTIN_VMAXUW, - ALTIVEC_BUILTIN_VMAXSW, - ALTIVEC_BUILTIN_VMAXFP, - ALTIVEC_BUILTIN_VMHADDSHS, - ALTIVEC_BUILTIN_VMHRADDSHS, - ALTIVEC_BUILTIN_VMLADDUHM, - ALTIVEC_BUILTIN_VMRGHB, - ALTIVEC_BUILTIN_VMRGHH, - ALTIVEC_BUILTIN_VMRGHW, - ALTIVEC_BUILTIN_VMRGLB, - ALTIVEC_BUILTIN_VMRGLH, - ALTIVEC_BUILTIN_VMRGLW, - ALTIVEC_BUILTIN_VMSUMUBM, - ALTIVEC_BUILTIN_VMSUMMBM, - ALTIVEC_BUILTIN_VMSUMUHM, - ALTIVEC_BUILTIN_VMSUMSHM, - ALTIVEC_BUILTIN_VMSUMUHS, - ALTIVEC_BUILTIN_VMSUMSHS, - ALTIVEC_BUILTIN_VMINUB, - ALTIVEC_BUILTIN_VMINSB, - ALTIVEC_BUILTIN_VMINUH, - ALTIVEC_BUILTIN_VMINSH, - ALTIVEC_BUILTIN_VMINUW, - ALTIVEC_BUILTIN_VMINSW, - ALTIVEC_BUILTIN_VMINFP, - ALTIVEC_BUILTIN_VMULEUB, - ALTIVEC_BUILTIN_VMULEUB_UNS, - ALTIVEC_BUILTIN_VMULESB, - ALTIVEC_BUILTIN_VMULEUH, - ALTIVEC_BUILTIN_VMULEUH_UNS, - ALTIVEC_BUILTIN_VMULESH, - ALTIVEC_BUILTIN_VMULOUB, - ALTIVEC_BUILTIN_VMULOUB_UNS, - ALTIVEC_BUILTIN_VMULOSB, - ALTIVEC_BUILTIN_VMULOUH, - ALTIVEC_BUILTIN_VMULOUH_UNS, - ALTIVEC_BUILTIN_VMULOSH, - ALTIVEC_BUILTIN_VNMSUBFP, - ALTIVEC_BUILTIN_VNOR, - ALTIVEC_BUILTIN_VOR, - ALTIVEC_BUILTIN_VSEL_2DF, /* needed for VSX */ - ALTIVEC_BUILTIN_VSEL_2DI, /* needed for VSX */ - ALTIVEC_BUILTIN_VSEL_4SI, - ALTIVEC_BUILTIN_VSEL_4SF, - ALTIVEC_BUILTIN_VSEL_8HI, - ALTIVEC_BUILTIN_VSEL_16QI, - ALTIVEC_BUILTIN_VSEL_2DI_UNS, - ALTIVEC_BUILTIN_VSEL_4SI_UNS, - ALTIVEC_BUILTIN_VSEL_8HI_UNS, - ALTIVEC_BUILTIN_VSEL_16QI_UNS, - ALTIVEC_BUILTIN_VPERM_2DF, /* needed for VSX */ - ALTIVEC_BUILTIN_VPERM_2DI, /* needed for VSX */ - ALTIVEC_BUILTIN_VPERM_4SI, - ALTIVEC_BUILTIN_VPERM_4SF, - ALTIVEC_BUILTIN_VPERM_8HI, - ALTIVEC_BUILTIN_VPERM_16QI, - ALTIVEC_BUILTIN_VPERM_2DI_UNS, - ALTIVEC_BUILTIN_VPERM_4SI_UNS, - ALTIVEC_BUILTIN_VPERM_8HI_UNS, - ALTIVEC_BUILTIN_VPERM_16QI_UNS, - ALTIVEC_BUILTIN_VPKUHUM, - ALTIVEC_BUILTIN_VPKUWUM, - ALTIVEC_BUILTIN_VPKPX, - ALTIVEC_BUILTIN_VPKUHSS, - ALTIVEC_BUILTIN_VPKSHSS, - ALTIVEC_BUILTIN_VPKUWSS, - ALTIVEC_BUILTIN_VPKSWSS, - ALTIVEC_BUILTIN_VPKUHUS, - ALTIVEC_BUILTIN_VPKSHUS, - ALTIVEC_BUILTIN_VPKUWUS, - ALTIVEC_BUILTIN_VPKSWUS, - ALTIVEC_BUILTIN_VREFP, - ALTIVEC_BUILTIN_VRFIM, - ALTIVEC_BUILTIN_VRFIN, - ALTIVEC_BUILTIN_VRFIP, - ALTIVEC_BUILTIN_VRFIZ, - ALTIVEC_BUILTIN_VRLB, - ALTIVEC_BUILTIN_VRLH, - ALTIVEC_BUILTIN_VRLW, - ALTIVEC_BUILTIN_VRSQRTEFP, - ALTIVEC_BUILTIN_VSLB, - ALTIVEC_BUILTIN_VSLH, - ALTIVEC_BUILTIN_VSLW, - ALTIVEC_BUILTIN_VSL, - ALTIVEC_BUILTIN_VSLO, - ALTIVEC_BUILTIN_VSPLTB, - ALTIVEC_BUILTIN_VSPLTH, - ALTIVEC_BUILTIN_VSPLTW, - ALTIVEC_BUILTIN_VSPLTISB, - ALTIVEC_BUILTIN_VSPLTISH, - ALTIVEC_BUILTIN_VSPLTISW, - ALTIVEC_BUILTIN_VSRB, - ALTIVEC_BUILTIN_VSRH, - ALTIVEC_BUILTIN_VSRW, - ALTIVEC_BUILTIN_VSRAB, - ALTIVEC_BUILTIN_VSRAH, - ALTIVEC_BUILTIN_VSRAW, - ALTIVEC_BUILTIN_VSR, - ALTIVEC_BUILTIN_VSRO, - ALTIVEC_BUILTIN_VSUBUBM, - ALTIVEC_BUILTIN_VSUBUHM, - ALTIVEC_BUILTIN_VSUBUWM, - ALTIVEC_BUILTIN_VSUBFP, - ALTIVEC_BUILTIN_VSUBCUW, - ALTIVEC_BUILTIN_VSUBUBS, - ALTIVEC_BUILTIN_VSUBSBS, - ALTIVEC_BUILTIN_VSUBUHS, - ALTIVEC_BUILTIN_VSUBSHS, - ALTIVEC_BUILTIN_VSUBUWS, - ALTIVEC_BUILTIN_VSUBSWS, - ALTIVEC_BUILTIN_VSUM4UBS, - ALTIVEC_BUILTIN_VSUM4SBS, - ALTIVEC_BUILTIN_VSUM4SHS, - ALTIVEC_BUILTIN_VSUM2SWS, - ALTIVEC_BUILTIN_VSUMSWS, - ALTIVEC_BUILTIN_VXOR, - ALTIVEC_BUILTIN_VSLDOI_16QI, - ALTIVEC_BUILTIN_VSLDOI_8HI, - ALTIVEC_BUILTIN_VSLDOI_4SI, - ALTIVEC_BUILTIN_VSLDOI_4SF, - ALTIVEC_BUILTIN_VUPKHSB, - ALTIVEC_BUILTIN_VUPKHPX, - ALTIVEC_BUILTIN_VUPKHSH, - ALTIVEC_BUILTIN_VUPKLSB, - ALTIVEC_BUILTIN_VUPKLPX, - ALTIVEC_BUILTIN_VUPKLSH, - ALTIVEC_BUILTIN_MTVSCR, - ALTIVEC_BUILTIN_MFVSCR, - ALTIVEC_BUILTIN_DSSALL, - ALTIVEC_BUILTIN_DSS, - ALTIVEC_BUILTIN_LVSL, - ALTIVEC_BUILTIN_LVSR, - ALTIVEC_BUILTIN_DSTT, - ALTIVEC_BUILTIN_DSTST, - ALTIVEC_BUILTIN_DSTSTT, - ALTIVEC_BUILTIN_DST, - ALTIVEC_BUILTIN_LVEBX, - ALTIVEC_BUILTIN_LVEHX, - ALTIVEC_BUILTIN_LVEWX, - ALTIVEC_BUILTIN_LVXL, - ALTIVEC_BUILTIN_LVX, - ALTIVEC_BUILTIN_STVX, - ALTIVEC_BUILTIN_LVLX, - ALTIVEC_BUILTIN_LVLXL, - ALTIVEC_BUILTIN_LVRX, - ALTIVEC_BUILTIN_LVRXL, - ALTIVEC_BUILTIN_STVEBX, - ALTIVEC_BUILTIN_STVEHX, - ALTIVEC_BUILTIN_STVEWX, - ALTIVEC_BUILTIN_STVXL, - ALTIVEC_BUILTIN_STVLX, - ALTIVEC_BUILTIN_STVLXL, - ALTIVEC_BUILTIN_STVRX, - ALTIVEC_BUILTIN_STVRXL, - ALTIVEC_BUILTIN_VCMPBFP_P, - ALTIVEC_BUILTIN_VCMPEQFP_P, - ALTIVEC_BUILTIN_VCMPEQUB_P, - ALTIVEC_BUILTIN_VCMPEQUH_P, - ALTIVEC_BUILTIN_VCMPEQUW_P, - ALTIVEC_BUILTIN_VCMPGEFP_P, - ALTIVEC_BUILTIN_VCMPGTFP_P, - ALTIVEC_BUILTIN_VCMPGTSB_P, - ALTIVEC_BUILTIN_VCMPGTSH_P, - ALTIVEC_BUILTIN_VCMPGTSW_P, - ALTIVEC_BUILTIN_VCMPGTUB_P, - ALTIVEC_BUILTIN_VCMPGTUH_P, - ALTIVEC_BUILTIN_VCMPGTUW_P, - ALTIVEC_BUILTIN_ABSS_V4SI, - ALTIVEC_BUILTIN_ABSS_V8HI, - ALTIVEC_BUILTIN_ABSS_V16QI, - ALTIVEC_BUILTIN_ABS_V4SI, - ALTIVEC_BUILTIN_ABS_V4SF, - ALTIVEC_BUILTIN_ABS_V8HI, - ALTIVEC_BUILTIN_ABS_V16QI, - ALTIVEC_BUILTIN_MASK_FOR_LOAD, - ALTIVEC_BUILTIN_MASK_FOR_STORE, - ALTIVEC_BUILTIN_VEC_INIT_V4SI, - ALTIVEC_BUILTIN_VEC_INIT_V8HI, - ALTIVEC_BUILTIN_VEC_INIT_V16QI, - ALTIVEC_BUILTIN_VEC_INIT_V4SF, - ALTIVEC_BUILTIN_VEC_SET_V4SI, - ALTIVEC_BUILTIN_VEC_SET_V8HI, - ALTIVEC_BUILTIN_VEC_SET_V16QI, - ALTIVEC_BUILTIN_VEC_SET_V4SF, - ALTIVEC_BUILTIN_VEC_EXT_V4SI, - ALTIVEC_BUILTIN_VEC_EXT_V8HI, - ALTIVEC_BUILTIN_VEC_EXT_V16QI, - ALTIVEC_BUILTIN_VEC_EXT_V4SF, - ALTIVEC_BUILTIN_COPYSIGN_V4SF, - - /* Altivec overloaded builtins. */ - ALTIVEC_BUILTIN_VCMPEQ_P, - ALTIVEC_BUILTIN_OVERLOADED_FIRST = ALTIVEC_BUILTIN_VCMPEQ_P, - ALTIVEC_BUILTIN_VCMPGT_P, - ALTIVEC_BUILTIN_VCMPGE_P, - ALTIVEC_BUILTIN_VEC_ABS, - ALTIVEC_BUILTIN_VEC_ABSS, - ALTIVEC_BUILTIN_VEC_ADD, - ALTIVEC_BUILTIN_VEC_ADDC, - ALTIVEC_BUILTIN_VEC_ADDS, - ALTIVEC_BUILTIN_VEC_AND, - ALTIVEC_BUILTIN_VEC_ANDC, - ALTIVEC_BUILTIN_VEC_AVG, - ALTIVEC_BUILTIN_VEC_EXTRACT, - ALTIVEC_BUILTIN_VEC_CEIL, - ALTIVEC_BUILTIN_VEC_CMPB, - ALTIVEC_BUILTIN_VEC_CMPEQ, - ALTIVEC_BUILTIN_VEC_CMPEQUB, - ALTIVEC_BUILTIN_VEC_CMPEQUH, - ALTIVEC_BUILTIN_VEC_CMPEQUW, - ALTIVEC_BUILTIN_VEC_CMPGE, - ALTIVEC_BUILTIN_VEC_CMPGT, - ALTIVEC_BUILTIN_VEC_CMPLE, - ALTIVEC_BUILTIN_VEC_CMPLT, - ALTIVEC_BUILTIN_VEC_COPYSIGN, - ALTIVEC_BUILTIN_VEC_CTF, - ALTIVEC_BUILTIN_VEC_CTS, - ALTIVEC_BUILTIN_VEC_CTU, - ALTIVEC_BUILTIN_VEC_DST, - ALTIVEC_BUILTIN_VEC_DSTST, - ALTIVEC_BUILTIN_VEC_DSTSTT, - ALTIVEC_BUILTIN_VEC_DSTT, - ALTIVEC_BUILTIN_VEC_EXPTE, - ALTIVEC_BUILTIN_VEC_FLOOR, - ALTIVEC_BUILTIN_VEC_LD, - ALTIVEC_BUILTIN_VEC_LDE, - ALTIVEC_BUILTIN_VEC_LDL, - ALTIVEC_BUILTIN_VEC_LOGE, - ALTIVEC_BUILTIN_VEC_LVEBX, - ALTIVEC_BUILTIN_VEC_LVEHX, - ALTIVEC_BUILTIN_VEC_LVEWX, - ALTIVEC_BUILTIN_VEC_LVLX, - ALTIVEC_BUILTIN_VEC_LVLXL, - ALTIVEC_BUILTIN_VEC_LVRX, - ALTIVEC_BUILTIN_VEC_LVRXL, - ALTIVEC_BUILTIN_VEC_LVSL, - ALTIVEC_BUILTIN_VEC_LVSR, - ALTIVEC_BUILTIN_VEC_MADD, - ALTIVEC_BUILTIN_VEC_MADDS, - ALTIVEC_BUILTIN_VEC_MAX, - ALTIVEC_BUILTIN_VEC_MERGEH, - ALTIVEC_BUILTIN_VEC_MERGEL, - ALTIVEC_BUILTIN_VEC_MIN, - ALTIVEC_BUILTIN_VEC_MLADD, - ALTIVEC_BUILTIN_VEC_MPERM, - ALTIVEC_BUILTIN_VEC_MRADDS, - ALTIVEC_BUILTIN_VEC_MRGHB, - ALTIVEC_BUILTIN_VEC_MRGHH, - ALTIVEC_BUILTIN_VEC_MRGHW, - ALTIVEC_BUILTIN_VEC_MRGLB, - ALTIVEC_BUILTIN_VEC_MRGLH, - ALTIVEC_BUILTIN_VEC_MRGLW, - ALTIVEC_BUILTIN_VEC_MSUM, - ALTIVEC_BUILTIN_VEC_MSUMS, - ALTIVEC_BUILTIN_VEC_MTVSCR, - ALTIVEC_BUILTIN_VEC_MULE, - ALTIVEC_BUILTIN_VEC_MULO, - ALTIVEC_BUILTIN_VEC_NEARBYINT, - ALTIVEC_BUILTIN_VEC_NMSUB, - ALTIVEC_BUILTIN_VEC_NOR, - ALTIVEC_BUILTIN_VEC_OR, - ALTIVEC_BUILTIN_VEC_PACK, - ALTIVEC_BUILTIN_VEC_PACKPX, - ALTIVEC_BUILTIN_VEC_PACKS, - ALTIVEC_BUILTIN_VEC_PACKSU, - ALTIVEC_BUILTIN_VEC_PERM, - ALTIVEC_BUILTIN_VEC_RE, - ALTIVEC_BUILTIN_VEC_RL, - ALTIVEC_BUILTIN_VEC_RINT, - ALTIVEC_BUILTIN_VEC_ROUND, - ALTIVEC_BUILTIN_VEC_RSQRTE, - ALTIVEC_BUILTIN_VEC_SEL, - ALTIVEC_BUILTIN_VEC_SL, - ALTIVEC_BUILTIN_VEC_SLD, - ALTIVEC_BUILTIN_VEC_SLL, - ALTIVEC_BUILTIN_VEC_SLO, - ALTIVEC_BUILTIN_VEC_SPLAT, - ALTIVEC_BUILTIN_VEC_SPLAT_S16, - ALTIVEC_BUILTIN_VEC_SPLAT_S32, - ALTIVEC_BUILTIN_VEC_SPLAT_S8, - ALTIVEC_BUILTIN_VEC_SPLAT_U16, - ALTIVEC_BUILTIN_VEC_SPLAT_U32, - ALTIVEC_BUILTIN_VEC_SPLAT_U8, - ALTIVEC_BUILTIN_VEC_SPLTB, - ALTIVEC_BUILTIN_VEC_SPLTH, - ALTIVEC_BUILTIN_VEC_SPLTW, - ALTIVEC_BUILTIN_VEC_SQRT, - ALTIVEC_BUILTIN_VEC_SR, - ALTIVEC_BUILTIN_VEC_SRA, - ALTIVEC_BUILTIN_VEC_SRL, - ALTIVEC_BUILTIN_VEC_SRO, - ALTIVEC_BUILTIN_VEC_ST, - ALTIVEC_BUILTIN_VEC_STE, - ALTIVEC_BUILTIN_VEC_STL, - ALTIVEC_BUILTIN_VEC_STVEBX, - ALTIVEC_BUILTIN_VEC_STVEHX, - ALTIVEC_BUILTIN_VEC_STVEWX, - ALTIVEC_BUILTIN_VEC_STVLX, - ALTIVEC_BUILTIN_VEC_STVLXL, - ALTIVEC_BUILTIN_VEC_STVRX, - ALTIVEC_BUILTIN_VEC_STVRXL, - ALTIVEC_BUILTIN_VEC_SUB, - ALTIVEC_BUILTIN_VEC_SUBC, - ALTIVEC_BUILTIN_VEC_SUBS, - ALTIVEC_BUILTIN_VEC_SUM2S, - ALTIVEC_BUILTIN_VEC_SUM4S, - ALTIVEC_BUILTIN_VEC_SUMS, - ALTIVEC_BUILTIN_VEC_TRUNC, - ALTIVEC_BUILTIN_VEC_UNPACKH, - ALTIVEC_BUILTIN_VEC_UNPACKL, - ALTIVEC_BUILTIN_VEC_VADDFP, - ALTIVEC_BUILTIN_VEC_VADDSBS, - ALTIVEC_BUILTIN_VEC_VADDSHS, - ALTIVEC_BUILTIN_VEC_VADDSWS, - ALTIVEC_BUILTIN_VEC_VADDUBM, - ALTIVEC_BUILTIN_VEC_VADDUBS, - ALTIVEC_BUILTIN_VEC_VADDUHM, - ALTIVEC_BUILTIN_VEC_VADDUHS, - ALTIVEC_BUILTIN_VEC_VADDUWM, - ALTIVEC_BUILTIN_VEC_VADDUWS, - ALTIVEC_BUILTIN_VEC_VAVGSB, - ALTIVEC_BUILTIN_VEC_VAVGSH, - ALTIVEC_BUILTIN_VEC_VAVGSW, - ALTIVEC_BUILTIN_VEC_VAVGUB, - ALTIVEC_BUILTIN_VEC_VAVGUH, - ALTIVEC_BUILTIN_VEC_VAVGUW, - ALTIVEC_BUILTIN_VEC_VCFSX, - ALTIVEC_BUILTIN_VEC_VCFUX, - ALTIVEC_BUILTIN_VEC_VCMPEQFP, - ALTIVEC_BUILTIN_VEC_VCMPEQUB, - ALTIVEC_BUILTIN_VEC_VCMPEQUH, - ALTIVEC_BUILTIN_VEC_VCMPEQUW, - ALTIVEC_BUILTIN_VEC_VCMPGTFP, - ALTIVEC_BUILTIN_VEC_VCMPGTSB, - ALTIVEC_BUILTIN_VEC_VCMPGTSH, - ALTIVEC_BUILTIN_VEC_VCMPGTSW, - ALTIVEC_BUILTIN_VEC_VCMPGTUB, - ALTIVEC_BUILTIN_VEC_VCMPGTUH, - ALTIVEC_BUILTIN_VEC_VCMPGTUW, - ALTIVEC_BUILTIN_VEC_VMAXFP, - ALTIVEC_BUILTIN_VEC_VMAXSB, - ALTIVEC_BUILTIN_VEC_VMAXSH, - ALTIVEC_BUILTIN_VEC_VMAXSW, - ALTIVEC_BUILTIN_VEC_VMAXUB, - ALTIVEC_BUILTIN_VEC_VMAXUH, - ALTIVEC_BUILTIN_VEC_VMAXUW, - ALTIVEC_BUILTIN_VEC_VMINFP, - ALTIVEC_BUILTIN_VEC_VMINSB, - ALTIVEC_BUILTIN_VEC_VMINSH, - ALTIVEC_BUILTIN_VEC_VMINSW, - ALTIVEC_BUILTIN_VEC_VMINUB, - ALTIVEC_BUILTIN_VEC_VMINUH, - ALTIVEC_BUILTIN_VEC_VMINUW, - ALTIVEC_BUILTIN_VEC_VMRGHB, - ALTIVEC_BUILTIN_VEC_VMRGHH, - ALTIVEC_BUILTIN_VEC_VMRGHW, - ALTIVEC_BUILTIN_VEC_VMRGLB, - ALTIVEC_BUILTIN_VEC_VMRGLH, - ALTIVEC_BUILTIN_VEC_VMRGLW, - ALTIVEC_BUILTIN_VEC_VMSUMMBM, - ALTIVEC_BUILTIN_VEC_VMSUMSHM, - ALTIVEC_BUILTIN_VEC_VMSUMSHS, - ALTIVEC_BUILTIN_VEC_VMSUMUBM, - ALTIVEC_BUILTIN_VEC_VMSUMUHM, - ALTIVEC_BUILTIN_VEC_VMSUMUHS, - ALTIVEC_BUILTIN_VEC_VMULESB, - ALTIVEC_BUILTIN_VEC_VMULESH, - ALTIVEC_BUILTIN_VEC_VMULEUB, - ALTIVEC_BUILTIN_VEC_VMULEUH, - ALTIVEC_BUILTIN_VEC_VMULOSB, - ALTIVEC_BUILTIN_VEC_VMULOSH, - ALTIVEC_BUILTIN_VEC_VMULOUB, - ALTIVEC_BUILTIN_VEC_VMULOUH, - ALTIVEC_BUILTIN_VEC_VPKSHSS, - ALTIVEC_BUILTIN_VEC_VPKSHUS, - ALTIVEC_BUILTIN_VEC_VPKSWSS, - ALTIVEC_BUILTIN_VEC_VPKSWUS, - ALTIVEC_BUILTIN_VEC_VPKUHUM, - ALTIVEC_BUILTIN_VEC_VPKUHUS, - ALTIVEC_BUILTIN_VEC_VPKUWUM, - ALTIVEC_BUILTIN_VEC_VPKUWUS, - ALTIVEC_BUILTIN_VEC_VRLB, - ALTIVEC_BUILTIN_VEC_VRLH, - ALTIVEC_BUILTIN_VEC_VRLW, - ALTIVEC_BUILTIN_VEC_VSLB, - ALTIVEC_BUILTIN_VEC_VSLH, - ALTIVEC_BUILTIN_VEC_VSLW, - ALTIVEC_BUILTIN_VEC_VSPLTB, - ALTIVEC_BUILTIN_VEC_VSPLTH, - ALTIVEC_BUILTIN_VEC_VSPLTW, - ALTIVEC_BUILTIN_VEC_VSRAB, - ALTIVEC_BUILTIN_VEC_VSRAH, - ALTIVEC_BUILTIN_VEC_VSRAW, - ALTIVEC_BUILTIN_VEC_VSRB, - ALTIVEC_BUILTIN_VEC_VSRH, - ALTIVEC_BUILTIN_VEC_VSRW, - ALTIVEC_BUILTIN_VEC_VSUBFP, - ALTIVEC_BUILTIN_VEC_VSUBSBS, - ALTIVEC_BUILTIN_VEC_VSUBSHS, - ALTIVEC_BUILTIN_VEC_VSUBSWS, - ALTIVEC_BUILTIN_VEC_VSUBUBM, - ALTIVEC_BUILTIN_VEC_VSUBUBS, - ALTIVEC_BUILTIN_VEC_VSUBUHM, - ALTIVEC_BUILTIN_VEC_VSUBUHS, - ALTIVEC_BUILTIN_VEC_VSUBUWM, - ALTIVEC_BUILTIN_VEC_VSUBUWS, - ALTIVEC_BUILTIN_VEC_VSUM4SBS, - ALTIVEC_BUILTIN_VEC_VSUM4SHS, - ALTIVEC_BUILTIN_VEC_VSUM4UBS, - ALTIVEC_BUILTIN_VEC_VUPKHPX, - ALTIVEC_BUILTIN_VEC_VUPKHSB, - ALTIVEC_BUILTIN_VEC_VUPKHSH, - ALTIVEC_BUILTIN_VEC_VUPKLPX, - ALTIVEC_BUILTIN_VEC_VUPKLSB, - ALTIVEC_BUILTIN_VEC_VUPKLSH, - ALTIVEC_BUILTIN_VEC_XOR, - ALTIVEC_BUILTIN_VEC_STEP, - ALTIVEC_BUILTIN_VEC_PROMOTE, - ALTIVEC_BUILTIN_VEC_INSERT, - ALTIVEC_BUILTIN_VEC_SPLATS, - ALTIVEC_BUILTIN_OVERLOADED_LAST = ALTIVEC_BUILTIN_VEC_SPLATS, - - /* SPE builtins. */ - SPE_BUILTIN_EVADDW, - SPE_BUILTIN_EVAND, - SPE_BUILTIN_EVANDC, - SPE_BUILTIN_EVDIVWS, - SPE_BUILTIN_EVDIVWU, - SPE_BUILTIN_EVEQV, - SPE_BUILTIN_EVFSADD, - SPE_BUILTIN_EVFSDIV, - SPE_BUILTIN_EVFSMUL, - SPE_BUILTIN_EVFSSUB, - SPE_BUILTIN_EVLDDX, - SPE_BUILTIN_EVLDHX, - SPE_BUILTIN_EVLDWX, - SPE_BUILTIN_EVLHHESPLATX, - SPE_BUILTIN_EVLHHOSSPLATX, - SPE_BUILTIN_EVLHHOUSPLATX, - SPE_BUILTIN_EVLWHEX, - SPE_BUILTIN_EVLWHOSX, - SPE_BUILTIN_EVLWHOUX, - SPE_BUILTIN_EVLWHSPLATX, - SPE_BUILTIN_EVLWWSPLATX, - SPE_BUILTIN_EVMERGEHI, - SPE_BUILTIN_EVMERGEHILO, - SPE_BUILTIN_EVMERGELO, - SPE_BUILTIN_EVMERGELOHI, - SPE_BUILTIN_EVMHEGSMFAA, - SPE_BUILTIN_EVMHEGSMFAN, - SPE_BUILTIN_EVMHEGSMIAA, - SPE_BUILTIN_EVMHEGSMIAN, - SPE_BUILTIN_EVMHEGUMIAA, - SPE_BUILTIN_EVMHEGUMIAN, - SPE_BUILTIN_EVMHESMF, - SPE_BUILTIN_EVMHESMFA, - SPE_BUILTIN_EVMHESMFAAW, - SPE_BUILTIN_EVMHESMFANW, - SPE_BUILTIN_EVMHESMI, - SPE_BUILTIN_EVMHESMIA, - SPE_BUILTIN_EVMHESMIAAW, - SPE_BUILTIN_EVMHESMIANW, - SPE_BUILTIN_EVMHESSF, - SPE_BUILTIN_EVMHESSFA, - SPE_BUILTIN_EVMHESSFAAW, - SPE_BUILTIN_EVMHESSFANW, - SPE_BUILTIN_EVMHESSIAAW, - SPE_BUILTIN_EVMHESSIANW, - SPE_BUILTIN_EVMHEUMI, - SPE_BUILTIN_EVMHEUMIA, - SPE_BUILTIN_EVMHEUMIAAW, - SPE_BUILTIN_EVMHEUMIANW, - SPE_BUILTIN_EVMHEUSIAAW, - SPE_BUILTIN_EVMHEUSIANW, - SPE_BUILTIN_EVMHOGSMFAA, - SPE_BUILTIN_EVMHOGSMFAN, - SPE_BUILTIN_EVMHOGSMIAA, - SPE_BUILTIN_EVMHOGSMIAN, - SPE_BUILTIN_EVMHOGUMIAA, - SPE_BUILTIN_EVMHOGUMIAN, - SPE_BUILTIN_EVMHOSMF, - SPE_BUILTIN_EVMHOSMFA, - SPE_BUILTIN_EVMHOSMFAAW, - SPE_BUILTIN_EVMHOSMFANW, - SPE_BUILTIN_EVMHOSMI, - SPE_BUILTIN_EVMHOSMIA, - SPE_BUILTIN_EVMHOSMIAAW, - SPE_BUILTIN_EVMHOSMIANW, - SPE_BUILTIN_EVMHOSSF, - SPE_BUILTIN_EVMHOSSFA, - SPE_BUILTIN_EVMHOSSFAAW, - SPE_BUILTIN_EVMHOSSFANW, - SPE_BUILTIN_EVMHOSSIAAW, - SPE_BUILTIN_EVMHOSSIANW, - SPE_BUILTIN_EVMHOUMI, - SPE_BUILTIN_EVMHOUMIA, - SPE_BUILTIN_EVMHOUMIAAW, - SPE_BUILTIN_EVMHOUMIANW, - SPE_BUILTIN_EVMHOUSIAAW, - SPE_BUILTIN_EVMHOUSIANW, - SPE_BUILTIN_EVMWHSMF, - SPE_BUILTIN_EVMWHSMFA, - SPE_BUILTIN_EVMWHSMI, - SPE_BUILTIN_EVMWHSMIA, - SPE_BUILTIN_EVMWHSSF, - SPE_BUILTIN_EVMWHSSFA, - SPE_BUILTIN_EVMWHUMI, - SPE_BUILTIN_EVMWHUMIA, - SPE_BUILTIN_EVMWLSMIAAW, - SPE_BUILTIN_EVMWLSMIANW, - SPE_BUILTIN_EVMWLSSIAAW, - SPE_BUILTIN_EVMWLSSIANW, - SPE_BUILTIN_EVMWLUMI, - SPE_BUILTIN_EVMWLUMIA, - SPE_BUILTIN_EVMWLUMIAAW, - SPE_BUILTIN_EVMWLUMIANW, - SPE_BUILTIN_EVMWLUSIAAW, - SPE_BUILTIN_EVMWLUSIANW, - SPE_BUILTIN_EVMWSMF, - SPE_BUILTIN_EVMWSMFA, - SPE_BUILTIN_EVMWSMFAA, - SPE_BUILTIN_EVMWSMFAN, - SPE_BUILTIN_EVMWSMI, - SPE_BUILTIN_EVMWSMIA, - SPE_BUILTIN_EVMWSMIAA, - SPE_BUILTIN_EVMWSMIAN, - SPE_BUILTIN_EVMWHSSFAA, - SPE_BUILTIN_EVMWSSF, - SPE_BUILTIN_EVMWSSFA, - SPE_BUILTIN_EVMWSSFAA, - SPE_BUILTIN_EVMWSSFAN, - SPE_BUILTIN_EVMWUMI, - SPE_BUILTIN_EVMWUMIA, - SPE_BUILTIN_EVMWUMIAA, - SPE_BUILTIN_EVMWUMIAN, - SPE_BUILTIN_EVNAND, - SPE_BUILTIN_EVNOR, - SPE_BUILTIN_EVOR, - SPE_BUILTIN_EVORC, - SPE_BUILTIN_EVRLW, - SPE_BUILTIN_EVSLW, - SPE_BUILTIN_EVSRWS, - SPE_BUILTIN_EVSRWU, - SPE_BUILTIN_EVSTDDX, - SPE_BUILTIN_EVSTDHX, - SPE_BUILTIN_EVSTDWX, - SPE_BUILTIN_EVSTWHEX, - SPE_BUILTIN_EVSTWHOX, - SPE_BUILTIN_EVSTWWEX, - SPE_BUILTIN_EVSTWWOX, - SPE_BUILTIN_EVSUBFW, - SPE_BUILTIN_EVXOR, - SPE_BUILTIN_EVABS, - SPE_BUILTIN_EVADDSMIAAW, - SPE_BUILTIN_EVADDSSIAAW, - SPE_BUILTIN_EVADDUMIAAW, - SPE_BUILTIN_EVADDUSIAAW, - SPE_BUILTIN_EVCNTLSW, - SPE_BUILTIN_EVCNTLZW, - SPE_BUILTIN_EVEXTSB, - SPE_BUILTIN_EVEXTSH, - SPE_BUILTIN_EVFSABS, - SPE_BUILTIN_EVFSCFSF, - SPE_BUILTIN_EVFSCFSI, - SPE_BUILTIN_EVFSCFUF, - SPE_BUILTIN_EVFSCFUI, - SPE_BUILTIN_EVFSCTSF, - SPE_BUILTIN_EVFSCTSI, - SPE_BUILTIN_EVFSCTSIZ, - SPE_BUILTIN_EVFSCTUF, - SPE_BUILTIN_EVFSCTUI, - SPE_BUILTIN_EVFSCTUIZ, - SPE_BUILTIN_EVFSNABS, - SPE_BUILTIN_EVFSNEG, - SPE_BUILTIN_EVMRA, - SPE_BUILTIN_EVNEG, - SPE_BUILTIN_EVRNDW, - SPE_BUILTIN_EVSUBFSMIAAW, - SPE_BUILTIN_EVSUBFSSIAAW, - SPE_BUILTIN_EVSUBFUMIAAW, - SPE_BUILTIN_EVSUBFUSIAAW, - SPE_BUILTIN_EVADDIW, - SPE_BUILTIN_EVLDD, - SPE_BUILTIN_EVLDH, - SPE_BUILTIN_EVLDW, - SPE_BUILTIN_EVLHHESPLAT, - SPE_BUILTIN_EVLHHOSSPLAT, - SPE_BUILTIN_EVLHHOUSPLAT, - SPE_BUILTIN_EVLWHE, - SPE_BUILTIN_EVLWHOS, - SPE_BUILTIN_EVLWHOU, - SPE_BUILTIN_EVLWHSPLAT, - SPE_BUILTIN_EVLWWSPLAT, - SPE_BUILTIN_EVRLWI, - SPE_BUILTIN_EVSLWI, - SPE_BUILTIN_EVSRWIS, - SPE_BUILTIN_EVSRWIU, - SPE_BUILTIN_EVSTDD, - SPE_BUILTIN_EVSTDH, - SPE_BUILTIN_EVSTDW, - SPE_BUILTIN_EVSTWHE, - SPE_BUILTIN_EVSTWHO, - SPE_BUILTIN_EVSTWWE, - SPE_BUILTIN_EVSTWWO, - SPE_BUILTIN_EVSUBIFW, - - /* Compares. */ - SPE_BUILTIN_EVCMPEQ, - SPE_BUILTIN_EVCMPGTS, - SPE_BUILTIN_EVCMPGTU, - SPE_BUILTIN_EVCMPLTS, - SPE_BUILTIN_EVCMPLTU, - SPE_BUILTIN_EVFSCMPEQ, - SPE_BUILTIN_EVFSCMPGT, - SPE_BUILTIN_EVFSCMPLT, - SPE_BUILTIN_EVFSTSTEQ, - SPE_BUILTIN_EVFSTSTGT, - SPE_BUILTIN_EVFSTSTLT, - - /* EVSEL compares. */ - SPE_BUILTIN_EVSEL_CMPEQ, - SPE_BUILTIN_EVSEL_CMPGTS, - SPE_BUILTIN_EVSEL_CMPGTU, - SPE_BUILTIN_EVSEL_CMPLTS, - SPE_BUILTIN_EVSEL_CMPLTU, - SPE_BUILTIN_EVSEL_FSCMPEQ, - SPE_BUILTIN_EVSEL_FSCMPGT, - SPE_BUILTIN_EVSEL_FSCMPLT, - SPE_BUILTIN_EVSEL_FSTSTEQ, - SPE_BUILTIN_EVSEL_FSTSTGT, - SPE_BUILTIN_EVSEL_FSTSTLT, - - SPE_BUILTIN_EVSPLATFI, - SPE_BUILTIN_EVSPLATI, - SPE_BUILTIN_EVMWHSSMAA, - SPE_BUILTIN_EVMWHSMFAA, - SPE_BUILTIN_EVMWHSMIAA, - SPE_BUILTIN_EVMWHUSIAA, - SPE_BUILTIN_EVMWHUMIAA, - SPE_BUILTIN_EVMWHSSFAN, - SPE_BUILTIN_EVMWHSSIAN, - SPE_BUILTIN_EVMWHSMFAN, - SPE_BUILTIN_EVMWHSMIAN, - SPE_BUILTIN_EVMWHUSIAN, - SPE_BUILTIN_EVMWHUMIAN, - SPE_BUILTIN_EVMWHGSSFAA, - SPE_BUILTIN_EVMWHGSMFAA, - SPE_BUILTIN_EVMWHGSMIAA, - SPE_BUILTIN_EVMWHGUMIAA, - SPE_BUILTIN_EVMWHGSSFAN, - SPE_BUILTIN_EVMWHGSMFAN, - SPE_BUILTIN_EVMWHGSMIAN, - SPE_BUILTIN_EVMWHGUMIAN, - SPE_BUILTIN_MTSPEFSCR, - SPE_BUILTIN_MFSPEFSCR, - SPE_BUILTIN_BRINC, - - /* PAIRED builtins. */ - PAIRED_BUILTIN_DIVV2SF3, - PAIRED_BUILTIN_ABSV2SF2, - PAIRED_BUILTIN_NEGV2SF2, - PAIRED_BUILTIN_SQRTV2SF2, - PAIRED_BUILTIN_ADDV2SF3, - PAIRED_BUILTIN_SUBV2SF3, - PAIRED_BUILTIN_RESV2SF2, - PAIRED_BUILTIN_MULV2SF3, - PAIRED_BUILTIN_MSUB, - PAIRED_BUILTIN_MADD, - PAIRED_BUILTIN_NMSUB, - PAIRED_BUILTIN_NMADD, - PAIRED_BUILTIN_NABSV2SF2, - PAIRED_BUILTIN_SUM0, - PAIRED_BUILTIN_SUM1, - PAIRED_BUILTIN_MULS0, - PAIRED_BUILTIN_MULS1, - PAIRED_BUILTIN_MERGE00, - PAIRED_BUILTIN_MERGE01, - PAIRED_BUILTIN_MERGE10, - PAIRED_BUILTIN_MERGE11, - PAIRED_BUILTIN_MADDS0, - PAIRED_BUILTIN_MADDS1, - PAIRED_BUILTIN_STX, - PAIRED_BUILTIN_LX, - PAIRED_BUILTIN_SELV2SF4, - PAIRED_BUILTIN_CMPU0, - PAIRED_BUILTIN_CMPU1, - - RS6000_BUILTIN_RECIP, - RS6000_BUILTIN_RECIPF, - RS6000_BUILTIN_RSQRTF, - RS6000_BUILTIN_BSWAP_HI, - - /* VSX builtins. */ - VSX_BUILTIN_LXSDX, - VSX_BUILTIN_LXVD2X, - VSX_BUILTIN_LXVDSX, - VSX_BUILTIN_LXVW4X, - VSX_BUILTIN_STXSDX, - VSX_BUILTIN_STXVD2X, - VSX_BUILTIN_STXVW4X, - VSX_BUILTIN_XSABSDP, - VSX_BUILTIN_XSADDDP, - VSX_BUILTIN_XSCMPODP, - VSX_BUILTIN_XSCMPUDP, - VSX_BUILTIN_XSCPSGNDP, - VSX_BUILTIN_XSCVDPSP, - VSX_BUILTIN_XSCVDPSXDS, - VSX_BUILTIN_XSCVDPSXWS, - VSX_BUILTIN_XSCVDPUXDS, - VSX_BUILTIN_XSCVDPUXWS, - VSX_BUILTIN_XSCVSPDP, - VSX_BUILTIN_XSCVSXDDP, - VSX_BUILTIN_XSCVUXDDP, - VSX_BUILTIN_XSDIVDP, - VSX_BUILTIN_XSMADDADP, - VSX_BUILTIN_XSMADDMDP, - VSX_BUILTIN_XSMAXDP, - VSX_BUILTIN_XSMINDP, - VSX_BUILTIN_XSMOVDP, - VSX_BUILTIN_XSMSUBADP, - VSX_BUILTIN_XSMSUBMDP, - VSX_BUILTIN_XSMULDP, - VSX_BUILTIN_XSNABSDP, - VSX_BUILTIN_XSNEGDP, - VSX_BUILTIN_XSNMADDADP, - VSX_BUILTIN_XSNMADDMDP, - VSX_BUILTIN_XSNMSUBADP, - VSX_BUILTIN_XSNMSUBMDP, - VSX_BUILTIN_XSRDPI, - VSX_BUILTIN_XSRDPIC, - VSX_BUILTIN_XSRDPIM, - VSX_BUILTIN_XSRDPIP, - VSX_BUILTIN_XSRDPIZ, - VSX_BUILTIN_XSREDP, - VSX_BUILTIN_XSRSQRTEDP, - VSX_BUILTIN_XSSQRTDP, - VSX_BUILTIN_XSSUBDP, - VSX_BUILTIN_CPSGNDP, - VSX_BUILTIN_CPSGNSP, - VSX_BUILTIN_XSTDIVDP_FE, - VSX_BUILTIN_XSTDIVDP_FG, - VSX_BUILTIN_XSTSQRTDP_FE, - VSX_BUILTIN_XSTSQRTDP_FG, - VSX_BUILTIN_XVABSDP, - VSX_BUILTIN_XVABSSP, - VSX_BUILTIN_XVADDDP, - VSX_BUILTIN_XVADDSP, - VSX_BUILTIN_XVCMPEQDP, - VSX_BUILTIN_XVCMPEQSP, - VSX_BUILTIN_XVCMPGEDP, - VSX_BUILTIN_XVCMPGESP, - VSX_BUILTIN_XVCMPGTDP, - VSX_BUILTIN_XVCMPGTSP, - VSX_BUILTIN_XVCMPEQDP_P, - VSX_BUILTIN_XVCMPEQSP_P, - VSX_BUILTIN_XVCMPGEDP_P, - VSX_BUILTIN_XVCMPGESP_P, - VSX_BUILTIN_XVCMPGTDP_P, - VSX_BUILTIN_XVCMPGTSP_P, - VSX_BUILTIN_XVCPSGNDP, - VSX_BUILTIN_XVCPSGNSP, - VSX_BUILTIN_XVCVDPSP, - VSX_BUILTIN_XVCVDPSXDS, - VSX_BUILTIN_XVCVDPSXWS, - VSX_BUILTIN_XVCVDPUXDS, - VSX_BUILTIN_XVCVDPUXDS_UNS, - VSX_BUILTIN_XVCVDPUXWS, - VSX_BUILTIN_XVCVSPDP, - VSX_BUILTIN_XVCVSPSXDS, - VSX_BUILTIN_XVCVSPSXWS, - VSX_BUILTIN_XVCVSPUXDS, - VSX_BUILTIN_XVCVSPUXWS, - VSX_BUILTIN_XVCVSXDDP, - VSX_BUILTIN_XVCVSXDSP, - VSX_BUILTIN_XVCVSXWDP, - VSX_BUILTIN_XVCVSXWSP, - VSX_BUILTIN_XVCVUXDDP, - VSX_BUILTIN_XVCVUXDDP_UNS, - VSX_BUILTIN_XVCVUXDSP, - VSX_BUILTIN_XVCVUXWDP, - VSX_BUILTIN_XVCVUXWSP, - VSX_BUILTIN_XVDIVDP, - VSX_BUILTIN_XVDIVSP, - VSX_BUILTIN_XVMADDDP, - VSX_BUILTIN_XVMADDSP, - VSX_BUILTIN_XVMAXDP, - VSX_BUILTIN_XVMAXSP, - VSX_BUILTIN_XVMINDP, - VSX_BUILTIN_XVMINSP, - VSX_BUILTIN_XVMSUBDP, - VSX_BUILTIN_XVMSUBSP, - VSX_BUILTIN_XVMULDP, - VSX_BUILTIN_XVMULSP, - VSX_BUILTIN_XVNABSDP, - VSX_BUILTIN_XVNABSSP, - VSX_BUILTIN_XVNEGDP, - VSX_BUILTIN_XVNEGSP, - VSX_BUILTIN_XVNMADDDP, - VSX_BUILTIN_XVNMADDSP, - VSX_BUILTIN_XVNMSUBDP, - VSX_BUILTIN_XVNMSUBSP, - VSX_BUILTIN_XVRDPI, - VSX_BUILTIN_XVRDPIC, - VSX_BUILTIN_XVRDPIM, - VSX_BUILTIN_XVRDPIP, - VSX_BUILTIN_XVRDPIZ, - VSX_BUILTIN_XVREDP, - VSX_BUILTIN_XVRESP, - VSX_BUILTIN_XVRSPI, - VSX_BUILTIN_XVRSPIC, - VSX_BUILTIN_XVRSPIM, - VSX_BUILTIN_XVRSPIP, - VSX_BUILTIN_XVRSPIZ, - VSX_BUILTIN_XVRSQRTEDP, - VSX_BUILTIN_XVRSQRTESP, - VSX_BUILTIN_XVSQRTDP, - VSX_BUILTIN_XVSQRTSP, - VSX_BUILTIN_XVSUBDP, - VSX_BUILTIN_XVSUBSP, - VSX_BUILTIN_XVTDIVDP_FE, - VSX_BUILTIN_XVTDIVDP_FG, - VSX_BUILTIN_XVTDIVSP_FE, - VSX_BUILTIN_XVTDIVSP_FG, - VSX_BUILTIN_XVTSQRTDP_FE, - VSX_BUILTIN_XVTSQRTDP_FG, - VSX_BUILTIN_XVTSQRTSP_FE, - VSX_BUILTIN_XVTSQRTSP_FG, - VSX_BUILTIN_XXSEL_2DI, - VSX_BUILTIN_XXSEL_2DF, - VSX_BUILTIN_XXSEL_4SI, - VSX_BUILTIN_XXSEL_4SF, - VSX_BUILTIN_XXSEL_8HI, - VSX_BUILTIN_XXSEL_16QI, - VSX_BUILTIN_XXSEL_2DI_UNS, - VSX_BUILTIN_XXSEL_4SI_UNS, - VSX_BUILTIN_XXSEL_8HI_UNS, - VSX_BUILTIN_XXSEL_16QI_UNS, - VSX_BUILTIN_VPERM_2DI, - VSX_BUILTIN_VPERM_2DF, - VSX_BUILTIN_VPERM_4SI, - VSX_BUILTIN_VPERM_4SF, - VSX_BUILTIN_VPERM_8HI, - VSX_BUILTIN_VPERM_16QI, - VSX_BUILTIN_VPERM_2DI_UNS, - VSX_BUILTIN_VPERM_4SI_UNS, - VSX_BUILTIN_VPERM_8HI_UNS, - VSX_BUILTIN_VPERM_16QI_UNS, - VSX_BUILTIN_XXPERMDI_2DF, - VSX_BUILTIN_XXPERMDI_2DI, - VSX_BUILTIN_XXPERMDI_4SF, - VSX_BUILTIN_XXPERMDI_4SI, - VSX_BUILTIN_XXPERMDI_8HI, - VSX_BUILTIN_XXPERMDI_16QI, - VSX_BUILTIN_CONCAT_2DF, - VSX_BUILTIN_CONCAT_2DI, - VSX_BUILTIN_SET_2DF, - VSX_BUILTIN_SET_2DI, - VSX_BUILTIN_SPLAT_2DF, - VSX_BUILTIN_SPLAT_2DI, - VSX_BUILTIN_XXMRGHW_4SF, - VSX_BUILTIN_XXMRGHW_4SI, - VSX_BUILTIN_XXMRGLW_4SF, - VSX_BUILTIN_XXMRGLW_4SI, - VSX_BUILTIN_XXSLDWI_16QI, - VSX_BUILTIN_XXSLDWI_8HI, - VSX_BUILTIN_XXSLDWI_4SI, - VSX_BUILTIN_XXSLDWI_4SF, - VSX_BUILTIN_XXSLDWI_2DI, - VSX_BUILTIN_XXSLDWI_2DF, - VSX_BUILTIN_VEC_INIT_V2DF, - VSX_BUILTIN_VEC_INIT_V2DI, - VSX_BUILTIN_VEC_SET_V2DF, - VSX_BUILTIN_VEC_SET_V2DI, - VSX_BUILTIN_VEC_EXT_V2DF, - VSX_BUILTIN_VEC_EXT_V2DI, - - /* VSX overloaded builtins, add the overloaded functions not present in - Altivec. */ - VSX_BUILTIN_VEC_MUL, - VSX_BUILTIN_OVERLOADED_FIRST = VSX_BUILTIN_VEC_MUL, - VSX_BUILTIN_VEC_MSUB, - VSX_BUILTIN_VEC_NMADD, - VSX_BUITLIN_VEC_NMSUB, - VSX_BUILTIN_VEC_DIV, - VSX_BUILTIN_VEC_XXMRGHW, - VSX_BUILTIN_VEC_XXMRGLW, - VSX_BUILTIN_VEC_XXPERMDI, - VSX_BUILTIN_VEC_XXSLDWI, - VSX_BUILTIN_VEC_XXSPLTD, - VSX_BUILTIN_VEC_XXSPLTW, - VSX_BUILTIN_OVERLOADED_LAST = VSX_BUILTIN_VEC_XXSPLTW, - - /* Combined VSX/Altivec builtins. */ - VECTOR_BUILTIN_FLOAT_V4SI_V4SF, - VECTOR_BUILTIN_UNSFLOAT_V4SI_V4SF, - VECTOR_BUILTIN_FIX_V4SF_V4SI, - VECTOR_BUILTIN_FIXUNS_V4SF_V4SI, - - /* Power7 builtins, that aren't VSX instructions. */ - POWER7_BUILTIN_BPERMD, +#include "rs6000-builtin.def" RS6000_BUILTIN_COUNT }; +#undef RS6000_BUILTIN +#undef RS6000_BUILTIN_EQUATE + enum rs6000_builtin_type_index { RS6000_BTI_NOT_OPAQUE, diff --git a/gcc/config/rs6000/t-rs6000 b/gcc/config/rs6000/t-rs6000 index 66a367a7b62..773d710fa3f 100644 --- a/gcc/config/rs6000/t-rs6000 +++ b/gcc/config/rs6000/t-rs6000 @@ -19,6 +19,8 @@ # along with GCC; see the file COPYING3. If not see # <http://www.gnu.org/licenses/>. +TM_H += $(srcdir)/config/rs6000/rs6000-builtin.def + rs6000.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ $(RTL_H) $(REGS_H) hard-reg-set.h \ real.h insn-config.h conditions.h insn-attr.h flags.h $(RECOG_H) \ @@ -56,6 +58,7 @@ MD_INCLUDES = $(srcdir)/config/rs6000/rios1.md \ $(srcdir)/config/rs6000/power7.md \ $(srcdir)/config/rs6000/cell.md \ $(srcdir)/config/rs6000/xfpu.md \ + $(srcdir)/config/rs6000/a2.md \ $(srcdir)/config/rs6000/predicates.md \ $(srcdir)/config/rs6000/constraints.md \ $(srcdir)/config/rs6000/darwin.md \ diff --git a/gcc/config/s390/2097.md b/gcc/config/s390/2097.md index eb7240effd4..56893596a74 100644 --- a/gcc/config/s390/2097.md +++ b/gcc/config/s390/2097.md @@ -57,7 +57,8 @@ z10_int_fr_A3" "z10_other_super, z10_other_super_c_E1, z10_other_super_E1, \ z10_int_super, z10_int_super_E1, \ - z10_lr, z10_store_super") + z10_lr, z10_store_super" + " ! s390_agen_dep_p") ; Forwarding from z10_super to frz10_ and z10_rec. @@ -68,7 +69,8 @@ z10_store_super" "z10_int_fr, z10_int_fr_E1, z10_int_fr_A3, \ z10_other_fr, z10_other_fr_A3, z10_lr_fr, z10_lr_fr_E1, \ - z10_other_fr_E1, z10_store_rec") + z10_other_fr_E1, z10_store_rec" + " ! s390_agen_dep_p") ; Forwarding from z10_fwd and z10_fr to z10_rec and z10_fr. @@ -84,7 +86,8 @@ z10_int_fr_A3" "z10_int_fr, z10_int_fr_E1, z10_int_fr_A3, \ z10_other_fr, z10_other_fr_A3, z10_lr_fr, z10_lr_fr_E1, \ - z10_other_fr_E1, z10_store_rec") + z10_other_fr_E1, z10_store_rec" + " ! s390_agen_dep_p") ; @@ -205,15 +208,12 @@ (and (eq_attr "type" "lr") (eq_attr "z10prop" "z10_fr"))) "z10_e1_ANY, z10_Gate_ANY") -; "z10_e1_ANY") (define_insn_reservation "z10_lr_fr_E1" 6 (and (eq_attr "cpu" "z10") (and (eq_attr "type" "lr") (eq_attr "z10prop" "z10_fr_E1"))) "z10_e1_ANY, z10_Gate_ANY") -; "z10_e1_ANY") - (define_insn_reservation "z10_la" 6 (and (eq_attr "cpu" "z10") @@ -227,14 +227,12 @@ (and (eq_attr "type" "la") (eq_attr "z10prop" "z10_fwd"))) "z10_e1_ANY, z10_Gate_ANY") -; "z10_e1_ANY") (define_insn_reservation "z10_la_fwd_A1" 6 (and (eq_attr "cpu" "z10") (and (eq_attr "type" "la") (eq_attr "z10prop" "z10_fwd_A1"))) "z10_e1_ANY, z10_Gate_ANY") -; "z10_e1_ANY") ; larl-type instructions @@ -666,13 +664,14 @@ ; Address-related bypasses ; -; Here is the cycle diagram for Address-related bypasses: +; Here is the cycle diagram for address-related bypasses: ; ... G1 G2 G3 A0 A1 A2 A3 E1 P1 P2 P3 R0 ... -; ^ ^ ^ ^ ^ -; | | | | E1-type bypasses provide the new addr AFTER this cycle -; | | | A3-type bypasses provide the new addr AFTER this cycle -; | | A1-type bypasses provide the new addr AFTER this cycle -; | AGI resolution, actual USE of address is DURING this cycle +; ^ ^ ^ ^ ^ ^ +; | | | | | without bypass, its available AFTER this cycle +; | | | | E1-type bypasses provide the new value AFTER this cycle +; | | | A3-type bypasses provide the new value AFTER this cycle +; | | A1-type bypasses provide the new value AFTER this cycle +; | AGI resolution, actual USE of new value is DURING this cycle ; AGI detection (define_bypass 3 "z10_larl_A1, z10_la_fwd_A1, z10_other_fwd_A1, \ @@ -682,7 +681,6 @@ z10_cs, z10_stm, z10_other" "s390_agen_dep_p") - (define_bypass 5 "z10_larl_fwd_A3, z10_load_fwd_A3, z10_other_fwd_A3, \ z10_other_fr_A3, z10_int_fwd_A3, z10_int_fr_A3" "z10_agen, z10_la, z10_branch, z10_call, z10_load, \ @@ -699,6 +697,12 @@ z10_cs, z10_stm, z10_other" "s390_agen_dep_p") +(define_bypass 9 "z10_int_super, z10_int_fwd, z10_int_fr" + "z10_agen, z10_la, z10_branch, z10_call, z10_load, \ + z10_store, \ + z10_cs, z10_stm, z10_other" + "s390_agen_dep_p") + ; diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index e439b01709f..a4334819203 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -9003,6 +9003,7 @@ s390_encode_section_info (tree decl, rtx rtl, int first) && GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF && TREE_CONSTANT_POOL_ADDRESS_P (XEXP (rtl, 0)) && (MEM_ALIGN (rtl) == 0 + || GET_MODE_BITSIZE (GET_MODE (rtl)) == 0 || MEM_ALIGN (rtl) < GET_MODE_BITSIZE (GET_MODE (rtl)))) SYMBOL_REF_FLAGS (XEXP (rtl, 0)) |= SYMBOL_FLAG_NOT_NATURALLY_ALIGNED; } @@ -9863,9 +9864,12 @@ s390_z10_optimize_cmp (rtx insn) if (!REG_P (*op0) || !REG_P (*op1)) return false; + if (GET_MODE_CLASS (GET_MODE (*op0)) != MODE_INT) + return false; + /* Swap the COMPARE arguments and its mask if there is a conflicting access in the previous insn. */ - prev_insn = PREV_INSN (insn); + prev_insn = prev_active_insn (insn); if (prev_insn != NULL_RTX && INSN_P (prev_insn) && reg_referenced_p (*op1, PATTERN (prev_insn))) s390_swap_cmp (cond, op0, op1, insn); @@ -9876,7 +9880,7 @@ s390_z10_optimize_cmp (rtx insn) the operands, or if swapping them would cause a conflict with the previous insn, issue a NOP after the COMPARE in order to separate the two instuctions. */ - next_insn = NEXT_INSN (insn); + next_insn = next_active_insn (insn); if (next_insn != NULL_RTX && INSN_P (next_insn) && s390_non_addr_reg_read_p (*op1, next_insn)) { diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 90ed18b0f0d..8f4a71feb3f 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -220,7 +220,7 @@ ;; reg: Instruction does not use the agen unit (define_attr "atype" "agen,reg" - (if_then_else (eq_attr "op_type" "E,RR,RI,RRE") + (if_then_else (eq_attr "op_type" "E,RR,RI,RRE,RSI,RIL,RIE,RRF,RRR") (const_string "reg") (const_string "agen"))) diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index 679cf11e83e..26bceea670d 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -222,7 +222,9 @@ static bool sh_optimize_target_register_callee_saved (bool); static bool sh_ms_bitfield_layout_p (const_tree); static void sh_init_builtins (void); +static tree sh_builtin_decl (unsigned, bool); static void sh_media_init_builtins (void); +static tree sh_media_builtin_decl (unsigned, bool); static rtx sh_expand_builtin (tree, rtx, rtx, enum machine_mode, int); static void sh_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree); static void sh_file_start (void); @@ -416,6 +418,8 @@ static const struct attribute_spec sh_attribute_table[] = #undef TARGET_INIT_BUILTINS #define TARGET_INIT_BUILTINS sh_init_builtins +#undef TARGET_BUILTIN_DECL +#define TARGET_BUILTIN_DECL sh_builtin_decl #undef TARGET_EXPAND_BUILTIN #define TARGET_EXPAND_BUILTIN sh_expand_builtin @@ -9427,6 +9431,7 @@ nonpic_symbol_mentioned_p (rtx x) || XINT (x, 1) == UNSPEC_GOTPLT || XINT (x, 1) == UNSPEC_GOTTPOFF || XINT (x, 1) == UNSPEC_DTPOFF + || XINT (x, 1) == UNSPEC_TPOFF || XINT (x, 1) == UNSPEC_PLT || XINT (x, 1) == UNSPEC_SYMOFF || XINT (x, 1) == UNSPEC_PCREL_SYMOFF)) @@ -10520,6 +10525,7 @@ struct builtin_description const enum insn_code icode; const char *const name; int signature; + tree fndecl; }; /* describe number and signedness of arguments; arg[0] == result @@ -10586,99 +10592,99 @@ static const char signature_args[][4] = /* mshalds, mshard, mshards, mshlld, mshlrd: shift count is unsigned int. */ /* mshards_q: returns signed short. */ /* nsb: takes long long arg, returns unsigned char. */ -static const struct builtin_description bdesc[] = -{ - { CODE_FOR_absv2si2, "__builtin_absv2si2", SH_BLTIN_V2SI2 }, - { CODE_FOR_absv4hi2, "__builtin_absv4hi2", SH_BLTIN_V4HI2 }, - { CODE_FOR_addv2si3, "__builtin_addv2si3", SH_BLTIN_V2SI3 }, - { CODE_FOR_addv4hi3, "__builtin_addv4hi3", SH_BLTIN_V4HI3 }, - { CODE_FOR_ssaddv2si3,"__builtin_ssaddv2si3", SH_BLTIN_V2SI3 }, - { CODE_FOR_usaddv8qi3,"__builtin_usaddv8qi3", SH_BLTIN_V8QI3 }, - { CODE_FOR_ssaddv4hi3,"__builtin_ssaddv4hi3", SH_BLTIN_V4HI3 }, - { CODE_FOR_alloco_i, "__builtin_sh_media_ALLOCO", SH_BLTIN_PV }, - { CODE_FOR_negcmpeqv8qi,"__builtin_sh_media_MCMPEQ_B", SH_BLTIN_V8QI3 }, - { CODE_FOR_negcmpeqv2si,"__builtin_sh_media_MCMPEQ_L", SH_BLTIN_V2SI3 }, - { CODE_FOR_negcmpeqv4hi,"__builtin_sh_media_MCMPEQ_W", SH_BLTIN_V4HI3 }, - { CODE_FOR_negcmpgtuv8qi,"__builtin_sh_media_MCMPGT_UB", SH_BLTIN_V8QI3 }, - { CODE_FOR_negcmpgtv2si,"__builtin_sh_media_MCMPGT_L", SH_BLTIN_V2SI3 }, - { CODE_FOR_negcmpgtv4hi,"__builtin_sh_media_MCMPGT_W", SH_BLTIN_V4HI3 }, - { CODE_FOR_mcmv, "__builtin_sh_media_MCMV", SH_BLTIN_UUUU }, - { CODE_FOR_mcnvs_lw, "__builtin_sh_media_MCNVS_LW", SH_BLTIN_3 }, - { CODE_FOR_mcnvs_wb, "__builtin_sh_media_MCNVS_WB", SH_BLTIN_V4HI2V8QI }, - { CODE_FOR_mcnvs_wub, "__builtin_sh_media_MCNVS_WUB", SH_BLTIN_V4HI2V8QI }, - { CODE_FOR_mextr1, "__builtin_sh_media_MEXTR1", SH_BLTIN_V8QI3 }, - { CODE_FOR_mextr2, "__builtin_sh_media_MEXTR2", SH_BLTIN_V8QI3 }, - { CODE_FOR_mextr3, "__builtin_sh_media_MEXTR3", SH_BLTIN_V8QI3 }, - { CODE_FOR_mextr4, "__builtin_sh_media_MEXTR4", SH_BLTIN_V8QI3 }, - { CODE_FOR_mextr5, "__builtin_sh_media_MEXTR5", SH_BLTIN_V8QI3 }, - { CODE_FOR_mextr6, "__builtin_sh_media_MEXTR6", SH_BLTIN_V8QI3 }, - { CODE_FOR_mextr7, "__builtin_sh_media_MEXTR7", SH_BLTIN_V8QI3 }, - { CODE_FOR_mmacfx_wl, "__builtin_sh_media_MMACFX_WL", SH_BLTIN_MAC_HISI }, - { CODE_FOR_mmacnfx_wl,"__builtin_sh_media_MMACNFX_WL", SH_BLTIN_MAC_HISI }, - { CODE_FOR_mulv2si3, "__builtin_mulv2si3", SH_BLTIN_V2SI3, }, - { CODE_FOR_mulv4hi3, "__builtin_mulv4hi3", SH_BLTIN_V4HI3 }, - { CODE_FOR_mmulfx_l, "__builtin_sh_media_MMULFX_L", SH_BLTIN_V2SI3 }, - { CODE_FOR_mmulfx_w, "__builtin_sh_media_MMULFX_W", SH_BLTIN_V4HI3 }, - { CODE_FOR_mmulfxrp_w,"__builtin_sh_media_MMULFXRP_W", SH_BLTIN_V4HI3 }, - { CODE_FOR_mmulhi_wl, "__builtin_sh_media_MMULHI_WL", SH_BLTIN_V4HI2V2SI }, - { CODE_FOR_mmullo_wl, "__builtin_sh_media_MMULLO_WL", SH_BLTIN_V4HI2V2SI }, - { CODE_FOR_mmulsum_wq,"__builtin_sh_media_MMULSUM_WQ", SH_BLTIN_XXUU }, - { CODE_FOR_mperm_w, "__builtin_sh_media_MPERM_W", SH_BLTIN_SH_HI }, - { CODE_FOR_msad_ubq, "__builtin_sh_media_MSAD_UBQ", SH_BLTIN_XXUU }, - { CODE_FOR_mshalds_l, "__builtin_sh_media_MSHALDS_L", SH_BLTIN_SH_SI }, - { CODE_FOR_mshalds_w, "__builtin_sh_media_MSHALDS_W", SH_BLTIN_SH_HI }, - { CODE_FOR_ashrv2si3, "__builtin_ashrv2si3", SH_BLTIN_SH_SI }, - { CODE_FOR_ashrv4hi3, "__builtin_ashrv4hi3", SH_BLTIN_SH_HI }, - { CODE_FOR_mshards_q, "__builtin_sh_media_MSHARDS_Q", SH_BLTIN_SUS }, - { CODE_FOR_mshfhi_b, "__builtin_sh_media_MSHFHI_B", SH_BLTIN_V8QI3 }, - { CODE_FOR_mshfhi_l, "__builtin_sh_media_MSHFHI_L", SH_BLTIN_V2SI3 }, - { CODE_FOR_mshfhi_w, "__builtin_sh_media_MSHFHI_W", SH_BLTIN_V4HI3 }, - { CODE_FOR_mshflo_b, "__builtin_sh_media_MSHFLO_B", SH_BLTIN_V8QI3 }, - { CODE_FOR_mshflo_l, "__builtin_sh_media_MSHFLO_L", SH_BLTIN_V2SI3 }, - { CODE_FOR_mshflo_w, "__builtin_sh_media_MSHFLO_W", SH_BLTIN_V4HI3 }, - { CODE_FOR_ashlv2si3, "__builtin_ashlv2si3", SH_BLTIN_SH_SI }, - { CODE_FOR_ashlv4hi3, "__builtin_ashlv4hi3", SH_BLTIN_SH_HI }, - { CODE_FOR_lshrv2si3, "__builtin_lshrv2si3", SH_BLTIN_SH_SI }, - { CODE_FOR_lshrv4hi3, "__builtin_lshrv4hi3", SH_BLTIN_SH_HI }, - { CODE_FOR_subv2si3, "__builtin_subv2si3", SH_BLTIN_V2SI3 }, - { CODE_FOR_subv4hi3, "__builtin_subv4hi3", SH_BLTIN_V4HI3 }, - { CODE_FOR_sssubv2si3,"__builtin_sssubv2si3", SH_BLTIN_V2SI3 }, - { CODE_FOR_ussubv8qi3,"__builtin_ussubv8qi3", SH_BLTIN_V8QI3 }, - { CODE_FOR_sssubv4hi3,"__builtin_sssubv4hi3", SH_BLTIN_V4HI3 }, - { CODE_FOR_fcosa_s, "__builtin_sh_media_FCOSA_S", SH_BLTIN_SISF }, - { CODE_FOR_fsina_s, "__builtin_sh_media_FSINA_S", SH_BLTIN_SISF }, - { CODE_FOR_fipr, "__builtin_sh_media_FIPR_S", SH_BLTIN_3 }, - { CODE_FOR_ftrv, "__builtin_sh_media_FTRV_S", SH_BLTIN_3 }, - { CODE_FOR_mac_media, "__builtin_sh_media_FMAC_S", SH_BLTIN_3 }, - { CODE_FOR_sqrtdf2, "__builtin_sh_media_FSQRT_D", SH_BLTIN_2 }, - { CODE_FOR_sqrtsf2, "__builtin_sh_media_FSQRT_S", SH_BLTIN_2 }, - { CODE_FOR_fsrra_s, "__builtin_sh_media_FSRRA_S", SH_BLTIN_2 }, - { CODE_FOR_ldhi_l, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L }, - { CODE_FOR_ldhi_q, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q }, - { CODE_FOR_ldlo_l, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L }, - { CODE_FOR_ldlo_q, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q }, - { CODE_FOR_sthi_l, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L }, - { CODE_FOR_sthi_q, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q }, - { CODE_FOR_stlo_l, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L }, - { CODE_FOR_stlo_q, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q }, - { CODE_FOR_ldhi_l64, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L64 }, - { CODE_FOR_ldhi_q64, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q64 }, - { CODE_FOR_ldlo_l64, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L64 }, - { CODE_FOR_ldlo_q64, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q64 }, - { CODE_FOR_sthi_l64, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L64 }, - { CODE_FOR_sthi_q64, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q64 }, - { CODE_FOR_stlo_l64, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L64 }, - { CODE_FOR_stlo_q64, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q64 }, - { CODE_FOR_nsb, "__builtin_sh_media_NSB", SH_BLTIN_SU }, - { CODE_FOR_byterev, "__builtin_sh_media_BYTEREV", SH_BLTIN_2 }, - { CODE_FOR_prefetch, "__builtin_sh_media_PREFO", SH_BLTIN_PSSV }, +static struct builtin_description bdesc[] = +{ + { CODE_FOR_absv2si2, "__builtin_absv2si2", SH_BLTIN_V2SI2, 0 }, + { CODE_FOR_absv4hi2, "__builtin_absv4hi2", SH_BLTIN_V4HI2, 0 }, + { CODE_FOR_addv2si3, "__builtin_addv2si3", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_addv4hi3, "__builtin_addv4hi3", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_ssaddv2si3,"__builtin_ssaddv2si3", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_usaddv8qi3,"__builtin_usaddv8qi3", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_ssaddv4hi3,"__builtin_ssaddv4hi3", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_alloco_i, "__builtin_sh_media_ALLOCO", SH_BLTIN_PV, 0 }, + { CODE_FOR_negcmpeqv8qi,"__builtin_sh_media_MCMPEQ_B", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_negcmpeqv2si,"__builtin_sh_media_MCMPEQ_L", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_negcmpeqv4hi,"__builtin_sh_media_MCMPEQ_W", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_negcmpgtuv8qi,"__builtin_sh_media_MCMPGT_UB", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_negcmpgtv2si,"__builtin_sh_media_MCMPGT_L", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_negcmpgtv4hi,"__builtin_sh_media_MCMPGT_W", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_mcmv, "__builtin_sh_media_MCMV", SH_BLTIN_UUUU, 0 }, + { CODE_FOR_mcnvs_lw, "__builtin_sh_media_MCNVS_LW", SH_BLTIN_3, 0 }, + { CODE_FOR_mcnvs_wb, "__builtin_sh_media_MCNVS_WB", SH_BLTIN_V4HI2V8QI, 0 }, + { CODE_FOR_mcnvs_wub, "__builtin_sh_media_MCNVS_WUB", SH_BLTIN_V4HI2V8QI, 0 }, + { CODE_FOR_mextr1, "__builtin_sh_media_MEXTR1", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mextr2, "__builtin_sh_media_MEXTR2", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mextr3, "__builtin_sh_media_MEXTR3", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mextr4, "__builtin_sh_media_MEXTR4", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mextr5, "__builtin_sh_media_MEXTR5", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mextr6, "__builtin_sh_media_MEXTR6", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mextr7, "__builtin_sh_media_MEXTR7", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mmacfx_wl, "__builtin_sh_media_MMACFX_WL", SH_BLTIN_MAC_HISI, 0 }, + { CODE_FOR_mmacnfx_wl,"__builtin_sh_media_MMACNFX_WL", SH_BLTIN_MAC_HISI, 0 }, + { CODE_FOR_mulv2si3, "__builtin_mulv2si3", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_mulv4hi3, "__builtin_mulv4hi3", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_mmulfx_l, "__builtin_sh_media_MMULFX_L", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_mmulfx_w, "__builtin_sh_media_MMULFX_W", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_mmulfxrp_w,"__builtin_sh_media_MMULFXRP_W", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_mmulhi_wl, "__builtin_sh_media_MMULHI_WL", SH_BLTIN_V4HI2V2SI, 0 }, + { CODE_FOR_mmullo_wl, "__builtin_sh_media_MMULLO_WL", SH_BLTIN_V4HI2V2SI, 0 }, + { CODE_FOR_mmulsum_wq,"__builtin_sh_media_MMULSUM_WQ", SH_BLTIN_XXUU, 0 }, + { CODE_FOR_mperm_w, "__builtin_sh_media_MPERM_W", SH_BLTIN_SH_HI, 0 }, + { CODE_FOR_msad_ubq, "__builtin_sh_media_MSAD_UBQ", SH_BLTIN_XXUU, 0 }, + { CODE_FOR_mshalds_l, "__builtin_sh_media_MSHALDS_L", SH_BLTIN_SH_SI, 0 }, + { CODE_FOR_mshalds_w, "__builtin_sh_media_MSHALDS_W", SH_BLTIN_SH_HI, 0 }, + { CODE_FOR_ashrv2si3, "__builtin_ashrv2si3", SH_BLTIN_SH_SI, 0 }, + { CODE_FOR_ashrv4hi3, "__builtin_ashrv4hi3", SH_BLTIN_SH_HI, 0 }, + { CODE_FOR_mshards_q, "__builtin_sh_media_MSHARDS_Q", SH_BLTIN_SUS, 0 }, + { CODE_FOR_mshfhi_b, "__builtin_sh_media_MSHFHI_B", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mshfhi_l, "__builtin_sh_media_MSHFHI_L", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_mshfhi_w, "__builtin_sh_media_MSHFHI_W", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_mshflo_b, "__builtin_sh_media_MSHFLO_B", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_mshflo_l, "__builtin_sh_media_MSHFLO_L", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_mshflo_w, "__builtin_sh_media_MSHFLO_W", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_ashlv2si3, "__builtin_ashlv2si3", SH_BLTIN_SH_SI, 0 }, + { CODE_FOR_ashlv4hi3, "__builtin_ashlv4hi3", SH_BLTIN_SH_HI, 0 }, + { CODE_FOR_lshrv2si3, "__builtin_lshrv2si3", SH_BLTIN_SH_SI, 0 }, + { CODE_FOR_lshrv4hi3, "__builtin_lshrv4hi3", SH_BLTIN_SH_HI, 0 }, + { CODE_FOR_subv2si3, "__builtin_subv2si3", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_subv4hi3, "__builtin_subv4hi3", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_sssubv2si3,"__builtin_sssubv2si3", SH_BLTIN_V2SI3, 0 }, + { CODE_FOR_ussubv8qi3,"__builtin_ussubv8qi3", SH_BLTIN_V8QI3, 0 }, + { CODE_FOR_sssubv4hi3,"__builtin_sssubv4hi3", SH_BLTIN_V4HI3, 0 }, + { CODE_FOR_fcosa_s, "__builtin_sh_media_FCOSA_S", SH_BLTIN_SISF, 0 }, + { CODE_FOR_fsina_s, "__builtin_sh_media_FSINA_S", SH_BLTIN_SISF, 0 }, + { CODE_FOR_fipr, "__builtin_sh_media_FIPR_S", SH_BLTIN_3, 0 }, + { CODE_FOR_ftrv, "__builtin_sh_media_FTRV_S", SH_BLTIN_3, 0 }, + { CODE_FOR_mac_media, "__builtin_sh_media_FMAC_S", SH_BLTIN_3, 0 }, + { CODE_FOR_sqrtdf2, "__builtin_sh_media_FSQRT_D", SH_BLTIN_2, 0 }, + { CODE_FOR_sqrtsf2, "__builtin_sh_media_FSQRT_S", SH_BLTIN_2, 0 }, + { CODE_FOR_fsrra_s, "__builtin_sh_media_FSRRA_S", SH_BLTIN_2, 0 }, + { CODE_FOR_ldhi_l, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L, 0 }, + { CODE_FOR_ldhi_q, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q, 0 }, + { CODE_FOR_ldlo_l, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L, 0 }, + { CODE_FOR_ldlo_q, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q, 0 }, + { CODE_FOR_sthi_l, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L, 0 }, + { CODE_FOR_sthi_q, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q, 0 }, + { CODE_FOR_stlo_l, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L, 0 }, + { CODE_FOR_stlo_q, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q, 0 }, + { CODE_FOR_ldhi_l64, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L64, 0 }, + { CODE_FOR_ldhi_q64, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q64, 0 }, + { CODE_FOR_ldlo_l64, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L64, 0 }, + { CODE_FOR_ldlo_q64, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q64, 0 }, + { CODE_FOR_sthi_l64, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L64, 0 }, + { CODE_FOR_sthi_q64, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q64, 0 }, + { CODE_FOR_stlo_l64, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L64, 0 }, + { CODE_FOR_stlo_q64, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q64, 0 }, + { CODE_FOR_nsb, "__builtin_sh_media_NSB", SH_BLTIN_SU, 0 }, + { CODE_FOR_byterev, "__builtin_sh_media_BYTEREV", SH_BLTIN_2, 0 }, + { CODE_FOR_prefetch, "__builtin_sh_media_PREFO", SH_BLTIN_PSSV, 0 }, }; static void sh_media_init_builtins (void) { tree shared[SH_BLTIN_NUM_SHARED_SIGNATURES]; - const struct builtin_description *d; + struct builtin_description *d; memset (shared, 0, sizeof shared); for (d = bdesc; d - bdesc < (int) ARRAY_SIZE (bdesc); d++) @@ -10724,11 +10730,23 @@ sh_media_init_builtins (void) if (signature < SH_BLTIN_NUM_SHARED_SIGNATURES) shared[signature] = type; } - add_builtin_function (d->name, type, d - bdesc, BUILT_IN_MD, - NULL, NULL_TREE); + d->fndecl = + add_builtin_function (d->name, type, d - bdesc, BUILT_IN_MD, + NULL, NULL_TREE); } } +/* Returns the shmedia builtin decl for CODE. */ + +static tree +sh_media_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED) +{ + if (code >= ARRAY_SIZE (bdesc)) + return error_mark_node; + + return bdesc[code].fndecl; +} + /* Implements target hook vector_mode_supported_p. */ bool sh_vector_mode_supported_p (enum machine_mode mode) @@ -10767,6 +10785,17 @@ sh_init_builtins (void) sh_media_init_builtins (); } +/* Returns the sh builtin decl for CODE. */ + +static tree +sh_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED) +{ + if (TARGET_SHMEDIA) + return sh_media_builtin_decl (code, initialize_p); + + return error_mark_node; +} + /* Expand an expression EXP that calls a built-in function, with result going to TARGET if that's convenient (and in mode MODE if that's convenient). diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c index a05e1d804d7..ed5d6c59345 100644 --- a/gcc/config/spu/spu.c +++ b/gcc/config/spu/spu.c @@ -2368,7 +2368,7 @@ get_branch_target (rtx branch) return 0; /* ASM GOTOs. */ - if (GET_CODE (PATTERN (branch)) == ASM_OPERANDS) + if (extract_asm_operands (PATTERN (branch)) != NULL) return NULL; set = single_set (branch); diff --git a/gcc/configure b/gcc/configure index 66b38ec99a1..292b3dca631 100755 --- a/gcc/configure +++ b/gcc/configure @@ -22917,6 +22917,37 @@ $as_echo "#define HAVE_AS_IX86_SAHF 1" >>confdefs.h fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for swap suffix" >&5 +$as_echo_n "checking assembler for swap suffix... " >&6; } +if test "${gcc_cv_as_ix86_swap+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + gcc_cv_as_ix86_swap=no + if test x$gcc_cv_as != x; then + echo 'movl.s %esp, %ebp' > conftest.s + if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } + then + gcc_cv_as_ix86_swap=yes + else + echo "configure: failed program was" >&5 + cat conftest.s >&5 + fi + rm -f conftest.o conftest.s + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_swap" >&5 +$as_echo "$gcc_cv_as_ix86_swap" >&6; } +if test $gcc_cv_as_ix86_swap = yes; then + +$as_echo "#define HAVE_AS_IX86_SWAP 1" >>confdefs.h + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for different section symbol subtraction" >&5 $as_echo_n "checking assembler for different section symbol subtraction... " >&6; } if test "${gcc_cv_as_ix86_diff_sect_delta+set}" = set; then : diff --git a/gcc/configure.ac b/gcc/configure.ac index 7947d285629..dd3b7e890d2 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -3047,6 +3047,12 @@ foo: nop [AC_DEFINE(HAVE_AS_IX86_SAHF, 1, [Define if your assembler supports the sahf mnemonic.])]) + gcc_GAS_CHECK_FEATURE([swap suffix], + gcc_cv_as_ix86_swap,,, + [movl.s %esp, %ebp],, + [AC_DEFINE(HAVE_AS_IX86_SWAP, 1, + [Define if your assembler supports the swap suffix.])]) + gcc_GAS_CHECK_FEATURE([different section symbol subtraction], gcc_cv_as_ix86_diff_sect_delta,,, [.section .rodata diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d2a46b2b1b2..e0bf4f2e6de 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,65 @@ +2009-10-23 Jason Merrill <jason@redhat.com> + + * semantics.c (outer_lambda_capture_p): New fn. + (thisify_lambda_field): Factor out... + (add_default_capture): ...from here. + (finish_id_expression): Use them. + + Core issue 899 + * call.c (add_function_candidate): Only permit explicit conversion + ops if copy ctor was called with a single argument. + + * call.c (initialize_reference): Tweak error message. + +2009-10-21 Jakub Jelinek <jakub@redhat.com> + + * mangle.c (finish_mangling_get_identifier): Use + obstack_base (mangle_obstack) instead of name_base. + +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + * parser.c (cp_lexer_print_token, cp_parser_is_string_literal, + cp_parser_string_literal, cp_parser_primary_expression): Likewise. + (cp_lexer_get_preprocessor_token): Use C_LEX_STRING_JOIN instead + of C_LEX_RAW_STRINGS. + +2009-10-15 Jason Merrill <jason@redhat.com> + + PR c++/38888 + * error.c (dump_template_bindings): Wrap argument packs in {}. + + PR c++/38798 + * parser.c (CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS): New. + (cp_parser_type_specifier): Don't try to parse a class-specifier + or enum-specifier in that case. + (cp_parser_trailing_type_id): New. + (cp_parser_late_return_type_opt): Call it. + (cp_parser_type_id_1): Add is_trailing_return parm. + (cp_parser_type_specifier_seq): Likewise. + +2009-10-14 Jason Merrill <jason@redhat.com> + + PR c++/39866 + * call.c (print_z_candidates): Don't print deleted candidates. + (print_z_candidate): Note deleted candidates. + +2009-10-14 Larry Evans <cppljevans@suddenlink.net> + + PR c++/40092 + * tree.c (cp_tree_equal): Add test for TEMPLATE_PARM_PARAMETER_PACK + equality. + +2009-10-12 Jason Merrill <jason@redhat.com> + + PR c++/37875 + * parser.c (cp_parser_decltype): Set greater_than_is_operator_p. + + PR c++/37766 + * pt.c (type_unification_real): Call convert_template_argument + for function default template arguments. + (check_default_tmpl_args): Suggest -std=c++0x when function default + template args seen in C++98 mode. + 2009-10-11 Jason Merrill <jason@redhat.com> PR c++/37204 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 3fc22f2b911..45428045b84 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -1631,7 +1631,8 @@ add_function_candidate (struct z_candidate **candidates, parmtype = build_pointer_type (parmtype); } - if (ctype && i == 0 && DECL_COPY_CONSTRUCTOR_P (fn)) + if (ctype && i == 0 && DECL_COPY_CONSTRUCTOR_P (fn) + && (len-skip == 1)) { /* Hack: Direct-initialize copy parm (i.e. suppress LOOKUP_ONLYCONVERTING) to make explicit conversion ops @@ -2718,6 +2719,8 @@ print_z_candidate (const char *msgstr, struct z_candidate *candidate) inform (input_location, "%s %T <conversion>", msgstr, candidate->fn); else if (candidate->viable == -1) inform (input_location, "%s %+#D <near match>", msgstr, candidate->fn); + else if (DECL_DELETED_FN (candidate->fn)) + inform (input_location, "%s %+#D <deleted>", msgstr, candidate->fn); else inform (input_location, "%s %+#D", msgstr, candidate->fn); } @@ -2729,6 +2732,23 @@ print_z_candidates (struct z_candidate *candidates) struct z_candidate *cand1; struct z_candidate **cand2; + if (!candidates) + return; + + /* Remove deleted candidates. */ + cand1 = candidates; + for (cand2 = &cand1; *cand2; ) + { + if (TREE_CODE ((*cand2)->fn) == FUNCTION_DECL + && DECL_DELETED_FN ((*cand2)->fn)) + *cand2 = (*cand2)->next; + else + cand2 = &(*cand2)->next; + } + /* ...if there are any non-deleted ones. */ + if (cand1) + candidates = cand1; + /* There may be duplicates in the set of candidates. We put off checking this condition as long as possible, since we have no way to eliminate duplicates from a set of functions in less than n^2 @@ -2751,9 +2771,6 @@ print_z_candidates (struct z_candidate *candidates) } } - if (!candidates) - return; - str = _("candidates are:"); print_z_candidate (str, candidates); if (candidates->next) @@ -7603,7 +7620,7 @@ initialize_reference (tree type, tree expr, tree decl, tree *cleanup) && !TYPE_REF_IS_RVALUE (type) && !real_lvalue_p (expr)) error ("invalid initialization of non-const reference of " - "type %qT from a temporary of type %qT", + "type %qT from an rvalue of type %qT", type, TREE_TYPE (expr)); else error ("invalid initialization of reference of type " diff --git a/gcc/cp/error.c b/gcc/cp/error.c index b50704a3ae4..ce5660f4a85 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -311,7 +311,13 @@ dump_template_bindings (tree parms, tree args, VEC(tree,gc)* typenames) pp_equal (cxx_pp); pp_cxx_whitespace (cxx_pp); if (arg) - dump_template_argument (arg, TFF_PLAIN_IDENTIFIER); + { + if (ARGUMENT_PACK_P (arg)) + pp_cxx_left_brace (cxx_pp); + dump_template_argument (arg, TFF_PLAIN_IDENTIFIER); + if (ARGUMENT_PACK_P (arg)) + pp_cxx_right_brace (cxx_pp); + } else pp_string (cxx_pp, M_("<missing>")); diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index d96a929ec5c..f9a550394d6 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -2958,7 +2958,7 @@ finish_mangling_get_identifier (const bool warn) finish_mangling_internal (warn); /* Don't obstack_finish here, and the next start_mangling will remove the identifier. */ - return get_identifier ((const char *) name_base); + return get_identifier ((const char *) obstack_base (mangle_obstack)); } /* Initialize data structures for mangling. */ diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 44dceb21f74..7fd995f9e83 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -402,7 +402,7 @@ cp_lexer_get_preprocessor_token (cp_lexer *lexer, cp_token *token) /* Get a new token from the preprocessor. */ token->type = c_lex_with_flags (&token->u.value, &token->location, &token->flags, - lexer == NULL ? 0 : C_LEX_RAW_STRINGS); + lexer == NULL ? 0 : C_LEX_STRING_NO_JOIN); token->keyword = RID_MAX; token->pragma_kind = PRAGMA_NONE; @@ -792,6 +792,7 @@ cp_lexer_print_token (FILE * stream, cp_token *token) case CPP_STRING16: case CPP_STRING32: case CPP_WSTRING: + case CPP_UTF8STRING: fprintf (stream, " \"%s\"", TREE_STRING_POINTER (token->u.value)); break; @@ -1194,8 +1195,12 @@ enum /* The construct is optional. If it is not present, then no error should be issued. */ CP_PARSER_FLAGS_OPTIONAL = 0x1, - /* When parsing a type-specifier, do not allow user-defined types. */ - CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2 + /* When parsing a type-specifier, treat user-defined type-names + as non-type identifiers. */ + CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2, + /* When parsing a type-specifier, do not try to parse a class-specifier + or enum-specifier. */ + CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS = 0x4 }; /* This type is used for parameters and variables which hold @@ -1741,10 +1746,11 @@ static tree cp_parser_type_id (cp_parser *); static tree cp_parser_template_type_arg (cp_parser *); +static tree cp_parser_trailing_type_id (cp_parser *); static tree cp_parser_type_id_1 - (cp_parser *, bool); + (cp_parser *, bool, bool); static void cp_parser_type_specifier_seq - (cp_parser *, bool, cp_decl_specifier_seq *); + (cp_parser *, bool, bool, cp_decl_specifier_seq *); static tree cp_parser_parameter_declaration_clause (cp_parser *); static tree cp_parser_parameter_declaration_list @@ -2060,7 +2066,8 @@ cp_parser_is_string_literal (cp_token* token) return (token->type == CPP_STRING || token->type == CPP_STRING16 || token->type == CPP_STRING32 || - token->type == CPP_WSTRING); + token->type == CPP_WSTRING || + token->type == CPP_UTF8STRING); } /* Returns nonzero if TOKEN is the indicated KEYWORD. */ @@ -2999,6 +3006,7 @@ cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok) { default: case CPP_STRING: + case CPP_UTF8STRING: TREE_TYPE (value) = char_array_type_node; break; case CPP_STRING16: @@ -3228,6 +3236,7 @@ cp_parser_primary_expression (cp_parser *parser, case CPP_STRING16: case CPP_STRING32: case CPP_WSTRING: + case CPP_UTF8STRING: /* ??? Should wide strings be allowed when parser->translate_strings_p is false (i.e. in attributes)? If not, we can kill the third argument to cp_parser_string_literal. */ @@ -5795,6 +5804,7 @@ cp_parser_new_type_id (cp_parser* parser, tree *nelts) = "types may not be defined in a new-type-id"; /* Parse the type-specifier-seq. */ cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + /*is_trailing_return=*/false, &type_specifier_seq); /* Restore the old message. */ parser->type_definition_forbidden_message = saved_message; @@ -8028,6 +8038,7 @@ cp_parser_condition (cp_parser* parser) = "types may not be defined in conditions"; /* Parse the type-specifier-seq. */ cp_parser_type_specifier_seq (parser, /*is_condition==*/true, + /*is_trailing_return=*/false, &type_specifiers); /* Restore the saved message. */ parser->type_definition_forbidden_message = saved_message; @@ -9541,12 +9552,25 @@ cp_parser_decltype (cp_parser *parser) cp_parser_parse_definitely (parser); else { + bool saved_greater_than_is_operator_p; + /* Abort our attempt to parse an id-expression or member access expression. */ cp_parser_abort_tentative_parse (parser); + /* Within a parenthesized expression, a `>' token is always + the greater-than operator. */ + saved_greater_than_is_operator_p + = parser->greater_than_is_operator_p; + parser->greater_than_is_operator_p = true; + /* Parse a full expression. */ expr = cp_parser_expression (parser, /*cast_p=*/false, NULL); + + /* The `>' token might be the end of a template-id or + template-parameter-list now. */ + parser->greater_than_is_operator_p + = saved_greater_than_is_operator_p; } /* Go back to evaluating expressions. */ @@ -9656,6 +9680,7 @@ cp_parser_conversion_type_id (cp_parser* parser) attributes = cp_parser_attributes_opt (parser); /* Parse the type-specifiers. */ cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + /*is_trailing_return=*/false, &type_specifiers); /* If that didn't work, stop. */ if (type_specifiers.type == error_mark_node) @@ -11631,6 +11656,9 @@ cp_parser_type_specifier (cp_parser* parser, switch (keyword) { case RID_ENUM: + if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS)) + goto elaborated_type_specifier; + /* Look for the enum-specifier. */ type_spec = cp_parser_enum_specifier (parser); /* If that worked, we're done. */ @@ -11653,6 +11681,9 @@ cp_parser_type_specifier (cp_parser* parser, case RID_CLASS: case RID_STRUCT: case RID_UNION: + if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS)) + goto elaborated_type_specifier; + /* Parse tentatively so that we can back up if we don't find a class-specifier. */ cp_parser_parse_tentatively (parser); @@ -12519,6 +12550,7 @@ cp_parser_enum_specifier (cp_parser* parser) /* Parse the type-specifier-seq. */ cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + /*is_trailing_return=*/false, &type_specifiers); /* At this point this is surely not elaborated type specifier. */ @@ -14409,7 +14441,7 @@ cp_parser_cv_qualifier_seq_opt (cp_parser* parser) /* Parse a late-specified return type, if any. This is not a separate non-terminal, but part of a function declarator, which looks like - -> type-id + -> trailing-type-specifier-seq abstract-declarator(opt) Returns the type indicated by the type-id. */ @@ -14427,7 +14459,7 @@ cp_parser_late_return_type_opt (cp_parser* parser) /* Consume the ->. */ cp_lexer_consume_token (parser->lexer); - return cp_parser_type_id (parser); + return cp_parser_trailing_type_id (parser); } /* Parse a declarator-id. @@ -14480,13 +14512,15 @@ cp_parser_declarator_id (cp_parser* parser, bool optional_p) Returns the TYPE specified. */ static tree -cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg) +cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg, + bool is_trailing_return) { cp_decl_specifier_seq type_specifier_seq; cp_declarator *abstract_declarator; /* Parse the type-specifier-seq. */ cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + is_trailing_return, &type_specifier_seq); if (type_specifier_seq.type == error_mark_node) return error_mark_node; @@ -14524,12 +14558,17 @@ cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg) static tree cp_parser_type_id (cp_parser *parser) { - return cp_parser_type_id_1 (parser, false); + return cp_parser_type_id_1 (parser, false, false); } static tree cp_parser_template_type_arg (cp_parser *parser) { - return cp_parser_type_id_1 (parser, true); + return cp_parser_type_id_1 (parser, true, false); +} + +static tree cp_parser_trailing_type_id (cp_parser *parser) +{ + return cp_parser_type_id_1 (parser, false, true); } /* Parse a type-specifier-seq. @@ -14545,11 +14584,15 @@ static tree cp_parser_template_type_arg (cp_parser *parser) If IS_CONDITION is true, we are at the start of a "condition", e.g., we've just seen "if (". + If IS_TRAILING_RETURN is true, we are in a trailing-return-type, + i.e. we've just seen "->". + Sets *TYPE_SPECIFIER_SEQ to represent the sequence. */ static void cp_parser_type_specifier_seq (cp_parser* parser, bool is_condition, + bool is_trailing_return, cp_decl_specifier_seq *type_specifier_seq) { bool seen_type_specifier = false; @@ -14559,6 +14602,12 @@ cp_parser_type_specifier_seq (cp_parser* parser, /* Clear the TYPE_SPECIFIER_SEQ. */ clear_decl_specs (type_specifier_seq); + /* In the context of a trailing return type, enum E { } is an + elaborated-type-specifier followed by a function-body, not an + enum-specifier. */ + if (is_trailing_return) + flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS; + /* Parse the type-specifiers and attributes. */ while (true) { @@ -17270,6 +17319,7 @@ cp_parser_exception_declaration (cp_parser* parser) /* Parse the type-specifier-seq. */ cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + /*is_trailing_return=*/false, &type_specifiers); /* If it's a `)', then there is no declarator. */ if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)) @@ -22043,6 +22093,7 @@ cp_parser_omp_for_loop (cp_parser *parser, tree clauses, tree *par_clauses) cp_parser_parse_tentatively (parser); cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + /*is_trailing_return=*/false, &type_specifiers); if (cp_parser_parse_definitely (parser)) { diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 148adab2cba..084ad1cb09f 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4025,7 +4025,8 @@ check_default_tmpl_args (tree decl, tree parms, int is_primary, else if (is_friend_decl) msg = "default template arguments may not be used in function template friend declarations"; else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98)) - msg = "default template arguments may not be used in function templates"; + msg = ("default template arguments may not be used in function templates " + "without -std=c++0x or -std=gnu++0x"); else if (is_partial) msg = "default template arguments may not be used in partial specializations"; else @@ -13178,9 +13179,11 @@ type_unification_real (tree tparms, to explicitly check cxx_dialect here. */ if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i))) { - tree arg = tsubst_template_arg - (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)), - targs, tf_none, NULL_TREE); + tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i)); + tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i)); + arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE); + arg = convert_template_argument (parm, arg, targs, tf_none, + i, NULL_TREE); if (arg == error_mark_node) return 1; else diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 6cf22204a5e..3e39f3765e1 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -56,6 +56,7 @@ along with GCC; see the file COPYING3. If not see static tree maybe_convert_cond (tree); static tree finalize_nrv_r (tree *, int *, void *); static tree capture_decltype (tree); +static tree thisify_lambda_field (tree); /* Deferred Access Checking Overview @@ -1447,14 +1448,13 @@ finish_non_static_data_member (tree decl, tree object, tree qualifying_scope) return error_mark_node; } - /* If decl is a field, object has a lambda type, and decl is not a member - of that type, then we have a reference to a member of 'this' from a + /* If decl is a non-capture field and object has a lambda type, + then we have a reference to a member of 'this' from a lambda inside a non-static member function, and we must get to decl through the 'this' capture. If decl is not a member of that object, either, then its access will still fail later. */ if (LAMBDA_TYPE_P (TREE_TYPE (object)) - && !same_type_ignoring_top_level_qualifiers_p (DECL_CONTEXT (decl), - TREE_TYPE (object))) + && !LAMBDA_TYPE_P (DECL_CONTEXT (decl))) object = cp_build_indirect_ref (lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (TREE_TYPE (object))), @@ -2648,6 +2648,18 @@ outer_automatic_var_p (tree decl) && DECL_CONTEXT (decl) != current_function_decl); } +/* Returns true iff DECL is a capture field from a lambda that is not our + immediate context. */ + +static bool +outer_lambda_capture_p (tree decl) +{ + return (TREE_CODE (decl) == FIELD_DECL + && LAMBDA_TYPE_P (DECL_CONTEXT (decl)) + && (!current_class_type + || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type))); +} + /* ID_EXPRESSION is a representation of parsed, but unprocessed, id-expression. (See cp_parser_id_expression for details.) SCOPE, if non-NULL, is the type or namespace used to explicitly qualify @@ -2751,7 +2763,8 @@ finish_id_expression (tree id_expression, /* Disallow uses of local variables from containing functions, except within lambda-expressions. */ - if (outer_automatic_var_p (decl) + if ((outer_automatic_var_p (decl) + || outer_lambda_capture_p (decl)) /* It's not a use (3.2) if we're in an unevaluated context. */ && !cp_unevaluated_operand) { @@ -2759,6 +2772,7 @@ finish_id_expression (tree id_expression, tree containing_function = current_function_decl; tree lambda_stack = NULL_TREE; tree lambda_expr = NULL_TREE; + tree initializer = decl; /* Core issue 696: "[At the July 2009 meeting] the CWG expressed support for an approach in which a reference to a local @@ -2770,6 +2784,13 @@ finish_id_expression (tree id_expression, if (DECL_INTEGRAL_CONSTANT_VAR_P (decl)) return integral_constant_value (decl); + if (TYPE_P (context)) + { + /* Implicit capture of an explicit capture. */ + context = lambda_function (context); + initializer = thisify_lambda_field (decl); + } + /* If we are in a lambda function, we can move out until we hit 1. the context, 2. a non-lambda function, or @@ -2796,7 +2817,7 @@ finish_id_expression (tree id_expression, { decl = add_default_capture (lambda_stack, /*id=*/DECL_NAME (decl), - /*initializer=*/decl); + initializer); } else if (lambda_expr) { @@ -5604,6 +5625,21 @@ add_capture (tree lambda, tree id, tree initializer, bool by_reference_p, return member; } +/* Given a FIELD_DECL decl belonging to a closure type, return a + COMPONENT_REF of it relative to the 'this' parameter of the op() for + that type. */ + +static tree +thisify_lambda_field (tree decl) +{ + tree context = lambda_function (DECL_CONTEXT (decl)); + tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context), + /*errorstring*/"", + tf_warning_or_error); + return finish_non_static_data_member (decl, object, + /*qualifying_scope*/NULL_TREE); +} + /* Similar to add_capture, except this works on a stack of nested lambdas. BY_REFERENCE_P in this case is derived from the default capture mode. Returns the capture for the lambda at the bottom of the stack. */ @@ -5634,16 +5670,7 @@ add_default_capture (tree lambda_stack, tree id, tree initializer) && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_REFERENCE)), /*explicit_init_p=*/false); - - { - /* Have to get the old value of current_class_ref. */ - tree object = cp_build_indirect_ref (DECL_ARGUMENTS - (lambda_function (lambda)), - /*errorstring=*/"", - /*complain=*/tf_warning_or_error); - initializer = finish_non_static_data_member - (member, object, /*qualifying_scope=*/NULL_TREE); - } + initializer = thisify_lambda_field (member); } current_class_type = saved_class_type; diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 76763735b97..99ce6562070 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -2081,6 +2081,8 @@ cp_tree_equal (tree t1, tree t2) case TEMPLATE_PARM_INDEX: return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2) && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2) + && (TEMPLATE_PARM_PARAMETER_PACK (t1) + == TEMPLATE_PARM_PARAMETER_PACK (t2)) && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)), TREE_TYPE (TEMPLATE_PARM_DECL (t2)))); diff --git a/gcc/cselib.c b/gcc/cselib.c index e6e5c143dad..7065429be8b 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -585,6 +585,7 @@ rtx_equal_for_cselib_p (rtx x, rtx y) { case CONST_DOUBLE: case CONST_FIXED: + case DEBUG_EXPR: return 0; case LABEL_REF: @@ -661,6 +662,19 @@ rtx_equal_for_cselib_p (rtx x, rtx y) return 1; } +/* We need to pass down the mode of constants through the hash table + functions. For that purpose, wrap them in a CONST of the appropriate + mode. */ +static rtx +wrap_constant (enum machine_mode mode, rtx x) +{ + if (!CONST_INT_P (x) && GET_CODE (x) != CONST_FIXED + && (GET_CODE (x) != CONST_DOUBLE || GET_MODE (x) != VOIDmode)) + return x; + gcc_assert (mode != VOIDmode); + return gen_rtx_CONST (mode, x); +} + /* Hash an rtx. Return 0 if we couldn't hash the rtx. For registers and memory locations, we look up their cselib_val structure and return its VALUE element. @@ -703,6 +717,11 @@ cselib_hash_rtx (rtx x, int create) return e->value; + case DEBUG_EXPR: + hash += ((unsigned) DEBUG_EXPR << 7) + + DEBUG_TEMP_UID (DEBUG_EXPR_TREE_DECL (x)); + return hash ? hash : (unsigned int) DEBUG_EXPR; + case CONST_INT: hash += ((unsigned) CONST_INT << 7) + INTVAL (x); return hash ? hash : (unsigned int) CONST_INT; @@ -1213,6 +1232,13 @@ cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd, result = expand_loc (CSELIB_VAL_PTR (orig)->locs, evd, max_depth); return result; } + + case DEBUG_EXPR: + if (evd->callback) + return evd->callback (orig, evd->regs_active, max_depth, + evd->callback_arg); + return orig; + default: break; } @@ -1327,21 +1353,9 @@ cselib_expand_value_rtx_1 (rtx orig, struct expand_value_data *evd, default: break; } - if (scopy == NULL_RTX) - { - XEXP (copy, 0) - = gen_rtx_CONST (GET_MODE (XEXP (orig, 0)), XEXP (copy, 0)); - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, " wrapping const_int result in const to preserve mode %s\n", - GET_MODE_NAME (GET_MODE (XEXP (copy, 0)))); - } scopy = simplify_rtx (copy); if (scopy) - { - if (GET_MODE (copy) != GET_MODE (scopy)) - scopy = wrap_constant (GET_MODE (copy), scopy); - return scopy; - } + return scopy; return copy; } @@ -1408,30 +1422,31 @@ cselib_subst_to_values (rtx x) { rtx t = cselib_subst_to_values (XEXP (x, i)); - if (t != XEXP (x, i) && x == copy) - copy = shallow_copy_rtx (x); - - XEXP (copy, i) = t; + if (t != XEXP (x, i)) + { + if (x == copy) + copy = shallow_copy_rtx (x); + XEXP (copy, i) = t; + } } else if (fmt[i] == 'E') { - int j, k; + int j; for (j = 0; j < XVECLEN (x, i); j++) { rtx t = cselib_subst_to_values (XVECEXP (x, i, j)); - if (t != XVECEXP (x, i, j) && XVEC (x, i) == XVEC (copy, i)) + if (t != XVECEXP (x, i, j)) { - if (x == copy) - copy = shallow_copy_rtx (x); - - XVEC (copy, i) = rtvec_alloc (XVECLEN (x, i)); - for (k = 0; k < j; k++) - XVECEXP (copy, i, k) = XVECEXP (x, i, k); + if (XVEC (x, i) == XVEC (copy, i)) + { + if (x == copy) + copy = shallow_copy_rtx (x); + XVEC (copy, i) = shallow_copy_rtvec (XVEC (x, i)); + } + XVECEXP (copy, i, j) = t; } - - XVECEXP (copy, i, j) = t; } } } diff --git a/gcc/dbxout.c b/gcc/dbxout.c index d09087a2f2c..b5688d98cf1 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -346,6 +346,7 @@ const struct gcc_debug_hooks dbx_debug_hooks = { dbxout_init, dbxout_finish, + debug_nothing_void, debug_nothing_int_charstar, debug_nothing_int_charstar, dbxout_start_source_file, @@ -386,6 +387,7 @@ const struct gcc_debug_hooks xcoff_debug_hooks = { dbxout_init, dbxout_finish, + debug_nothing_void, debug_nothing_int_charstar, debug_nothing_int_charstar, dbxout_start_source_file, diff --git a/gcc/ddg.c b/gcc/ddg.c index 439acd1f434..c06ea75ea2d 100644 --- a/gcc/ddg.c +++ b/gcc/ddg.c @@ -167,7 +167,7 @@ create_ddg_dep_from_intra_loop_link (ddg_ptr g, ddg_node_ptr src_node, t = OUTPUT_DEP; gcc_assert (!DEBUG_INSN_P (dest_node->insn) || t == ANTI_DEP); - gcc_assert (!DEBUG_INSN_P (src_node->insn) || DEBUG_INSN_P (dest_node->insn)); + gcc_assert (!DEBUG_INSN_P (src_node->insn) || t == ANTI_DEP); /* We currently choose not to create certain anti-deps edges and compensate for that by generating reg-moves based on the life-range @@ -213,7 +213,7 @@ create_ddg_dep_no_link (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to, struct _dep _dep, *dep = &_dep; gcc_assert (!DEBUG_INSN_P (to->insn) || d_t == ANTI_DEP); - gcc_assert (!DEBUG_INSN_P (from->insn) || DEBUG_INSN_P (to->insn)); + gcc_assert (!DEBUG_INSN_P (from->insn) || d_t == ANTI_DEP); if (d_t == ANTI_DEP) dep_kind = REG_DEP_ANTI; diff --git a/gcc/debug.c b/gcc/debug.c index 8035c43ca4a..c413595078b 100644 --- a/gcc/debug.c +++ b/gcc/debug.c @@ -27,6 +27,7 @@ const struct gcc_debug_hooks do_nothing_debug_hooks = { debug_nothing_charstar, debug_nothing_charstar, + debug_nothing_void, debug_nothing_int_charstar, debug_nothing_int_charstar, debug_nothing_int_charstar, diff --git a/gcc/debug.h b/gcc/debug.h index 4009cd6a93b..ef611d43572 100644 --- a/gcc/debug.h +++ b/gcc/debug.h @@ -31,6 +31,10 @@ struct gcc_debug_hooks /* Output debug symbols. */ void (* finish) (const char *main_filename); + /* Called from cgraph_optimize before starting to assemble + functions/variables/toplevel asms. */ + void (* assembly_start) (void); + /* Macro defined on line LINE with name and expansion TEXT. */ void (* define) (unsigned int line, const char *text); diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 6f0955577c3..a0f66214e3f 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -2679,6 +2679,14 @@ when targeting Windows. On all other systems, the default is the AMD ABI. Note, This feature is currently sorried out for Windows targets trying to +@item ms_hook_prologue +@cindex @code{ms_hook_prologue} attribute + +On 32 bit i[34567]86-*-* targets, you can use this function attribute to make +gcc generate the "hot-patching" function prologue used in Win32 API +functions in Microsoft Windows XP Service Pack 2 and newer. This requires +support for the swap suffix in the assembler. (GNU Binutils 2.19.51 or later) + @item naked @cindex function without a prologue/epilogue code Use this attribute on the ARM, AVR, IP2K and SPU ports to indicate that @@ -9732,7 +9740,7 @@ storing the value 32767 if the result overflows. @item int __builtin_subs (int @var{x}, int @var{y}) Saturating subtraction. Return the result of subtracting @var{y} from -@var{x}, storing the value -32768 if the result overflows. +@var{x}, storing the value @minus{}32768 if the result overflows. @item void __builtin_halt (void) Halt. The processor will stop execution. This built-in is useful for diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 73d8dedaacf..c04f9cb65d5 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1346,8 +1346,10 @@ powerpc-linux for powerpc64-linux, only generates 32-bit code. This option enables the 32-bit target to be a bi-arch compiler, which is useful when you want a bi-arch compiler that defaults to 32-bit, and you are building a bi-arch or multi-arch binutils in a combined tree. -Currently, this option only affects sparc-linux, powerpc-linux and -x86-linux. +On mips-linux, this will build a tri-arch compiler (ABI o32/n32/64), +defaulted to o32. +Currently, this option only affects sparc-linux, powerpc-linux, x86-linux +and mips-linux. @item --enable-secureplt This option enables @option{-msecure-plt} by default for powerpc-linux. @@ -1882,6 +1884,9 @@ not specified, then the Python modules are installed in $(prefix)/share/python. @item --enable-aot-compile-rpm Adds aot-compile-rpm to the list of installed scripts. +@item --enable-browser-plugin +Build the gcjwebplugin web browser plugin. + @table @code @item ansi Use the single-byte @code{char} and the Win32 A functions natively, diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 3f131fd02b4..7b20ced5483 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -321,7 +321,7 @@ Objective-C and Objective-C++ Dialects}. -femit-struct-debug-baseonly -femit-struct-debug-reduced @gol -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol -p -pg -print-file-name=@var{library} -print-libgcc-file-name @gol --print-multi-directory -print-multi-lib @gol +-print-multi-directory -print-multi-lib -print-multi-os-directory @gol -print-prog-name=@var{program} -print-search-dirs -Q @gol -print-sysroot -print-sysroot-headers-suffix @gol -save-temps -save-temps=cwd -save-temps=obj -time@r{[}=@var{file}@r{]}} @@ -346,7 +346,8 @@ Objective-C and Objective-C++ Dialects}. -finline-small-functions -fipa-cp -fipa-cp-clone -fipa-matrix-reorg -fipa-pta @gol -fipa-pure-const -fipa-reference -fipa-struct-reorg @gol -fipa-type-escape -fira-algorithm=@var{algorithm} @gol --fira-region=@var{region} -fira-coalesce -fno-ira-share-save-slots @gol +-fira-region=@var{region} -fira-coalesce @gol +-fira-loop-pressure -fno-ira-share-save-slots @gol -fno-ira-share-spill-slots -fira-verbose=@var{n} @gol -fivopts -fkeep-inline-functions -fkeep-static-consts @gol -floop-block -floop-interchange -floop-strip-mine -fgraphite-identity @gol @@ -5530,6 +5531,16 @@ that enable them. The directory name is separated from the switches by @samp{-}, without spaces between multiple switches. This is supposed to ease shell-processing. +@item -print-multi-os-directory +@opindex print-multi-os-directory +Print the path to OS libraries for the selected +multilib, relative to some @file{lib} subdirectory. If OS libraries are +present in the @file{lib} subdirectory and no multilibs are used, this is +usually just @file{.}, if OS libraries are present in @file{lib@var{suffix}} +sibling directories this prints e.g.@: @file{../lib64}, @file{../lib} or +@file{../lib32}, or if OS libraries are present in @file{lib/@var{subdir}} +subdirectories it prints e.g.@: @file{amd64}, @file{sparcv9} or @file{ev6}. + @item -print-prog-name=@var{program} @opindex print-prog-name Like @option{-print-file-name}, but searches for a program such as @samp{cpp}. @@ -5627,6 +5638,9 @@ each of them. Not all optimizations are controlled directly by a flag. Only optimizations that have a flag are listed in this section. +Most of the optimizations are not enabled if a @option{-O} level is not set on +the command line, even if individual optimization flags are specified. + Depending on the target and how GCC was configured, a slightly different set of optimizations may be enabled at each @option{-O} level than those listed here. You can invoke GCC with @samp{-Q --help=optimizers} @@ -6216,6 +6230,15 @@ give the best results in most cases and for most architectures. Do optimistic register coalescing. This option might be profitable for architectures with big regular register files. +@item -fira-loop-pressure +@opindex fira-loop-pressure +Use IRA to evaluate register pressure in loops for decision to move +loop invariants. Usage of this option usually results in generation +of faster and smaller code on machines with big register files (>= 32 +registers) but it can slow compiler down. + +This option is enabled at level @option{-O3} for some targets. + @item -fno-ira-share-save-slots @opindex fno-ira-share-save-slots Switch off sharing stack slots used for saving call used hard @@ -8387,6 +8410,14 @@ lower quality register allocation algorithm will be used. The algorithm do not use pseudo-register conflicts. The default value of the parameter is 2000. +@item ira-loop-reserved-regs +IRA can be used to evaluate more accurate register pressure in loops +for decision to move loop invariants (see @option{-O3}). The number +of available registers reserved for some other purposes is described +by this parameter. The default value of the parameter is 2 which is +minimal number of registers needed for execution of typical +instruction. This value is the best found from numerous experiments. + @item loop-invariant-max-bbs-in-loop Loop invariant motion can be very expensive, both in compile time and in amount of needed compile time memory, with very large loops. Loops diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 69a23b693b4..8a1a389924c 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -1756,7 +1756,7 @@ Constant integer 1 A floating point constant 0.0 @item R -Integer constant in the range -6 @dots{} 5. +Integer constant in the range @minus{}6 @dots{} 5. @item Q A memory address based on Y or Z pointer with displacement. @@ -1787,7 +1787,7 @@ Constant that fits in 4 bits Constant that fits in 5 bits @item L -Constant that is one of -1, 4, -4, 7, 8, 12, 16, 20, 32, 48 +Constant that is one of @minus{}1, 4, @minus{}4, 7, 8, 12, 16, 20, 32, 48 @item G Floating point constant that is legal for store immediate @@ -2381,13 +2381,13 @@ RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and USP. Any register except accumulators or CC. @item Ksh -Signed 16 bit integer (in the range -32768 to 32767) +Signed 16 bit integer (in the range @minus{}32768 to 32767) @item Kuh Unsigned 16 bit integer (in the range 0 to 65535) @item Ks7 -Signed 7 bit integer (in the range -64 to 63) +Signed 7 bit integer (in the range @minus{}64 to 63) @item Ku7 Unsigned 7 bit integer (in the range 0 to 127) @@ -2396,10 +2396,10 @@ Unsigned 7 bit integer (in the range 0 to 127) Unsigned 5 bit integer (in the range 0 to 31) @item Ks4 -Signed 4 bit integer (in the range -8 to 7) +Signed 4 bit integer (in the range @minus{}8 to 7) @item Ks3 -Signed 3 bit integer (in the range -3 to 4) +Signed 3 bit integer (in the range @minus{}3 to 4) @item Ku3 Unsigned 3 bit integer (in the range 0 to 7) @@ -2511,28 +2511,28 @@ Matches multiple registers in a PARALLEL to form a larger register. Used to match function return values. @item Is3 --8 @dots{} 7 +@minus{}8 @dots{} 7 @item IS1 --128 @dots{} 127 +@minus{}128 @dots{} 127 @item IS2 --32768 @dots{} 32767 +@minus{}32768 @dots{} 32767 @item IU2 0 @dots{} 65535 @item In4 --8 @dots{} -1 or 1 @dots{} 8 +@minus{}8 @dots{} @minus{}1 or 1 @dots{} 8 @item In5 --16 @dots{} -1 or 1 @dots{} 16 +@minus{}16 @dots{} @minus{}1 or 1 @dots{} 16 @item In6 --32 @dots{} -1 or 1 @dots{} 32 +@minus{}32 @dots{} @minus{}1 or 1 @dots{} 32 @item IM2 --65536 @dots{} -1 +@minus{}65536 @dots{} @minus{}1 @item Ilb An 8 bit value with exactly one bit set. @@ -2717,7 +2717,7 @@ A constant that cannot be loaded using @code{lui}, @code{addiu} or @code{ori}. @item N -A constant in the range -65535 to -1 (inclusive). +A constant in the range @minus{}65535 to @minus{}1 (inclusive). @item O A signed 15-bit constant. @@ -2893,7 +2893,7 @@ A register indirect memory operand A constant in the range of 0 to 255. @item N -A constant in the range of 0 to -255. +A constant in the range of 0 to @minus{}255. @end table @@ -3012,7 +3012,7 @@ An immediate for and/xor/or instructions. const_int is treated as a 32 bit valu An immediate for the @code{iohl} instruction. const_int is treated as a 32 bit value. @item I -A constant in the range [-64, 63] for shift/rotate instructions. +A constant in the range [@minus{}64, 63] for shift/rotate instructions. @item J An unsigned 7-bit constant for conversion/nop/channel instructions. @@ -3083,7 +3083,7 @@ Value appropriate as displacement. @table @code @item (0..4095) for short displacement -@item (-524288..524287) +@item (@minus{}524288..524287) for long displacement @end table diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index ba72b48096b..e28ba032cdd 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -2364,9 +2364,14 @@ Similar but represent left and right rotate. If @var{c} is a constant, use @code{rotate}. @findex abs +@findex ss_abs @cindex absolute value @item (abs:@var{m} @var{x}) +@item (ss_abs:@var{m} @var{x}) Represents the absolute value of @var{x}, computed in mode @var{m}. +@code{ss_abs} ensures that an out-of-bounds result saturates to the +maximum signed value. + @findex sqrt @cindex square root diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index db42742e9e2..805ebf2b3ab 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -2349,6 +2349,11 @@ with it, as well as defining these macros. Define this if the machine has any stack-like registers. @end defmac +@defmac STACK_REG_COVER_CLASS +This is a cover class containing the stack registers. Define this if +the machine has any stack-like registers. +@end defmac + @defmac FIRST_STACK_REG The number of the first stack-like register. This one is the top of the stack. @@ -4394,7 +4399,7 @@ compiled. @end defmac @deftypefn {Target Hook} rtx TARGET_LIBCALL_VALUE (enum machine_mode -@var{mode}, rtx @var{fun}) +@var{mode}, const_rtx @var{fun}) Define this hook if the back-end needs to know the name of the libcall function in order to determine where the result should be returned. @@ -5628,7 +5633,7 @@ should comply with the semantics expected by @code{REALIGN_LOAD} described above. If this hook is not defined, then @var{addr} will be used as the argument @var{OFF} to @code{REALIGN_LOAD}, in which case the low -log2(@var{VS})-1 bits of @var{addr} will be considered. +log2(@var{VS}) @minus{} 1 bits of @var{addr} will be considered. @end deftypefn @deftypefn {Target Hook} tree TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN (tree @var{x}) @@ -6610,7 +6615,7 @@ speculative dependencies and therefore can be scheduled speculatively. The hook is used to check if the pattern of @var{insn} has a speculative version and, in case of successful check, to generate that speculative pattern. The hook should return 1, if the instruction has a speculative form, -or -1, if it doesn't. @var{request} describes the type of requested +or @minus{}1, if it doesn't. @var{request} describes the type of requested speculation. If the return value equals 1 then @var{new_pat} is assigned the generated speculative pattern. @end deftypefn diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index a8d0048e17f..ba59251d66b 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -5401,6 +5401,7 @@ static int output_indirect_string (void **, void *); static void dwarf2out_init (const char *); static void dwarf2out_finish (const char *); +static void dwarf2out_assembly_start (void); static void dwarf2out_define (unsigned int, const char *); static void dwarf2out_undef (unsigned int, const char *); static void dwarf2out_start_source_file (unsigned, const char *); @@ -5427,6 +5428,7 @@ const struct gcc_debug_hooks dwarf2_debug_hooks = { dwarf2out_init, dwarf2out_finish, + dwarf2out_assembly_start, dwarf2out_define, dwarf2out_undef, dwarf2out_start_source_file, @@ -6478,6 +6480,10 @@ dwarf_tag_name (unsigned int tag) return "DW_TAG_shared_type"; case DW_TAG_type_unit: return "DW_TAG_type_unit"; + case DW_TAG_rvalue_reference_type: + return "DW_TAG_rvalue_reference_type"; + case DW_TAG_template_alias: + return "DW_TAG_template_alias"; case DW_TAG_GNU_template_parameter_pack: return "DW_TAG_GNU_template_parameter_pack"; case DW_TAG_GNU_formal_parameter_pack: @@ -6662,6 +6668,16 @@ dwarf_attr_name (unsigned int attr) case DW_AT_signature: return "DW_AT_signature"; + case DW_AT_main_subprogram: + return "DW_AT_main_subprogram"; + case DW_AT_data_bit_offset: + return "DW_AT_data_bit_offset"; + case DW_AT_const_expr: + return "DW_AT_const_expr"; + case DW_AT_enum_class: + return "DW_AT_enum_class"; + case DW_AT_linkage_name: + return "DW_AT_linkage_name"; case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde"; @@ -6700,6 +6716,22 @@ dwarf_attr_name (unsigned int attr) return "DW_AT_body_end"; case DW_AT_GNU_vector: return "DW_AT_GNU_vector"; + case DW_AT_GNU_guarded_by: + return "DW_AT_GNU_guarded_by"; + case DW_AT_GNU_pt_guarded_by: + return "DW_AT_GNU_pt_guarded_by"; + case DW_AT_GNU_guarded: + return "DW_AT_GNU_guarded"; + case DW_AT_GNU_pt_guarded: + return "DW_AT_GNU_pt_guarded"; + case DW_AT_GNU_locks_excluded: + return "DW_AT_GNU_locks_excluded"; + case DW_AT_GNU_exclusive_locks_required: + return "DW_AT_GNU_exclusive_locks_required"; + case DW_AT_GNU_shared_locks_required: + return "DW_AT_GNU_shared_locks_required"; + case DW_AT_GNU_odr_signature: + return "DW_AT_GNU_odr_signature"; case DW_AT_GNU_template_name: return "DW_AT_GNU_template_name"; @@ -6760,6 +6792,14 @@ dwarf_form_name (unsigned int form) return "DW_FORM_ref_udata"; case DW_FORM_indirect: return "DW_FORM_indirect"; + case DW_FORM_sec_offset: + return "DW_FORM_sec_offset"; + case DW_FORM_exprloc: + return "DW_FORM_exprloc"; + case DW_FORM_flag_present: + return "DW_FORM_flag_present"; + case DW_FORM_ref_sig8: + return "DW_FORM_ref_sig8"; default: return "DW_FORM_<unknown>"; } @@ -10352,7 +10392,7 @@ output_signature (const char *sig, const char *name) int i; for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++) - dw2_asm_output_data (1, sig[i], "%s", name); + dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name); } /* Output the DIE and its attributes. Called recursively to generate @@ -10573,7 +10613,7 @@ output_die (dw_die_ref die) for (i = 0; i < 8; i++) dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i], - "%s", name); + i == 0 ? "%s" : NULL, name); break; } @@ -12856,10 +12896,7 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, case POST_INC: case POST_DEC: case POST_MODIFY: - /* POST_INC and POST_DEC can be handled just like a SUBREG. So we - just fall into the SUBREG code. */ - - /* ... fall through ... */ + return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized); case SUBREG: /* The case of a subreg may arise when we have a local (register) @@ -12867,9 +12904,13 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, up an entire register. For now, just assume that it is legitimate to make the Dwarf info refer to the whole register which contains the given subreg. */ - rtl = XEXP (rtl, 0); + if (!subreg_lowpart_p (rtl)) + break; + rtl = SUBREG_REG (rtl); if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE) break; + if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT) + break; mem_loc_result = mem_loc_descriptor (rtl, mode, initialized); break; @@ -13354,12 +13395,19 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, if (BITS_BIG_ENDIAN) shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) - shift - size; - add_loc_descr (&mem_loc_result, - int_loc_descriptor (DWARF2_ADDR_SIZE - shift - size)); - add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0)); - add_loc_descr (&mem_loc_result, - int_loc_descriptor (DWARF2_ADDR_SIZE - size)); - add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); + if (shift + size != (int) DWARF2_ADDR_SIZE) + { + add_loc_descr (&mem_loc_result, + int_loc_descriptor (DWARF2_ADDR_SIZE + - shift - size)); + add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0)); + } + if (size != (int) DWARF2_ADDR_SIZE) + { + add_loc_descr (&mem_loc_result, + int_loc_descriptor (DWARF2_ADDR_SIZE - size)); + add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); + } } break; @@ -13381,6 +13429,7 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode, case ORDERED: case UNEQ: case UNGE: + case UNGT: case UNLE: case UNLT: case LTGT: @@ -20012,8 +20061,7 @@ dwarf2out_var_location (rtx loc_note) ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num); loclabel_num++; last_label = ggc_strdup (loclabel); - if (!NOTE_DURING_CALL_P (loc_note)) - last_postcall_label = NULL; + last_postcall_label = NULL; } newloc->var_loc_note = loc_note; newloc->next = NULL; @@ -20346,6 +20394,14 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label); } +} + +/* Called before cgraph_optimize starts outputtting functions, variables + and toplevel asms into assembly. */ + +static void +dwarf2out_assembly_start (void) +{ if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ()) { #ifndef TARGET_UNWIND_INFO @@ -21228,6 +21284,7 @@ const struct gcc_debug_hooks dwarf2_debug_hooks = { 0, /* init */ 0, /* finish */ + 0, /* assembly_start */ 0, /* define */ 0, /* undef */ 0, /* start_source_file */ diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index b3672e3e5ad..b8682984eca 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -2393,6 +2393,8 @@ verify_rtx_sharing (rtx orig, rtx insn) switch (code) { case REG: + case DEBUG_EXPR: + case VALUE: case CONST_INT: case CONST_DOUBLE: case CONST_FIXED: @@ -2593,6 +2595,8 @@ repeat: switch (code) { case REG: + case DEBUG_EXPR: + case VALUE: case CONST_INT: case CONST_DOUBLE: case CONST_FIXED: @@ -2712,6 +2716,8 @@ repeat: switch (code) { case REG: + case DEBUG_EXPR: + case VALUE: case CONST_INT: case CONST_DOUBLE: case CONST_FIXED: @@ -2783,6 +2789,8 @@ set_used_flags (rtx x) switch (code) { case REG: + case DEBUG_EXPR: + case VALUE: case CONST_INT: case CONST_DOUBLE: case CONST_FIXED: diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5082c0a8d72..bc4ecb03d3e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,140 @@ +2009-10-23 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41800 + * trans-expr.c (gfc_trans_scalar_assign): Handle CLASS variables. + +2009-10-23 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41758 + * match.c (conformable_arrays): Move to resolve.c. + (gfc_match_allocate): Don't resolve SOURCE expr yet, and move some + checks to resolve_allocate_expr. + * resolve.c (conformable_arrays): Moved here from match.c. + (resolve_allocate_expr): Moved some checks here from gfc_match_allocate. + (resolve_code): Resolve SOURCE tag for ALLOCATE expressions. + +2009-10-22 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41781 + * resolve.c (resolve_codes): Don't clear 'cs_base' for BLOCK constructs, + to make sure labels are treated correctly. + * symbol.c (gfc_get_st_label): Create labels in the right namespace. + For BLOCK constructs go into the parent namespace. + +2009-10-21 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41706 + PR fortran/41766 + * match.c (select_type_set_tmp): Set flavor for temporary. + * resolve.c (resolve_class_typebound_call): Correctly resolve actual + arguments. + +2009-10-20 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41706 + * resolve.c (resolve_arg_exprs): New function. + (resolve_class_compcall): Call the above. + (resolve_class_typebound_call): The same. + +2009-10-19 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41586 + * parse.c (parse_derived): Correctly set 'alloc_comp' and 'pointer_comp' + for CLASS variables. + * trans-array.c (structure_alloc_comps): Handle deallocation and + nullification of allocatable scalar components. + * trans-decl.c (gfc_get_symbol_decl): Remember allocatable scalars for + automatic deallocation. + (gfc_trans_deferred_vars): Automatically deallocate allocatable scalars. + +2009-10-19 Tobias Burnus <burnus@net-b.de> + Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/41755 + * symbol.c (gfc_undo_symbols): Add NULL check. + * match.c (gfc_match_equivalence): Add check for + missing comma. + +2009-10-19 Richard Guenther <rguenther@suse.de> + + PR fortran/41494 + * trans-expr.c (gfc_trans_scalar_assign): Do not call + gfc_evaluate_now. + +2009-10-17 Janus Weil <janus@gcc.gnu.org> + Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41608 + * decl.c (gfc_match_data_decl): Add BT_CLASS for undefined type + and empty type errors. + * parse.c (gfc_build_block_ns): Only set recursive if parent ns + has a proc_name. + + PR fortran/41629 + PR fortran/41618 + PR fortran/41587 + * gfortran.h : Add class_ok bitfield to symbol_attr. + * decl.c (build_sym): Set attr.class_ok if dummy, pointer or + allocatable. + (build_struct): Use gfc_try 't' to carry errors past the call + to encapsulate_class_symbol. + (attr_decl1): For a CLASS object, apply the new attribute to + the data component. + * match.c (gfc_match_select_type): Set attr.class_ok for an + assigned selector. + * resolve.c (resolve_fl_variable_derived): Check a CLASS object + is dummy, pointer or allocatable by testing the class_ok and + the use_assoc attribute. + +2009-10-16 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41719 + * resolve.c (resolve_ordinary_assign): Reject intrinsic assignments + to polymorphic variables. + +2009-10-16 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41648 + PR fortran/41656 + * trans-expr.c (select_class_proc): Convert the expression for the + vindex, carried on the first member of the esym list. + * gfortran.h : Add the vindex field to the esym_list structure. + and eliminate the class_object field. + * resolve.c (check_class_members): Remove the setting of the + class_object field. + (vindex_expr): New function. + (get_class_from_expr): New function. + (resolve_class_compcall): Call the above to find the ultimate + class or derived component. If derived, do not generate the + esym list. Add and expression for the vindex to the esym list + by calling the above. + (resolve_class_typebound_call): The same. + +2009-10-15 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/41712 + * intrinsic.texi: Explicitly state that ETIME and DTIME take + REAL(4) arguments. Fix nearby typographically errors where + /leq was used instead of \leq. + +2009-10-13 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41581 + * decl.c (encapsulate_class_symbol): Add new component '$size'. + * resolve.c (resolve_allocate_expr): Move CLASS handling to + gfc_trans_allocate. + (resolve_class_assign): Replaced by gfc_trans_class_assign. + (resolve_code): Remove calls to resolve_class_assign. + * trans.c (gfc_trans_code): Use new function gfc_trans_class_assign. + * trans-expr.c (get_proc_ptr_comp): Fix a memory leak. + (gfc_conv_procedure_call): For CLASS dummies, set the + $size component. + (gfc_trans_class_assign): New function, replacing resolve_class_assign. + * trans-stmt.h (gfc_trans_class_assign): New prototype. + * trans-stmt.c (gfc_trans_allocate): Use correct size when allocating + CLASS variables. Do proper initialization. Move some code here from + resolve_allocate_expr. + 2009-10-11 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/38439 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 69449a32ce9..08d2bd69ddf 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1028,7 +1028,8 @@ verify_c_interop_param (gfc_symbol *sym) /* Build a polymorphic CLASS entity, using the symbol that comes from build_sym. A CLASS entity is represented by an encapsulating type, which contains the declared type as '$data' component, plus an integer component '$vindex' - which determines the dynamic type. */ + which determines the dynamic type, and another integer '$size', which + contains the size of the dynamic type structure. */ static gfc_try encapsulate_class_symbol (gfc_typespec *ts, symbol_attribute *attr, @@ -1089,6 +1090,14 @@ encapsulate_class_symbol (gfc_typespec *ts, symbol_attribute *attr, c->ts.kind = 4; c->attr.access = ACCESS_PRIVATE; c->initializer = gfc_int_expr (0); + + /* Add component '$size'. */ + if (gfc_add_component (fclass, "$size", &c) == FAILURE) + return FAILURE; + c->ts.type = BT_INTEGER; + c->ts.kind = 4; + c->attr.access = ACCESS_PRIVATE; + c->initializer = gfc_int_expr (0); } fclass->attr.extension = 1; @@ -1172,7 +1181,12 @@ build_sym (const char *name, gfc_charlen *cl, sym->attr.implied_index = 0; if (sym->ts.type == BT_CLASS) - encapsulate_class_symbol (&sym->ts, &sym->attr, &sym->as); + { + sym->attr.class_ok = (sym->attr.dummy + || sym->attr.pointer + || sym->attr.allocatable) ? 1 : 0; + encapsulate_class_symbol (&sym->ts, &sym->attr, &sym->as); + } return SUCCESS; } @@ -1463,6 +1477,7 @@ build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, gfc_array_spec **as) { gfc_component *c; + gfc_try t = SUCCESS; /* F03:C438/C439. If the current symbol is of the same derived type that we're constructing, it must have the pointer attribute. */ @@ -1545,12 +1560,9 @@ build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, } } - if (c->ts.type == BT_CLASS) - encapsulate_class_symbol (&c->ts, &c->attr, &c->as); - /* Check array components. */ if (!c->attr.dimension) - return SUCCESS; + goto scalar; if (c->attr.pointer) { @@ -1558,7 +1570,7 @@ build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, { gfc_error ("Pointer array component of structure at %C must have a " "deferred shape"); - return FAILURE; + t = FAILURE; } } else if (c->attr.allocatable) @@ -1567,7 +1579,7 @@ build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, { gfc_error ("Allocatable component of structure at %C must have a " "deferred shape"); - return FAILURE; + t = FAILURE; } } else @@ -1576,11 +1588,15 @@ build_struct (const char *name, gfc_charlen *cl, gfc_expr **init, { gfc_error ("Array component of structure at %C must have an " "explicit shape"); - return FAILURE; + t = FAILURE; } } - return SUCCESS; +scalar: + if (c->ts.type == BT_CLASS) + encapsulate_class_symbol (&c->ts, &c->attr, &c->as); + + return t; } @@ -3752,7 +3768,8 @@ gfc_match_data_decl (void) if (m != MATCH_YES) return m; - if (current_ts.type == BT_DERIVED && gfc_current_state () != COMP_DERIVED) + if ((current_ts.type == BT_DERIVED || current_ts.type == BT_CLASS) + && gfc_current_state () != COMP_DERIVED) { sym = gfc_use_derived (current_ts.u.derived); @@ -3772,7 +3789,8 @@ gfc_match_data_decl (void) goto cleanup; } - if (current_ts.type == BT_DERIVED && current_ts.u.derived->components == NULL + if ((current_ts.type == BT_DERIVED || current_ts.type == BT_CLASS) + && current_ts.u.derived->components == NULL && !current_ts.u.derived->attr.zero_comp) { @@ -5685,13 +5703,31 @@ attr_decl1 (void) } } - /* Update symbol table. DIMENSION attribute is set - in gfc_set_array_spec(). */ - if (current_attr.dimension == 0 - && gfc_copy_attr (&sym->attr, ¤t_attr, &var_locus) == FAILURE) + /* Update symbol table. DIMENSION attribute is set in + gfc_set_array_spec(). For CLASS variables, this must be applied + to the first component, or '$data' field. */ + if (sym->ts.type == BT_CLASS && sym->ts.u.derived) { - m = MATCH_ERROR; - goto cleanup; + gfc_component *comp; + comp = gfc_find_component (sym->ts.u.derived, "$data", true, true); + if (comp == NULL || gfc_copy_attr (&comp->attr, ¤t_attr, + &var_locus) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } + sym->attr.class_ok = (sym->attr.class_ok + || current_attr.allocatable + || current_attr.pointer); + } + else + { + if (current_attr.dimension == 0 + && gfc_copy_attr (&sym->attr, ¤t_attr, &var_locus) == FAILURE) + { + m = MATCH_ERROR; + goto cleanup; + } } if (gfc_set_array_spec (sym, as, &var_locus) == FAILURE) diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index c602600165b..74a31d2661c 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -672,6 +672,7 @@ typedef struct unsigned is_bind_c:1; /* say if is bound to C. */ unsigned extension:1; /* extends a derived type. */ unsigned is_class:1; /* is a CLASS container. */ + unsigned class_ok:1; /* is a CLASS object with correct attributes. */ /* These flags are both in the typespec and attribute. The attribute list is what gets read from/written to a module file. The typespec @@ -1598,7 +1599,7 @@ typedef struct gfc_class_esym_list { gfc_symbol *derived; gfc_symbol *esym; - gfc_symbol *class_object; + struct gfc_expr *vindex; struct gfc_class_esym_list *next; } gfc_class_esym_list; diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi index 2c993b9048a..3aa16b0f860 100644 --- a/gcc/fortran/intrinsic.texi +++ b/gcc/fortran/intrinsic.texi @@ -2744,7 +2744,7 @@ Inverse function: @ref{ACOSH} @code{COUNT(MASK [, DIM [, KIND]])} counts the number of @code{.TRUE.} elements of @var{MASK} along the dimension of @var{DIM}. If @var{DIM} is omitted it is taken to be @code{1}. @var{DIM} is a scalar of type -@code{INTEGER} in the range of @math{1 /leq DIM /leq n)} where @math{n} +@code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{MASK}. @item @emph{Standard}: @@ -2864,7 +2864,7 @@ end program test_cpu_time @code{CSHIFT(ARRAY, SHIFT [, DIM])} performs a circular shift on elements of @var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is omitted it is taken to be @code{1}. @var{DIM} is a scalar of type @code{INTEGER} in the -range of @math{1 /leq DIM /leq n)} where @math{n} is the rank of @var{ARRAY}. +range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}. If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted by @var{SHIFT} places. If rank is greater than one, then all complete rank one sections of @var{ARRAY} along the given dimension are shifted. Elements @@ -3458,8 +3458,8 @@ Subroutine, function @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{VALUES}@tab The type shall be @code{REAL, DIMENSION(2)}. -@item @var{TIME}@tab The type shall be @code{REAL}. +@item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}. +@item @var{TIME}@tab The type shall be @code{REAL(4)}. @end multitable @item @emph{Return value}: @@ -3503,7 +3503,7 @@ end program test_dtime @code{EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])} performs an end-off shift on elements of @var{ARRAY} along the dimension of @var{DIM}. If @var{DIM} is omitted it is taken to be @code{1}. @var{DIM} is a scalar of type -@code{INTEGER} in the range of @math{1 /leq DIM /leq n)} where @math{n} is the +@code{INTEGER} in the range of @math{1 \leq DIM \leq n)} where @math{n} is the rank of @var{ARRAY}. If the rank of @var{ARRAY} is one, then all elements of @var{ARRAY} are shifted by @var{SHIFT} places. If rank is greater than one, then all complete rank one sections of @var{ARRAY} along the given dimension are @@ -3767,8 +3767,8 @@ Subroutine, function @item @emph{Arguments}: @multitable @columnfractions .15 .70 -@item @var{VALUES}@tab The type shall be @code{REAL, DIMENSION(2)}. -@item @var{TIME}@tab The type shall be @code{REAL}. +@item @var{VALUES}@tab The type shall be @code{REAL(4), DIMENSION(2)}. +@item @var{TIME}@tab The type shall be @code{REAL(4)}. @end multitable @item @emph{Return value}: diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 3542944a50b..24e292bd4d6 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -2388,58 +2388,6 @@ char_selector: } -/* Used in gfc_match_allocate to check that a allocation-object and - a source-expr are conformable. This does not catch all possible - cases; in particular a runtime checking is needed. */ - -static gfc_try -conformable_arrays (gfc_expr *e1, gfc_expr *e2) -{ - /* First compare rank. */ - if (e2->ref && e1->rank != e2->ref->u.ar.as->rank) - { - gfc_error ("Source-expr at %L must be scalar or have the " - "same rank as the allocate-object at %L", - &e1->where, &e2->where); - return FAILURE; - } - - if (e1->shape) - { - int i; - mpz_t s; - - mpz_init (s); - - for (i = 0; i < e1->rank; i++) - { - if (e2->ref->u.ar.end[i]) - { - mpz_set (s, e2->ref->u.ar.end[i]->value.integer); - mpz_sub (s, s, e2->ref->u.ar.start[i]->value.integer); - mpz_add_ui (s, s, 1); - } - else - { - mpz_set (s, e2->ref->u.ar.start[i]->value.integer); - } - - if (mpz_cmp (e1->shape[i], s) != 0) - { - gfc_error ("Source-expr at %L and allocate-object at %L must " - "have the same shape", &e1->where, &e2->where); - mpz_clear (s); - return FAILURE; - } - } - - mpz_clear (s); - } - - return SUCCESS; -} - - /* Match an ALLOCATE statement. */ match @@ -2620,7 +2568,7 @@ alloc_opt_list: goto cleanup; } - /* The next 3 conditionals check C631. */ + /* The next 2 conditionals check C631. */ if (ts.type != BT_UNKNOWN) { gfc_error ("SOURCE tag at %L conflicts with the typespec at %L", @@ -2635,28 +2583,6 @@ alloc_opt_list: goto cleanup; } - gfc_resolve_expr (tmp); - - if (!gfc_type_compatible (&head->expr->ts, &tmp->ts)) - { - gfc_error ("Type of entity at %L is type incompatible with " - "source-expr at %L", &head->expr->where, &tmp->where); - goto cleanup; - } - - /* Check C633. */ - if (tmp->ts.kind != head->expr->ts.kind) - { - gfc_error ("The allocate-object at %L and the source-expr at %L " - "shall have the same kind type parameter", - &head->expr->where, &tmp->where); - goto cleanup; - } - - /* Check C632 and restriction following Note 6.18. */ - if (tmp->rank > 0 && conformable_arrays (tmp, head->expr) == FAILURE) - goto cleanup; - source = tmp; saw_source = true; @@ -3750,7 +3676,10 @@ gfc_match_equivalence (void) if (gfc_match_eos () == MATCH_YES) break; if (gfc_match_char (',') != MATCH_YES) - goto syntax; + { + gfc_error ("Expecting a comma in EQUIVALENCE at %C"); + goto cleanup; + } } return MATCH_YES; @@ -4044,9 +3973,10 @@ select_type_set_tmp (gfc_typespec *ts) sprintf (name, "tmp$%s", ts->u.derived->name); gfc_get_sym_tree (name, gfc_current_ns, &tmp, false); - tmp->n.sym->ts = *ts; - tmp->n.sym->attr.referenced = 1; - tmp->n.sym->attr.pointer = 1; + gfc_add_type (tmp->n.sym, ts, NULL); + gfc_set_sym_referenced (tmp->n.sym); + gfc_add_pointer (&tmp->n.sym->attr, NULL); + gfc_add_flavor (&tmp->n.sym->attr, FL_VARIABLE, name, NULL); select_type_stack->tmp = tmp; } @@ -4080,6 +4010,7 @@ gfc_match_select_type (void) return MATCH_ERROR; expr1->symtree->n.sym->ts = expr2->ts; expr1->symtree->n.sym->attr.referenced = 1; + expr1->symtree->n.sym->attr.class_ok = 1; } else { diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 49d449cfdc8..95a327bf23d 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -2068,11 +2068,15 @@ endType: { /* Look for allocatable components. */ if (c->attr.allocatable + || (c->ts.type == BT_CLASS + && c->ts.u.derived->components->attr.allocatable) || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.alloc_comp)) sym->attr.alloc_comp = 1; /* Look for pointer components. */ if (c->attr.pointer + || (c->ts.type == BT_CLASS + && c->ts.u.derived->components->attr.pointer) || (c->ts.type == BT_DERIVED && c->ts.u.derived->attr.pointer_comp)) sym->attr.pointer_comp = 1; @@ -3069,7 +3073,9 @@ gfc_build_block_ns (gfc_namespace *parent_ns) my_ns->proc_name->name, NULL); gcc_assert (t == SUCCESS); } - my_ns->proc_name->attr.recursive = parent_ns->proc_name->attr.recursive; + + if (parent_ns->proc_name) + my_ns->proc_name->attr.recursive = parent_ns->proc_name->attr.recursive; return my_ns; } diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 5ea41c9bdf8..b17e8fef182 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5161,8 +5161,6 @@ check_class_members (gfc_symbol *derived) = gfc_get_class_esym_list(); list_e->value.function.class_esym->next = etmp; list_e->value.function.class_esym->derived = derived; - list_e->value.function.class_esym->class_object - = class_object; list_e->value.function.class_esym->esym = e->value.function.esym; } @@ -5206,19 +5204,120 @@ resolve_class_esym (gfc_expr *e) } +/* Generate an expression for the vindex, given the reference to + the class of the final expression (class_ref), the base of the + full reference list (new_ref), the declared type and the class + object (st). */ +static gfc_expr* +vindex_expr (gfc_ref *class_ref, gfc_ref *new_ref, + gfc_symbol *declared, gfc_symtree *st) +{ + gfc_expr *vindex; + gfc_ref *ref; + + /* Build an expression for the correct vindex; ie. that of the last + CLASS reference. */ + ref = gfc_get_ref(); + ref->type = REF_COMPONENT; + ref->u.c.component = declared->components->next; + ref->u.c.sym = declared; + ref->next = NULL; + if (class_ref) + { + class_ref->next = ref; + } + else + { + gfc_free_ref_list (new_ref); + new_ref = ref; + } + vindex = gfc_get_expr (); + vindex->expr_type = EXPR_VARIABLE; + vindex->symtree = st; + vindex->symtree->n.sym->refs++; + vindex->ts = ref->u.c.component->ts; + vindex->ref = new_ref; + + return vindex; +} + + +/* Get the ultimate declared type from an expression. In addition, + return the last class/derived type reference and the copy of the + reference list. */ +static gfc_symbol* +get_declared_from_expr (gfc_ref **class_ref, gfc_ref **new_ref, + gfc_expr *e) +{ + gfc_symbol *declared; + gfc_ref *ref; + + declared = NULL; + *class_ref = NULL; + *new_ref = gfc_copy_ref (e->ref); + for (ref = *new_ref; ref; ref = ref->next) + { + if (ref->type != REF_COMPONENT) + continue; + + if (ref->u.c.component->ts.type == BT_CLASS + || ref->u.c.component->ts.type == BT_DERIVED) + { + declared = ref->u.c.component->ts.u.derived; + *class_ref = ref; + } + } + + if (declared == NULL) + declared = e->symtree->n.sym->ts.u.derived; + + return declared; +} + + +/* Resolve the argument expressions so that any arguments expressions + that include class methods are resolved before the current call. + This is necessary because of the static variables used in CLASS + method resolution. */ +static void +resolve_arg_exprs (gfc_actual_arglist *arg) +{ + /* Resolve the actual arglist expressions. */ + for (; arg; arg = arg->next) + { + if (arg->expr) + gfc_resolve_expr (arg->expr); + } +} + + /* Resolve a CLASS typebound function, or 'method'. */ static gfc_try resolve_class_compcall (gfc_expr* e) { - gfc_symbol *derived; + gfc_symbol *derived, *declared; + gfc_ref *new_ref; + gfc_ref *class_ref; + gfc_symtree *st; - class_object = e->symtree->n.sym; + st = e->symtree; + class_object = st->n.sym; - /* Get the CLASS type. */ - derived = e->symtree->n.sym->ts.u.derived; + /* Get the CLASS declared type. */ + declared = get_declared_from_expr (&class_ref, &new_ref, e); + + /* Weed out cases of the ultimate component being a derived type. */ + if (class_ref && class_ref->u.c.component->ts.type == BT_DERIVED) + { + gfc_free_ref_list (new_ref); + return resolve_compcall (e, true); + } + + /* Resolve the argument expressions, */ + resolve_arg_exprs (e->value.function.actual); /* Get the data component, which is of the declared type. */ - derived = derived->components->ts.u.derived; + derived = declared->components->ts.u.derived; /* Resolve the function call for each member of the class. */ class_try = SUCCESS; @@ -5238,6 +5337,12 @@ resolve_class_compcall (gfc_expr* e) resolve_class_esym (e); + /* More than one typebound procedure so transmit an expression for + the vindex as the selector. */ + if (e->value.function.class_esym != NULL) + e->value.function.class_esym->vindex + = vindex_expr (class_ref, new_ref, declared, st); + return class_try; } @@ -5245,15 +5350,29 @@ resolve_class_compcall (gfc_expr* e) static gfc_try resolve_class_typebound_call (gfc_code *code) { - gfc_symbol *derived; + gfc_symbol *derived, *declared; + gfc_ref *new_ref; + gfc_ref *class_ref; + gfc_symtree *st; + + st = code->expr1->symtree; + class_object = st->n.sym; + + /* Get the CLASS declared type. */ + declared = get_declared_from_expr (&class_ref, &new_ref, code->expr1); - class_object = code->expr1->symtree->n.sym; + /* Weed out cases of the ultimate component being a derived type. */ + if (class_ref && class_ref->u.c.component->ts.type == BT_DERIVED) + { + gfc_free_ref_list (new_ref); + return resolve_typebound_call (code); + } - /* Get the CLASS type. */ - derived = code->expr1->symtree->n.sym->ts.u.derived; + /* Resolve the argument expressions, */ + resolve_arg_exprs (code->expr1->value.compcall.actual); /* Get the data component, which is of the declared type. */ - derived = derived->components->ts.u.derived; + derived = declared->components->ts.u.derived; class_try = SUCCESS; fcn_flag = false; @@ -5273,6 +5392,12 @@ resolve_class_typebound_call (gfc_code *code) resolve_class_esym (code->expr1); + /* More than one typebound procedure so transmit an expression for + the vindex as the selector. */ + if (code->expr1->value.function.class_esym != NULL) + code->expr1->value.function.class_esym->vindex + = vindex_expr (class_ref, new_ref, declared, st); + return class_try; } @@ -5833,6 +5958,58 @@ gfc_expr_to_initialize (gfc_expr *e) } +/* Used in resolve_allocate_expr to check that a allocation-object and + a source-expr are conformable. This does not catch all possible + cases; in particular a runtime checking is needed. */ + +static gfc_try +conformable_arrays (gfc_expr *e1, gfc_expr *e2) +{ + /* First compare rank. */ + if (e2->ref && e1->rank != e2->ref->u.ar.as->rank) + { + gfc_error ("Source-expr at %L must be scalar or have the " + "same rank as the allocate-object at %L", + &e1->where, &e2->where); + return FAILURE; + } + + if (e1->shape) + { + int i; + mpz_t s; + + mpz_init (s); + + for (i = 0; i < e1->rank; i++) + { + if (e2->ref->u.ar.end[i]) + { + mpz_set (s, e2->ref->u.ar.end[i]->value.integer); + mpz_sub (s, s, e2->ref->u.ar.start[i]->value.integer); + mpz_add_ui (s, s, 1); + } + else + { + mpz_set (s, e2->ref->u.ar.start[i]->value.integer); + } + + if (mpz_cmp (e1->shape[i], s) != 0) + { + gfc_error ("Source-expr at %L and allocate-object at %L must " + "have the same shape", &e1->where, &e2->where); + mpz_clear (s); + return FAILURE; + } + } + + mpz_clear (s); + } + + return SUCCESS; +} + + /* Resolve the expression in an ALLOCATE statement, doing the additional checks to see whether the expression is OK or not. The expression must have a trailing array reference that gives the size of the array. */ @@ -5844,7 +6021,6 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code) symbol_attribute attr; gfc_ref *ref, *ref2; gfc_array_ref *ar; - gfc_code *init_st; gfc_symbol *sym; gfc_alloc *a; gfc_component *c; @@ -5933,7 +6109,32 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code) return FAILURE; } - if (is_abstract && !code->expr3 && code->ext.alloc.ts.type == BT_UNKNOWN) + /* Some checks for the SOURCE tag. */ + if (code->expr3) + { + /* Check F03:C631. */ + if (!gfc_type_compatible (&e->ts, &code->expr3->ts)) + { + gfc_error ("Type of entity at %L is type incompatible with " + "source-expr at %L", &e->where, &code->expr3->where); + return FAILURE; + } + + /* Check F03:C632 and restriction following Note 6.18. */ + if (code->expr3->rank > 0 + && conformable_arrays (code->expr3, e) == FAILURE) + return FAILURE; + + /* Check F03:C633. */ + if (code->expr3->ts.kind != e->ts.kind) + { + gfc_error ("The allocate-object at %L and the source-expr at %L " + "shall have the same kind type parameter", + &e->where, &code->expr3->where); + return FAILURE; + } + } + else if (is_abstract&& code->ext.alloc.ts.type == BT_UNKNOWN) { gcc_assert (e->ts.type == BT_CLASS); gfc_error ("Allocating %s of ABSTRACT base type at %L requires a " @@ -5948,41 +6149,6 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code) return FAILURE; } - if (e->ts.type == BT_CLASS) - { - /* Initialize VINDEX for CLASS objects. */ - init_st = gfc_get_code (); - init_st->loc = code->loc; - init_st->expr1 = gfc_expr_to_initialize (e); - init_st->op = EXEC_ASSIGN; - gfc_add_component_ref (init_st->expr1, "$vindex"); - if (code->expr3 && code->expr3->ts.type == BT_CLASS) - { - /* vindex must be determined at run time. */ - init_st->expr2 = gfc_copy_expr (code->expr3); - gfc_add_component_ref (init_st->expr2, "$vindex"); - } - else - { - /* vindex is fixed at compile time. */ - int vindex; - if (code->expr3) - vindex = code->expr3->ts.u.derived->vindex; - else if (code->ext.alloc.ts.type == BT_DERIVED) - vindex = code->ext.alloc.ts.u.derived->vindex; - else if (e->ts.type == BT_CLASS) - vindex = e->ts.u.derived->components->ts.u.derived->vindex; - else - vindex = e->ts.u.derived->vindex; - init_st->expr2 = gfc_int_expr (vindex); - } - init_st->expr2->where = init_st->expr1->where = init_st->loc; - init_st->next = code->next; - code->next = init_st; - /* Only allocate the DATA component. */ - gfc_add_component_ref (e, "$data"); - } - if (pointer || dimension == 0) return SUCCESS; @@ -7562,46 +7728,16 @@ resolve_ordinary_assign (gfc_code *code, gfc_namespace *ns) } } - gfc_check_assign (lhs, rhs, 1); - return false; -} - - -/* Check an assignment to a CLASS object (pointer or ordinary assignment). */ - -static void -resolve_class_assign (gfc_code *code) -{ - gfc_code *assign_code = gfc_get_code (); - - if (code->expr2->ts.type != BT_CLASS) + /* F03:7.4.1.2. */ + if (lhs->ts.type == BT_CLASS) { - /* Insert an additional assignment which sets the vindex. */ - assign_code->next = code->next; - code->next = assign_code; - assign_code->op = EXEC_ASSIGN; - assign_code->expr1 = gfc_copy_expr (code->expr1); - gfc_add_component_ref (assign_code->expr1, "$vindex"); - if (code->expr2->ts.type == BT_DERIVED) - /* vindex is constant, determined at compile time. */ - assign_code->expr2 = gfc_int_expr (code->expr2->ts.u.derived->vindex); - else if (code->expr2->ts.type == BT_CLASS) - { - /* vindex must be determined at run time. */ - assign_code->expr2 = gfc_copy_expr (code->expr2); - gfc_add_component_ref (assign_code->expr2, "$vindex"); - } - else if (code->expr2->expr_type == EXPR_NULL) - assign_code->expr2 = gfc_int_expr (0); - else - gcc_unreachable (); + gfc_error ("Variable must not be polymorphic in assignment at %L", + &lhs->where); + return false; } - /* Modify the actual pointer assignment. */ - if (code->expr2->ts.type == BT_CLASS) - code->op = EXEC_ASSIGN; - else - gfc_add_component_ref (code->expr1, "$data"); + gfc_check_assign (lhs, rhs, 1); + return false; } @@ -7675,6 +7811,10 @@ resolve_code (gfc_code *code, gfc_namespace *ns) if (gfc_resolve_expr (code->expr2) == FAILURE) t = FAILURE; + if (code->op == EXEC_ALLOCATE + && gfc_resolve_expr (code->expr3) == FAILURE) + t = FAILURE; + switch (code->op) { case EXEC_NOP: @@ -7734,10 +7874,6 @@ resolve_code (gfc_code *code, gfc_namespace *ns) else goto call; } - - if (code->expr1->ts.type == BT_CLASS) - resolve_class_assign (code); - break; case EXEC_LABEL_ASSIGN: @@ -7759,10 +7895,6 @@ resolve_code (gfc_code *code, gfc_namespace *ns) break; gfc_check_pointer_assign (code->expr1, code->expr2); - - if (code->expr1->ts.type == BT_CLASS) - resolve_class_assign (code); - break; case EXEC_ARITHMETIC_IF: @@ -8612,9 +8744,8 @@ resolve_fl_variable_derived (gfc_symbol *sym, int no_init_flag) } /* C509. */ - if (!(sym->attr.dummy || sym->attr.allocatable || sym->attr.pointer - || sym->ts.u.derived->components->attr.allocatable - || sym->ts.u.derived->components->attr.pointer)) + /* Assume that use associated symbols were checked in the module ns. */ + if (!sym->attr.class_ok && !sym->attr.use_assoc) { gfc_error ("CLASS variable '%s' at %L must be dummy, allocatable " "or pointer", sym->name, &sym->declared_at); @@ -12003,7 +12134,11 @@ resolve_codes (gfc_namespace *ns) resolve_codes (n); gfc_current_ns = ns; - cs_base = NULL; + + /* Don't clear 'cs_base' if this is the namespace of a BLOCK construct. */ + if (!(ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL)) + cs_base = NULL; + /* Set to an out of range value. */ current_entry_id = -1; diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 2641df82b35..c1b39b0d9f1 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -2030,9 +2030,16 @@ gfc_st_label * gfc_get_st_label (int labelno) { gfc_st_label *lp; + gfc_namespace *ns; + + /* Find the namespace of the scoping unit: + If we're in a BLOCK construct, jump to the parent namespace. */ + ns = gfc_current_ns; + while (ns->proc_name && ns->proc_name->attr.flavor == FL_LABEL) + ns = ns->parent; /* First see if the label is already in this namespace. */ - lp = gfc_current_ns->st_labels; + lp = ns->st_labels; while (lp) { if (lp->value == labelno) @@ -2050,7 +2057,7 @@ gfc_get_st_label (int labelno) lp->defined = ST_LABEL_UNKNOWN; lp->referenced = ST_LABEL_UNKNOWN; - gfc_insert_bbt (&gfc_current_ns->st_labels, lp, compare_st_labels); + gfc_insert_bbt (&ns->st_labels, lp, compare_st_labels); return lp; } @@ -2741,7 +2748,7 @@ gfc_undo_symbols (void) if (p->gfc_new) { /* Symbol was new. */ - if (p->attr.in_common && p->common_block->head) + if (p->attr.in_common && p->common_block && p->common_block->head) { /* If the symbol was added to any common block, it needs to be removed to stop the resolver looking diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index e16200010d1..4e94373133a 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -5906,6 +5906,36 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, tmp = gfc_trans_dealloc_allocated (comp); gfc_add_expr_to_block (&fnblock, tmp); } + else if (c->attr.allocatable) + { + /* Allocatable scalar components. */ + comp = fold_build3 (COMPONENT_REF, ctype, decl, cdecl, NULL_TREE); + + tmp = gfc_deallocate_with_status (comp, NULL_TREE, true, NULL); + gfc_add_expr_to_block (&fnblock, tmp); + + tmp = fold_build2 (MODIFY_EXPR, void_type_node, comp, + build_int_cst (TREE_TYPE (comp), 0)); + gfc_add_expr_to_block (&fnblock, tmp); + } + else if (c->ts.type == BT_CLASS + && c->ts.u.derived->components->attr.allocatable) + { + /* Allocatable scalar CLASS components. */ + comp = fold_build3 (COMPONENT_REF, ctype, decl, cdecl, NULL_TREE); + + /* Add reference to '$data' component. */ + tmp = c->ts.u.derived->components->backend_decl; + comp = fold_build3 (COMPONENT_REF, TREE_TYPE (tmp), + comp, tmp, NULL_TREE); + + tmp = gfc_deallocate_with_status (comp, NULL_TREE, true, NULL); + gfc_add_expr_to_block (&fnblock, tmp); + + tmp = fold_build2 (MODIFY_EXPR, void_type_node, comp, + build_int_cst (TREE_TYPE (comp), 0)); + gfc_add_expr_to_block (&fnblock, tmp); + } break; case NULLIFY_ALLOC_COMP: @@ -5917,6 +5947,27 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl, decl, cdecl, NULL_TREE); gfc_conv_descriptor_data_set (&fnblock, comp, null_pointer_node); } + else if (c->attr.allocatable) + { + /* Allocatable scalar components. */ + comp = fold_build3 (COMPONENT_REF, ctype, decl, cdecl, NULL_TREE); + tmp = fold_build2 (MODIFY_EXPR, void_type_node, comp, + build_int_cst (TREE_TYPE (comp), 0)); + gfc_add_expr_to_block (&fnblock, tmp); + } + else if (c->ts.type == BT_CLASS + && c->ts.u.derived->components->attr.allocatable) + { + /* Allocatable scalar CLASS components. */ + comp = fold_build3 (COMPONENT_REF, ctype, decl, cdecl, NULL_TREE); + /* Add reference to '$data' component. */ + tmp = c->ts.u.derived->components->backend_decl; + comp = fold_build3 (COMPONENT_REF, TREE_TYPE (tmp), + comp, tmp, NULL_TREE); + tmp = fold_build2 (MODIFY_EXPR, void_type_node, comp, + build_int_cst (TREE_TYPE (comp), 0)); + gfc_add_expr_to_block (&fnblock, tmp); + } else if (cmp_has_alloc_comps) { comp = fold_build3 (COMPONENT_REF, ctype, diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index ee38efbe27c..8812675990f 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -1187,22 +1187,23 @@ gfc_get_symbol_decl (gfc_symbol * sym) /* Create variables to hold the non-constant bits of array info. */ gfc_build_qualified_array (decl, sym); - /* Remember this variable for allocation/cleanup. */ - gfc_defer_symbol_init (sym); - if ((sym->attr.allocatable || !sym->attr.dummy) && !sym->attr.pointer) GFC_DECL_PACKED_ARRAY (decl) = 1; } - if (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.alloc_comp) - gfc_defer_symbol_init (sym); - /* This applies a derived type default initializer. */ - else if (sym->ts.type == BT_DERIVED - && sym->attr.save == SAVE_NONE - && !sym->attr.data - && !sym->attr.allocatable - && (sym->value && !sym->ns->proc_name->attr.is_main_program) - && !sym->attr.use_assoc) + /* Remember this variable for allocation/cleanup. */ + if (sym->attr.dimension || sym->attr.allocatable + || (sym->ts.type == BT_CLASS && + (sym->ts.u.derived->components->attr.dimension + || sym->ts.u.derived->components->attr.allocatable)) + || (sym->ts.type == BT_DERIVED && sym->ts.u.derived->attr.alloc_comp) + /* This applies a derived type default initializer. */ + || (sym->ts.type == BT_DERIVED + && sym->attr.save == SAVE_NONE + && !sym->attr.data + && !sym->attr.allocatable + && (sym->value && !sym->ns->proc_name->attr.is_main_program) + && !sym->attr.use_assoc)) gfc_defer_symbol_init (sym); gfc_finish_var_decl (decl, sym); @@ -3054,7 +3055,8 @@ init_intent_out_dt (gfc_symbol * proc_sym, tree body) Allocation and initialization of array variables. Allocation of character string variables. Initialization and possibly repacking of dummy arrays. - Initialization of ASSIGN statement auxiliary variable. */ + Initialization of ASSIGN statement auxiliary variable. + Automatic deallocation. */ tree gfc_trans_deferred_vars (gfc_symbol * proc_sym, tree fnbody) @@ -3182,6 +3184,37 @@ gfc_trans_deferred_vars (gfc_symbol * proc_sym, tree fnbody) } else if (sym_has_alloc_comp) fnbody = gfc_trans_deferred_array (sym, fnbody); + else if (sym->attr.allocatable + || (sym->ts.type == BT_CLASS + && sym->ts.u.derived->components->attr.allocatable)) + { + /* Automatic deallocatation of allocatable scalars. */ + tree tmp; + gfc_expr *e; + gfc_se se; + stmtblock_t block; + + e = gfc_lval_expr_from_sym (sym); + if (sym->ts.type == BT_CLASS) + gfc_add_component_ref (e, "$data"); + + gfc_init_se (&se, NULL); + se.want_pointer = 1; + gfc_conv_expr (&se, e); + gfc_free_expr (e); + + gfc_start_block (&block); + gfc_add_expr_to_block (&block, fnbody); + + tmp = gfc_deallocate_with_status (se.expr, NULL_TREE, true, NULL); + gfc_add_expr_to_block (&block, tmp); + + tmp = fold_build2 (MODIFY_EXPR, void_type_node, + se.expr, build_int_cst (TREE_TYPE (se.expr), 0)); + gfc_add_expr_to_block (&block, tmp); + + fnbody = gfc_finish_block (&block); + } else if (sym->ts.type == BT_CHARACTER) { gfc_get_backend_locus (&loc); diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 77953c8e15f..da442edba4b 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -1519,6 +1519,7 @@ get_proc_ptr_comp (gfc_expr *e) e2 = gfc_copy_expr (e); e2->expr_type = EXPR_VARIABLE; gfc_conv_expr (&comp_se, e2); + gfc_free_expr (e2); return build_fold_addr_expr_loc (input_location, comp_se.expr); } @@ -1526,7 +1527,7 @@ get_proc_ptr_comp (gfc_expr *e) /* Select a class typebound procedure at runtime. */ static void select_class_proc (gfc_se *se, gfc_class_esym_list *elist, - tree declared, locus *where) + tree declared, gfc_expr *expr) { tree end_label; tree label; @@ -1534,16 +1535,16 @@ select_class_proc (gfc_se *se, gfc_class_esym_list *elist, tree vindex; stmtblock_t body; gfc_class_esym_list *next_elist, *tmp_elist; + gfc_se tmpse; - /* Calculate the switch expression: class_object.vindex. */ - gcc_assert (elist->class_object->ts.type == BT_CLASS); - tmp = elist->class_object->ts.u.derived->components->next->backend_decl; - vindex = fold_build3 (COMPONENT_REF, TREE_TYPE (tmp), - elist->class_object->backend_decl, - tmp, NULL_TREE); - vindex = gfc_evaluate_now (vindex, &se->pre); + /* Convert the vindex expression. */ + gfc_init_se (&tmpse, NULL); + gfc_conv_expr (&tmpse, elist->vindex); + gfc_add_block_to_block (&se->pre, &tmpse.pre); + vindex = gfc_evaluate_now (tmpse.expr, &se->pre); + gfc_add_block_to_block (&se->post, &tmpse.post); - /* Fix the function type to be that of the declared type. */ + /* Fix the function type to be that of the declared type method. */ declared = gfc_create_var (TREE_TYPE (declared), "method"); end_label = gfc_build_label_decl (NULL_TREE); @@ -1602,6 +1603,8 @@ select_class_proc (gfc_se *se, gfc_class_esym_list *elist, segfaults because it occurs too early and too often. */ free_elist: next_elist = elist->next; + if (elist->vindex) + gfc_free_expr (elist->vindex); gfc_free (elist); elist = NULL; } @@ -1611,7 +1614,7 @@ select_class_proc (gfc_se *se, gfc_class_esym_list *elist, tmp = fold_build3 (CASE_LABEL_EXPR, void_type_node, NULL_TREE, NULL_TREE, label); gfc_add_expr_to_block (&body, tmp); - tmp = gfc_trans_runtime_error (true, where, + tmp = gfc_trans_runtime_error (true, &expr->where, "internal error: bad vindex in dynamic dispatch"); gfc_add_expr_to_block (&body, tmp); @@ -1648,7 +1651,7 @@ conv_function_val (gfc_se * se, gfc_symbol * sym, gfc_expr * expr) } select_class_proc (se, expr->value.function.class_esym, - tmp, &expr->where); + tmp, expr); return; } @@ -2775,6 +2778,7 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, { tree data; tree vindex; + tree size; /* The derived type needs to be converted to a temporary CLASS object. */ @@ -2788,13 +2792,20 @@ gfc_conv_procedure_call (gfc_se * se, gfc_symbol * sym, var, tmp, NULL_TREE); tmp = fsym->ts.u.derived->components->next->backend_decl; vindex = fold_build3 (COMPONENT_REF, TREE_TYPE (tmp), + var, tmp, NULL_TREE); + tmp = fsym->ts.u.derived->components->next->next->backend_decl; + size = fold_build3 (COMPONENT_REF, TREE_TYPE (tmp), var, tmp, NULL_TREE); /* Set the vindex. */ - tmp = build_int_cst (TREE_TYPE (vindex), - e->ts.u.derived->vindex); + tmp = build_int_cst (TREE_TYPE (vindex), e->ts.u.derived->vindex); gfc_add_modify (&parmse.pre, vindex, tmp); + /* Set the size. */ + tmp = TYPE_SIZE_UNIT (gfc_typenode_for_spec (&e->ts)); + gfc_add_modify (&parmse.pre, size, + fold_convert (TREE_TYPE (size), tmp)); + /* Now set the data field. */ argss = gfc_walk_expr (e); if (argss == gfc_ss_terminator) @@ -4649,12 +4660,11 @@ gfc_trans_scalar_assign (gfc_se * lse, gfc_se * rse, gfc_typespec ts, gfc_add_expr_to_block (&block, tmp); } } - else if (ts.type == BT_DERIVED) + else if (ts.type == BT_DERIVED || ts.type == BT_CLASS) { gfc_add_block_to_block (&block, &lse->pre); gfc_add_block_to_block (&block, &rse->pre); - tmp = gfc_evaluate_now (rse->expr, &block); - tmp = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lse->expr), tmp); + tmp = fold_build1 (VIEW_CONVERT_EXPR, TREE_TYPE (lse->expr), rse->expr); gfc_add_modify (&block, lse->expr, tmp); } else @@ -5261,3 +5271,75 @@ gfc_trans_assign (gfc_code * code) { return gfc_trans_assignment (code->expr1, code->expr2, false); } + + +/* Translate an assignment to a CLASS object + (pointer or ordinary assignment). */ + +tree +gfc_trans_class_assign (gfc_code *code) +{ + stmtblock_t block; + tree tmp; + + gfc_start_block (&block); + + if (code->expr2->ts.type != BT_CLASS) + { + /* Insert an additional assignment which sets the '$vindex' field. */ + gfc_expr *lhs,*rhs; + lhs = gfc_copy_expr (code->expr1); + gfc_add_component_ref (lhs, "$vindex"); + if (code->expr2->ts.type == BT_DERIVED) + /* vindex is constant, determined at compile time. */ + rhs = gfc_int_expr (code->expr2->ts.u.derived->vindex); + else if (code->expr2->expr_type == EXPR_NULL) + rhs = gfc_int_expr (0); + else + gcc_unreachable (); + tmp = gfc_trans_assignment (lhs, rhs, false); + gfc_add_expr_to_block (&block, tmp); + + /* Insert another assignment which sets the '$size' field. */ + lhs = gfc_copy_expr (code->expr1); + gfc_add_component_ref (lhs, "$size"); + if (code->expr2->ts.type == BT_DERIVED) + { + /* Size is fixed at compile time. */ + gfc_se lse; + gfc_init_se (&lse, NULL); + gfc_conv_expr (&lse, lhs); + tmp = TYPE_SIZE_UNIT (gfc_typenode_for_spec (&code->expr2->ts)); + gfc_add_modify (&block, lse.expr, + fold_convert (TREE_TYPE (lse.expr), tmp)); + } + else if (code->expr2->expr_type == EXPR_NULL) + { + rhs = gfc_int_expr (0); + tmp = gfc_trans_assignment (lhs, rhs, false); + gfc_add_expr_to_block (&block, tmp); + } + else + gcc_unreachable (); + + gfc_free_expr (lhs); + gfc_free_expr (rhs); + } + + /* Do the actual CLASS assignment. */ + if (code->expr2->ts.type == BT_CLASS) + code->op = EXEC_ASSIGN; + else + gfc_add_component_ref (code->expr1, "$data"); + + if (code->op == EXEC_ASSIGN) + tmp = gfc_trans_assign (code); + else if (code->op == EXEC_POINTER_ASSIGN) + tmp = gfc_trans_pointer_assign (code); + else + gcc_unreachable(); + + gfc_add_expr_to_block (&block, tmp); + + return gfc_finish_block (&block); +} diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index 110534d2a5e..7dc7405c67f 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -3976,7 +3976,7 @@ tree gfc_trans_allocate (gfc_code * code) { gfc_alloc *al; - gfc_expr *expr, *init_e, *rhs; + gfc_expr *expr, *init_e; gfc_se se; tree tmp; tree parm; @@ -4006,7 +4006,10 @@ gfc_trans_allocate (gfc_code * code) for (al = code->ext.alloc.list; al != NULL; al = al->next) { - expr = al->expr; + expr = gfc_copy_expr (al->expr); + + if (expr->ts.type == BT_CLASS) + gfc_add_component_ref (expr, "$data"); gfc_init_se (&se, NULL); gfc_start_block (&se.pre); @@ -4022,13 +4025,14 @@ gfc_trans_allocate (gfc_code * code) /* Determine allocate size. */ if (code->expr3 && code->expr3->ts.type == BT_CLASS) { - gfc_typespec *ts; - /* TODO: Size must be determined at run time, since it must equal - the size of the dynamic type of SOURCE, not the declared type. */ - gfc_error ("Using SOURCE= with a class variable at %L not " - "supported yet", &code->loc); - ts = &code->expr3->ts.u.derived->components->ts; - tmp = TYPE_SIZE_UNIT (gfc_typenode_for_spec (ts)); + gfc_expr *sz; + gfc_se se_sz; + sz = gfc_copy_expr (code->expr3); + gfc_add_component_ref (sz, "$size"); + gfc_init_se (&se_sz, NULL); + gfc_conv_expr (&se_sz, sz); + gfc_free_expr (sz); + tmp = se_sz.expr; } else if (code->expr3 && code->expr3->ts.type != BT_CLASS) tmp = TYPE_SIZE_UNIT (gfc_typenode_for_spec (&code->expr3->ts)); @@ -4070,17 +4074,120 @@ gfc_trans_allocate (gfc_code * code) /* Initialization via SOURCE block. */ if (code->expr3) { - rhs = gfc_copy_expr (code->expr3); + gfc_expr *rhs = gfc_copy_expr (code->expr3); if (rhs->ts.type == BT_CLASS) - gfc_add_component_ref (rhs, "$data"); - tmp = gfc_trans_assignment (gfc_expr_to_initialize (expr), rhs, false); + { + gfc_se dst,src,len; + gfc_expr *sz; + gfc_add_component_ref (rhs, "$data"); + sz = gfc_copy_expr (code->expr3); + gfc_add_component_ref (sz, "$size"); + gfc_init_se (&dst, NULL); + gfc_init_se (&src, NULL); + gfc_init_se (&len, NULL); + gfc_conv_expr (&dst, expr); + gfc_conv_expr (&src, rhs); + gfc_conv_expr (&len, sz); + gfc_free_expr (sz); + tmp = gfc_build_memcpy_call (dst.expr, src.expr, len.expr); + } + else + tmp = gfc_trans_assignment (gfc_expr_to_initialize (expr), + rhs, false); + gfc_free_expr (rhs); + gfc_add_expr_to_block (&block, tmp); + } + /* Default initializer for CLASS variables. */ + else if (al->expr->ts.type == BT_CLASS + && code->ext.alloc.ts.type == BT_DERIVED + && (init_e = gfc_default_initializer (&code->ext.alloc.ts))) + { + gfc_se dst,src; + gfc_init_se (&dst, NULL); + gfc_init_se (&src, NULL); + gfc_conv_expr (&dst, expr); + gfc_conv_expr (&src, init_e); + gfc_add_block_to_block (&block, &src.pre); + tmp = TYPE_SIZE_UNIT (gfc_typenode_for_spec (&code->ext.alloc.ts)); + tmp = gfc_build_memcpy_call (dst.expr, src.expr, tmp); gfc_add_expr_to_block (&block, tmp); } /* Add default initializer for those derived types that need them. */ - else if (expr->ts.type == BT_DERIVED && (init_e = gfc_default_initializer (&expr->ts))) + else if (expr->ts.type == BT_DERIVED + && (init_e = gfc_default_initializer (&expr->ts))) + { + tmp = gfc_trans_assignment (gfc_expr_to_initialize (expr), + init_e, true); + gfc_add_expr_to_block (&block, tmp); + } + + /* Allocation of CLASS entities. */ + gfc_free_expr (expr); + expr = al->expr; + if (expr->ts.type == BT_CLASS) { - tmp = gfc_trans_assignment (gfc_expr_to_initialize (expr), init_e, true); + gfc_expr *lhs,*rhs; + /* Initialize VINDEX for CLASS objects. */ + lhs = gfc_expr_to_initialize (expr); + gfc_add_component_ref (lhs, "$vindex"); + if (code->expr3 && code->expr3->ts.type == BT_CLASS) + { + /* vindex must be determined at run time. */ + rhs = gfc_copy_expr (code->expr3); + gfc_add_component_ref (rhs, "$vindex"); + } + else + { + /* vindex is fixed at compile time. */ + int vindex; + if (code->expr3) + vindex = code->expr3->ts.u.derived->vindex; + else if (code->ext.alloc.ts.type == BT_DERIVED) + vindex = code->ext.alloc.ts.u.derived->vindex; + else if (expr->ts.type == BT_CLASS) + vindex = expr->ts.u.derived->components->ts.u.derived->vindex; + else + vindex = expr->ts.u.derived->vindex; + rhs = gfc_int_expr (vindex); + } + tmp = gfc_trans_assignment (lhs, rhs, false); + gfc_free_expr (lhs); + gfc_free_expr (rhs); gfc_add_expr_to_block (&block, tmp); + + /* Initialize SIZE for CLASS objects. */ + lhs = gfc_expr_to_initialize (expr); + gfc_add_component_ref (lhs, "$size"); + rhs = NULL; + if (code->expr3 && code->expr3->ts.type == BT_CLASS) + { + /* Size must be determined at run time. */ + rhs = gfc_copy_expr (code->expr3); + gfc_add_component_ref (rhs, "$size"); + tmp = gfc_trans_assignment (lhs, rhs, false); + gfc_add_expr_to_block (&block, tmp); + } + else + { + /* Size is fixed at compile time. */ + gfc_typespec *ts; + gfc_se lse; + gfc_init_se (&lse, NULL); + gfc_conv_expr (&lse, lhs); + if (code->expr3) + ts = &code->expr3->ts; + else if (code->ext.alloc.ts.type == BT_DERIVED) + ts = &code->ext.alloc.ts; + else if (expr->ts.type == BT_CLASS) + ts = &expr->ts.u.derived->components->ts; + else + ts = &expr->ts; + tmp = TYPE_SIZE_UNIT (gfc_typenode_for_spec (ts)); + gfc_add_modify (&block, lse.expr, + fold_convert (TREE_TYPE (lse.expr), tmp)); + } + gfc_free_expr (lhs); + gfc_free_expr (rhs); } } diff --git a/gcc/fortran/trans-stmt.h b/gcc/fortran/trans-stmt.h index 0b8461c4e15..e6faacd0022 100644 --- a/gcc/fortran/trans-stmt.h +++ b/gcc/fortran/trans-stmt.h @@ -29,6 +29,7 @@ tree gfc_trans_code (gfc_code *); tree gfc_trans_assign (gfc_code *); tree gfc_trans_pointer_assign (gfc_code *); tree gfc_trans_init_assign (gfc_code *); +tree gfc_trans_class_assign (gfc_code *code); /* trans-stmt.c */ tree gfc_trans_cycle (gfc_code *); diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index 09b424c378f..22c3e076085 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -1079,7 +1079,10 @@ gfc_trans_code (gfc_code * code) break; case EXEC_ASSIGN: - res = gfc_trans_assign (code); + if (code->expr1->ts.type == BT_CLASS) + res = gfc_trans_class_assign (code); + else + res = gfc_trans_assign (code); break; case EXEC_LABEL_ASSIGN: @@ -1087,7 +1090,10 @@ gfc_trans_code (gfc_code * code) break; case EXEC_POINTER_ASSIGN: - res = gfc_trans_pointer_assign (code); + if (code->expr1->ts.type == BT_CLASS) + res = gfc_trans_class_assign (code); + else + res = gfc_trans_pointer_assign (code); break; case EXEC_INIT_ASSIGN: diff --git a/gcc/gcc.c b/gcc/gcc.c index 52fe2277b82..78e0ce8d87e 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -984,7 +984,7 @@ static struct user_specs *user_specs_head, *user_specs_tail; #ifdef HAVE_TARGET_EXECUTABLE_SUFFIX /* This defines which switches stop a full compilation. */ #define DEFAULT_SWITCH_CURTAILS_COMPILATION(CHAR) \ - ((CHAR) == 'c' || (CHAR) == 'S') + ((CHAR) == 'c' || (CHAR) == 'S' || (CHAR) == 'E') #ifndef SWITCH_CURTAILS_COMPILATION #define SWITCH_CURTAILS_COMPILATION(CHAR) \ @@ -2000,7 +2000,7 @@ static int argbuf_index; static int have_o_argbuf_index = 0; -/* Were the options -c or -S passed. */ +/* Were the options -c, -S or -E passed. */ static int have_c = 0; /* Was the option -o passed. */ @@ -4142,6 +4142,7 @@ process_command (int argc, const char **argv) case 'S': case 'c': + case 'E': if (p[1] == 0) { have_c = 1; @@ -4157,7 +4158,7 @@ process_command (int argc, const char **argv) { int skip; - /* Forward scan, just in case -S or -c is specified + /* Forward scan, just in case -S, -E or -c is specified after -o. */ int j = i + 1; if (p[1] == 0) @@ -7304,7 +7305,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n" } if (!combine_inputs && have_c && have_o && lang_n_infiles > 1) - fatal ("cannot specify -o with -c or -S with multiple files"); + fatal ("cannot specify -o with -c, -S or -E with multiple files"); if (combine_flag && save_temps_flag) { diff --git a/gcc/gcse.c b/gcc/gcse.c index 803ab3e5a14..7ccb05e1d85 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -2276,8 +2276,7 @@ try_replace_reg (rtx from, rtx to, rtx insn) with our replacement. */ if (note != 0 && REG_NOTE_KIND (note) == REG_EQUAL) set_unique_reg_note (insn, REG_EQUAL, - simplify_replace_rtx (XEXP (note, 0), from, - copy_rtx (to))); + simplify_replace_rtx (XEXP (note, 0), from, to)); if (!success && set && reg_mentioned_p (from, SET_SRC (set))) { /* If above failed and this is a single set, try to simplify the source of @@ -3038,12 +3037,12 @@ bypass_block (basic_block bb, rtx setcc, rtx jump) src = SET_SRC (pc_set (jump)); if (setcc != NULL) - src = simplify_replace_rtx (src, - SET_DEST (PATTERN (setcc)), - SET_SRC (PATTERN (setcc))); + src = simplify_replace_rtx (src, + SET_DEST (PATTERN (setcc)), + SET_SRC (PATTERN (setcc))); new_rtx = simplify_replace_rtx (src, reg_used->reg_rtx, - SET_SRC (set->expr)); + SET_SRC (set->expr)); /* Jump bypassing may have already placed instructions on edges of the CFG. We can't bypass an outgoing edge that diff --git a/gcc/gengtype.c b/gcc/gengtype.c index e5b43dde96e..32abf6eff12 100644 --- a/gcc/gengtype.c +++ b/gcc/gengtype.c @@ -1117,6 +1117,8 @@ adjust_field_rtx_def (type_p t, options_p ARG_UNUSED (opt)) t = scalar_tp, subname = "rt_int"; else if (i == VALUE && aindex == 0) t = scalar_tp, subname = "rt_int"; + else if (i == DEBUG_EXPR && aindex == 0) + t = tree_tp, subname = "rt_tree"; else if (i == REG && aindex == 1) t = scalar_tp, subname = "rt_int"; else if (i == REG && aindex == 2) @@ -1569,7 +1571,7 @@ open_base_files (void) "optabs.h", "libfuncs.h", "debug.h", "ggc.h", "cgraph.h", "tree-flow.h", "reload.h", "cpp-id-data.h", "tree-chrec.h", "cfglayout.h", "except.h", "output.h", "gimple.h", "cfgloop.h", - "target.h", NULL + "target.h", "ipa-prop.h", NULL }; const char *const *ifp; outf_p gtype_desc_c; diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c index 744355e3de3..adb32880cfa 100644 --- a/gcc/ggc-page.c +++ b/gcc/ggc-page.c @@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see #include "timevar.h" #include "params.h" #include "tree-flow.h" +#include "cfgloop.h" #include "plugin.h" /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a @@ -157,6 +158,24 @@ along with GCC; see the file COPYING3. If not see #define OFFSET_TO_BIT(OFFSET, ORDER) \ (((OFFSET) * DIV_MULT (ORDER)) >> DIV_SHIFT (ORDER)) +/* We use this structure to determine the alignment required for + allocations. For power-of-two sized allocations, that's not a + problem, but it does matter for odd-sized allocations. + We do not care about alignment for floating-point types. */ + +struct max_alignment { + char c; + union { + HOST_WIDEST_INT i; + void *p; + } u; +}; + +/* The biggest alignment required. */ + +#define MAX_ALIGNMENT (offsetof (struct max_alignment, u)) + + /* The number of extra orders, not corresponding to power-of-two sized objects. */ @@ -173,42 +192,35 @@ along with GCC; see the file COPYING3. If not see thing you need to do to add a new special allocation size. */ static const size_t extra_order_size_table[] = { - sizeof (struct var_ann_d), + /* Extra orders for small non-power-of-two multiples of MAX_ALIGNMENT. + There are a lot of structures with these sizes and explicitly + listing them risks orders being dropped because they changed size. */ + MAX_ALIGNMENT * 3, + MAX_ALIGNMENT * 5, + MAX_ALIGNMENT * 6, + MAX_ALIGNMENT * 7, + MAX_ALIGNMENT * 9, + MAX_ALIGNMENT * 10, + MAX_ALIGNMENT * 11, + MAX_ALIGNMENT * 12, + MAX_ALIGNMENT * 13, + MAX_ALIGNMENT * 14, + MAX_ALIGNMENT * 15, sizeof (struct tree_decl_non_common), sizeof (struct tree_field_decl), sizeof (struct tree_parm_decl), sizeof (struct tree_var_decl), - sizeof (struct tree_list), - sizeof (struct tree_ssa_name), + sizeof (struct tree_type), sizeof (struct function), sizeof (struct basic_block_def), - sizeof (bitmap_element), - sizeof (bitmap_head), - TREE_EXP_SIZE (2), - RTL_SIZE (2), /* MEM, PLUS, etc. */ - RTL_SIZE (9), /* INSN */ + sizeof (struct cgraph_node), + sizeof (struct loop), }; /* The total number of orders. */ #define NUM_ORDERS (HOST_BITS_PER_PTR + NUM_EXTRA_ORDERS) -/* We use this structure to determine the alignment required for - allocations. For power-of-two sized allocations, that's not a - problem, but it does matter for odd-sized allocations. */ - -struct max_alignment { - char c; - union { - HOST_WIDEST_INT i; - long double d; - } u; -}; - -/* The biggest alignment required. */ - -#define MAX_ALIGNMENT (offsetof (struct max_alignment, u)) - /* Compute the smallest nonnegative number which when added to X gives a multiple of F. */ diff --git a/gcc/gimple-iterator.c b/gcc/gimple-iterator.c index 66927d67c2c..c3ca0e37501 100644 --- a/gcc/gimple-iterator.c +++ b/gcc/gimple-iterator.c @@ -358,7 +358,8 @@ gsi_split_seq_before (gimple_stmt_iterator *i) /* Replace the statement pointed-to by GSI to STMT. If UPDATE_EH_INFO is true, the exception handling information of the original - statement is moved to the new statement. */ + statement is moved to the new statement. Assignments must only be + replaced with assignments to the same LHS. */ void gsi_replace (gimple_stmt_iterator *gsi, gimple stmt, bool update_eh_info) @@ -368,6 +369,9 @@ gsi_replace (gimple_stmt_iterator *gsi, gimple stmt, bool update_eh_info) if (stmt == orig_stmt) return; + gcc_assert (!gimple_has_lhs (orig_stmt) + || gimple_get_lhs (orig_stmt) == gimple_get_lhs (stmt)); + gimple_set_location (stmt, gimple_location (orig_stmt)); gimple_set_bb (stmt, gsi_bb (*gsi)); @@ -470,6 +474,8 @@ gsi_remove (gimple_stmt_iterator *i, bool remove_permanently) gimple_seq_node cur, next, prev; gimple stmt = gsi_stmt (*i); + insert_debug_temps_for_defs (i); + /* Free all the data flow information for STMT. */ gimple_set_bb (stmt, NULL); delink_stmt_imm_use (stmt); diff --git a/gcc/gimple-low.c b/gcc/gimple-low.c index b58fd7b42f5..cce31e946ff 100644 --- a/gcc/gimple-low.c +++ b/gcc/gimple-low.c @@ -76,6 +76,9 @@ struct lower_data of the function. */ VEC(return_statements_t,heap) *return_statements; + /* True if the current statement cannot fall through. */ + bool cannot_fallthru; + /* True if the function calls __builtin_setjmp. */ bool calls_builtin_setjmp; }; @@ -317,7 +320,12 @@ lower_omp_directive (gimple_stmt_iterator *gsi, struct lower_data *data) } -/* Lower statement GSI. DATA is passed through the recursion. */ +/* Lower statement GSI. DATA is passed through the recursion. We try to + track the fallthruness of statements and get rid of unreachable return + statements in order to prevent the EH lowering pass from adding useless + edges that can cause bogus warnings to be issued later; this guess need + not be 100% accurate, simply be conservative and reset cannot_fallthru + to false if we don't know. */ static void lower_stmt (gimple_stmt_iterator *gsi, struct lower_data *data) @@ -330,36 +338,61 @@ lower_stmt (gimple_stmt_iterator *gsi, struct lower_data *data) { case GIMPLE_BIND: lower_gimple_bind (gsi, data); + /* Propagate fallthruness. */ return; case GIMPLE_COND: - /* The gimplifier has already lowered this into gotos. */ - break; + case GIMPLE_GOTO: + case GIMPLE_SWITCH: + data->cannot_fallthru = true; + gsi_next (gsi); + return; case GIMPLE_RETURN: - lower_gimple_return (gsi, data); + if (data->cannot_fallthru) + { + gsi_remove (gsi, false); + /* Propagate fallthruness. */ + } + else + { + lower_gimple_return (gsi, data); + data->cannot_fallthru = true; + } return; case GIMPLE_TRY: - lower_sequence (gimple_try_eval (stmt), data); - lower_sequence (gimple_try_cleanup (stmt), data); + { + bool try_cannot_fallthru; + lower_sequence (gimple_try_eval (stmt), data); + try_cannot_fallthru = data->cannot_fallthru; + data->cannot_fallthru = false; + lower_sequence (gimple_try_cleanup (stmt), data); + /* See gimple_stmt_may_fallthru for the rationale. */ + if (gimple_try_kind (stmt) == GIMPLE_TRY_FINALLY) + { + data->cannot_fallthru |= try_cannot_fallthru; + gsi_next (gsi); + return; + } + } break; case GIMPLE_CATCH: + data->cannot_fallthru = false; lower_sequence (gimple_catch_handler (stmt), data); break; case GIMPLE_EH_FILTER: + data->cannot_fallthru = false; lower_sequence (gimple_eh_filter_failure (stmt), data); break; case GIMPLE_NOP: case GIMPLE_ASM: case GIMPLE_ASSIGN: - case GIMPLE_GOTO: case GIMPLE_PREDICT: case GIMPLE_LABEL: - case GIMPLE_SWITCH: case GIMPLE_EH_MUST_NOT_THROW: case GIMPLE_OMP_FOR: case GIMPLE_OMP_SECTIONS: @@ -383,8 +416,16 @@ lower_stmt (gimple_stmt_iterator *gsi, struct lower_data *data) && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL && DECL_FUNCTION_CODE (decl) == BUILT_IN_SETJMP) { - data->calls_builtin_setjmp = true; lower_builtin_setjmp (gsi); + data->cannot_fallthru = false; + data->calls_builtin_setjmp = true; + return; + } + + if (decl && (flags_from_decl_or_type (decl) & ECF_NORETURN)) + { + data->cannot_fallthru = true; + gsi_next (gsi); return; } } @@ -392,13 +433,16 @@ lower_stmt (gimple_stmt_iterator *gsi, struct lower_data *data) case GIMPLE_OMP_PARALLEL: case GIMPLE_OMP_TASK: + data->cannot_fallthru = false; lower_omp_directive (gsi, data); + data->cannot_fallthru = false; return; default: gcc_unreachable (); } + data->cannot_fallthru = false; gsi_next (gsi); } @@ -647,9 +691,9 @@ gimple_stmt_may_fallthru (gimple stmt) return false; case GIMPLE_SWITCH: - /* Switch has already been lowered and represents a - branch to a selected label and hence can not fall through. */ - return true; + /* Switch has already been lowered and represents a branch + to a selected label and hence can't fall through. */ + return false; case GIMPLE_COND: /* GIMPLE_COND's are already lowered into a two-way branch. They @@ -675,13 +719,10 @@ gimple_stmt_may_fallthru (gimple stmt) return (gimple_seq_may_fallthru (gimple_try_eval (stmt)) && gimple_seq_may_fallthru (gimple_try_cleanup (stmt))); - case GIMPLE_ASSIGN: - return true; - case GIMPLE_CALL: /* Functions that do not return do not fall through. */ return (gimple_call_flags (stmt) & ECF_NORETURN) == 0; - + default: return true; } @@ -731,7 +772,7 @@ lower_gimple_return (gimple_stmt_iterator *gsi, struct lower_data *data) gsi_remove (gsi, false); } -/* Lower a __builtin_setjmp TSI. +/* Lower a __builtin_setjmp GSI. __builtin_setjmp is passed a pointer to an array of five words (not all will be used on all machines). It operates similarly to the C diff --git a/gcc/gimple.c b/gcc/gimple.c index 29eec519b7d..f725a347bac 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -46,6 +46,7 @@ static struct pointer_map_t *type_hash_cache; /* Global type comparison cache. */ static htab_t gtc_visited; +static struct obstack gtc_ob; /* All the tuples have their operand vector (if present) at the very bottom of the structure. Therefore, the offset required to find the @@ -3025,8 +3026,8 @@ static hashval_t gimple_type_hash (const void *); infinite recursion due to self-referential types. */ struct type_pair_d { - tree t1; - tree t2; + unsigned int uid1; + unsigned int uid2; int same_p; }; typedef struct type_pair_d *type_pair_t; @@ -3037,8 +3038,8 @@ static hashval_t type_pair_hash (const void *p) { const struct type_pair_d *pair = (const struct type_pair_d *) p; - hashval_t val1 = iterative_hash_hashval_t (htab_hash_pointer (pair->t1), 0); - hashval_t val2 = iterative_hash_hashval_t (htab_hash_pointer (pair->t2), 0); + hashval_t val1 = pair->uid1; + hashval_t val2 = pair->uid2; return (iterative_hash_hashval_t (val2, val1) ^ iterative_hash_hashval_t (val1, val2)); } @@ -3050,34 +3051,37 @@ type_pair_eq (const void *p1, const void *p2) { const struct type_pair_d *pair1 = (const struct type_pair_d *) p1; const struct type_pair_d *pair2 = (const struct type_pair_d *) p2; - return ((pair1->t1 == pair2->t1 && pair1->t2 == pair2->t2) - || (pair1->t1 == pair2->t2 && pair1->t2 == pair2->t1)); + return ((pair1->uid1 == pair2->uid1 && pair1->uid2 == pair2->uid2) + || (pair1->uid1 == pair2->uid2 && pair1->uid2 == pair2->uid1)); } /* Lookup the pair of types T1 and T2 in *VISITED_P. Insert a new entry if none existed. */ static type_pair_t -lookup_type_pair (tree t1, tree t2, htab_t *visited_p) +lookup_type_pair (tree t1, tree t2, htab_t *visited_p, struct obstack *ob_p) { struct type_pair_d pair; type_pair_t p; void **slot; if (*visited_p == NULL) - *visited_p = htab_create (251, type_pair_hash, type_pair_eq, free); + { + *visited_p = htab_create (251, type_pair_hash, type_pair_eq, NULL); + gcc_obstack_init (ob_p); + } - pair.t1 = t1; - pair.t2 = t2; + pair.uid1 = TYPE_UID (t1); + pair.uid2 = TYPE_UID (t2); slot = htab_find_slot (*visited_p, &pair, INSERT); if (*slot) p = *((type_pair_t *) slot); else { - p = XNEW (struct type_pair_d); - p->t1 = t1; - p->t2 = t2; + p = XOBNEW (ob_p, struct type_pair_d); + p->uid1 = TYPE_UID (t1); + p->uid2 = TYPE_UID (t2); p->same_p = -2; *slot = (void *) p; } @@ -3086,62 +3090,38 @@ lookup_type_pair (tree t1, tree t2, htab_t *visited_p) } -/* Force merging the type T2 into the type T1. */ - -void -gimple_force_type_merge (tree t1, tree t2) -{ - void **slot; - type_pair_t p; - - /* There's no other way than copying t2 to t1 in this case. - Yuck. We'll just call this "completing" t1. */ - memcpy (t1, t2, tree_size (t1)); - - /* Adjust the hash value of T1 if it was computed already. Otherwise - we would be forced to not hash fields of structs to match the - hash value of an incomplete struct. */ - if (type_hash_cache - && (slot = pointer_map_contains (type_hash_cache, t1)) != NULL) - { - gimple_type_hash (t2); - *slot = *pointer_map_contains (type_hash_cache, t2); - } - - /* Adjust cached comparison results for T1 and T2 to make sure - they now compare compatible. */ - p = lookup_type_pair (t1, t2, >c_visited); - p->same_p = 1; -} - - -/* Return true if both types have the same name. */ +/* Return true if T1 and T2 have the same name. If FOR_COMPLETION_P is + true then if any type has no name return false, otherwise return + true if both types have no names. */ static bool -compare_type_names_p (tree t1, tree t2) +compare_type_names_p (tree t1, tree t2, bool for_completion_p) { tree name1 = TYPE_NAME (t1); tree name2 = TYPE_NAME (t2); - /* Consider anonymous types all unique. */ - if (!name1 || !name2) + /* Consider anonymous types all unique for completion. */ + if (for_completion_p + && (!name1 || !name2)) return false; - if (TREE_CODE (name1) == TYPE_DECL) + if (name1 && TREE_CODE (name1) == TYPE_DECL) { name1 = DECL_NAME (name1); - if (!name1) + if (for_completion_p + && !name1) return false; } - gcc_assert (TREE_CODE (name1) == IDENTIFIER_NODE); + gcc_assert (!name1 || TREE_CODE (name1) == IDENTIFIER_NODE); - if (TREE_CODE (name2) == TYPE_DECL) + if (name2 && TREE_CODE (name2) == TYPE_DECL) { name2 = DECL_NAME (name2); - if (!name2) + if (for_completion_p + && !name2) return false; } - gcc_assert (TREE_CODE (name2) == IDENTIFIER_NODE); + gcc_assert (!name2 || TREE_CODE (name2) == IDENTIFIER_NODE); /* Identifiers can be compared with pointer equality rather than a string comparison. */ @@ -3187,30 +3167,64 @@ compare_field_offset (tree f1, tree f2) /* Return 1 iff T1 and T2 are structurally identical. Otherwise, return 0. */ -int +static int gimple_types_compatible_p (tree t1, tree t2) { type_pair_t p = NULL; /* Check first for the obvious case of pointer identity. */ if (t1 == t2) - goto same_types; + return 1; /* Check that we have two types to compare. */ if (t1 == NULL_TREE || t2 == NULL_TREE) - goto different_types; + return 0; /* Can't be the same type if the types don't have the same code. */ if (TREE_CODE (t1) != TREE_CODE (t2)) - goto different_types; + return 0; + + /* Can't be the same type if they have different CV qualifiers. */ + if (TYPE_QUALS (t1) != TYPE_QUALS (t2)) + return 0; /* Void types are always the same. */ if (TREE_CODE (t1) == VOID_TYPE) - goto same_types; + return 1; - /* Can't be the same type if they have different CV qualifiers. */ - if (TYPE_QUALS (t1) != TYPE_QUALS (t2)) - goto different_types; + /* For numerical types do some simple checks before doing three + hashtable queries. */ + if (INTEGRAL_TYPE_P (t1) + || SCALAR_FLOAT_TYPE_P (t1) + || FIXED_POINT_TYPE_P (t1) + || TREE_CODE (t1) == VECTOR_TYPE + || TREE_CODE (t1) == COMPLEX_TYPE) + { + /* Can't be the same type if they have different alignment, + sign, precision or mode. */ + if (TYPE_ALIGN (t1) != TYPE_ALIGN (t2) + || TYPE_PRECISION (t1) != TYPE_PRECISION (t2) + || TYPE_MODE (t1) != TYPE_MODE (t2) + || TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)) + return 0; + + if (TREE_CODE (t1) == INTEGER_TYPE + && (TYPE_IS_SIZETYPE (t1) != TYPE_IS_SIZETYPE (t2) + || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2))) + return 0; + + /* That's all we need to check for float and fixed-point types. */ + if (SCALAR_FLOAT_TYPE_P (t1) + || FIXED_POINT_TYPE_P (t1)) + return 1; + + /* Perform cheap tail-recursion for vector and complex types. */ + if (TREE_CODE (t1) == VECTOR_TYPE + || TREE_CODE (t1) == COMPLEX_TYPE) + return gimple_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)); + + /* For integral types fall thru to more complex checks. */ + } /* If the hash values of t1 and t2 are different the types can't possibly be the same. This helps keeping the type-pair hashtable @@ -3220,7 +3234,7 @@ gimple_types_compatible_p (tree t1, tree t2) /* If we've visited this type pair before (in the case of aggregates with self-referential types), and we made a decision, return it. */ - p = lookup_type_pair (t1, t2, >c_visited); + p = lookup_type_pair (t1, t2, >c_visited, >c_ob); if (p->same_p == 0 || p->same_p == 1) { /* We have already decided whether T1 and T2 are the @@ -3243,71 +3257,6 @@ gimple_types_compatible_p (tree t1, tree t2) if (!attribute_list_equal (TYPE_ATTRIBUTES (t1), TYPE_ATTRIBUTES (t2))) goto different_types; - /* For numerical types, the bounds must coincide. */ - if (INTEGRAL_TYPE_P (t1) - || SCALAR_FLOAT_TYPE_P (t1) - || FIXED_POINT_TYPE_P (t1)) - { - /* Can't be the same type if they have different size, alignment, - sign, precision or mode. Note that from now on, comparisons - between *_CST nodes must be done using tree_int_cst_equal because - we cannot assume that constants from T1 and T2 will be shared - since T1 and T2 are distinct pointers. */ - if (!tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)) - || !tree_int_cst_equal (TYPE_SIZE_UNIT (t1), TYPE_SIZE_UNIT (t2)) - || TYPE_ALIGN (t1) != TYPE_ALIGN (t2) - || TYPE_PRECISION (t1) != TYPE_PRECISION (t2) - || TYPE_MODE (t1) != TYPE_MODE (t2) - || TYPE_UNSIGNED (t1) != TYPE_UNSIGNED (t2)) - goto different_types; - - /* For non-enumeral types, check type bounds. FIXME lto, we - cannot check bounds on enumeral types because different front - ends will produce different values. In C, enumeral types are - integers, while in C++ each element will have its own - symbolic value. We should decide how enums are to be - represented in GIMPLE and have each front end lower to that. */ - if (TREE_CODE (t1) != ENUMERAL_TYPE) - { - tree min1 = TYPE_MIN_VALUE (t1); - tree max1 = TYPE_MAX_VALUE (t1); - tree min2 = TYPE_MIN_VALUE (t2); - tree max2 = TYPE_MAX_VALUE (t2); - bool min_equal_p = false; - bool max_equal_p = false; - - /* If either type has a minimum value, the other type must - have the same. */ - if (min1 == NULL_TREE && min2 == NULL_TREE) - min_equal_p = true; - else if (min1 && min2 && operand_equal_p (min1, min2, 0)) - min_equal_p = true; - - /* Likewise, if either type has a maximum value, the other - type must have the same. */ - if (max1 == NULL_TREE && max2 == NULL_TREE) - max_equal_p = true; - else if (max1 && max2 && operand_equal_p (max1, max2, 0)) - max_equal_p = true; - - if (!min_equal_p || !max_equal_p) - goto different_types; - } - - if (TREE_CODE (t1) == INTEGER_TYPE) - { - if (TYPE_IS_SIZETYPE (t1) == TYPE_IS_SIZETYPE (t2) - && TYPE_STRING_FLAG (t1) == TYPE_STRING_FLAG (t2)) - goto same_types; - else - goto different_types; - } - else if (TREE_CODE (t1) == BOOLEAN_TYPE) - goto same_types; - else if (TREE_CODE (t1) == REAL_TYPE) - goto same_types; - } - /* Do type-specific comparisons. */ switch (TREE_CODE (t1)) { @@ -3315,7 +3264,8 @@ gimple_types_compatible_p (tree t1, tree t2) /* Array types are the same if the element types are the same and the number of elements are the same. */ if (!gimple_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2)) - || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2)) + || TYPE_STRING_FLAG (t1) != TYPE_STRING_FLAG (t2) + || TYPE_NONALIASED_COMPONENT (t1) != TYPE_NONALIASED_COMPONENT (t2)) goto different_types; else { @@ -3395,118 +3345,157 @@ gimple_types_compatible_p (tree t1, tree t2) case POINTER_TYPE: case REFERENCE_TYPE: - { - /* If the two pointers have different ref-all attributes, - they can't be the same type. */ - if (TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)) - goto different_types; - - /* If one pointer points to an incomplete type variant of - the other pointed-to type they are the same. */ - if (TREE_CODE (TREE_TYPE (t1)) == TREE_CODE (TREE_TYPE (t2)) - && (!COMPLETE_TYPE_P (TREE_TYPE (t1)) - || !COMPLETE_TYPE_P (TREE_TYPE (t2))) - && compare_type_names_p (TREE_TYPE (t1), TREE_TYPE (t2))) - { - /* If t2 is complete we want to choose it instead of t1. */ - if (COMPLETE_TYPE_P (TREE_TYPE (t2))) - gimple_force_type_merge (TREE_TYPE (t1), TREE_TYPE (t2)); - goto same_types; - } + { + /* If the two pointers have different ref-all attributes, + they can't be the same type. */ + if (TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)) + goto different_types; - /* Otherwise, pointer and reference types are the same if the - pointed-to types are the same. */ - if (gimple_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))) + /* If one pointer points to an incomplete type variant of + the other pointed-to type they are the same. */ + if (TREE_CODE (TREE_TYPE (t1)) == TREE_CODE (TREE_TYPE (t2)) + && RECORD_OR_UNION_TYPE_P (TREE_TYPE (t1)) + && (!COMPLETE_TYPE_P (TREE_TYPE (t1)) + || !COMPLETE_TYPE_P (TREE_TYPE (t2))) + && compare_type_names_p (TREE_TYPE (t1), TREE_TYPE (t2), true)) + { + /* Replace the pointed-to incomplete type with the + complete one. */ + if (COMPLETE_TYPE_P (TREE_TYPE (t2))) + TREE_TYPE (t1) = TREE_TYPE (t2); + else + TREE_TYPE (t2) = TREE_TYPE (t1); goto same_types; - + } + + /* Otherwise, pointer and reference types are the same if the + pointed-to types are the same. */ + if (gimple_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))) + goto same_types; + + goto different_types; + } + + case INTEGER_TYPE: + case BOOLEAN_TYPE: + { + tree min1 = TYPE_MIN_VALUE (t1); + tree max1 = TYPE_MAX_VALUE (t1); + tree min2 = TYPE_MIN_VALUE (t2); + tree max2 = TYPE_MAX_VALUE (t2); + bool min_equal_p = false; + bool max_equal_p = false; + + /* If either type has a minimum value, the other type must + have the same. */ + if (min1 == NULL_TREE && min2 == NULL_TREE) + min_equal_p = true; + else if (min1 && min2 && operand_equal_p (min1, min2, 0)) + min_equal_p = true; + + /* Likewise, if either type has a maximum value, the other + type must have the same. */ + if (max1 == NULL_TREE && max2 == NULL_TREE) + max_equal_p = true; + else if (max1 && max2 && operand_equal_p (max1, max2, 0)) + max_equal_p = true; + + if (!min_equal_p || !max_equal_p) goto different_types; - } - case ENUMERAL_TYPE: - { - /* For enumeral types, all the values must be the same. */ - tree v1, v2; + goto same_types; + } - if (TYPE_VALUES (t1) == TYPE_VALUES (t2)) - goto same_types; + case ENUMERAL_TYPE: + { + /* FIXME lto, we cannot check bounds on enumeral types because + different front ends will produce different values. + In C, enumeral types are integers, while in C++ each element + will have its own symbolic value. We should decide how enums + are to be represented in GIMPLE and have each front end lower + to that. */ + tree v1, v2; + + /* For enumeral types, all the values must be the same. */ + if (TYPE_VALUES (t1) == TYPE_VALUES (t2)) + goto same_types; - for (v1 = TYPE_VALUES (t1), v2 = TYPE_VALUES (t2); - v1 && v2; - v1 = TREE_CHAIN (v1), v2 = TREE_CHAIN (v2)) - { - tree c1 = TREE_VALUE (v1); - tree c2 = TREE_VALUE (v2); + for (v1 = TYPE_VALUES (t1), v2 = TYPE_VALUES (t2); + v1 && v2; + v1 = TREE_CHAIN (v1), v2 = TREE_CHAIN (v2)) + { + tree c1 = TREE_VALUE (v1); + tree c2 = TREE_VALUE (v2); - if (TREE_CODE (c1) == CONST_DECL) - c1 = DECL_INITIAL (c1); + if (TREE_CODE (c1) == CONST_DECL) + c1 = DECL_INITIAL (c1); - if (TREE_CODE (c2) == CONST_DECL) - c2 = DECL_INITIAL (c2); + if (TREE_CODE (c2) == CONST_DECL) + c2 = DECL_INITIAL (c2); - if (tree_int_cst_equal (c1, c2) != 1) - goto different_types; - } + if (tree_int_cst_equal (c1, c2) != 1) + goto different_types; + } - /* If one enumeration has more values than the other, they - are not the same. */ - if (v1 || v2) - goto different_types; + /* If one enumeration has more values than the other, they + are not the same. */ + if (v1 || v2) + goto different_types; - goto same_types; - } + goto same_types; + } case RECORD_TYPE: case UNION_TYPE: case QUAL_UNION_TYPE: - { - /* For aggregate types, all the fields must be the same. */ - tree f1, f2; + { + tree f1, f2; - /* Compare every field. */ - for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2); - f1 && f2; - f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2)) - { - /* The fields must have the same name, offset and type. */ - if (DECL_NAME (f1) != DECL_NAME (f2) - || !compare_field_offset (f1, f2) - || !gimple_types_compatible_p (TREE_TYPE (f1), - TREE_TYPE (f2))) - goto different_types; - } + /* If one type requires structural equality checks and the + other doesn't, do not merge the types. */ + if (TYPE_STRUCTURAL_EQUALITY_P (t1) + != TYPE_STRUCTURAL_EQUALITY_P (t2)) + goto different_types; - /* If one aggregate has more fields than the other, they - are not the same. */ - if (f1 || f2) - goto different_types; + /* The struct tags shall compare equal. */ + if (!compare_type_names_p (TYPE_MAIN_VARIANT (t1), + TYPE_MAIN_VARIANT (t2), false)) + goto different_types; - goto same_types; - } + /* For aggregate types, all the fields must be the same. */ + for (f1 = TYPE_FIELDS (t1), f2 = TYPE_FIELDS (t2); + f1 && f2; + f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2)) + { + /* The fields must have the same name, offset and type. */ + if (DECL_NAME (f1) != DECL_NAME (f2) + || DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2) + || !compare_field_offset (f1, f2) + || !gimple_types_compatible_p (TREE_TYPE (f1), + TREE_TYPE (f2))) + goto different_types; + } - case VECTOR_TYPE: - if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2)) - goto different_types; + /* If one aggregate has more fields than the other, they + are not the same. */ + if (f1 || f2) + goto different_types; - /* Fallthru */ - case COMPLEX_TYPE: - if (!gimple_types_compatible_p (TREE_TYPE (t1), TREE_TYPE (t2))) - goto different_types; - goto same_types; + goto same_types; + } default: - goto different_types; + gcc_unreachable (); } /* Common exit path for types that are not compatible. */ different_types: - if (p) - p->same_p = 0; + p->same_p = 0; return 0; /* Common exit path for types that are compatible. */ same_types: - if (p) - p->same_p = 1; + p->same_p = 1; return 1; } @@ -3578,12 +3567,11 @@ visit (tree t, struct sccs *state, hashval_t v, return v; } -/* Hash the name of TYPE with the previous hash value V and return it. */ +/* Hash NAME with the previous hash value V and return it. */ static hashval_t -iterative_hash_type_name (tree type, hashval_t v) +iterative_hash_name (tree name, hashval_t v) { - tree name = TYPE_NAME (TYPE_MAIN_VARIANT (type)); if (!name) return v; if (TREE_CODE (name) == TYPE_DECL) @@ -3655,17 +3643,35 @@ iterative_hash_gimple_type (tree type, hashval_t val, avoid hash differences for complete vs. incomplete types. */ if (POINTER_TYPE_P (type)) { - if (AGGREGATE_TYPE_P (TREE_TYPE (type))) + if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (type))) { v = iterative_hash_hashval_t (TREE_CODE (TREE_TYPE (type)), v); - v = iterative_hash_type_name (type, v); + v = iterative_hash_name + (TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (type))), v); } else v = visit (TREE_TYPE (type), state, v, sccstack, sccstate, sccstate_obstack); } - /* Recurse for aggregates with a single element. */ + /* For integer types hash the types min/max values and the string flag. */ + if (TREE_CODE (type) == INTEGER_TYPE) + { + v = iterative_hash_expr (TYPE_MIN_VALUE (type), v); + v = iterative_hash_expr (TYPE_MAX_VALUE (type), v); + v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v); + } + + /* For array types hash their domain and the string flag. */ + if (TREE_CODE (type) == ARRAY_TYPE + && TYPE_DOMAIN (type)) + { + v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v); + v = visit (TYPE_DOMAIN (type), state, v, + sccstack, sccstate, sccstate_obstack); + } + + /* Recurse for aggregates with a single element type. */ if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == COMPLEX_TYPE || TREE_CODE (type) == VECTOR_TYPE) @@ -3703,10 +3709,11 @@ iterative_hash_gimple_type (tree type, hashval_t val, unsigned nf; tree f; - v = iterative_hash_type_name (type, v); + v = iterative_hash_name (TYPE_NAME (TYPE_MAIN_VARIANT (type)), v); for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f)) { + v = iterative_hash_name (DECL_NAME (f), v); v = visit (TREE_TYPE (f), state, v, sccstack, sccstate, sccstate_obstack); nf++; @@ -3802,6 +3809,12 @@ gimple_register_type (tree t) gcc_assert (TYPE_P (t)); + /* Always register the main variant first. This is important so we + pick up the non-typedef variants as canonical, otherwise we'll end + up taking typedef ids for structure tags during comparison. */ + if (TYPE_MAIN_VARIANT (t) != t) + gimple_register_type (TYPE_MAIN_VARIANT (t)); + if (gimple_types == NULL) gimple_types = htab_create (16381, gimple_type_hash, gimple_type_eq, 0); @@ -3917,6 +3930,7 @@ free_gimple_type_tables (void) if (gtc_visited) { htab_delete (gtc_visited); + obstack_free (>c_ob, NULL); gtc_visited = NULL; } } @@ -4106,6 +4120,7 @@ gimple_signed_type (tree type) alias_set_type gimple_get_alias_set (tree t) { + static bool recursing_p; tree u; /* Permit type-punning when accessing a union, provided the access @@ -4147,6 +4162,12 @@ gimple_get_alias_set (tree t) { tree t1; + /* ??? We can end up creating cycles with TYPE_MAIN_VARIANT + and TYPE_CANONICAL. Avoid recursing endlessly between + this langhook and get_alias_set. */ + if (recursing_p) + return -1; + /* Unfortunately, there is no canonical form of a pointer type. In particular, if we have `typedef int I', then `int *', and `I *' are different types. So, we have to pick a canonical @@ -4171,7 +4192,13 @@ gimple_get_alias_set (tree t) C++ committee. */ t1 = build_type_no_quals (t); if (t1 != t) - return get_alias_set (t1); + { + alias_set_type set; + recursing_p = true; + set = get_alias_set (t1); + recursing_p = false; + return set; + } } return -1; diff --git a/gcc/gimple.h b/gcc/gimple.h index 3998bdfe03e..87309b694d4 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -915,8 +915,6 @@ extern bool is_gimple_call_addr (tree); extern tree get_call_expr_in (tree t); extern void recalculate_side_effects (tree); -extern void gimple_force_type_merge (tree, tree); -extern int gimple_types_compatible_p (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/haifa-sched.c b/gcc/haifa-sched.c index dc0791f6f2f..7cbe1ecee51 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -989,7 +989,7 @@ dep_list_size (rtx insn) { if (DEBUG_INSN_P (DEP_CON (dep))) dbgcount++; - else + else if (!DEBUG_INSN_P (DEP_PRO (dep))) nodbgcount++; } @@ -1688,6 +1688,39 @@ schedule_insn (rtx insn) should have been removed from the ready list. */ gcc_assert (sd_lists_empty_p (insn, SD_LIST_BACK)); + /* Reset debug insns invalidated by moving this insn. */ + if (MAY_HAVE_DEBUG_INSNS && !DEBUG_INSN_P (insn)) + for (sd_it = sd_iterator_start (insn, SD_LIST_BACK); + sd_iterator_cond (&sd_it, &dep);) + { + rtx dbg = DEP_PRO (dep); + + gcc_assert (DEBUG_INSN_P (dbg)); + + if (sched_verbose >= 6) + fprintf (sched_dump, ";;\t\tresetting: debug insn %d\n", + INSN_UID (dbg)); + + /* ??? Rather than resetting the debug insn, we might be able + to emit a debug temp before the just-scheduled insn, but + this would involve checking that the expression at the + point of the debug insn is equivalent to the expression + before the just-scheduled insn. They might not be: the + expression in the debug insn may depend on other insns not + yet scheduled that set MEMs, REGs or even other debug + insns. It's not clear that attempting to preserve debug + information in these cases is worth the effort, given how + uncommon these resets are and the likelihood that the debug + temps introduced won't survive the schedule change. */ + INSN_VAR_LOCATION_LOC (dbg) = gen_rtx_UNKNOWN_VAR_LOC (); + df_insn_rescan (dbg); + + /* We delete rather than resolve these deps, otherwise we + crash in sched_free_deps(), because forward deps are + expected to be released before backward deps. */ + sd_delete_dep (sd_it); + } + gcc_assert (QUEUE_INDEX (insn) == QUEUE_NOWHERE); QUEUE_INDEX (insn) = QUEUE_SCHEDULED; @@ -1712,6 +1745,12 @@ schedule_insn (rtx insn) advancing the iterator. */ sd_resolve_dep (sd_it); + /* Don't bother trying to mark next as ready if insn is a debug + insn. If insn is the last hard dependency, it will have + already been discounted. */ + if (DEBUG_INSN_P (insn) && !DEBUG_INSN_P (next)) + continue; + if (!IS_SPECULATION_BRANCHY_CHECK_P (insn)) { int effective_cost; @@ -3715,6 +3754,10 @@ try_ready (rtx next) { ds_t ds = DEP_STATUS (dep) & SPECULATIVE; + if (DEBUG_INSN_P (DEP_PRO (dep)) + && !DEBUG_INSN_P (next)) + continue; + if (first_p) { first_p = false; diff --git a/gcc/input.h b/gcc/input.h index 299f56c3ce6..7f00dc7cd0a 100644 --- a/gcc/input.h +++ b/gcc/input.h @@ -1,6 +1,6 @@ /* Declarations for variables relating to reading the source file. Used by parsers, lexical analyzers, and error message routines. - Copyright (C) 1993, 1997, 1998, 2000, 2003, 2004, 2007, 2008 + Copyright (C) 1993, 1997, 1998, 2000, 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GCC. @@ -30,7 +30,12 @@ extern GTY(()) struct line_maps *line_table; #define UNKNOWN_LOCATION ((source_location) 0) /* The location for declarations in "<built-in>" */ -#define BUILTINS_LOCATION ((source_location) 2) +#define BUILTINS_LOCATION ((source_location) 1) + +/* line-map.c reserves RESERVED_LOCATION_COUNT to the user. Ensure + both UNKNOWN_LOCATION and BUILTINS_LOCATION fit into that. */ +extern char builtins_location_check[(BUILTINS_LOCATION + < RESERVED_LOCATION_COUNT) ? 1 : -1]; typedef struct GTY (()) { diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 59a051915f6..79ff16e0e7f 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -299,9 +299,16 @@ ipcp_lattice_from_jfunc (struct ipa_node_params *info, struct ipcp_lattice *lat, cst = caller_lat->constant; if (jfunc->value.pass_through.operation != NOP_EXPR) - cst = fold_binary (jfunc->value.pass_through.operation, - TREE_TYPE (cst), cst, - jfunc->value.pass_through.operand); + { + tree restype; + if (TREE_CODE_CLASS (jfunc->value.pass_through.operation) + == tcc_comparison) + restype = boolean_type_node; + else + restype = TREE_TYPE (cst); + cst = fold_binary (jfunc->value.pass_through.operation, + restype, cst, jfunc->value.pass_through.operand); + } if (!cst || !is_gimple_ip_invariant (cst)) lat->type = IPA_BOTTOM; lat->constant = cst; @@ -607,7 +614,9 @@ ipcp_init_stage (void) /* building jump functions */ for (cs = node->callees; cs; cs = cs->next_callee) { - if (!cs->callee->analyzed) + /* We do not need to bother analyzing calls to unknown + functions unless they may become known during lto/whopr. */ + if (!cs->callee->analyzed && !flag_lto && !flag_whopr) continue; ipa_count_arguments (cs); if (ipa_get_cs_argument_count (IPA_EDGE_REF (cs)) @@ -689,7 +698,9 @@ ipcp_propagate_stage (void) struct ipa_node_params *callee_info = IPA_NODE_REF (cs->callee); struct ipa_edge_args *args = IPA_EDGE_REF (cs); - if (ipa_is_called_with_var_arguments (callee_info)) + if (ipa_is_called_with_var_arguments (callee_info) + || !cs->callee->analyzed + || ipa_is_called_with_var_arguments (callee_info)) continue; count = ipa_get_cs_argument_count (args); @@ -720,6 +731,10 @@ ipcp_iterate_stage (void) if (dump_file) fprintf (dump_file, "\nIPA iterate stage:\n\n"); + + if (in_lto_p) + ipa_update_after_lto_read (); + for (node = cgraph_nodes; node; node = node->next) { ipcp_initialize_node_lattices (node); @@ -1269,17 +1284,25 @@ ipcp_generate_summary (void) ipcp_init_stage (); } +/* Write ipcp summary for nodes in SET. */ +static void +ipcp_write_summary (cgraph_node_set set) +{ + ipa_prop_write_jump_functions (set); +} + +/* Read ipcp summary. */ +static void +ipcp_read_summary (void) +{ + ipa_prop_read_jump_functions (); +} + /* Gate for IPCP optimization. */ static bool cgraph_gate_cp (void) { - /* FIXME lto. IPA-CP does not tolerate running when the inlining decisions - have not been applied. This happens when WPA modifies the callgraph. - Since those decisions are not applied until after all the IPA passes - have been run in LTRANS, this means that IPA passes may see partially - modified callgraphs. The solution to this is to apply WPA decisions - early during LTRANS. */ - return flag_ipa_cp && !flag_ltrans; + return flag_ipa_cp; } struct ipa_opt_pass_d pass_ipa_cp = @@ -1301,8 +1324,8 @@ struct ipa_opt_pass_d pass_ipa_cp = TODO_remove_functions /* todo_flags_finish */ }, ipcp_generate_summary, /* generate_summary */ - NULL, /* write_summary */ - NULL, /* read_summary */ + ipcp_write_summary, /* write_summary */ + ipcp_read_summary, /* read_summary */ NULL, /* function_read_summary */ 0, /* TODOs */ NULL, /* function_transform */ diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 18e440a60fe..81c3379ca2e 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -310,7 +310,7 @@ cgraph_mark_inline_edge (struct cgraph_edge *e, bool update_original, overall_size -= orig_size; ncalls_inlined++; - if (flag_indirect_inlining) + if (flag_indirect_inlining && !flag_wpa) return ipa_propagate_indirect_call_infos (curr, new_edges); else return false; @@ -876,7 +876,7 @@ cgraph_decide_inlining_of_small_functions (void) int min_size, max_size; VEC (cgraph_edge_p, heap) *new_indirect_edges = NULL; - if (flag_indirect_inlining) + if (flag_indirect_inlining && !flag_wpa) new_indirect_edges = VEC_alloc (cgraph_edge_p, heap, 8); if (dump_file) @@ -1023,10 +1023,10 @@ cgraph_decide_inlining_of_small_functions (void) if (where->global.inlined_to) where = where->global.inlined_to; if (!cgraph_decide_recursive_inlining (where, - flag_indirect_inlining + flag_indirect_inlining && !flag_wpa ? &new_indirect_edges : NULL)) continue; - if (flag_indirect_inlining) + if (flag_indirect_inlining && !flag_wpa) add_new_edges_to_heap (heap, new_indirect_edges); update_callee_keys (heap, where, updated_nodes); } @@ -1045,7 +1045,7 @@ cgraph_decide_inlining_of_small_functions (void) } callee = edge->callee; cgraph_mark_inline_edge (edge, true, &new_indirect_edges); - if (flag_indirect_inlining) + if (flag_indirect_inlining && !flag_wpa) add_new_edges_to_heap (heap, new_indirect_edges); update_callee_keys (heap, callee, updated_nodes); @@ -1113,13 +1113,9 @@ cgraph_decide_inlining (void) bool redo_always_inline = true; int initial_size = 0; - /* FIXME lto. We need to rethink how to coordinate different passes. */ - if (flag_ltrans) - return 0; - - /* FIXME lto. We need to re-think about how the passes get invoked. */ - if (!flag_wpa) - cgraph_remove_function_insertion_hook (function_insertion_hook_holder); + cgraph_remove_function_insertion_hook (function_insertion_hook_holder); + if (in_lto_p && flag_indirect_inlining && !flag_wpa) + ipa_update_after_lto_read (); max_count = 0; max_benefit = 0; @@ -1272,7 +1268,7 @@ cgraph_decide_inlining (void) } /* Free ipa-prop structures if they are no longer needed. */ - if (flag_indirect_inlining) + if (flag_indirect_inlining && !flag_wpa) free_all_ipa_structures_after_iinln (); if (dump_file) @@ -1593,10 +1589,10 @@ cgraph_early_inlining (void) if (sorrycount || errorcount) return 0; - while (cgraph_decide_inlining_incrementally (node, - iterations - ? INLINE_SIZE_NORECURSIVE : INLINE_SIZE, 0) - && iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS)) + while (iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS) + && cgraph_decide_inlining_incrementally (node, + iterations + ? INLINE_SIZE_NORECURSIVE : INLINE_SIZE, 0)) { timevar_push (TV_INTEGRATION); todo |= optimize_inline_calls (current_function_decl); @@ -1928,10 +1924,6 @@ inline_generate_summary (void) { struct cgraph_node *node; - /* FIXME lto. We should not run any IPA-summary pass in LTRANS mode. */ - if (flag_ltrans) - return; - function_insertion_hook_holder = cgraph_add_function_insertion_hook (&add_new_function, NULL); @@ -1976,6 +1968,34 @@ inline_transform (struct cgraph_node *node) return todo | execute_fixup_cfg (); } +/* Read inline summary. Jump functions are shared among ipa-cp + and inliner, so when ipa-cp is active, we don't need to write them + twice. */ + +static void +inline_read_summary (void) +{ + if (flag_indirect_inlining && !flag_wpa) + { + ipa_register_cgraph_hooks (); + if (!flag_ipa_cp) + ipa_prop_read_jump_functions (); + } + function_insertion_hook_holder = + cgraph_add_function_insertion_hook (&add_new_function, NULL); +} + +/* Write inline summary for node in SET. + Jump functions are shared among ipa-cp and inliner, so when ipa-cp is + active, we don't need to write them twice. */ + +static void +inline_write_summary (cgraph_node_set set) +{ + if (flag_indirect_inlining && !flag_ipa_cp) + ipa_prop_write_jump_functions (set); +} + struct ipa_opt_pass_d pass_ipa_inline = { { @@ -1995,8 +2015,8 @@ struct ipa_opt_pass_d pass_ipa_inline = | TODO_remove_functions /* todo_flags_finish */ }, inline_generate_summary, /* generate_summary */ - NULL, /* write_summary */ - NULL, /* read_summary */ + inline_write_summary, /* write_summary */ + inline_read_summary, /* read_summary */ NULL, /* function_read_summary */ 0, /* TODOs */ inline_transform, /* function_transform */ diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 0e6aaf51168..9956fbc53b7 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -33,11 +33,12 @@ along with GCC; see the file COPYING3. If not see #include "timevar.h" #include "flags.h" #include "diagnostic.h" +#include "lto-streamer.h" /* Vector where the parameter infos are actually stored. */ VEC (ipa_node_params_t, heap) *ipa_node_params_vector; /* Vector where the parameter infos are actually stored. */ -VEC (ipa_edge_args_t, heap) *ipa_edge_args_vector; +VEC (ipa_edge_args_t, gc) *ipa_edge_args_vector; /* Holders of ipa cgraph hooks: */ static struct cgraph_edge_hook_list *edge_removal_hook_holder; @@ -248,7 +249,7 @@ ipa_count_arguments (struct cgraph_edge *cs) arg_num = gimple_call_num_args (stmt); if (VEC_length (ipa_edge_args_t, ipa_edge_args_vector) <= (unsigned) cgraph_edge_max_uid) - VEC_safe_grow_cleared (ipa_edge_args_t, heap, + VEC_safe_grow_cleared (ipa_edge_args_t, gc, ipa_edge_args_vector, cgraph_edge_max_uid + 1); ipa_set_cs_argument_count (IPA_EDGE_REF (cs), arg_num); } @@ -357,6 +358,9 @@ compute_complex_pass_through (struct ipa_node_params *info, { if (TREE_CODE (op1) != SSA_NAME || !SSA_NAME_IS_DEFAULT_DEF (op1) + || (TREE_CODE_CLASS (gimple_expr_code (stmt)) != tcc_comparison + && !useless_type_conversion_p (TREE_TYPE (name), + TREE_TYPE (op1))) || !is_gimple_ip_invariant (op2)) return; @@ -658,8 +662,8 @@ ipa_compute_jump_functions (struct cgraph_edge *cs) if (ipa_get_cs_argument_count (arguments) == 0 || arguments->jump_functions) return; - arguments->jump_functions = XCNEWVEC (struct ipa_jump_func, - ipa_get_cs_argument_count (arguments)); + arguments->jump_functions = GGC_CNEWVEC (struct ipa_jump_func, + ipa_get_cs_argument_count (arguments)); call = cs->call_stmt; gcc_assert (is_gimple_call (call)); @@ -1170,7 +1174,7 @@ void ipa_free_edge_args_substructures (struct ipa_edge_args *args) { if (args->jump_functions) - free (args->jump_functions); + ggc_free (args->jump_functions); memset (args, 0, sizeof (*args)); } @@ -1188,7 +1192,7 @@ ipa_free_all_edge_args (void) i++) ipa_free_edge_args_substructures (args); - VEC_free (ipa_edge_args_t, heap, ipa_edge_args_vector); + VEC_free (ipa_edge_args_t, gc, ipa_edge_args_vector); ipa_edge_args_vector = NULL; } @@ -1259,7 +1263,22 @@ duplicate_array (void *src, size_t n) if (!src) return NULL; - p = xcalloc (1, n); + p = xmalloc (n); + memcpy (p, src, n); + return p; +} + +/* Like duplicate_array byt in GGC memory. */ + +static void * +duplicate_ggc_array (void *src, size_t n) +{ + void *p; + + if (!src) + return NULL; + + p = ggc_alloc (n); memcpy (p, src, n); return p; } @@ -1281,8 +1300,8 @@ ipa_edge_duplication_hook (struct cgraph_edge *src, struct cgraph_edge *dst, arg_count = ipa_get_cs_argument_count (old_args); ipa_set_cs_argument_count (new_args, arg_count); new_args->jump_functions = (struct ipa_jump_func *) - duplicate_array (old_args->jump_functions, - sizeof (struct ipa_jump_func) * arg_count); + duplicate_ggc_array (old_args->jump_functions, + sizeof (struct ipa_jump_func) * arg_count); } /* Hook that is called by cgraph.c when a node is duplicated. */ @@ -1872,3 +1891,283 @@ ipa_dump_param_adjustments (FILE *file, ipa_parm_adjustment_vec adjustments, VEC_free (tree, heap, parms); } +/* Stream out jump function JUMP_FUNC to OB. */ + +static void +ipa_write_jump_function (struct output_block *ob, + struct ipa_jump_func *jump_func) +{ + lto_output_uleb128_stream (ob->main_stream, + jump_func->type); + + switch (jump_func->type) + { + case IPA_JF_UNKNOWN: + break; + case IPA_JF_CONST: + lto_output_tree (ob, jump_func->value.constant, true); + break; + case IPA_JF_PASS_THROUGH: + lto_output_tree (ob, jump_func->value.pass_through.operand, true); + lto_output_uleb128_stream (ob->main_stream, + jump_func->value.pass_through.formal_id); + lto_output_uleb128_stream (ob->main_stream, + jump_func->value.pass_through.operation); + break; + case IPA_JF_ANCESTOR: + lto_output_uleb128_stream (ob->main_stream, + jump_func->value.ancestor.offset); + lto_output_tree (ob, jump_func->value.ancestor.type, true); + lto_output_uleb128_stream (ob->main_stream, + jump_func->value.ancestor.formal_id); + break; + case IPA_JF_CONST_MEMBER_PTR: + lto_output_tree (ob, jump_func->value.member_cst.pfn, true); + lto_output_tree (ob, jump_func->value.member_cst.delta, false); + break; + } +} + +/* Read in jump function JUMP_FUNC from IB. */ + +static void +ipa_read_jump_function (struct lto_input_block *ib, + struct ipa_jump_func *jump_func, + struct data_in *data_in) +{ + jump_func->type = (enum jump_func_type) lto_input_uleb128 (ib); + + switch (jump_func->type) + { + case IPA_JF_UNKNOWN: + break; + case IPA_JF_CONST: + jump_func->value.constant = lto_input_tree (ib, data_in); + break; + case IPA_JF_PASS_THROUGH: + jump_func->value.pass_through.operand = lto_input_tree (ib, data_in); + jump_func->value.pass_through.formal_id = lto_input_uleb128 (ib); + jump_func->value.pass_through.operation = (enum tree_code) lto_input_uleb128 (ib); + break; + case IPA_JF_ANCESTOR: + jump_func->value.ancestor.offset = lto_input_uleb128 (ib); + jump_func->value.ancestor.type = lto_input_tree (ib, data_in); + jump_func->value.ancestor.formal_id = lto_input_uleb128 (ib); + break; + case IPA_JF_CONST_MEMBER_PTR: + jump_func->value.member_cst.pfn = lto_input_tree (ib, data_in); + jump_func->value.member_cst.delta = lto_input_tree (ib, data_in); + break; + } +} + +/* Stream out NODE info to OB. */ + +static void +ipa_write_node_info (struct output_block *ob, struct cgraph_node *node) +{ + int node_ref; + lto_cgraph_encoder_t encoder; + struct ipa_node_params *info = IPA_NODE_REF (node); + int j; + struct cgraph_edge *e; + struct bitpack_d *bp; + + encoder = ob->decl_state->cgraph_node_encoder; + node_ref = lto_cgraph_encoder_encode (encoder, node); + lto_output_uleb128_stream (ob->main_stream, node_ref); + + /* Note that flags will need to be read in the opposite + order as we are pushing the bitflags into FLAGS. */ + bp = bitpack_create (); + bp_pack_value (bp, info->called_with_var_arguments, 1); + gcc_assert (info->modification_analysis_done || ipa_get_param_count (info) == 0); + gcc_assert (info->uses_analysis_done || ipa_get_param_count (info) == 0); + gcc_assert (!info->node_enqueued); + gcc_assert (!info->ipcp_orig_node); + for (j = 0; j < ipa_get_param_count (info); j++) + { + bp_pack_value (bp, info->params[j].modified, 1); + bp_pack_value (bp, info->params[j].called, 1); + } + lto_output_bitpack (ob->main_stream, bp); + bitpack_delete (bp); + for (e = node->callees; e; e = e->next_callee) + { + struct ipa_edge_args *args = IPA_EDGE_REF (e); + + lto_output_uleb128_stream (ob->main_stream, ipa_get_cs_argument_count (args)); + for (j = 0; j < ipa_get_cs_argument_count (args); j++) + ipa_write_jump_function (ob, ipa_get_ith_jump_func (args, j)); + } +} + +/* Srtream in NODE info from IB. */ + +static void +ipa_read_node_info (struct lto_input_block *ib, struct cgraph_node *node, + struct data_in *data_in) +{ + struct ipa_node_params *info = IPA_NODE_REF (node); + int k; + struct cgraph_edge *e; + struct bitpack_d *bp; + + ipa_initialize_node_params (node); + + /* Note that the flags must be read in the opposite + order in which they were written (the bitflags were + pushed into FLAGS). */ + bp = lto_input_bitpack (ib); + info->called_with_var_arguments = bp_unpack_value (bp, 1); + if (ipa_get_param_count (info) != 0) + { + info->modification_analysis_done = true; + info->uses_analysis_done = true; + } + info->node_enqueued = false; + for (k = 0; k < ipa_get_param_count (info); k++) + { + info->params[k].modified = bp_unpack_value (bp, 1); + info->params[k].called = bp_unpack_value (bp, 1); + } + bitpack_delete (bp); + for (e = node->callees; e; e = e->next_callee) + { + struct ipa_edge_args *args = IPA_EDGE_REF (e); + int count = lto_input_uleb128 (ib); + + if (VEC_length (ipa_edge_args_t, ipa_edge_args_vector) + <= (unsigned) cgraph_edge_max_uid) + VEC_safe_grow_cleared (ipa_edge_args_t, gc, + ipa_edge_args_vector, cgraph_edge_max_uid + 1); + ipa_set_cs_argument_count (args, count); + if (!count) + continue; + + args->jump_functions = GGC_CNEWVEC (struct ipa_jump_func, + ipa_get_cs_argument_count (args)); + for (k = 0; k < ipa_get_cs_argument_count (args); k++) + ipa_read_jump_function (ib, ipa_get_ith_jump_func (args, k), data_in); + } +} + +/* Write jump functions for nodes in SET. */ + +void +ipa_prop_write_jump_functions (cgraph_node_set set) +{ + struct cgraph_node *node; + struct output_block *ob = create_output_block (LTO_section_jump_functions); + unsigned int count = 0; + cgraph_node_set_iterator csi; + + ob->cgraph_node = NULL; + + for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi)) + { + node = csi_node (csi); + if (node->analyzed && IPA_NODE_REF (node) != NULL) + count++; + } + + lto_output_uleb128_stream (ob->main_stream, count); + + /* Process all of the functions. */ + for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi)) + { + node = csi_node (csi); + if (node->analyzed && IPA_NODE_REF (node) != NULL) + ipa_write_node_info (ob, node); + } + lto_output_1_stream (ob->main_stream, 0); + produce_asm (ob, NULL); + destroy_output_block (ob); +} + +/* Read section in file FILE_DATA of length LEN with data DATA. */ + +static void +ipa_prop_read_section (struct lto_file_decl_data *file_data, const char *data, + size_t len) +{ + const struct lto_function_header *header = + (const struct lto_function_header *) data; + const int32_t cfg_offset = sizeof (struct lto_function_header); + const int32_t main_offset = cfg_offset + header->cfg_size; + const int32_t string_offset = main_offset + header->main_size; + struct data_in *data_in; + struct lto_input_block ib_main; + unsigned int i; + unsigned int count; + + LTO_INIT_INPUT_BLOCK (ib_main, (const char *) data + main_offset, 0, + header->main_size); + + data_in = + lto_data_in_create (file_data, (const char *) data + string_offset, + header->string_size, NULL); + count = lto_input_uleb128 (&ib_main); + + for (i = 0; i < count; i++) + { + unsigned int index; + struct cgraph_node *node; + lto_cgraph_encoder_t encoder; + + index = lto_input_uleb128 (&ib_main); + encoder = file_data->cgraph_node_encoder; + node = lto_cgraph_encoder_deref (encoder, index); + ipa_read_node_info (&ib_main, node, data_in); + } + lto_free_section_data (file_data, LTO_section_jump_functions, NULL, data, + len); + lto_data_in_delete (data_in); +} + +/* Read ipcp jump functions. */ + +void +ipa_prop_read_jump_functions (void) +{ + struct lto_file_decl_data **file_data_vec = lto_get_file_decl_data (); + struct lto_file_decl_data *file_data; + unsigned int j = 0; + + ipa_check_create_node_params (); + ipa_check_create_edge_args (); + ipa_register_cgraph_hooks (); + + while ((file_data = file_data_vec[j++])) + { + size_t len; + const char *data = lto_get_section_data (file_data, LTO_section_jump_functions, NULL, &len); + + if (data) + ipa_prop_read_section (file_data, data, len); + } +} + +/* After merging units, we can get mismatch in argument counts. + Also decl merging might've rendered parameter lists obsolette. + Also compute called_with_variable_arg info. */ + +void +ipa_update_after_lto_read (void) +{ + struct cgraph_node *node; + struct cgraph_edge *cs; + + for (node = cgraph_nodes; node; node = node->next) + { + if (!node->analyzed) + continue; + ipa_populate_param_decls (node, IPA_NODE_REF (node)); + for (cs = node->callees; cs; cs = cs->next_callee) + { + if (ipa_get_cs_argument_count (IPA_EDGE_REF (cs)) + != ipa_get_param_count (IPA_NODE_REF (cs->callee))) + ipa_set_called_with_variable_arg (IPA_NODE_REF (cs->callee)); + } + } +} diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h index 9b5f74f87ad..35005954deb 100644 --- a/gcc/ipa-prop.h +++ b/gcc/ipa-prop.h @@ -72,7 +72,7 @@ enum ipa_lattice_type /* Structure holding data required to describe a pass-through jump function. */ -struct ipa_pass_through_data +struct GTY(()) ipa_pass_through_data { /* If an operation is to be performed on the original parameter, this is the second (constant) operand. */ @@ -89,7 +89,7 @@ struct ipa_pass_through_data /* Structure holding data required to describe and ancestor pass throu funkci. */ -struct ipa_ancestor_jf_data +struct GTY(()) ipa_ancestor_jf_data { /* Offset of the field representing the ancestor. */ HOST_WIDE_INT offset; @@ -101,30 +101,28 @@ struct ipa_ancestor_jf_data /* Structure holding a C++ member pointer constant. Holds a pointer to the method and delta offset. */ -struct ipa_member_ptr_cst +struct GTY(()) ipa_member_ptr_cst { tree pfn; tree delta; }; -/* Represents a value of a jump function. pass_through is used only in jump - function context. constant represents the actual constant in constant jump - functions and member_cst holds constant c++ member functions. */ -union jump_func_value -{ - tree constant; - struct ipa_pass_through_data pass_through; - struct ipa_ancestor_jf_data ancestor; - struct ipa_member_ptr_cst member_cst; -}; - /* A jump function for a callsite represents the values passed as actual arguments of the callsite. See enum jump_func_type for the various types of jump functions supported. */ -struct ipa_jump_func +struct GTY (()) ipa_jump_func { enum jump_func_type type; - union jump_func_value value; + /* Represents a value of a jump function. pass_through is used only in jump + function context. constant represents the actual constant in constant jump + functions and member_cst holds constant c++ member functions. */ + union jump_func_value + { + tree GTY ((tag ("IPA_JF_CONST"))) constant; + struct ipa_pass_through_data GTY ((tag ("IPA_JF_PASS_THROUGH"))) pass_through; + struct ipa_ancestor_jf_data GTY ((tag ("IPA_JF_ANCESTOR"))) ancestor; + struct ipa_member_ptr_cst GTY ((tag ("IPA_JF_CONST_MEMBER_PTR"))) member_cst; + } GTY ((desc ("%1.type"))) value; }; /* All formal parameters in the program have a cval computed by @@ -280,15 +278,15 @@ ipa_is_called_with_var_arguments (struct ipa_node_params *info) /* ipa_edge_args stores information related to a callsite and particularly its arguments. It is pointed to by a field in the callsite's corresponding cgraph_edge. */ -struct ipa_edge_args +typedef struct GTY(()) ipa_edge_args { /* Number of actual arguments in this callsite. When set to 0, this callsite's parameters would not be analyzed by the different stages of IPA CP. */ int argument_count; /* Array of the callsite's jump function of each parameter. */ - struct ipa_jump_func *jump_functions; -}; + struct ipa_jump_func GTY ((length ("%h.argument_count"))) *jump_functions; +} ipa_edge_args_t; /* ipa_edge_args access functions. Please use these to access fields that are or will be shared among various passes. */ @@ -321,18 +319,17 @@ ipa_get_ith_jump_func (struct ipa_edge_args *args, int i) /* Vectors need to have typedefs of structures. */ typedef struct ipa_node_params ipa_node_params_t; -typedef struct ipa_edge_args ipa_edge_args_t; /* Types of vectors holding the infos. */ DEF_VEC_O (ipa_node_params_t); DEF_VEC_ALLOC_O (ipa_node_params_t, heap); DEF_VEC_O (ipa_edge_args_t); -DEF_VEC_ALLOC_O (ipa_edge_args_t, heap); +DEF_VEC_ALLOC_O (ipa_edge_args_t, gc); /* Vector where the parameter infos are actually stored. */ extern VEC (ipa_node_params_t, heap) *ipa_node_params_vector; /* Vector where the parameter infos are actually stored. */ -extern VEC (ipa_edge_args_t, heap) *ipa_edge_args_vector; +extern GTY(()) VEC (ipa_edge_args_t, gc) *ipa_edge_args_vector; /* Return the associated parameter/argument info corresponding to the given node/edge. */ @@ -378,12 +375,12 @@ static inline void ipa_check_create_edge_args (void) { if (!ipa_edge_args_vector) - ipa_edge_args_vector = VEC_alloc (ipa_edge_args_t, heap, + ipa_edge_args_vector = VEC_alloc (ipa_edge_args_t, gc, cgraph_edge_max_uid); if (VEC_length (ipa_edge_args_t, ipa_edge_args_vector) <= (unsigned) cgraph_edge_max_uid) - VEC_safe_grow_cleared (ipa_edge_args_t, heap, ipa_edge_args_vector, + VEC_safe_grow_cleared (ipa_edge_args_t, gc, ipa_edge_args_vector, cgraph_edge_max_uid + 1); } @@ -508,6 +505,10 @@ ipa_parm_adjustment_vec ipa_combine_adjustments (ipa_parm_adjustment_vec, ipa_parm_adjustment_vec); void ipa_dump_param_adjustments (FILE *, ipa_parm_adjustment_vec, tree); +void ipa_prop_write_jump_functions (cgraph_node_set set); +void ipa_prop_read_jump_functions (void); +void ipa_update_after_lto_read (void); + /* From tree-sra.c: */ bool build_ref_for_offset (tree *, tree, HOST_WIDE_INT, tree, bool); diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c index ea1d81ea5e2..e37af05d08e 100644 --- a/gcc/ipa-pure-const.c +++ b/gcc/ipa-pure-const.c @@ -330,12 +330,11 @@ check_call (funct_state local, gimple call, bool ipa) /* When not in IPA mode, we can still handle self recursion. */ if (!ipa && callee_t == current_function_decl) local->looping = true; - /* The callee is either unknown (indirect call) or there is just no - scannable code for it (external call) . We look to see if there - are any bits available for the callee (such as by declaration or - because it is builtin) and process solely on the basis of those - bits. */ - else if (avail <= AVAIL_OVERWRITABLE || !ipa) + /* Either calle is unknown or we are doing local analysis. + Look to see if there are any bits available for the callee (such as by + declaration or because it is builtin) and process solely on the basis of + those bits. */ + else if (!ipa || !callee_t) { if (possibly_throws && flag_non_call_exceptions) { @@ -492,13 +491,6 @@ analyze_function (struct cgraph_node *fn, bool ipa) funct_state l; basic_block this_block; - if (cgraph_function_body_availability (fn) <= AVAIL_OVERWRITABLE) - { - if (dump_file) - fprintf (dump_file, "Function is not available or overwrittable; not analyzing.\n"); - return NULL; - } - l = XCNEW (struct funct_state_d); l->pure_const_state = IPA_CONST; l->state_previously_known = IPA_NEITHER; @@ -609,7 +601,7 @@ end: static void add_new_function (struct cgraph_node *node, void *data ATTRIBUTE_UNUSED) { - if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE) + if (cgraph_function_body_availability (node) < AVAIL_OVERWRITABLE) return; /* There are some shared nodes, in particular the initializers on static declarations. We do not need to scan them more than once @@ -686,12 +678,12 @@ generate_summary (void) /* Process all of the functions. - We do NOT process any AVAIL_OVERWRITABLE functions, we cannot - guarantee that what we learn about the one we see will be true - for the one that overrides it. - */ + We process AVAIL_OVERWRITABLE functions. We can not use the results + by default, but the info can be used at LTO with -fwhole-program or + when function got clonned and the clone is AVAILABLE. */ + for (node = cgraph_nodes; node; node = node->next) - if (cgraph_function_body_availability (node) > AVAIL_OVERWRITABLE) + if (cgraph_function_body_availability (node) >= AVAIL_OVERWRITABLE) set_function_state (node, analyze_function (node, true)); pointer_set_destroy (visited_nodes); @@ -878,6 +870,12 @@ propagate (void) if (w_l->looping) looping = true; + if (cgraph_function_body_availability (w) == AVAIL_OVERWRITABLE) + { + looping |= w_l->looping_previously_known; + if (pure_const_state < w_l->state_previously_known) + pure_const_state = w_l->state_previously_known; + } if (pure_const_state == IPA_NEITHER) break; @@ -901,6 +899,20 @@ propagate (void) if (y_l->looping) looping = true; } + else + { + int flags = flags_from_decl_or_type (y->decl); + + if (flags & ECF_LOOPING_CONST_OR_PURE) + looping = true; + if (flags & ECF_CONST) + ; + else if ((flags & ECF_PURE) && pure_const_state == IPA_CONST) + pure_const_state = IPA_PURE; + else + pure_const_state = IPA_NEITHER, looping = true; + + } } w_info = (struct ipa_dfs_info *) w->aux; w = w_info->next_cycle; @@ -988,7 +1000,8 @@ propagate (void) struct cgraph_edge *e; funct_state w_l = get_function_state (w); - if (w_l->can_throw) + if (w_l->can_throw + || cgraph_function_body_availability (w) == AVAIL_OVERWRITABLE) can_throw = true; if (can_throw) @@ -1008,6 +1021,8 @@ propagate (void) && e->can_throw_external) can_throw = true; } + else if (e->can_throw_external && !TREE_NOTHROW (y->decl)) + can_throw = true; } w_info = (struct ipa_dfs_info *) w->aux; w = w_info->next_cycle; @@ -1046,7 +1061,7 @@ propagate (void) free (node->aux); node->aux = NULL; } - if (cgraph_function_body_availability (node) > AVAIL_OVERWRITABLE) + if (cgraph_function_body_availability (node) >= AVAIL_OVERWRITABLE) free (get_function_state (node)); } @@ -1109,15 +1124,16 @@ local_pure_const (void) fprintf (dump_file, "Function called in recursive cycle; ignoring\n"); return 0; } - - l = analyze_function (cgraph_node (current_function_decl), false); - if (!l) + if (cgraph_function_body_availability (cgraph_node (current_function_decl)) + <= 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); + switch (l->pure_const_state) { case IPA_CONST: diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c index 795684692bf..f0e8aa0aaed 100644 --- a/gcc/ipa-reference.c +++ b/gcc/ipa-reference.c @@ -318,6 +318,8 @@ has_proper_scope_for_analysis (tree t) if (!TREE_STATIC (t) && !DECL_EXTERNAL (t)) return false; + /* FIXME: for LTO we should include PUBLIC vars too. This is bit difficult + as summarie would need unsharing. */ if (DECL_EXTERNAL (t) || TREE_PUBLIC (t)) return false; @@ -413,31 +415,21 @@ check_call (ipa_reference_local_vars_info_t local, gimple stmt) { int flags = gimple_call_flags (stmt); tree callee_t = gimple_call_fndecl (stmt); - enum availability avail = AVAIL_NOT_AVAILABLE; - if (callee_t) + /* Process indirect calls. All direct calles are handled at propagation + time. */ + if (!callee_t) { - struct cgraph_node* callee = cgraph_node(callee_t); - avail = cgraph_function_body_availability (callee); - } - - if (avail <= AVAIL_OVERWRITABLE) - if (local) - { - if (flags & ECF_CONST) - ; - else if (flags & ECF_PURE) + if (flags & ECF_CONST) + ; + else if (flags & ECF_PURE) + local->calls_read_all = true; + else + { local->calls_read_all = true; - else - { - local->calls_read_all = true; - local->calls_write_all = true; - } - } - /* TODO: To be able to produce sane results, we should also handle - common builtins, in particular throw. - Indirect calls hsould be only counted and as inliner is replacing them - by direct calls, we can conclude if any indirect calls are left in body */ + local->calls_write_all = true; + } + } } /* TP is the part of the tree currently under the microscope. @@ -527,7 +519,7 @@ propagate_bits (ipa_reference_global_vars_info_t x_global, struct cgraph_node *x { struct cgraph_node *y = e->callee; - /* Only look at the master nodes and skip external nodes. */ + /* Only look into nodes we can propagate something. */ if (cgraph_function_body_availability (e->callee) > AVAIL_OVERWRITABLE) { if (get_reference_vars_info (y)) @@ -1012,9 +1004,9 @@ generate_summary (void) static bool write_node_summary_p (struct cgraph_node *node) { + gcc_assert (node->global.inlined_to == NULL); return (node->analyzed - && node->global.inlined_to == NULL - && cgraph_function_body_availability (node) == AVAIL_OVERWRITABLE + && cgraph_function_body_availability (node) >= AVAIL_OVERWRITABLE && get_reference_vars_info (node) != NULL); } @@ -1053,18 +1045,28 @@ ipa_reference_write_summary (cgraph_node_set set) lto_output_uleb128_stream (ob->main_stream, node_ref); /* Stream out the statics read. */ - lto_output_uleb128_stream (ob->main_stream, - bitmap_count_bits (l->statics_read)); - EXECUTE_IF_SET_IN_BITMAP (l->statics_read, 0, index, bi) - lto_output_var_decl_index(ob->decl_state, ob->main_stream, - get_static_decl (index)); + if (l->calls_read_all) + lto_output_sleb128_stream (ob->main_stream, -1); + else + { + lto_output_sleb128_stream (ob->main_stream, + bitmap_count_bits (l->statics_read)); + EXECUTE_IF_SET_IN_BITMAP (l->statics_read, 0, index, bi) + lto_output_var_decl_index(ob->decl_state, ob->main_stream, + get_static_decl (index)); + } /* Stream out the statics written. */ - lto_output_uleb128_stream (ob->main_stream, - bitmap_count_bits (l->statics_written)); - EXECUTE_IF_SET_IN_BITMAP (l->statics_written, 0, index, bi) - lto_output_var_decl_index(ob->decl_state, ob->main_stream, - get_static_decl (index)); + if (l->calls_write_all) + lto_output_sleb128_stream (ob->main_stream, -1); + else + { + lto_output_sleb128_stream (ob->main_stream, + bitmap_count_bits (l->statics_written)); + EXECUTE_IF_SET_IN_BITMAP (l->statics_written, 0, index, bi) + lto_output_var_decl_index(ob->decl_state, ob->main_stream, + get_static_decl (index)); + } } } lto_destroy_simple_output_block (ob); @@ -1101,7 +1103,7 @@ ipa_reference_read_summary (void) unsigned int j, index; struct cgraph_node *node; ipa_reference_local_vars_info_t l; - unsigned int v_count; + int v_count; lto_cgraph_encoder_t encoder; index = lto_input_uleb128 (ib); @@ -1110,26 +1112,32 @@ ipa_reference_read_summary (void) l = init_function_info (node); /* Set the statics read. */ - v_count = lto_input_uleb128 (ib); - for (j = 0; j < v_count; j++) - { - unsigned int var_index = lto_input_uleb128 (ib); - tree v_decl = lto_file_decl_data_get_var_decl (file_data, - var_index); - add_static_var (v_decl); - bitmap_set_bit (l->statics_read, DECL_UID (v_decl)); - } + v_count = lto_input_sleb128 (ib); + if (v_count == -1) + l->calls_read_all = true; + else + for (j = 0; j < (unsigned int)v_count; j++) + { + unsigned int var_index = lto_input_uleb128 (ib); + tree v_decl = lto_file_decl_data_get_var_decl (file_data, + var_index); + add_static_var (v_decl); + bitmap_set_bit (l->statics_read, DECL_UID (v_decl)); + } /* Set the statics written. */ - v_count = lto_input_uleb128 (ib); - for (j = 0; j < v_count; j++) - { - unsigned int var_index = lto_input_uleb128 (ib); - tree v_decl = lto_file_decl_data_get_var_decl (file_data, - var_index); - add_static_var (v_decl); - bitmap_set_bit (l->statics_written, DECL_UID (v_decl)); - } + v_count = lto_input_sleb128 (ib); + if (v_count == -1) + l->calls_read_all = true; + else + for (j = 0; j < (unsigned int)v_count; j++) + { + unsigned int var_index = lto_input_uleb128 (ib); + tree v_decl = lto_file_decl_data_get_var_decl (file_data, + var_index); + add_static_var (v_decl); + bitmap_set_bit (l->statics_written, DECL_UID (v_decl)); + } } lto_destroy_simple_input_block (file_data, @@ -1141,6 +1149,26 @@ ipa_reference_read_summary (void) +/* Set READ_ALL/WRITE_ALL based on DECL flags. */ +static void +read_write_all_from_decl (tree decl, bool * read_all, bool * write_all) +{ + int flags = flags_from_decl_or_type (decl); + if (flags & ECF_CONST) + ; + else if (flags & ECF_PURE) + *read_all = true; + else + { + /* TODO: To be able to produce sane results, we should also handle + common builtins, in particular throw. + Indirect calls hsould be only counted and as inliner is replacing them + by direct calls, we can conclude if any indirect calls are left in body */ + *read_all = true; + *write_all = true; + } +} + /* Produce the global information by preforming a transitive closure on the local information that was produced by ipa_analyze_function and ipa_analyze_variable. */ @@ -1173,6 +1201,7 @@ propagate (void) ipa_reference_global_vars_info_t node_g = XCNEW (struct ipa_reference_global_vars_info_d); ipa_reference_local_vars_info_t node_l; + struct cgraph_edge *e; bool read_all; bool write_all; @@ -1193,6 +1222,15 @@ propagate (void) read_all = node_l->calls_read_all; write_all = node_l->calls_write_all; + /* When function is overwrittable, we can not assume anything. */ + if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE) + read_write_all_from_decl (node->decl, &read_all, &write_all); + + for (e = node->callees; e; e = e->next_callee) + if (cgraph_function_body_availability (e->callee) <= AVAIL_OVERWRITABLE) + read_write_all_from_decl (e->callee->decl, &read_all, &write_all); + + /* If any node in a cycle is calls_read_all or calls_write_all they all are. */ w_info = (struct ipa_dfs_info *) node->aux; @@ -1201,6 +1239,15 @@ propagate (void) { ipa_reference_local_vars_info_t w_l = get_reference_vars_info (w)->local; + + /* When function is overwrittable, we can not assume anything. */ + if (cgraph_function_body_availability (w) <= AVAIL_OVERWRITABLE) + read_write_all_from_decl (w->decl, &read_all, &write_all); + + for (e = w->callees; e; e = e->next_callee) + if (cgraph_function_body_availability (e->callee) <= AVAIL_OVERWRITABLE) + read_write_all_from_decl (e->callee->decl, &read_all, &write_all); + read_all |= w_l->calls_read_all; write_all |= w_l->calls_write_all; @@ -1208,6 +1255,7 @@ propagate (void) w = w_info->next_cycle; } + /* Initialized the bitmaps for the reduced nodes */ if (read_all) node_g->statics_read = all_module_statics; @@ -1217,7 +1265,6 @@ propagate (void) bitmap_copy (node_g->statics_read, node_l->statics_read); } - if (write_all) node_g->statics_written = all_module_statics; else diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index 7fb40bc7a93..7916cb27bf1 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -1665,6 +1665,7 @@ ira_finish_costs_once (void) static void init_costs (void) { + init_subregs_of_mode (); costs = (struct costs *) ira_allocate (max_struct_costs_size * cost_elements_num); pref_buffer diff --git a/gcc/ira.c b/gcc/ira.c index 440166419b4..cf389a4f5a6 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -3144,6 +3144,9 @@ ira (FILE *f) epilogue thus changing register elimination offsets. */ current_function_is_leaf = leaf_function_p (); + if (resize_reg_info () && flag_ira_loop_pressure) + ira_set_pseudo_classes (ira_dump_file); + rebuild_p = update_equiv_regs (); #ifndef IRA_NO_OBSTACK @@ -3170,7 +3173,6 @@ ira (FILE *f) } max_regno_before_ira = allocated_reg_info_size = max_reg_num (); - resize_reg_info (); ira_setup_eliminable_regset (); ira_overall_cost = ira_reg_cost = ira_mem_cost = 0; @@ -3287,6 +3289,8 @@ ira (FILE *f) reload_completed = !reload (get_insns (), ira_conflicts_p); + finish_subregs_of_mode (); + timevar_pop (TV_RELOAD); timevar_push (TV_IRA); diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 6ce9d58b0e0..7815bc8a050 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,10 @@ +2009-10-20 Joel Dice <dicej@mailsnare.net> + + PR java/28474 + * mangle_name.c (append_unicode_mangled_name): Fix mangling + of names with multiple underscores and "U". + (unicode_mangling_length): Likewise. + 2009-10-03 Simon Baldwin <simonb@google.com> * config-lang.in (lang_dirs): Remove zlib. diff --git a/gcc/java/mangle_name.c b/gcc/java/mangle_name.c index a0e6887a04e..a75f5cad090 100644 --- a/gcc/java/mangle_name.c +++ b/gcc/java/mangle_name.c @@ -266,7 +266,10 @@ append_unicode_mangled_name (const char *name, int len) int ch = UTF8_GET(ptr, limit); if ((ISALNUM (ch) && ch != 'U') || ch == '$') - obstack_1grow (mangle_obstack, ch); + { + obstack_1grow (mangle_obstack, ch); + uuU = 0; + } /* Everything else needs encoding */ else { @@ -321,7 +324,10 @@ unicode_mangling_length (const char *name, int len) if (ch < 0) error ("internal error - invalid Utf8 name"); if ((ISALNUM (ch) && ch != 'U') || ch == '$') - num_chars++; + { + num_chars++; + uuU = 0; + } /* Everything else needs encoding */ else { diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index 11a8310f33e..901ce51ac89 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -39,9 +39,9 @@ along with GCC; see the file COPYING3. If not see #include "system.h" #include "coretypes.h" #include "tm.h" +#include "hard-reg-set.h" #include "rtl.h" #include "tm_p.h" -#include "hard-reg-set.h" #include "obstack.h" #include "basic-block.h" #include "cfgloop.h" @@ -54,6 +54,8 @@ along with GCC; see the file COPYING3. If not see #include "hashtab.h" #include "except.h" #include "params.h" +#include "regs.h" +#include "ira.h" /* The data stored for the loop. */ @@ -61,6 +63,12 @@ struct loop_data { struct loop *outermost_exit; /* The outermost exit of the loop. */ bool has_call; /* True if the loop contains a call. */ + /* Maximal register pressure inside loop for given register class + (defined only for the cover classes). */ + int max_reg_pressure[N_REG_CLASSES]; + /* Loop regs referenced and live pseudo-registers. */ + bitmap_head regs_ref; + bitmap_head regs_live; }; #define LOOP_DATA(LOOP) ((struct loop_data *) (LOOP)->aux) @@ -100,6 +108,10 @@ struct invariant value. */ rtx reg; + /* If we moved the invariant out of the loop, the original regno + that contained its value. */ + int orig_regno; + /* The definition of the invariant. */ struct def *def; @@ -126,6 +138,9 @@ struct invariant unsigned stamp; }; +/* Currently processed loop. */ +static struct loop *curr_loop; + /* Table of invariants indexed by the df_ref uid field. */ static unsigned int invariant_table_size = 0; @@ -615,7 +630,12 @@ find_exits (struct loop *loop, basic_block *body, } } - loop->aux = xcalloc (1, sizeof (struct loop_data)); + if (loop->aux == NULL) + { + loop->aux = xcalloc (1, sizeof (struct loop_data)); + bitmap_initialize (&LOOP_DATA (loop)->regs_ref, ®_obstack); + bitmap_initialize (&LOOP_DATA (loop)->regs_live, ®_obstack); + } LOOP_DATA (loop)->outermost_exit = outermost_exit; LOOP_DATA (loop)->has_call = has_call; } @@ -685,8 +705,17 @@ create_new_invariant (struct def *def, rtx insn, bitmap depends_on, if (def) { inv->cost = rtx_cost (set, SET, speed); + /* ??? Try to determine cheapness of address computation. Unfortunately + the address cost is only a relative measure, we can't really compare + it with any absolute number, but only with other address costs. + But here we don't have any other addresses, so compare with a magic + number anyway. It has to be large enough to not regress PR33928 + (by avoiding to move reg+8,reg+16,reg+24 invariants), but small + enough to not regress 410.bwaves either (by still moving reg+reg + invariants). + See http://gcc.gnu.org/ml/gcc-patches/2009-10/msg01210.html . */ inv->cheap_address = address_cost (SET_SRC (set), word_mode, - speed) < COSTS_N_INSNS (1); + speed) < 3; } else { @@ -696,6 +725,7 @@ create_new_invariant (struct def *def, rtx insn, bitmap depends_on, inv->move = false; inv->reg = NULL_RTX; + inv->orig_regno = -1; inv->stamp = 0; inv->insn = insn; @@ -982,14 +1012,46 @@ free_use_list (struct use *use) } } +/* Return cover class and number of hard registers (through *NREGS) + for destination of INSN. */ +static enum reg_class +get_cover_class_and_nregs (rtx insn, int *nregs) +{ + rtx reg; + enum reg_class cover_class; + rtx set = single_set (insn); + + /* Considered invariant insns have only one set. */ + gcc_assert (set != NULL_RTX); + reg = SET_DEST (set); + if (GET_CODE (reg) == SUBREG) + reg = SUBREG_REG (reg); + if (MEM_P (reg)) + { + *nregs = 0; + cover_class = NO_REGS; + } + else + { + if (! REG_P (reg)) + reg = NULL_RTX; + if (reg == NULL_RTX) + cover_class = GENERAL_REGS; + else + cover_class = reg_cover_class (REGNO (reg)); + *nregs = ira_reg_class_nregs[cover_class][GET_MODE (SET_SRC (set))]; + } + return cover_class; +} + /* Calculates cost and number of registers needed for moving invariant INV out of the loop and stores them to *COST and *REGS_NEEDED. */ static void get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed) { - int acomp_cost; - unsigned aregs_needed; + int i, acomp_cost; + unsigned aregs_needed[N_REG_CLASSES]; unsigned depno; struct invariant *dep; bitmap_iterator bi; @@ -998,13 +1060,30 @@ get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed) inv = VEC_index (invariant_p, invariants, inv->eqto); *comp_cost = 0; - *regs_needed = 0; + if (! flag_ira_loop_pressure) + regs_needed[0] = 0; + else + { + for (i = 0; i < ira_reg_class_cover_size; i++) + regs_needed[ira_reg_class_cover[i]] = 0; + } + if (inv->move || inv->stamp == actual_stamp) return; inv->stamp = actual_stamp; - (*regs_needed)++; + if (! flag_ira_loop_pressure) + regs_needed[0]++; + else + { + int nregs; + enum reg_class cover_class; + + cover_class = get_cover_class_and_nregs (inv->insn, &nregs); + regs_needed[cover_class] += nregs; + } + if (!inv->cheap_address || inv->def->n_addr_uses < inv->def->n_uses) (*comp_cost) += inv->cost; @@ -1029,19 +1108,35 @@ get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed) on floating point constants is unlikely to ever occur. */ rtx set = single_set (inv->insn); if (set - && IS_STACK_MODE (GET_MODE (SET_SRC (set))) - && constant_pool_constant_p (SET_SRC (set))) - (*regs_needed) += 2; + && IS_STACK_MODE (GET_MODE (SET_SRC (set))) + && constant_pool_constant_p (SET_SRC (set))) + { + if (flag_ira_loop_pressure) + regs_needed[STACK_REG_COVER_CLASS] += 2; + else + regs_needed[0] += 2; + } } #endif EXECUTE_IF_SET_IN_BITMAP (inv->depends_on, 0, depno, bi) { + bool check_p; + dep = VEC_index (invariant_p, invariants, depno); - get_inv_cost (dep, &acomp_cost, &aregs_needed); + get_inv_cost (dep, &acomp_cost, aregs_needed); - if (aregs_needed + if (! flag_ira_loop_pressure) + check_p = aregs_needed[0] != 0; + else + { + for (i = 0; i < ira_reg_class_cover_size; i++) + if (aregs_needed[ira_reg_class_cover[i]] != 0) + break; + check_p = i < ira_reg_class_cover_size; + } + if (check_p /* We need to check always_executed, since if the original value of the invariant may be preserved, we may need to keep it in a separate register. TODO check whether the register has an @@ -1051,10 +1146,26 @@ get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed) { /* If this is a single use, after moving the dependency we will not need a new register. */ - aregs_needed--; + if (! flag_ira_loop_pressure) + aregs_needed[0]--; + else + { + int nregs; + enum reg_class cover_class; + + cover_class = get_cover_class_and_nregs (inv->insn, &nregs); + aregs_needed[cover_class] -= nregs; + } } - (*regs_needed) += aregs_needed; + if (! flag_ira_loop_pressure) + regs_needed[0] += aregs_needed[0]; + else + { + for (i = 0; i < ira_reg_class_cover_size; i++) + regs_needed[ira_reg_class_cover[i]] + += aregs_needed[ira_reg_class_cover[i]]; + } (*comp_cost) += acomp_cost; } } @@ -1066,15 +1177,62 @@ get_inv_cost (struct invariant *inv, int *comp_cost, unsigned *regs_needed) static int gain_for_invariant (struct invariant *inv, unsigned *regs_needed, - unsigned new_regs, unsigned regs_used, bool speed) + unsigned *new_regs, unsigned regs_used, bool speed) { int comp_cost, size_cost; - get_inv_cost (inv, &comp_cost, regs_needed); actual_stamp++; - size_cost = (estimate_reg_pressure_cost (new_regs + *regs_needed, regs_used, speed) - - estimate_reg_pressure_cost (new_regs, regs_used, speed)); + get_inv_cost (inv, &comp_cost, regs_needed); + + if (! flag_ira_loop_pressure) + { + size_cost = (estimate_reg_pressure_cost (new_regs[0] + regs_needed[0], + regs_used, speed) + - estimate_reg_pressure_cost (new_regs[0], + regs_used, speed)); + } + else + { + int i; + enum reg_class cover_class; + + for (i = 0; i < ira_reg_class_cover_size; i++) + { + cover_class = ira_reg_class_cover[i]; + if ((int) new_regs[cover_class] + + (int) regs_needed[cover_class] + + LOOP_DATA (curr_loop)->max_reg_pressure[cover_class] + + IRA_LOOP_RESERVED_REGS + > ira_available_class_regs[cover_class]) + break; + } + if (i < ira_reg_class_cover_size) + /* There will be register pressure excess and we want not to + make this loop invariant motion. All loop invariants with + non-positive gains will be rejected in function + find_invariants_to_move. Therefore we return the negative + number here. + + One could think that this rejects also expensive loop + invariant motions and this will hurt code performance. + However numerous experiments with different heuristics + taking invariant cost into account did not confirm this + assumption. There are possible explanations for this + result: + o probably all expensive invariants were already moved out + of the loop by PRE and gimple invariant motion pass. + o expensive invariant execution will be hidden by insn + scheduling or OOO processor hardware because usually such + invariants have a lot of freedom to be executed + out-of-order. + Another reason for ignoring invariant cost vs spilling cost + heuristics is also in difficulties to evaluate accurately + spill cost at this stage. */ + return -1; + else + size_cost = 0; + } return comp_cost - size_cost; } @@ -1087,11 +1245,11 @@ gain_for_invariant (struct invariant *inv, unsigned *regs_needed, static int best_gain_for_invariant (struct invariant **best, unsigned *regs_needed, - unsigned new_regs, unsigned regs_used, bool speed) + unsigned *new_regs, unsigned regs_used, bool speed) { struct invariant *inv; - int gain = 0, again; - unsigned aregs_needed, invno; + int i, gain = 0, again; + unsigned aregs_needed[N_REG_CLASSES], invno; for (invno = 0; VEC_iterate (invariant_p, invariants, invno, inv); invno++) { @@ -1102,13 +1260,20 @@ best_gain_for_invariant (struct invariant **best, unsigned *regs_needed, if (inv->eqto != inv->invno) continue; - again = gain_for_invariant (inv, &aregs_needed, new_regs, regs_used, + again = gain_for_invariant (inv, aregs_needed, new_regs, regs_used, speed); if (again > gain) { gain = again; *best = inv; - *regs_needed = aregs_needed; + if (! flag_ira_loop_pressure) + regs_needed[0] = aregs_needed[0]; + else + { + for (i = 0; i < ira_reg_class_cover_size; i++) + regs_needed[ira_reg_class_cover[i]] + = aregs_needed[ira_reg_class_cover[i]]; + } } } @@ -1118,7 +1283,7 @@ best_gain_for_invariant (struct invariant **best, unsigned *regs_needed, /* Marks invariant INVNO and all its dependencies for moving. */ static void -set_move_mark (unsigned invno) +set_move_mark (unsigned invno, int gain) { struct invariant *inv = VEC_index (invariant_p, invariants, invno); bitmap_iterator bi; @@ -1131,11 +1296,18 @@ set_move_mark (unsigned invno) inv->move = true; if (dump_file) - fprintf (dump_file, "Decided to move invariant %d\n", invno); + { + if (gain >= 0) + fprintf (dump_file, "Decided to move invariant %d -- gain %d\n", + invno, gain); + else + fprintf (dump_file, "Decided to move dependent invariant %d\n", + invno); + }; EXECUTE_IF_SET_IN_BITMAP (inv->depends_on, 0, invno, bi) { - set_move_mark (invno); + set_move_mark (invno, -1); } } @@ -1144,32 +1316,54 @@ set_move_mark (unsigned invno) static void find_invariants_to_move (bool speed) { - unsigned i, regs_used, regs_needed = 0, new_regs; + int gain; + unsigned i, regs_used, regs_needed[N_REG_CLASSES], new_regs[N_REG_CLASSES]; struct invariant *inv = NULL; - unsigned int n_regs = DF_REG_SIZE (df); if (!VEC_length (invariant_p, invariants)) return; - /* We do not really do a good job in estimating number of registers used; - we put some initial bound here to stand for induction variables etc. - that we do not detect. */ - regs_used = 2; - - for (i = 0; i < n_regs; i++) + if (flag_ira_loop_pressure) + /* REGS_USED is actually never used when the flag is on. */ + regs_used = 0; + else + /* We do not really do a good job in estimating number of + registers used; we put some initial bound here to stand for + induction variables etc. that we do not detect. */ { - if (!DF_REGNO_FIRST_DEF (i) && DF_REGNO_LAST_USE (i)) + unsigned int n_regs = DF_REG_SIZE (df); + + regs_used = 2; + + for (i = 0; i < n_regs; i++) { - /* This is a value that is used but not changed inside loop. */ - regs_used++; + if (!DF_REGNO_FIRST_DEF (i) && DF_REGNO_LAST_USE (i)) + { + /* This is a value that is used but not changed inside loop. */ + regs_used++; + } } } - new_regs = 0; - while (best_gain_for_invariant (&inv, ®s_needed, new_regs, regs_used, speed) > 0) + if (! flag_ira_loop_pressure) + new_regs[0] = regs_needed[0] = 0; + else { - set_move_mark (inv->invno); - new_regs += regs_needed; + for (i = 0; (int) i < ira_reg_class_cover_size; i++) + new_regs[ira_reg_class_cover[i]] = 0; + } + while ((gain = best_gain_for_invariant (&inv, regs_needed, + new_regs, regs_used, speed)) > 0) + { + set_move_mark (inv->invno, gain); + if (! flag_ira_loop_pressure) + new_regs[0] += regs_needed[0]; + else + { + for (i = 0; (int) i < ira_reg_class_cover_size; i++) + new_regs[ira_reg_class_cover[i]] + += regs_needed[ira_reg_class_cover[i]]; + } } } @@ -1186,11 +1380,13 @@ move_invariant_reg (struct loop *loop, unsigned invno) rtx reg, set, dest, note; struct use *use; bitmap_iterator bi; + int regno; if (inv->reg) return true; if (!repr->move) return false; + regno = -1; /* If this is a representative of the class of equivalent invariants, really move the invariant. Otherwise just replace its use with the register used for the representative. */ @@ -1211,7 +1407,12 @@ move_invariant_reg (struct loop *loop, unsigned invno) would not be dominated by it, we may just move it (TODO). Otherwise we need to create a temporary register. */ set = single_set (inv->insn); - dest = SET_DEST (set); + reg = dest = SET_DEST (set); + if (GET_CODE (reg) == SUBREG) + reg = SUBREG_REG (reg); + if (REG_P (reg)) + regno = REGNO (reg); + reg = gen_reg_rtx_and_attrs (dest); /* Try replacing the destination by a new pseudoregister. */ @@ -1237,6 +1438,7 @@ move_invariant_reg (struct loop *loop, unsigned invno) if (!move_invariant_reg (loop, repr->invno)) goto fail; reg = repr->reg; + regno = repr->orig_regno; set = single_set (inv->insn); emit_insn_after (gen_move_insn (SET_DEST (set), reg), inv->insn); delete_insn (inv->insn); @@ -1244,6 +1446,7 @@ move_invariant_reg (struct loop *loop, unsigned invno) inv->reg = reg; + inv->orig_regno = regno; /* Replace the uses we know to be dominated. It saves work for copy propagation, and also it is necessary so that dependent invariants @@ -1266,6 +1469,7 @@ fail: fprintf (dump_file, "Failed to move invariant %d\n", invno); inv->move = false; inv->reg = NULL_RTX; + inv->orig_regno = -1; return false; } @@ -1281,6 +1485,21 @@ move_invariants (struct loop *loop) for (i = 0; VEC_iterate (invariant_p, invariants, i, inv); i++) move_invariant_reg (loop, i); + if (flag_ira_loop_pressure && resize_reg_info ()) + { + for (i = 0; VEC_iterate (invariant_p, invariants, i, inv); i++) + if (inv->reg != NULL_RTX) + { + if (inv->orig_regno >= 0) + setup_reg_classes (REGNO (inv->reg), + reg_preferred_class (inv->orig_regno), + reg_alternate_class (inv->orig_regno), + reg_cover_class (inv->orig_regno)); + else + setup_reg_classes (REGNO (inv->reg), + GENERAL_REGS, NO_REGS, GENERAL_REGS); + } + } } /* Initializes invariant motion data. */ @@ -1346,10 +1565,317 @@ free_loop_data (struct loop *loop) { struct loop_data *data = LOOP_DATA (loop); + bitmap_clear (&LOOP_DATA (loop)->regs_ref); + bitmap_clear (&LOOP_DATA (loop)->regs_live); free (data); loop->aux = NULL; } + + +/* Registers currently living. */ +static bitmap_head curr_regs_live; + +/* Current reg pressure for each cover class. */ +static int curr_reg_pressure[N_REG_CLASSES]; + +/* Record all regs that are set in any one insn. Communication from + mark_reg_{store,clobber} and global_conflicts. Asm can refer to + all hard-registers. */ +static rtx regs_set[(FIRST_PSEUDO_REGISTER > MAX_RECOG_OPERANDS + ? FIRST_PSEUDO_REGISTER : MAX_RECOG_OPERANDS) * 2]; +/* Number of regs stored in the previous array. */ +static int n_regs_set; + +/* Return cover class and number of needed hard registers (through + *NREGS) of register REGNO. */ +static enum reg_class +get_regno_cover_class (int regno, int *nregs) +{ + if (regno >= FIRST_PSEUDO_REGISTER) + { + enum reg_class cover_class = reg_cover_class (regno); + + *nregs = ira_reg_class_nregs[cover_class][PSEUDO_REGNO_MODE (regno)]; + return cover_class; + } + else if (! TEST_HARD_REG_BIT (ira_no_alloc_regs, regno) + && ! TEST_HARD_REG_BIT (eliminable_regset, regno)) + { + *nregs = 1; + return ira_class_translate[REGNO_REG_CLASS (regno)]; + } + else + { + *nregs = 0; + return NO_REGS; + } +} + +/* Increase (if INCR_P) or decrease current register pressure for + register REGNO. */ +static void +change_pressure (int regno, bool incr_p) +{ + int nregs; + enum reg_class cover_class; + + cover_class = get_regno_cover_class (regno, &nregs); + if (! incr_p) + curr_reg_pressure[cover_class] -= nregs; + else + { + curr_reg_pressure[cover_class] += nregs; + if (LOOP_DATA (curr_loop)->max_reg_pressure[cover_class] + < curr_reg_pressure[cover_class]) + LOOP_DATA (curr_loop)->max_reg_pressure[cover_class] + = curr_reg_pressure[cover_class]; + } +} + +/* Mark REGNO birth. */ +static void +mark_regno_live (int regno) +{ + struct loop *loop; + + for (loop = curr_loop; + loop != current_loops->tree_root; + loop = loop_outer (loop)) + bitmap_set_bit (&LOOP_DATA (loop)->regs_live, regno); + if (bitmap_bit_p (&curr_regs_live, regno)) + return; + bitmap_set_bit (&curr_regs_live, regno); + change_pressure (regno, true); +} + +/* Mark REGNO death. */ +static void +mark_regno_death (int regno) +{ + if (! bitmap_bit_p (&curr_regs_live, regno)) + return; + bitmap_clear_bit (&curr_regs_live, regno); + change_pressure (regno, false); +} + +/* Mark setting register REG. */ +static void +mark_reg_store (rtx reg, const_rtx setter ATTRIBUTE_UNUSED, + void *data ATTRIBUTE_UNUSED) +{ + int regno; + + if (GET_CODE (reg) == SUBREG) + reg = SUBREG_REG (reg); + + if (! REG_P (reg)) + return; + + regs_set[n_regs_set++] = reg; + + regno = REGNO (reg); + + if (regno >= FIRST_PSEUDO_REGISTER) + mark_regno_live (regno); + else + { + int last = regno + hard_regno_nregs[regno][GET_MODE (reg)]; + + while (regno < last) + { + mark_regno_live (regno); + regno++; + } + } +} + +/* Mark clobbering register REG. */ +static void +mark_reg_clobber (rtx reg, const_rtx setter, void *data) +{ + if (GET_CODE (setter) == CLOBBER) + mark_reg_store (reg, setter, data); +} + +/* Mark register REG death. */ +static void +mark_reg_death (rtx reg) +{ + int regno = REGNO (reg); + + if (regno >= FIRST_PSEUDO_REGISTER) + mark_regno_death (regno); + else + { + int last = regno + hard_regno_nregs[regno][GET_MODE (reg)]; + + while (regno < last) + { + mark_regno_death (regno); + regno++; + } + } +} + +/* Mark occurrence of registers in X for the current loop. */ +static void +mark_ref_regs (rtx x) +{ + RTX_CODE code; + int i; + const char *fmt; + + if (!x) + return; + + code = GET_CODE (x); + if (code == REG) + { + struct loop *loop; + + for (loop = curr_loop; + loop != current_loops->tree_root; + loop = loop_outer (loop)) + bitmap_set_bit (&LOOP_DATA (loop)->regs_ref, REGNO (x)); + return; + } + + fmt = GET_RTX_FORMAT (code); + for (i = GET_RTX_LENGTH (code) - 1; i >= 0; i--) + if (fmt[i] == 'e') + mark_ref_regs (XEXP (x, i)); + else if (fmt[i] == 'E') + { + int j; + + for (j = 0; j < XVECLEN (x, i); j++) + mark_ref_regs (XVECEXP (x, i, j)); + } +} + +/* Calculate register pressure in the loops. */ +static void +calculate_loop_reg_pressure (void) +{ + int i; + unsigned int j; + bitmap_iterator bi; + basic_block bb; + rtx insn, link; + struct loop *loop, *parent; + loop_iterator li; + + FOR_EACH_LOOP (li, loop, 0) + if (loop->aux == NULL) + { + loop->aux = xcalloc (1, sizeof (struct loop_data)); + bitmap_initialize (&LOOP_DATA (loop)->regs_ref, ®_obstack); + bitmap_initialize (&LOOP_DATA (loop)->regs_live, ®_obstack); + } + ira_setup_eliminable_regset (); + bitmap_initialize (&curr_regs_live, ®_obstack); + FOR_EACH_BB (bb) + { + curr_loop = bb->loop_father; + if (curr_loop == current_loops->tree_root) + continue; + + for (loop = curr_loop; + loop != current_loops->tree_root; + loop = loop_outer (loop)) + bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (bb)); + + bitmap_copy (&curr_regs_live, DF_LR_IN (bb)); + for (i = 0; i < ira_reg_class_cover_size; i++) + curr_reg_pressure[ira_reg_class_cover[i]] = 0; + EXECUTE_IF_SET_IN_BITMAP (&curr_regs_live, 0, j, bi) + change_pressure (j, true); + + FOR_BB_INSNS (bb, insn) + { + if (! NONDEBUG_INSN_P (insn)) + continue; + + mark_ref_regs (PATTERN (insn)); + n_regs_set = 0; + note_stores (PATTERN (insn), mark_reg_clobber, NULL); + + /* Mark any registers dead after INSN as dead now. */ + + for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) + if (REG_NOTE_KIND (link) == REG_DEAD) + mark_reg_death (XEXP (link, 0)); + + /* Mark any registers set in INSN as live, + and mark them as conflicting with all other live regs. + Clobbers are processed again, so they conflict with + the registers that are set. */ + + note_stores (PATTERN (insn), mark_reg_store, NULL); + +#ifdef AUTO_INC_DEC + for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) + if (REG_NOTE_KIND (link) == REG_INC) + mark_reg_store (XEXP (link, 0), NULL_RTX, NULL); +#endif + while (n_regs_set-- > 0) + { + rtx note = find_regno_note (insn, REG_UNUSED, + REGNO (regs_set[n_regs_set])); + if (! note) + continue; + + mark_reg_death (XEXP (note, 0)); + } + } + } + bitmap_clear (&curr_regs_live); + if (flag_ira_region == IRA_REGION_MIXED + || flag_ira_region == IRA_REGION_ALL) + FOR_EACH_LOOP (li, loop, 0) + { + EXECUTE_IF_SET_IN_BITMAP (&LOOP_DATA (loop)->regs_live, 0, j, bi) + if (! bitmap_bit_p (&LOOP_DATA (loop)->regs_ref, j)) + { + enum reg_class cover_class; + int nregs; + + cover_class = get_regno_cover_class (j, &nregs); + LOOP_DATA (loop)->max_reg_pressure[cover_class] -= nregs; + } + } + if (dump_file == NULL) + return; + FOR_EACH_LOOP (li, loop, 0) + { + parent = loop_outer (loop); + fprintf (dump_file, "\n Loop %d (parent %d, header bb%d, depth %d)\n", + loop->num, (parent == NULL ? -1 : parent->num), + loop->header->index, loop_depth (loop)); + fprintf (dump_file, "\n ref. regnos:"); + EXECUTE_IF_SET_IN_BITMAP (&LOOP_DATA (loop)->regs_ref, 0, j, bi) + fprintf (dump_file, " %d", j); + fprintf (dump_file, "\n live regnos:"); + EXECUTE_IF_SET_IN_BITMAP (&LOOP_DATA (loop)->regs_live, 0, j, bi) + fprintf (dump_file, " %d", j); + fprintf (dump_file, "\n Pressure:"); + for (i = 0; (int) i < ira_reg_class_cover_size; i++) + { + enum reg_class cover_class; + + cover_class = ira_reg_class_cover[i]; + if (LOOP_DATA (loop)->max_reg_pressure[cover_class] == 0) + continue; + fprintf (dump_file, " %s=%d", reg_class_names[cover_class], + LOOP_DATA (loop)->max_reg_pressure[cover_class]); + } + fprintf (dump_file, "\n"); + } +} + + + /* Move the invariants out of the loops. */ void @@ -1358,10 +1884,17 @@ move_loop_invariants (void) struct loop *loop; loop_iterator li; + if (flag_ira_loop_pressure) + { + df_analyze (); + ira_set_pseudo_classes (dump_file); + calculate_loop_reg_pressure (); + } df_set_flags (DF_EQ_NOTES + DF_DEFER_INSN_RESCAN); /* Process the loops, innermost first. */ FOR_EACH_LOOP (li, loop, LI_FROM_INNERMOST) { + curr_loop = loop; /* move_single_loop_invariants for very large loops is time consuming and might need a lot of memory. */ if (loop->num_nodes <= (unsigned) LOOP_INVARIANT_MAX_BBS_IN_LOOP) @@ -1373,6 +1906,10 @@ move_loop_invariants (void) free_loop_data (loop); } + if (flag_ira_loop_pressure) + /* There is no sense to keep this info because it was most + probably outdated by subsequent passes. */ + free_reg_info (); free (invariant_table); invariant_table = NULL; invariant_table_size = 0; diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c index fbf0df21c24..6b340a37d58 100644 --- a/gcc/lto-cgraph.c +++ b/gcc/lto-cgraph.c @@ -372,8 +372,16 @@ output_cgraph (cgraph_node_set set) for (csi = csi_start (set); !csi_end_p (csi); csi_next (&csi)) { node = csi_node (csi); - for (edge = node->callees; edge; edge = edge->next_callee) - lto_output_edge (ob, edge, encoder); + if (node->callees) + { + /* Output edges in backward direction, so the reconstructed callgraph + match and it is easy to associate call sites in the IPA pass summaries. */ + edge = node->callees; + while (edge->next_callee) + edge = edge->next_callee; + for (; edge; edge = edge->prev_callee) + lto_output_edge (ob, edge, encoder); + } } lto_output_uleb128_stream (ob->main_stream, 0); diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c index 2a379f40fdc..fd485b9db60 100644 --- a/gcc/lto-opts.c +++ b/gcc/lto-opts.c @@ -208,10 +208,19 @@ input_string_block (struct lto_input_block *ib) static bool register_user_option_p (size_t code, int type) { - return type == CL_TARGET - || (type == CL_COMMON - && (code == OPT_fPIC - || code == OPT_fcommon)); + if (type == CL_TARGET) + return true; + else if (type == CL_COMMON) + { + return (code == OPT_fPIC + || code == OPT_fpic + || code == OPT_fPIE + || code == OPT_fpie + || code == OPT_fcommon + || code == OPT_fexceptions); + } + + return false; } /* Note command line option with the given TYPE and CODE, ARG, and VALUE. @@ -358,32 +367,6 @@ lto_read_file_options (struct lto_file_decl_data *file_data) lto_free_section_data (file_data, LTO_section_opts, 0, data, len); } -/* Re-handle option with type TYPE and CODE, ARG, and VALUE. Logic extracted - from common_handle_option() in opts.c. - - FIXME lto. This section is not complete. If extended to handle - optimization options, note that changing these after opts.c prescan may - involve also adjusting other options that were defaulted from initial - optimization option values. */ - -static void -handle_common_option (size_t code, const char *arg ATTRIBUTE_UNUSED, int value) -{ - switch (code) - { - case OPT_fPIC: - flag_pic = !!value; - break; - - case OPT_fcommon: - flag_no_common = !value; - break; - - default: - gcc_unreachable (); - } -} - /* Concatenate the user options and any file options read from an LTO IL file, and reissue them as if all had just been read in from the command line. As with serialization, file options precede user options. */ @@ -397,10 +380,15 @@ lto_reissue_options (void) for (i = 0; VEC_iterate (opt_t, opts, i, o); i++) { + const struct cl_option *option = &cl_options[o->code]; + + if (option->flag_var) + set_option (option, o->value, o->arg); + if (o->type == CL_TARGET) targetm.handle_option (o->code, o->arg, o->value); else if (o->type == CL_COMMON) - handle_common_option (o->code, o->arg, o->value); + gcc_assert (option->flag_var); else gcc_unreachable (); } diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c index d9c207d0b7f..000be331a94 100644 --- a/gcc/lto-streamer-in.c +++ b/gcc/lto-streamer-in.c @@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see #include "output.h" #include "ipa-utils.h" #include "lto-streamer.h" +#include "tree-pass.h" /* Data structure used to hash file names in the source_location field. */ struct string_slot @@ -274,26 +275,31 @@ static location_t lto_input_location (struct lto_input_block *ib, struct data_in *data_in) { expanded_location xloc; - location_t loc; xloc.file = input_string (data_in, ib); if (xloc.file == NULL) return UNKNOWN_LOCATION; + xloc.file = canon_file_name (xloc.file); xloc.line = lto_input_sleb128 (ib); xloc.column = lto_input_sleb128 (ib); + xloc.sysp = lto_input_sleb128 (ib); - if (data_in->current_file) - linemap_add (line_table, LC_LEAVE, false, NULL, 0); + if (data_in->current_file != xloc.file) + { + if (data_in->current_file) + linemap_add (line_table, LC_LEAVE, false, NULL, 0); + + linemap_add (line_table, LC_ENTER, xloc.sysp, xloc.file, xloc.line); + } + else if (data_in->current_line != xloc.line) + linemap_line_start (line_table, xloc.line, xloc.column); - data_in->current_file = canon_file_name (xloc.file); + data_in->current_file = xloc.file; data_in->current_line = xloc.line; data_in->current_col = xloc.column; - linemap_add (line_table, LC_ENTER, false, data_in->current_file, xloc.line); - LINEMAP_POSITION_FOR_COLUMN (loc, line_table, xloc.column); - - return loc; + return linemap_position_for_column (line_table, xloc.column); } @@ -868,6 +874,128 @@ input_ssa_names (struct lto_input_block *ib, struct data_in *data_in, } +/* Fixup the reference tree OP for replaced VAR_DECLs with mismatched + types. */ + +static void +maybe_fixup_handled_component (tree op) +{ + tree decl_type; + tree wanted_type; + + while (handled_component_p (TREE_OPERAND (op, 0))) + op = TREE_OPERAND (op, 0); + if (TREE_CODE (TREE_OPERAND (op, 0)) != VAR_DECL) + return; + + decl_type = TREE_TYPE (TREE_OPERAND (op, 0)); + + switch (TREE_CODE (op)) + { + case COMPONENT_REF: + /* The DECL_CONTEXT of the field-decl is the record type we look for. */ + wanted_type = DECL_CONTEXT (TREE_OPERAND (op, 1)); + break; + + case ARRAY_REF: + if (TREE_CODE (decl_type) == ARRAY_TYPE + && (TREE_TYPE (decl_type) == TREE_TYPE (op) + || useless_type_conversion_p (TREE_TYPE (op), + TREE_TYPE (decl_type)))) + return; + /* An unknown size array type should be ok. But we do not + lower the lower bound in all cases - ugh. */ + wanted_type = build_array_type (TREE_TYPE (op), NULL_TREE); + break; + + case ARRAY_RANGE_REF: + if (TREE_CODE (decl_type) == ARRAY_TYPE + && (TREE_TYPE (decl_type) == TREE_TYPE (TREE_TYPE (op)) + || useless_type_conversion_p (TREE_TYPE (TREE_TYPE (op)), + TREE_TYPE (decl_type)))) + return; + /* An unknown size array type should be ok. But we do not + lower the lower bound in all cases - ugh. */ + wanted_type = build_array_type (TREE_TYPE (TREE_TYPE (op)), NULL_TREE); + break; + + case BIT_FIELD_REF: + case VIEW_CONVERT_EXPR: + /* Very nice - nothing to do. */ + return; + + case REALPART_EXPR: + case IMAGPART_EXPR: + if (TREE_CODE (decl_type) == COMPLEX_TYPE + && (TREE_TYPE (decl_type) == TREE_TYPE (op) + || useless_type_conversion_p (TREE_TYPE (op), + TREE_TYPE (decl_type)))) + return; + wanted_type = build_complex_type (TREE_TYPE (op)); + break; + + default: + gcc_unreachable (); + } + + if (!useless_type_conversion_p (wanted_type, decl_type)) + TREE_OPERAND (op, 0) = build1 (VIEW_CONVERT_EXPR, wanted_type, + TREE_OPERAND (op, 0)); +} + +/* Fixup reference tree operands for substituted prevailing decls + with mismatched types in STMT. */ + +static void +maybe_fixup_decls (gimple stmt) +{ + /* We have to fixup replaced decls here in case there were + inter-TU type mismatches. Catch the most common cases + for now - this way we'll get testcases for the rest as + the type verifier will complain. */ + if (gimple_assign_single_p (stmt)) + { + tree lhs = gimple_assign_lhs (stmt); + tree rhs = gimple_assign_rhs1 (stmt); + + /* First catch loads and aggregate copies by adjusting the rhs. */ + if (TREE_CODE (rhs) == VAR_DECL) + { + if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) + gimple_assign_set_rhs1 (stmt, build1 (VIEW_CONVERT_EXPR, + TREE_TYPE (lhs), rhs)); + } + else if (handled_component_p (rhs)) + maybe_fixup_handled_component (rhs); + /* Then catch scalar stores. */ + else if (TREE_CODE (lhs) == VAR_DECL) + { + if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) + gimple_assign_set_lhs (stmt, build1 (VIEW_CONVERT_EXPR, + TREE_TYPE (rhs), lhs)); + } + else if (handled_component_p (lhs)) + maybe_fixup_handled_component (lhs); + } + else if (is_gimple_call (stmt)) + { + tree lhs = gimple_call_lhs (stmt); + + if (lhs && TREE_CODE (lhs) == VAR_DECL) + { + if (!useless_type_conversion_p (TREE_TYPE (lhs), + gimple_call_return_type (stmt))) + gimple_call_set_lhs (stmt, build1 (VIEW_CONVERT_EXPR, + gimple_call_return_type (stmt), + lhs)); + } + else if (lhs && handled_component_p (lhs)) + maybe_fixup_handled_component (lhs); + + /* Arguments, especially for varargs functions will be funny... */ + } +} + /* Read a statement with tag TAG in function FN from block IB using descriptors in DATA_IN. */ @@ -939,6 +1067,36 @@ input_gimple_stmt (struct lto_input_block *ib, struct data_in *data_in, { tree op = lto_input_tree (ib, data_in); gimple_set_op (stmt, i, op); + + /* Fixup FIELD_DECLs. */ + while (op && handled_component_p (op)) + { + if (TREE_CODE (op) == COMPONENT_REF) + { + tree field, type, tem; + field = TREE_OPERAND (op, 1); + type = DECL_CONTEXT (field); + for (tem = TYPE_FIELDS (type); tem; tem = TREE_CHAIN (tem)) + { + 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)))) + break; + } + /* In case of type mismatches across units we can fail + to unify some types and thus not find a proper + field-decl here. Just do nothing in this case. */ + if (tem != NULL_TREE) + TREE_OPERAND (op, 1) = tem; + } + + op = TREE_OPERAND (op, 0); + } } break; @@ -974,6 +1132,10 @@ input_gimple_stmt (struct lto_input_block *ib, struct data_in *data_in, } } + /* Fixup reference tree operands for substituted prevailing decls + with mismatched types. */ + maybe_fixup_decls (stmt); + /* Mark the statement modified so its operand vectors can be filled in. */ gimple_set_modified (stmt, true); @@ -1014,15 +1176,15 @@ input_bb (struct lto_input_block *ib, enum LTO_tags tag, { gimple stmt = input_gimple_stmt (ib, data_in, fn, tag); - /* Drop debug stmts on-the-fly if we do not have VTA enabled. + /* Change debug stmts to nops on-the-fly if we do not have VTA enabled. This allows us to build for example static libs with debugging enabled and do the final link without. */ - if (MAY_HAVE_DEBUG_STMTS - || !is_gimple_debug (stmt)) - { - find_referenced_vars_in (stmt); - gsi_insert_after (&bsi, stmt, GSI_NEW_STMT); - } + if (!MAY_HAVE_DEBUG_STMTS + && is_gimple_debug (stmt)) + stmt = gimple_build_nop (); + + find_referenced_vars_in (stmt); + gsi_insert_after (&bsi, stmt, GSI_NEW_STMT); /* After the statement, expect a 0 delimiter or the EH region that the previous statement belongs to. */ @@ -1033,8 +1195,7 @@ input_bb (struct lto_input_block *ib, enum LTO_tags tag, { HOST_WIDE_INT region = lto_input_sleb128 (ib); gcc_assert (region == (int) region); - if (MAY_HAVE_DEBUG_STMTS || !is_gimple_debug (stmt)) - add_stmt_to_eh_lp (stmt, region); + add_stmt_to_eh_lp (stmt, region); } tag = input_record_start (ib); @@ -1182,6 +1343,8 @@ input_function (tree fn_decl, struct data_in *data_in, fixup_call_stmt_edges (cgraph_node (fn_decl), stmts); update_ssa (TODO_update_ssa_only_virtuals); + free_dominance_info (CDI_DOMINATORS); + free_dominance_info (CDI_POST_DOMINATORS); free (stmts); } @@ -1296,6 +1459,15 @@ lto_read_body (struct lto_file_decl_data *file_data, tree fn_decl, /* Restore decl state */ file_data->current_decl_state = file_data->global_decl_state; + /* FIXME: ipa_transforms_to_apply holds list of passes that have optimization + summaries computed and needs to apply changes. At the moment WHOPR only + supports inlining, so we can push it here by hand. In future we need to stream + this field into ltrans compilation. This will also need to move the field + from struct function into cgraph node where it belongs. */ + if (flag_ltrans && !cgraph_node (fn_decl)->global.inlined_to) + VEC_safe_push (ipa_opt_pass, heap, + cfun->ipa_transforms_to_apply, + (ipa_opt_pass)&pass_ipa_inline); pop_cfun (); } else diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c index 9d097f0b503..d593aacc4fc 100644 --- a/gcc/lto-streamer-out.c +++ b/gcc/lto-streamer-out.c @@ -618,6 +618,7 @@ lto_output_location (struct output_block *ob, location_t loc) output_string (ob, ob->main_stream, xloc.file); output_sleb128 (ob, xloc.line); output_sleb128 (ob, xloc.column); + output_sleb128 (ob, xloc.sysp); ob->current_file = xloc.file; ob->current_line = xloc.line; @@ -690,6 +691,7 @@ lto_output_tree_ref (struct output_block *ob, tree expr) break; case VAR_DECL: + case DEBUG_EXPR_DECL: gcc_assert (decl_function_context (expr) == NULL); output_record_start (ob, LTO_global_decl_ref); lto_output_var_decl_index (ob->decl_state, ob->main_stream, expr); @@ -1761,7 +1763,7 @@ output_bb (struct output_block *ob, basic_block bb, struct function *fn) /* Create the header in the file using OB. If the section type is for a function, set FN to the decl for that function. */ -static void +void produce_asm (struct output_block *ob, tree fn) { enum lto_section_type section_type = ob->section_type; diff --git a/gcc/lto-streamer.c b/gcc/lto-streamer.c index 36172c03131..5b925db504e 100644 --- a/gcc/lto-streamer.c +++ b/gcc/lto-streamer.c @@ -157,6 +157,9 @@ lto_get_section_name (int section_type, const char *name) case LTO_section_cgraph: return concat (LTO_SECTION_NAME_PREFIX, ".cgraph", NULL); + case LTO_section_jump_functions: + return concat (LTO_SECTION_NAME_PREFIX, ".jmpfuncs", NULL); + case LTO_section_ipa_pure_const: return concat (LTO_SECTION_NAME_PREFIX, ".pureconst", NULL); diff --git a/gcc/lto-streamer.h b/gcc/lto-streamer.h index 4d90ecb0d0c..de1ee080b84 100644 --- a/gcc/lto-streamer.h +++ b/gcc/lto-streamer.h @@ -256,6 +256,7 @@ enum lto_section_type LTO_section_function_body, LTO_section_static_initializer, LTO_section_cgraph, + LTO_section_jump_functions, LTO_section_ipa_pure_const, LTO_section_ipa_reference, LTO_section_symtab, @@ -827,6 +828,7 @@ extern struct output_block *create_output_block (enum lto_section_type); extern void destroy_output_block (struct output_block *); extern void lto_output_tree (struct output_block *, tree, bool); extern void lto_output_bitpack (struct lto_output_stream *, struct bitpack_d *); +extern void produce_asm (struct output_block *ob, tree fn); /* In lto-cgraph.c */ @@ -843,9 +845,9 @@ void input_cgraph (void); extern void lto_symtab_register_decl (tree, ld_plugin_symbol_resolution_t, struct lto_file_decl_data *); extern void lto_symtab_merge_decls (void); +extern void lto_symtab_merge_cgraph_nodes (void); extern tree lto_symtab_prevailing_decl (tree decl); extern enum ld_plugin_symbol_resolution lto_symtab_get_resolution (tree decl); -extern void lto_symtab_clear_resolution (tree decl); /* In lto-opts.c. */ diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c index 2a0783a12be..642b6235d90 100644 --- a/gcc/lto-symtab.c +++ b/gcc/lto-symtab.c @@ -41,6 +41,9 @@ struct GTY(()) lto_symtab_entry_def tree id; /* The symbol table entry, a DECL. */ tree decl; + /* The cgraph node if decl is a function decl. Filled in during the + merging process. */ + struct cgraph_node *node; /* LTO file-data and symbol resolution for this decl. */ struct lto_file_decl_data * GTY((skip (""))) file_data; enum ld_plugin_symbol_resolution resolution; @@ -109,200 +112,6 @@ lto_symtab_maybe_init_hash_table (void) lto_symtab_entry_eq, NULL); } -static bool maybe_merge_incomplete_and_complete_type (tree, tree); - -/* Try to merge an incomplete type INCOMPLETE with a complete type - COMPLETE of same kinds. - Return true if they were merged, false otherwise. */ - -static bool -merge_incomplete_and_complete_type (tree incomplete, tree complete) -{ - /* For merging array types do some extra sanity checking. */ - if (TREE_CODE (incomplete) == ARRAY_TYPE - && !maybe_merge_incomplete_and_complete_type (TREE_TYPE (incomplete), - TREE_TYPE (complete)) - && !gimple_types_compatible_p (TREE_TYPE (incomplete), - TREE_TYPE (complete))) - return false; - - /* ??? Ideally we would do this by means of a common canonical type, but - that's difficult as we do not have links from the canonical type - back to all its children. */ - gimple_force_type_merge (incomplete, complete); - - return true; -} - -/* Try to merge a maybe complete / incomplete type pair TYPE1 and TYPE2. - Return true if they were merged, false otherwise. */ - -static bool -maybe_merge_incomplete_and_complete_type (tree type1, tree type2) -{ - bool res = false; - - if (TREE_CODE (type1) != TREE_CODE (type2)) - return false; - - if (!COMPLETE_TYPE_P (type1) && COMPLETE_TYPE_P (type2)) - res = merge_incomplete_and_complete_type (type1, type2); - else if (COMPLETE_TYPE_P (type1) && !COMPLETE_TYPE_P (type2)) - res = merge_incomplete_and_complete_type (type2, type1); - - /* Recurse on pointer targets. */ - if (!res - && POINTER_TYPE_P (type1) - && POINTER_TYPE_P (type2)) - res = maybe_merge_incomplete_and_complete_type (TREE_TYPE (type1), - TREE_TYPE (type2)); - - return res; -} - -/* Check if OLD_DECL and NEW_DECL are compatible. */ - -static bool -lto_symtab_compatible (tree old_decl, tree new_decl) -{ - tree old_type, new_type; - - if (TREE_CODE (old_decl) != TREE_CODE (new_decl)) - { - switch (TREE_CODE (new_decl)) - { - case VAR_DECL: - gcc_assert (TREE_CODE (old_decl) == FUNCTION_DECL); - error_at (DECL_SOURCE_LOCATION (new_decl), - "function %qD redeclared as variable", new_decl); - inform (DECL_SOURCE_LOCATION (old_decl), - "previously declared here"); - return false; - - case FUNCTION_DECL: - gcc_assert (TREE_CODE (old_decl) == VAR_DECL); - error_at (DECL_SOURCE_LOCATION (new_decl), - "variable %qD redeclared as function", new_decl); - inform (DECL_SOURCE_LOCATION (old_decl), - "previously declared here"); - return false; - - default: - gcc_unreachable (); - } - } - - if (TREE_CODE (new_decl) == FUNCTION_DECL) - { - if (!gimple_types_compatible_p (TREE_TYPE (old_decl), - TREE_TYPE (new_decl))) - /* If we don't have a merged type yet...sigh. The linker - wouldn't complain if the types were mismatched, so we - probably shouldn't either. Just use the type from - whichever decl appears to be associated with the - definition. If for some odd reason neither decl is, the - older one wins. */ - (void) 0; - - return true; - } - - /* Now we exclusively deal with VAR_DECLs. */ - - /* Handle external declarations with incomplete type or pointed-to - incomplete types by forcefully merging the types. - ??? In principle all types involved in the two decls should - be merged forcefully, for example without considering type or - field names. */ - old_type = TREE_TYPE (old_decl); - new_type = TREE_TYPE (new_decl); - - if (DECL_EXTERNAL (old_decl) || DECL_EXTERNAL (new_decl)) - maybe_merge_incomplete_and_complete_type (old_type, new_type); - else if (POINTER_TYPE_P (old_type) - && POINTER_TYPE_P (new_type)) - maybe_merge_incomplete_and_complete_type (TREE_TYPE (old_type), - TREE_TYPE (new_type)); - - /* For array types we have to accept external declarations with - different sizes than the actual definition (164.gzip). - ??? We could emit a warning here. */ - if (TREE_CODE (old_type) == TREE_CODE (new_type) - && TREE_CODE (old_type) == ARRAY_TYPE - && COMPLETE_TYPE_P (old_type) - && COMPLETE_TYPE_P (new_type) - && tree_int_cst_compare (TYPE_SIZE (old_type), - TYPE_SIZE (new_type)) != 0 - && gimple_types_compatible_p (TREE_TYPE (old_type), - TREE_TYPE (new_type))) - { - /* If only one is external use the type of the non-external decl. - Else use the larger one and also adjust the decl size. - ??? Directional merging would allow us to simply pick the - larger one instead of rewriting it. */ - if (DECL_EXTERNAL (old_decl) ^ DECL_EXTERNAL (new_decl)) - { - if (DECL_EXTERNAL (old_decl)) - TREE_TYPE (old_decl) = new_type; - else if (DECL_EXTERNAL (new_decl)) - TREE_TYPE (new_decl) = old_type; - } - else - { - if (tree_int_cst_compare (TYPE_SIZE (old_type), - TYPE_SIZE (new_type)) < 0) - { - TREE_TYPE (old_decl) = new_type; - DECL_SIZE (old_decl) = DECL_SIZE (new_decl); - DECL_SIZE_UNIT (old_decl) = DECL_SIZE_UNIT (new_decl); - } - else - { - TREE_TYPE (new_decl) = old_type; - DECL_SIZE (new_decl) = DECL_SIZE (old_decl); - DECL_SIZE_UNIT (new_decl) = DECL_SIZE_UNIT (old_decl); - } - } - } - - /* We can tolerate differences in type qualification, the - qualification of the prevailing definition will prevail. */ - old_type = TYPE_MAIN_VARIANT (TREE_TYPE (old_decl)); - new_type = TYPE_MAIN_VARIANT (TREE_TYPE (new_decl)); - if (!gimple_types_compatible_p (old_type, new_type)) - { - if (warning_at (DECL_SOURCE_LOCATION (new_decl), 0, - "type of %qD does not match original declaration", - new_decl)) - inform (DECL_SOURCE_LOCATION (old_decl), - "previously declared here"); - return false; - } - - /* ??? We might want to emit a warning here if type qualification - differences were spotted. Do not do this unconditionally though. */ - - /* There is no point in comparing too many details of the decls here. - The type compatibility checks or the completing of types has properly - dealt with most issues. */ - - /* The following should all not invoke fatal errors as in non-LTO - mode the linker wouldn't complain either. Just emit warnings. */ - - /* Report a warning if user-specified alignments do not match. */ - if ((DECL_USER_ALIGN (old_decl) && DECL_USER_ALIGN (new_decl)) - && DECL_ALIGN (old_decl) != DECL_ALIGN (new_decl)) - { - warning_at (DECL_SOURCE_LOCATION (new_decl), 0, - "alignment of %qD does not match original declaration", - new_decl); - inform (DECL_SOURCE_LOCATION (old_decl), "previously declared here"); - return false; - } - - return true; -} - /* Registers DECL with the LTO symbol table as having resolution RESOLUTION and read from FILE_DATA. */ @@ -335,7 +144,7 @@ lto_symtab_register_decl (tree decl, new_entry->decl = decl; new_entry->resolution = resolution; new_entry->file_data = file_data; - + lto_symtab_maybe_init_hash_table (); slot = htab_find_slot (lto_symtab_identifiers, new_entry, INSERT); new_entry->next = (lto_symtab_entry_t) *slot; @@ -375,128 +184,190 @@ lto_symtab_get_resolution (tree decl) return e->resolution; } -/* Replace the cgraph node OLD_NODE with NEW_NODE in the cgraph, merging + +/* Replace the cgraph node NODE with PREVAILING_NODE in the cgraph, merging all edges and removing the old node. */ static void -lto_cgraph_replace_node (struct cgraph_node *old_node, - struct cgraph_node *new_node) +lto_cgraph_replace_node (struct cgraph_node *node, + struct cgraph_node *prevailing_node) { struct cgraph_edge *e, *next; /* Merge node flags. */ - if (old_node->needed) - cgraph_mark_needed_node (new_node); - if (old_node->reachable) - cgraph_mark_reachable_node (new_node); - if (old_node->address_taken) + if (node->needed) + cgraph_mark_needed_node (prevailing_node); + if (node->reachable) + cgraph_mark_reachable_node (prevailing_node); + if (node->address_taken) { - gcc_assert (!new_node->global.inlined_to); - cgraph_mark_address_taken_node (new_node); + gcc_assert (!prevailing_node->global.inlined_to); + cgraph_mark_address_taken_node (prevailing_node); } /* Redirect all incoming edges. */ - for (e = old_node->callers; e; e = next) + for (e = node->callers; e; e = next) { next = e->next_caller; - cgraph_redirect_edge_callee (e, new_node); + cgraph_redirect_edge_callee (e, prevailing_node); } /* There are not supposed to be any outgoing edges from a node we replace. Still this can happen for multiple instances of weak - functions. - ??? For now do what the old code did. Do not create edges for them. */ - for (e = old_node->callees; e; e = next) + functions. */ + for (e = node->callees; e; e = next) { next = e->next_callee; cgraph_remove_edge (e); } /* Finally remove the replaced node. */ - cgraph_remove_node (old_node); + cgraph_remove_node (node); } -/* Merge two variable or function symbol table entries ENTRY1 and ENTRY2. - Return the prevailing one or NULL if a merge is not possible. */ +/* Merge two variable or function symbol table entries PREVAILING and ENTRY. + Return false if the symbols are not fully compatible and a diagnostic + should be emitted. */ -static lto_symtab_entry_t -lto_symtab_merge (lto_symtab_entry_t entry1, lto_symtab_entry_t entry2) +static bool +lto_symtab_merge (lto_symtab_entry_t prevailing, lto_symtab_entry_t entry) { - tree old_decl = entry1->decl; - tree new_decl = entry2->decl; - ld_plugin_symbol_resolution_t old_resolution = entry1->resolution; - ld_plugin_symbol_resolution_t new_resolution = entry2->resolution; - struct cgraph_node *old_node = NULL; - struct cgraph_node *new_node = NULL; - - /* Give ODR violation errors. */ - if (new_resolution == LDPR_PREVAILING_DEF - || new_resolution == LDPR_PREVAILING_DEF_IRONLY) + tree prevailing_decl = prevailing->decl; + tree decl = entry->decl; + tree prevailing_type, type; + + /* Merge decl state in both directions, we may still end up using + the new decl. */ + TREE_ADDRESSABLE (prevailing_decl) |= TREE_ADDRESSABLE (decl); + TREE_ADDRESSABLE (decl) |= TREE_ADDRESSABLE (prevailing_decl); + + /* The linker may ask us to combine two incompatible symbols. + Detect this case and notify the caller of required diagnostics. */ + + if (TREE_CODE (decl) == FUNCTION_DECL) + { + if (TREE_TYPE (prevailing_decl) != TREE_TYPE (decl)) + /* If we don't have a merged type yet...sigh. The linker + wouldn't complain if the types were mismatched, so we + probably shouldn't either. Just use the type from + whichever decl appears to be associated with the + definition. If for some odd reason neither decl is, the + older one wins. */ + (void) 0; + + return true; + } + + /* Now we exclusively deal with VAR_DECLs. */ + + /* Sharing a global symbol is a strong hint that two types are + compatible. We could use this information to complete + incomplete pointed-to types more aggressively here, ignoring + mismatches in both field and tag names. It's difficult though + to guarantee that this does not have side-effects on merging + more compatible types from other translation units though. */ + + /* We can tolerate differences in type qualification, the + qualification of the prevailing definition will prevail. + ??? In principle we might want to only warn for structurally + incompatible types here, but unless we have protective measures + for TBAA in place that would hide useful information. */ + prevailing_type = TYPE_MAIN_VARIANT (TREE_TYPE (prevailing_decl)); + type = TYPE_MAIN_VARIANT (TREE_TYPE (decl)); + + /* We have to register and fetch canonical types here as the global + fixup process didn't yet run. */ + prevailing_type = gimple_register_type (prevailing_type); + type = gimple_register_type (type); + if (prevailing_type != type) { - if ((old_resolution == LDPR_PREVAILING_DEF - || old_resolution == LDPR_PREVAILING_DEF_IRONLY) - && (old_resolution != new_resolution || flag_no_common)) + if (COMPLETE_TYPE_P (type)) + return false; + + /* If type is incomplete then avoid warnings in the cases + that TBAA handles just fine. */ + + if (TREE_CODE (prevailing_type) != TREE_CODE (type)) + return false; + + if (TREE_CODE (prevailing_type) == ARRAY_TYPE) { - error_at (DECL_SOURCE_LOCATION (new_decl), - "%qD has already been defined", new_decl); - inform (DECL_SOURCE_LOCATION (old_decl), - "previously defined here"); - return NULL; + tree tem1 = TREE_TYPE (prevailing_type); + tree tem2 = TREE_TYPE (type); + while (TREE_CODE (tem1) == ARRAY_TYPE + && TREE_CODE (tem2) == ARRAY_TYPE) + { + tem1 = TREE_TYPE (tem1); + tem2 = TREE_TYPE (tem2); + } + + if (TREE_CODE (tem1) != TREE_CODE (tem2)) + return false; + + if (gimple_register_type (tem1) != gimple_register_type (tem2)) + return false; } + + /* Fallthru. Compatible enough. */ } - /* The linker may ask us to combine two incompatible symbols. */ - if (!lto_symtab_compatible (old_decl, new_decl)) - return NULL; + /* ??? We might want to emit a warning here if type qualification + differences were spotted. Do not do this unconditionally though. */ - if (TREE_CODE (old_decl) == FUNCTION_DECL) - old_node = cgraph_get_node (old_decl); - if (TREE_CODE (new_decl) == FUNCTION_DECL) - new_node = cgraph_get_node (new_decl); + /* There is no point in comparing too many details of the decls here. + The type compatibility checks or the completing of types has properly + dealt with most issues. */ - /* Merge decl state in both directions, we may still end up using - the new decl. */ - TREE_ADDRESSABLE (old_decl) |= TREE_ADDRESSABLE (new_decl); - TREE_ADDRESSABLE (new_decl) |= TREE_ADDRESSABLE (old_decl); + /* The following should all not invoke fatal errors as in non-LTO + mode the linker wouldn't complain either. Just emit warnings. */ - gcc_assert (new_resolution != LDPR_UNKNOWN - && new_resolution != LDPR_UNDEF - && old_resolution != LDPR_UNKNOWN - && old_resolution != LDPR_UNDEF); + /* Report a warning if user-specified alignments do not match. */ + if ((DECL_USER_ALIGN (prevailing_decl) && DECL_USER_ALIGN (decl)) + && DECL_ALIGN (prevailing_decl) < DECL_ALIGN (decl)) + return false; - if (new_resolution == LDPR_PREVAILING_DEF - || new_resolution == LDPR_PREVAILING_DEF_IRONLY - || (!old_node && new_node)) - { - gcc_assert ((!old_node && new_node) - || old_resolution == LDPR_PREEMPTED_IR - || old_resolution == LDPR_RESOLVED_IR - || (old_resolution == new_resolution && !flag_no_common)); - if (old_node) - lto_cgraph_replace_node (old_node, new_node); - /* Choose new_decl, entry2. */ - return entry2; - } + return true; +} + +/* Return true if the symtab entry E can be replaced by another symtab + entry. */ + +static bool +lto_symtab_resolve_replaceable_p (lto_symtab_entry_t e) +{ + if (DECL_EXTERNAL (e->decl) + || DECL_COMDAT (e->decl) + || DECL_WEAK (e->decl)) + return true; + + if (TREE_CODE (e->decl) == VAR_DECL) + return (DECL_COMMON (e->decl) + || (!flag_no_common && !DECL_INITIAL (e->decl))); + + return false; +} + +/* Return true if the symtab entry E can be the prevailing one. */ + +static bool +lto_symtab_resolve_can_prevail_p (lto_symtab_entry_t e) +{ + if (!TREE_STATIC (e->decl)) + return false; + + /* For functions we need a non-discarded body. */ + if (TREE_CODE (e->decl) == FUNCTION_DECL) + return (e->node && e->node->analyzed); - if (new_resolution == LDPR_PREEMPTED_REG - || new_resolution == LDPR_RESOLVED_EXEC - || new_resolution == LDPR_RESOLVED_DYN) - gcc_assert (old_resolution == LDPR_PREEMPTED_REG - || old_resolution == LDPR_RESOLVED_EXEC - || old_resolution == LDPR_RESOLVED_DYN); - - if (new_resolution == LDPR_PREEMPTED_IR - || new_resolution == LDPR_RESOLVED_IR) - gcc_assert (old_resolution == LDPR_PREVAILING_DEF - || old_resolution == LDPR_PREVAILING_DEF_IRONLY - || old_resolution == LDPR_PREEMPTED_IR - || old_resolution == LDPR_RESOLVED_IR); - - if (new_node) - lto_cgraph_replace_node (new_node, old_node); - - /* Choose old_decl, entry1. */ - return entry1; + /* A variable should have a size. */ + else if (TREE_CODE (e->decl) == VAR_DECL) + return (DECL_SIZE (e->decl) != NULL_TREE + /* The C++ frontend retains TREE_STATIC on the declaration + of foo_ in struct Foo { static Foo *foo_; }; but it is + not a definition. g++.dg/lto/20090315_0.C. */ + && !DECL_EXTERNAL (e->decl)); + + gcc_unreachable (); } /* Resolve the symbol with the candidates in the chain *SLOT and store @@ -506,114 +377,121 @@ static void lto_symtab_resolve_symbols (void **slot) { lto_symtab_entry_t e = (lto_symtab_entry_t) *slot; + lto_symtab_entry_t prevailing = NULL; /* If the chain is already resolved there is nothing to do. */ if (e->resolution != LDPR_UNKNOWN) return; - /* This is a poor mans resolver. */ + /* Find the single non-replaceable prevailing symbol and + diagnose ODR violations. */ for (; e; e = e->next) { - gcc_assert (e->resolution == LDPR_UNKNOWN); - if (DECL_EXTERNAL (e->decl) - || (TREE_CODE (e->decl) == FUNCTION_DECL - && !cgraph_get_node (e->decl))) - e->resolution = LDPR_RESOLVED_IR; - else + if (TREE_CODE (e->decl) == FUNCTION_DECL) + e->node = cgraph_get_node (e->decl); + + if (!lto_symtab_resolve_can_prevail_p (e)) + { + e->resolution = LDPR_RESOLVED_IR; + continue; + } + + /* Set a default resolution - the final prevailing one will get + adjusted later. */ + e->resolution = LDPR_PREEMPTED_IR; + if (!lto_symtab_resolve_replaceable_p (e)) + { + if (prevailing) + { + error_at (DECL_SOURCE_LOCATION (e->decl), + "%qD has already been defined", e->decl); + inform (DECL_SOURCE_LOCATION (prevailing->decl), + "previously defined here"); + } + prevailing = e; + } + } + if (prevailing) + goto found; + + /* Do a second round choosing one from the replaceable prevailing decls. */ + for (e = (lto_symtab_entry_t) *slot; e; e = e->next) + { + if (e->resolution != LDPR_PREEMPTED_IR) + continue; + + /* Choose the first function that can prevail as prevailing. */ + if (TREE_CODE (e->decl) == FUNCTION_DECL) { - if (TREE_READONLY (e->decl)) - e->resolution = LDPR_PREVAILING_DEF_IRONLY; - else - e->resolution = LDPR_PREVAILING_DEF; + prevailing = e; + break; } + + /* From variables that can prevail choose the largest one. */ + if (!prevailing + || tree_int_cst_lt (DECL_SIZE (prevailing->decl), + DECL_SIZE (e->decl))) + prevailing = e; } + + if (!prevailing) + return; + +found: + if (TREE_CODE (prevailing->decl) == VAR_DECL + && TREE_READONLY (prevailing->decl)) + prevailing->resolution = LDPR_PREVAILING_DEF_IRONLY; + else + prevailing->resolution = LDPR_PREVAILING_DEF; } -/* Merge one symbol table chain to a (set of) prevailing decls. */ +/* Merge all decls in the symbol table chain to the prevailing decl and + issue diagnostics about type mismatches. */ static void lto_symtab_merge_decls_2 (void **slot) { - lto_symtab_entry_t e2, e1; + lto_symtab_entry_t prevailing, e; + VEC(tree, heap) *mismatches = NULL; + unsigned i; + tree decl; + bool diagnosed_p = false; /* Nothing to do for a single entry. */ - e1 = (lto_symtab_entry_t) *slot; - if (!e1->next) + prevailing = (lto_symtab_entry_t) *slot; + if (!prevailing->next) return; - /* Try to merge each entry with each other entry. In case of a - single prevailing decl this is linear. */ -restart: - for (; e1; e1 = e1->next) - for (e2 = e1->next; e2; e2 = e2->next) - { - lto_symtab_entry_t prevailing = lto_symtab_merge (e1, e2); - if (prevailing == e1) - { - lto_symtab_entry_t tmp = prevailing; - while (tmp->next != e2) - tmp = tmp->next; - tmp->next = e2->next; - e2->next = NULL; - e2 = tmp; - } - else if (prevailing == e2) - { - lto_symtab_entry_t tmp = (lto_symtab_entry_t) *slot; - if (tmp == e1) - { - *slot = e1->next; - tmp = e1->next; - } - else - { - while (tmp->next != e1) - tmp = tmp->next; - tmp->next = e1->next; - } - e1->next = NULL; - e1 = tmp; - goto restart; - } - } -} - -/* Fixup the chain of prevailing variable decls *SLOT that are commonized - during link-time. */ + /* Try to merge each entry with the prevailing one. */ + for (e = prevailing->next; e; e = e->next) + { + if (!lto_symtab_merge (prevailing, e)) + VEC_safe_push (tree, heap, mismatches, e->decl); + } + if (VEC_empty (tree, mismatches)) + return; -static void -lto_symtab_fixup_var_decls (void **slot) -{ - lto_symtab_entry_t e = (lto_symtab_entry_t) *slot; - tree size = bitsize_zero_node; - - /* Find the largest prevailing decl and move it to the front of the chain. - This is the decl we will output as representative for the common - section. */ - size = bitsize_zero_node; - if (e->resolution == LDPR_PREVAILING_DEF_IRONLY - || e->resolution == LDPR_PREVAILING_DEF) - size = DECL_SIZE (e->decl); - for (; e->next;) + /* Diagnose all mismatched re-declarations. */ + for (i = 0; VEC_iterate (tree, mismatches, i, decl); ++i) { - lto_symtab_entry_t next = e->next; - if ((next->resolution == LDPR_PREVAILING_DEF_IRONLY - || next->resolution == LDPR_PREVAILING_DEF) - && tree_int_cst_lt (size, DECL_SIZE (next->decl))) + if (TREE_TYPE (prevailing->decl) != TREE_TYPE (decl)) + diagnosed_p |= warning_at (DECL_SOURCE_LOCATION (decl), 0, + "type of %qD does not match original " + "declaration", decl); + + else if ((DECL_USER_ALIGN (prevailing->decl) && DECL_USER_ALIGN (decl)) + && DECL_ALIGN (prevailing->decl) < DECL_ALIGN (decl)) { - size = DECL_SIZE (next->decl); - e->next = next->next; - next->next = (lto_symtab_entry_t) *slot; - *slot = next; + diagnosed_p |= warning_at (DECL_SOURCE_LOCATION (decl), 0, + "alignment of %qD is bigger than " + "original declaration", decl); } - else - e = next; } + if (diagnosed_p) + inform (DECL_SOURCE_LOCATION (prevailing->decl), + "previously declared here"); - /* Mark everything apart from the first var as written out. */ - e = (lto_symtab_entry_t) *slot; - for (e = e->next; e; e = e->next) - TREE_ASM_WRITTEN (e->decl) = true; + VEC_free (tree, heap, mismatches); } /* Helper to process the decl chain for the symbol table entry *SLOT. */ @@ -621,33 +499,106 @@ lto_symtab_fixup_var_decls (void **slot) static int lto_symtab_merge_decls_1 (void **slot, void *data ATTRIBUTE_UNUSED) { - lto_symtab_entry_t e; + lto_symtab_entry_t e, prevailing; + bool diagnosed_p = false; - /* Compute the symbol resolutions. */ + /* Compute the symbol resolutions. This is a no-op when using the + linker plugin. */ lto_symtab_resolve_symbols (slot); - /* Register and adjust types of the entries. */ - for (e = (lto_symtab_entry_t) *slot; e; e = e->next) - TREE_TYPE (e->decl) = gimple_register_type (TREE_TYPE (e->decl)); + /* Find the prevailing decl. */ + for (prevailing = (lto_symtab_entry_t) *slot; + prevailing + && prevailing->resolution != LDPR_PREVAILING_DEF_IRONLY + && prevailing->resolution != LDPR_PREVAILING_DEF; + prevailing = prevailing->next) + ; + + /* Assert it's the only one. */ + if (prevailing) + for (e = prevailing->next; e; e = e->next) + gcc_assert (e->resolution != LDPR_PREVAILING_DEF_IRONLY + && e->resolution != LDPR_PREVAILING_DEF); + + /* If there's not a prevailing symbol yet it's an external reference. + Happens a lot during ltrans. Choose the first symbol with a + cgraph or a varpool node. */ + if (!prevailing) + { + prevailing = (lto_symtab_entry_t) *slot; + /* For functions choose one with a cgraph node. */ + if (TREE_CODE (prevailing->decl) == FUNCTION_DECL) + while (!prevailing->node + && prevailing->next) + prevailing = prevailing->next; + /* We do not stream varpool nodes, so the first decl has to + be good enough for now. + ??? For QOI choose a variable with readonly initializer + if there is one. This matches C++ + struct Foo { static const int i = 1; }; without a real + definition. */ + if (TREE_CODE (prevailing->decl) == VAR_DECL) + while (!(TREE_READONLY (prevailing->decl) + && DECL_INITIAL (prevailing->decl)) + && prevailing->next) + prevailing = prevailing->next; + } - /* Merge the chain to a (hopefully) single prevailing decl. */ - lto_symtab_merge_decls_2 (slot); + /* Move it first in the list. */ + if ((lto_symtab_entry_t) *slot != prevailing) + { + for (e = (lto_symtab_entry_t) *slot; e->next != prevailing; e = e->next) + ; + e->next = prevailing->next; + prevailing->next = (lto_symtab_entry_t) *slot; + *slot = (void *) prevailing; + } - /* ??? Ideally we should delay all diagnostics until this point to - avoid duplicates. */ + /* Record the prevailing variable. */ + if (TREE_CODE (prevailing->decl) == VAR_DECL) + VEC_safe_push (tree, gc, lto_global_var_decls, prevailing->decl); - /* All done for FUNCTION_DECLs. */ - e = (lto_symtab_entry_t) *slot; - if (TREE_CODE (e->decl) == FUNCTION_DECL) - return 1; + /* Diagnose mismatched objects. */ + for (e = prevailing->next; e; e = e->next) + { + if (TREE_CODE (prevailing->decl) == TREE_CODE (e->decl)) + continue; + + switch (TREE_CODE (prevailing->decl)) + { + case VAR_DECL: + gcc_assert (TREE_CODE (e->decl) == FUNCTION_DECL); + error_at (DECL_SOURCE_LOCATION (e->decl), + "variable %qD redeclared as function", prevailing->decl); + break; - /* Fixup variables in case there are multiple prevailing ones. */ - if (e->next) - lto_symtab_fixup_var_decls (slot); + case FUNCTION_DECL: + gcc_assert (TREE_CODE (e->decl) == VAR_DECL); + error_at (DECL_SOURCE_LOCATION (e->decl), + "function %qD redeclared as variable", prevailing->decl); + break; - /* Insert all variable decls into the global variable decl vector. */ + default: + gcc_unreachable (); + } + + diagnosed_p = true; + } + if (diagnosed_p) + inform (DECL_SOURCE_LOCATION (prevailing->decl), + "previously declared here"); + + /* Register and adjust types of the entries. */ for (e = (lto_symtab_entry_t) *slot; e; e = e->next) - VEC_safe_push (tree, gc, lto_global_var_decls, e->decl); + TREE_TYPE (e->decl) = gimple_register_type (TREE_TYPE (e->decl)); + + /* Merge the chain to the single prevailing decl and diagnose + mismatches. */ + lto_symtab_merge_decls_2 (slot); + + /* Drop all but the prevailing decl from the symtab. */ + if (TREE_CODE (prevailing->decl) != FUNCTION_DECL) + prevailing->next = NULL; return 1; } @@ -661,6 +612,40 @@ lto_symtab_merge_decls (void) htab_traverse (lto_symtab_identifiers, lto_symtab_merge_decls_1, NULL); } +/* Helper to process the decl chain for the symbol table entry *SLOT. */ + +static int +lto_symtab_merge_cgraph_nodes_1 (void **slot, void *data ATTRIBUTE_UNUSED) +{ + lto_symtab_entry_t e, prevailing = (lto_symtab_entry_t) *slot; + + if (!prevailing->next) + return 1; + + gcc_assert (TREE_CODE (prevailing->decl) == FUNCTION_DECL); + + /* Replace the cgraph node of each entry with the prevailing one. */ + for (e = prevailing->next; e; e = e->next) + { + if (e->node != NULL) + lto_cgraph_replace_node (e->node, prevailing->node); + } + + /* Drop all but the prevailing decl from the symtab. */ + prevailing->next = NULL; + + return 1; +} + +/* Merge cgraph nodes according to the symbol merging done by + lto_symtab_merge_decls. */ + +void +lto_symtab_merge_cgraph_nodes (void) +{ + lto_symtab_maybe_init_hash_table (); + htab_traverse (lto_symtab_identifiers, lto_symtab_merge_cgraph_nodes_1, NULL); +} /* Given the decl DECL, return the prevailing decl with the same name. */ @@ -685,70 +670,7 @@ lto_symtab_prevailing_decl (tree decl) if (!ret) return NULL_TREE; - /* If there is only one candidate return it. */ - if (ret->next == NULL) - return ret->decl; - - /* If there are multiple decls to choose from find the one we merged - with and return that. */ - while (ret) - { - if (gimple_types_compatible_p (TREE_TYPE (decl), TREE_TYPE (ret->decl))) - return ret->decl; - - ret = ret->next; - } - - gcc_unreachable (); -} - -/* Remove any storage used to store resolution of DECL. */ - -void -lto_symtab_clear_resolution (tree decl) -{ - struct lto_symtab_entry_def temp; - lto_symtab_entry_t head; - void **slot; - - if (!TREE_PUBLIC (decl)) - return; - - /* LTO FIXME: There should be no DECL_ABSTRACT in the middle end. */ - if (TREE_CODE (decl) == FUNCTION_DECL && DECL_ABSTRACT (decl)) - return; - - gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl)); - - lto_symtab_maybe_init_hash_table (); - temp.id = DECL_ASSEMBLER_NAME (decl); - slot = htab_find_slot (lto_symtab_identifiers, &temp, NO_INSERT); - if (!*slot) - return; - - head = (lto_symtab_entry_t) *slot; - if (head->decl == decl) - { - if (head->next) - { - *slot = head->next; - head->next = NULL; - } - else - htab_remove_elt (lto_symtab_identifiers, &temp); - } - else - { - lto_symtab_entry_t e; - while (head->next && head->next->decl != decl) - head = head->next; - if (head->next) - { - e = head->next; - head->next = e->next; - e->next = NULL; - } - } + return ret->decl; } #include "gt-lto-symtab.h" diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 82b8bec7a47..d6c3325846d 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,34 @@ +2009-10-22 Richard Guenther <rguenther@suse.de> + + * lto.c (lto_fixup_jump_functions): Remove. + (lto_fixup_decls): Do not fixup jump functions. + (read_cgraph_and_symbols): Schedule cgraph merging after + summary reading. Schedule type and decl fixup before + summary reading. + +2009-10-22 Richard Guenther <rguenther@suse.de> + + * lto.c (lto_fixup_data_t): Remove free_list member. + (lto_fixup_tree): Do not insert into free_list. + (free_decl): Remove. + (lto_fixup_decls): Remove free-list handling. + +2009-10-22 Jan Hubicka <jh@suse.cz> + + * lto.c (lto_fixup_jump_functions): New function. + (lto_fixup_decls): Use it. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR lto/41715 + * lto.c (lto_fixup_tree): Revert last change. + +2009-10-14 Richard Guenther <rguenther@suse.de> + + * lto.c (lto_fixup_tree): In case the prevailing decl is not + compatible with the one we replace wrap it around a + VIEW_CONVERT_EXPR. + 2009-10-09 Richard Guenther <rguenther@suse.de> PR lto/41635 diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 2b674c176ac..54fde65c69a 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -1193,7 +1193,6 @@ lto_execute_ltrans (char *const *files) typedef struct { - struct pointer_set_t *free_list; struct pointer_set_t *seen; } lto_fixup_data_t; @@ -1528,8 +1527,6 @@ lto_fixup_tree (tree *tp, int *walk_subtrees, void *data) lto_mark_nothrow_fndecl (prevailing); } - pointer_set_insert (fixup_data->free_list, t); - /* Also replace t with prevailing defintion. We don't want to insert the other defintion in the seen set as we want to replace all instances of it. */ @@ -1638,20 +1635,6 @@ lto_fixup_state_aux (void **slot, void *aux) return 1; } -/* A callback to pointer_set_traverse. Frees the tree pointed by p. Removes - from it from the UID -> DECL mapping. */ - -static bool -free_decl (const void *p, void *data ATTRIBUTE_UNUSED) -{ - const_tree ct = (const_tree) p; - tree t = CONST_CAST_TREE (ct); - - lto_symtab_clear_resolution (t); - - return true; -} - /* Fix the decls from all FILES. Replaces each decl with the corresponding prevailing one. */ @@ -1660,11 +1643,9 @@ lto_fixup_decls (struct lto_file_decl_data **files) { unsigned int i; tree decl; - struct pointer_set_t *free_list = pointer_set_create (); struct pointer_set_t *seen = pointer_set_create (); lto_fixup_data_t data; - data.free_list = free_list; data.seen = seen; for (i = 0; files[i]; i++) { @@ -1683,8 +1664,6 @@ lto_fixup_decls (struct lto_file_decl_data **files) VEC_replace (tree, lto_global_var_decls, i, decl); } - pointer_set_traverse (free_list, free_decl, NULL); - pointer_set_destroy (free_list); pointer_set_destroy (seen); } @@ -1823,11 +1802,18 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames) /* Read the callgraph. */ input_cgraph (); + /* Merge global decls. */ + lto_symtab_merge_decls (); + + /* Fixup all decls and types and free the type hash tables. */ + lto_fixup_decls (all_file_decl_data); + free_gimple_type_tables (); + /* Read the IPA summary data. */ ipa_read_summaries (); - /* Merge global decls. */ - lto_symtab_merge_decls (); + /* Finally merge the cgraph according to the decl merging decisions. */ + lto_symtab_merge_cgraph_nodes (); /* Mark cgraph nodes needed in the merged cgraph This normally happens in whole-program pass, but for @@ -1844,12 +1830,6 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames) timevar_push (TV_IPA_LTO_DECL_IO); - /* Fixup all decls and types. */ - lto_fixup_decls (all_file_decl_data); - - /* Free the type hash tables. */ - free_gimple_type_tables (); - /* FIXME lto. This loop needs to be changed to use the pass manager to call the ipa passes directly. */ if (!errorcount) diff --git a/gcc/optabs.c b/gcc/optabs.c index 1c136236060..39257f5a6c3 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -1595,11 +1595,11 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1, unsigned int bits = GET_MODE_BITSIZE (mode); if (CONST_INT_P (op1)) - newop1 = GEN_INT (bits - INTVAL (op1)); + newop1 = GEN_INT (bits - INTVAL (op1)); else if (targetm.shift_truncation_mask (mode) == bits - 1) - newop1 = negate_rtx (mode, op1); + newop1 = negate_rtx (GET_MODE (op1), op1); else - newop1 = expand_binop (mode, sub_optab, + newop1 = expand_binop (GET_MODE (op1), sub_optab, GEN_INT (bits), op1, NULL_RTX, unsignedp, OPTAB_DIRECT); diff --git a/gcc/opts.c b/gcc/opts.c index b12ed14c21d..51a0cb95419 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -610,32 +610,7 @@ handle_option (const char **argv, unsigned int lang_mask) } if (option->flag_var) - switch (option->var_type) - { - case CLVC_BOOLEAN: - *(int *) option->flag_var = value; - break; - - case CLVC_EQUAL: - *(int *) option->flag_var = (value - ? option->var_value - : !option->var_value); - break; - - case CLVC_BIT_CLEAR: - case CLVC_BIT_SET: - if ((value != 0) == (option->var_type == CLVC_BIT_SET)) - *(int *) option->flag_var |= option->var_value; - else - *(int *) option->flag_var &= ~option->var_value; - if (option->flag_var == &target_flags) - target_flags_explicit |= option->var_value; - break; - - case CLVC_STRING: - *(const char **) option->flag_var = arg; - break; - } + set_option (option, value, arg); if (option->flags & lang_mask) { @@ -2349,6 +2324,42 @@ get_option_state (int option, struct cl_option_state *state) return true; } +/* Set *OPTION according to VALUE and ARG. */ + +void +set_option (const struct cl_option *option, int value, const char *arg) +{ + if (!option->flag_var) + return; + + switch (option->var_type) + { + case CLVC_BOOLEAN: + *(int *) option->flag_var = value; + break; + + case CLVC_EQUAL: + *(int *) option->flag_var = (value + ? option->var_value + : !option->var_value); + break; + + case CLVC_BIT_CLEAR: + case CLVC_BIT_SET: + if ((value != 0) == (option->var_type == CLVC_BIT_SET)) + *(int *) option->flag_var |= option->var_value; + else + *(int *) option->flag_var &= ~option->var_value; + if (option->flag_var == &target_flags) + target_flags_explicit |= option->var_value; + break; + + case CLVC_STRING: + *(const char **) option->flag_var = arg; + break; + } +} + /* Enable a warning option as an error. This is used by -Werror= and also by legacy Werror-implicit-function-declaration. */ diff --git a/gcc/opts.h b/gcc/opts.h index b4be1111675..a2eef1938c7 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -103,6 +103,7 @@ extern void prune_options (int *argcp, char ***argvp); extern void decode_options (unsigned int argc, const char **argv); extern int option_enabled (int opt_idx); extern bool get_option_state (int, struct cl_option_state *); +extern void set_option (const struct cl_option *, int, const char *); extern void enable_warning_as_error (const char *arg, int value, unsigned int lang_mask); diff --git a/gcc/params.def b/gcc/params.def index 051398573e6..21cfbdc7fec 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -719,6 +719,11 @@ DEFPARAM (PARAM_IRA_MAX_CONFLICT_TABLE_SIZE, "max size of conflict table in MB", 1000, 0, 0) +DEFPARAM (PARAM_IRA_LOOP_RESERVED_REGS, + "ira-loop-reserved-regs", + "The number of registers in each class kept unused by loop invariant motion", + 2, 0, 0) + /* Switch initialization conversion will refuse to create arrays that are bigger than this parameter times the number of switch branches. */ diff --git a/gcc/params.h b/gcc/params.h index 67a7a05c3de..56db145e1f6 100644 --- a/gcc/params.h +++ b/gcc/params.h @@ -160,6 +160,8 @@ typedef enum compiler_param PARAM_VALUE (PARAM_IRA_MAX_LOOPS_NUM) #define IRA_MAX_CONFLICT_TABLE_SIZE \ PARAM_VALUE (PARAM_IRA_MAX_CONFLICT_TABLE_SIZE) +#define IRA_LOOP_RESERVED_REGS \ + PARAM_VALUE (PARAM_IRA_LOOP_RESERVED_REGS) #define SWITCH_CONVERSION_BRANCH_RATIO \ PARAM_VALUE (PARAM_SWITCH_CONVERSION_BRANCH_RATIO) #define LOOP_INVARIANT_MAX_BBS_IN_LOOP \ diff --git a/gcc/passes.c b/gcc/passes.c index 5ed12060739..db368f057db 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -600,24 +600,31 @@ position_pass (struct register_pass_info *new_pass_info, void register_pass (struct register_pass_info *pass_info) { + /* The checks below could fail in buggy plugins. Existing GCC + passes should never fail these checks, so we mention plugin in + the messages. */ if (!pass_info->pass) - { - gcc_unreachable (); - } + fatal_error ("plugin cannot register a missing pass"); + + if (!pass_info->pass->name) + fatal_error ("plugin cannot register an unnamed pass"); if (!pass_info->reference_pass_name) - { - gcc_unreachable (); - } + fatal_error + ("plugin cannot register pass %qs without reference pass name", + pass_info->pass->name); - /* Try to insert the new pass to the pass lists. We need to check all - three lists as the reference pass could be in one (or all) of them. */ + /* Try to insert the new pass to the pass lists. We need to check + all three lists as the reference pass could be in one (or all) of + them. */ if (!position_pass (pass_info, &all_lowering_passes) && !position_pass (pass_info, &all_small_ipa_passes) && !position_pass (pass_info, &all_regular_ipa_passes) && !position_pass (pass_info, &all_lto_gen_passes) && !position_pass (pass_info, &all_passes)) - gcc_unreachable (); + fatal_error + ("pass %qs not found but is referenced by new pass %qs", + pass_info->reference_pass_name, pass_info->pass->name); else { /* OK, we have successfully inserted the new pass. We need to register @@ -936,6 +943,7 @@ init_optimization_passes (void) NEXT_PASS (pass_rtl_store_motion); NEXT_PASS (pass_cse_after_global_opts); NEXT_PASS (pass_rtl_ifcvt); + NEXT_PASS (pass_reginfo_init); /* Perform loop optimizations. It might be better to do them a bit sooner, but we want the profile feedback to work more efficiently. */ @@ -955,7 +963,6 @@ init_optimization_passes (void) NEXT_PASS (pass_cse2); NEXT_PASS (pass_rtl_dse1); NEXT_PASS (pass_rtl_fwprop_addr); - NEXT_PASS (pass_reginfo_init); NEXT_PASS (pass_inc_dec); NEXT_PASS (pass_initialize_regs); NEXT_PASS (pass_ud_rtl_dce); @@ -971,10 +978,8 @@ init_optimization_passes (void) NEXT_PASS (pass_mode_switching); NEXT_PASS (pass_match_asm_constraints); NEXT_PASS (pass_sms); - NEXT_PASS (pass_subregs_of_mode_init); NEXT_PASS (pass_sched); NEXT_PASS (pass_ira); - NEXT_PASS (pass_subregs_of_mode_finish); NEXT_PASS (pass_postreload); { struct opt_pass **p = &pass_postreload.pass.sub; @@ -1613,7 +1618,8 @@ ipa_write_summaries_1 (cgraph_node_set set) struct lto_out_decl_state *state = lto_new_out_decl_state (); lto_push_out_decl_state (state); - ipa_write_summaries_2 (all_regular_ipa_passes, set, state); + if (!flag_wpa) + ipa_write_summaries_2 (all_regular_ipa_passes, set, state); ipa_write_summaries_2 (all_lto_gen_passes, set, state); gcc_assert (lto_get_out_decl_state () == state); @@ -1707,7 +1713,8 @@ ipa_read_summaries_1 (struct opt_pass *pass) void ipa_read_summaries (void) { - ipa_read_summaries_1 (all_regular_ipa_passes); + if (!flag_ltrans) + ipa_read_summaries_1 (all_regular_ipa_passes); ipa_read_summaries_1 (all_lto_gen_passes); } diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index e8ba16b4c8d..e565291c7e1 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,7 @@ +2009-10-17 Joseph Myers <joseph@codesourcery.com> + + * gcc.pot: Regenerate. + 2009-09-03 Joseph Myers <joseph@codesourcery.com> * fi.po: Update. diff --git a/gcc/po/gcc.pot b/gcc/po/gcc.pot index c3f85328bd8..c00b9d0d016 100644 --- a/gcc/po/gcc.pot +++ b/gcc/po/gcc.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" -"POT-Creation-Date: 2009-05-10 10:32+0000\n" +"POT-Creation-Date: 2009-10-17 13:36+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,265 +16,265 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: c-decl.c:3944 c-pretty-print.c:393 c-typeck.c:5151 toplev.c:1597 -#: cp/error.c:585 cp/error.c:848 +#: c-decl.c:4539 c-pretty-print.c:393 c-typeck.c:5349 toplev.c:1641 +#: cp/error.c:602 cp/error.c:875 msgid "<anonymous>" msgstr "" -#: c-format.c:361 c-format.c:385 config/i386/msformat-c.c:49 +#: c-format.c:363 c-format.c:387 config/i386/msformat-c.c:49 msgid "' ' flag" msgstr "" -#: c-format.c:361 c-format.c:385 config/i386/msformat-c.c:49 +#: c-format.c:363 c-format.c:387 config/i386/msformat-c.c:49 msgid "the ' ' printf flag" msgstr "" -#: c-format.c:362 c-format.c:386 c-format.c:420 c-format.c:432 c-format.c:491 +#: c-format.c:364 c-format.c:388 c-format.c:422 c-format.c:434 c-format.c:493 #: config/i386/msformat-c.c:50 msgid "'+' flag" msgstr "" -#: c-format.c:362 c-format.c:386 c-format.c:420 c-format.c:432 +#: c-format.c:364 c-format.c:388 c-format.c:422 c-format.c:434 #: config/i386/msformat-c.c:50 msgid "the '+' printf flag" msgstr "" -#: c-format.c:363 c-format.c:387 c-format.c:433 c-format.c:467 +#: c-format.c:365 c-format.c:389 c-format.c:435 c-format.c:469 #: config/i386/msformat-c.c:51 config/i386/msformat-c.c:86 msgid "'#' flag" msgstr "" -#: c-format.c:363 c-format.c:387 c-format.c:433 config/i386/msformat-c.c:51 +#: c-format.c:365 c-format.c:389 c-format.c:435 config/i386/msformat-c.c:51 msgid "the '#' printf flag" msgstr "" -#: c-format.c:364 c-format.c:388 c-format.c:465 config/i386/msformat-c.c:52 +#: c-format.c:366 c-format.c:390 c-format.c:467 config/i386/msformat-c.c:52 msgid "'0' flag" msgstr "" -#: c-format.c:364 c-format.c:388 config/i386/msformat-c.c:52 +#: c-format.c:366 c-format.c:390 config/i386/msformat-c.c:52 msgid "the '0' printf flag" msgstr "" -#: c-format.c:365 c-format.c:389 c-format.c:464 c-format.c:494 +#: c-format.c:367 c-format.c:391 c-format.c:466 c-format.c:496 #: config/i386/msformat-c.c:53 msgid "'-' flag" msgstr "" -#: c-format.c:365 c-format.c:389 config/i386/msformat-c.c:53 +#: c-format.c:367 c-format.c:391 config/i386/msformat-c.c:53 msgid "the '-' printf flag" msgstr "" -#: c-format.c:366 c-format.c:447 config/i386/msformat-c.c:54 +#: c-format.c:368 c-format.c:449 config/i386/msformat-c.c:54 #: config/i386/msformat-c.c:74 msgid "''' flag" msgstr "" -#: c-format.c:366 config/i386/msformat-c.c:54 +#: c-format.c:368 config/i386/msformat-c.c:54 msgid "the ''' printf flag" msgstr "" -#: c-format.c:367 c-format.c:448 +#: c-format.c:369 c-format.c:450 msgid "'I' flag" msgstr "" -#: c-format.c:367 +#: c-format.c:369 msgid "the 'I' printf flag" msgstr "" -#: c-format.c:368 c-format.c:390 c-format.c:445 c-format.c:468 c-format.c:495 -#: c-format.c:1629 config/sol2-c.c:45 config/i386/msformat-c.c:55 +#: c-format.c:370 c-format.c:392 c-format.c:447 c-format.c:470 c-format.c:497 +#: c-format.c:1621 config/sol2-c.c:45 config/i386/msformat-c.c:55 #: config/i386/msformat-c.c:72 msgid "field width" msgstr "" -#: c-format.c:368 c-format.c:390 config/sol2-c.c:45 +#: c-format.c:370 c-format.c:392 config/sol2-c.c:45 #: config/i386/msformat-c.c:55 msgid "field width in printf format" msgstr "" -#: c-format.c:369 c-format.c:391 c-format.c:422 c-format.c:435 +#: c-format.c:371 c-format.c:393 c-format.c:424 c-format.c:437 #: config/i386/msformat-c.c:56 msgid "precision" msgstr "" -#: c-format.c:369 c-format.c:391 c-format.c:422 c-format.c:435 +#: c-format.c:371 c-format.c:393 c-format.c:424 c-format.c:437 #: config/i386/msformat-c.c:56 msgid "precision in printf format" msgstr "" -#: c-format.c:370 c-format.c:392 c-format.c:423 c-format.c:436 c-format.c:446 -#: c-format.c:498 config/sol2-c.c:46 config/i386/msformat-c.c:57 +#: c-format.c:372 c-format.c:394 c-format.c:425 c-format.c:438 c-format.c:448 +#: c-format.c:500 config/sol2-c.c:46 config/i386/msformat-c.c:57 #: config/i386/msformat-c.c:73 msgid "length modifier" msgstr "" -#: c-format.c:370 c-format.c:392 c-format.c:423 c-format.c:436 +#: c-format.c:372 c-format.c:394 c-format.c:425 c-format.c:438 #: config/sol2-c.c:46 config/i386/msformat-c.c:57 msgid "length modifier in printf format" msgstr "" -#: c-format.c:421 c-format.c:434 +#: c-format.c:423 c-format.c:436 msgid "'q' flag" msgstr "" -#: c-format.c:421 c-format.c:434 +#: c-format.c:423 c-format.c:436 msgid "the 'q' diagnostic flag" msgstr "" -#: c-format.c:442 config/i386/msformat-c.c:70 +#: c-format.c:444 config/i386/msformat-c.c:70 msgid "assignment suppression" msgstr "" -#: c-format.c:442 config/i386/msformat-c.c:70 +#: c-format.c:444 config/i386/msformat-c.c:70 msgid "the assignment suppression scanf feature" msgstr "" -#: c-format.c:443 config/i386/msformat-c.c:71 +#: c-format.c:445 config/i386/msformat-c.c:71 msgid "'a' flag" msgstr "" -#: c-format.c:443 config/i386/msformat-c.c:71 +#: c-format.c:445 config/i386/msformat-c.c:71 msgid "the 'a' scanf flag" msgstr "" -#: c-format.c:444 +#: c-format.c:446 msgid "'m' flag" msgstr "" -#: c-format.c:444 +#: c-format.c:446 msgid "the 'm' scanf flag" msgstr "" -#: c-format.c:445 config/i386/msformat-c.c:72 +#: c-format.c:447 config/i386/msformat-c.c:72 msgid "field width in scanf format" msgstr "" -#: c-format.c:446 config/i386/msformat-c.c:73 +#: c-format.c:448 config/i386/msformat-c.c:73 msgid "length modifier in scanf format" msgstr "" -#: c-format.c:447 config/i386/msformat-c.c:74 +#: c-format.c:449 config/i386/msformat-c.c:74 msgid "the ''' scanf flag" msgstr "" -#: c-format.c:448 +#: c-format.c:450 msgid "the 'I' scanf flag" msgstr "" -#: c-format.c:463 +#: c-format.c:465 msgid "'_' flag" msgstr "" -#: c-format.c:463 +#: c-format.c:465 msgid "the '_' strftime flag" msgstr "" -#: c-format.c:464 +#: c-format.c:466 msgid "the '-' strftime flag" msgstr "" -#: c-format.c:465 +#: c-format.c:467 msgid "the '0' strftime flag" msgstr "" -#: c-format.c:466 c-format.c:490 +#: c-format.c:468 c-format.c:492 msgid "'^' flag" msgstr "" -#: c-format.c:466 +#: c-format.c:468 msgid "the '^' strftime flag" msgstr "" -#: c-format.c:467 config/i386/msformat-c.c:86 +#: c-format.c:469 config/i386/msformat-c.c:86 msgid "the '#' strftime flag" msgstr "" -#: c-format.c:468 +#: c-format.c:470 msgid "field width in strftime format" msgstr "" -#: c-format.c:469 +#: c-format.c:471 msgid "'E' modifier" msgstr "" -#: c-format.c:469 +#: c-format.c:471 msgid "the 'E' strftime modifier" msgstr "" -#: c-format.c:470 +#: c-format.c:472 msgid "'O' modifier" msgstr "" -#: c-format.c:470 +#: c-format.c:472 msgid "the 'O' strftime modifier" msgstr "" -#: c-format.c:471 +#: c-format.c:473 msgid "the 'O' modifier" msgstr "" -#: c-format.c:489 +#: c-format.c:491 msgid "fill character" msgstr "" -#: c-format.c:489 +#: c-format.c:491 msgid "fill character in strfmon format" msgstr "" -#: c-format.c:490 +#: c-format.c:492 msgid "the '^' strfmon flag" msgstr "" -#: c-format.c:491 +#: c-format.c:493 msgid "the '+' strfmon flag" msgstr "" -#: c-format.c:492 +#: c-format.c:494 msgid "'(' flag" msgstr "" -#: c-format.c:492 +#: c-format.c:494 msgid "the '(' strfmon flag" msgstr "" -#: c-format.c:493 +#: c-format.c:495 msgid "'!' flag" msgstr "" -#: c-format.c:493 +#: c-format.c:495 msgid "the '!' strfmon flag" msgstr "" -#: c-format.c:494 +#: c-format.c:496 msgid "the '-' strfmon flag" msgstr "" -#: c-format.c:495 +#: c-format.c:497 msgid "field width in strfmon format" msgstr "" -#: c-format.c:496 +#: c-format.c:498 msgid "left precision" msgstr "" -#: c-format.c:496 +#: c-format.c:498 msgid "left precision in strfmon format" msgstr "" -#: c-format.c:497 +#: c-format.c:499 msgid "right precision" msgstr "" -#: c-format.c:497 +#: c-format.c:499 msgid "right precision in strfmon format" msgstr "" -#: c-format.c:498 +#: c-format.c:500 msgid "length modifier in strfmon format" msgstr "" -#: c-format.c:1731 +#: c-format.c:1724 msgid "field precision" msgstr "" @@ -282,12 +282,12 @@ msgstr "" msgid "({anonymous})" msgstr "" -#: c-opts.c:1490 cp/error.c:990 fortran/cpp.c:552 +#: c-opts.c:1520 tree.c:3958 cp/error.c:1017 fortran/cpp.c:552 msgid "<built-in>" msgstr "" #. Handle deferred options from command-line. -#: c-opts.c:1508 fortran/cpp.c:557 +#: c-opts.c:1538 fortran/cpp.c:557 msgid "<command-line>" msgstr "" @@ -327,57 +327,52 @@ msgstr "" msgid "<return-value>" msgstr "" -#: c-typeck.c:5268 +#: c-typeck.c:5466 msgid "array initialized from parenthesized string constant" msgstr "" -#: c-typeck.c:5338 c-typeck.c:6197 +#: c-typeck.c:5539 c-typeck.c:6410 msgid "initialization of a flexible array member" msgstr "" -#: c-typeck.c:5348 cp/typeck2.c:756 +#: c-typeck.c:5549 cp/typeck2.c:758 #, gcc-internal-format msgid "char-array initialized from wide string" msgstr "" -#: c-typeck.c:5356 +#: c-typeck.c:5557 msgid "wide character array initialized from non-wide string" msgstr "" -#: c-typeck.c:5362 +#: c-typeck.c:5563 msgid "wide character array initialized from incompatible wide string" msgstr "" -#: c-typeck.c:5380 cp/typeck2.c:784 -#, gcc-internal-format -msgid "initializer-string for array of chars is too long" -msgstr "" - -#: c-typeck.c:5386 +#: c-typeck.c:5597 msgid "array of inappropriate type initialized from string constant" msgstr "" #. ??? This should not be an error when inlining calls to #. unprototyped functions. -#: c-typeck.c:5453 c-typeck.c:4925 cp/typeck.c:1645 +#: c-typeck.c:5665 c-typeck.c:5118 cp/typeck.c:1658 #, gcc-internal-format msgid "invalid use of non-lvalue array" msgstr "" -#: c-typeck.c:5479 +#: c-typeck.c:5691 msgid "array initialized from non-constant array expression" msgstr "" -#: c-typeck.c:5493 c-typeck.c:5496 c-typeck.c:5504 c-typeck.c:5542 -#: c-typeck.c:6996 +#: c-typeck.c:5705 c-typeck.c:5708 c-typeck.c:5716 c-typeck.c:5755 +#: c-typeck.c:7209 msgid "initializer element is not constant" msgstr "" -#: c-typeck.c:5509 c-typeck.c:5554 c-typeck.c:7006 +#: c-typeck.c:5721 c-typeck.c:5767 c-typeck.c:7219 msgid "initializer element is not a constant expression" msgstr "" -#: c-typeck.c:5549 c-typeck.c:7001 +#: c-typeck.c:5762 c-typeck.c:7214 #, gcc-internal-format msgid "initializer element is not computable at load time" msgstr "" @@ -386,276 +381,287 @@ msgstr "" #. of VLAs themselves count as VLAs, it does not make #. sense to permit them to be initialized given that #. ordinary VLAs may not be initialized. -#: c-typeck.c:5563 c-decl.c:3337 c-decl.c:3352 +#: c-typeck.c:5776 c-decl.c:3921 c-decl.c:3936 #, gcc-internal-format msgid "variable-sized object may not be initialized" msgstr "" -#: c-typeck.c:5567 +#: c-typeck.c:5780 msgid "invalid initializer" msgstr "" -#: c-typeck.c:5776 +#: c-typeck.c:5989 msgid "(anonymous)" msgstr "" -#: c-typeck.c:6054 +#: c-typeck.c:6267 msgid "extra brace group at end of initializer" msgstr "" -#: c-typeck.c:6075 +#: c-typeck.c:6288 msgid "missing braces around initializer" msgstr "" -#: c-typeck.c:6136 +#: c-typeck.c:6349 msgid "braces around scalar initializer" msgstr "" -#: c-typeck.c:6194 +#: c-typeck.c:6407 msgid "initialization of flexible array member in a nested context" msgstr "" -#: c-typeck.c:6225 +#: c-typeck.c:6438 msgid "missing initializer" msgstr "" -#: c-typeck.c:6247 +#: c-typeck.c:6460 msgid "empty scalar initializer" msgstr "" -#: c-typeck.c:6252 +#: c-typeck.c:6465 msgid "extra elements in scalar initializer" msgstr "" -#: c-typeck.c:6360 c-typeck.c:6438 +#: c-typeck.c:6573 c-typeck.c:6651 msgid "array index in non-array initializer" msgstr "" -#: c-typeck.c:6365 c-typeck.c:6494 +#: c-typeck.c:6578 c-typeck.c:6707 msgid "field name not in record or union initializer" msgstr "" -#: c-typeck.c:6411 +#: c-typeck.c:6624 msgid "array index in initializer not of integer type" msgstr "" -#: c-typeck.c:6420 c-typeck.c:6429 +#: c-typeck.c:6633 c-typeck.c:6642 msgid "array index in initializer is not an integer constant expression" msgstr "" -#: c-typeck.c:6434 c-typeck.c:6436 +#: c-typeck.c:6647 c-typeck.c:6649 msgid "nonconstant array index in initializer" msgstr "" -#: c-typeck.c:6440 c-typeck.c:6443 +#: c-typeck.c:6653 c-typeck.c:6656 msgid "array index in initializer exceeds array bounds" msgstr "" -#: c-typeck.c:6457 +#: c-typeck.c:6670 msgid "empty index range in initializer" msgstr "" -#: c-typeck.c:6466 +#: c-typeck.c:6679 msgid "array index range in initializer exceeds array bounds" msgstr "" -#: c-typeck.c:6549 c-typeck.c:6576 c-typeck.c:7095 +#: c-typeck.c:6762 c-typeck.c:6789 c-typeck.c:7308 msgid "initialized field with side-effects overwritten" msgstr "" -#: c-typeck.c:6551 c-typeck.c:6578 c-typeck.c:7097 +#: c-typeck.c:6764 c-typeck.c:6791 c-typeck.c:7310 msgid "initialized field overwritten" msgstr "" -#: c-typeck.c:7023 c-typeck.c:4574 +#: c-typeck.c:7236 c-typeck.c:4761 #, gcc-internal-format msgid "enum conversion in initialization is invalid in C++" msgstr "" -#: c-typeck.c:7312 +#: c-typeck.c:7525 msgid "excess elements in char array initializer" msgstr "" -#: c-typeck.c:7319 c-typeck.c:7378 +#: c-typeck.c:7532 c-typeck.c:7591 msgid "excess elements in struct initializer" msgstr "" -#: c-typeck.c:7393 +#: c-typeck.c:7606 msgid "non-static initialization of a flexible array member" msgstr "" -#: c-typeck.c:7463 +#: c-typeck.c:7676 msgid "excess elements in union initializer" msgstr "" -#: c-typeck.c:7552 +#: c-typeck.c:7765 msgid "excess elements in array initializer" msgstr "" -#: c-typeck.c:7584 +#: c-typeck.c:7798 msgid "excess elements in vector initializer" msgstr "" -#: c-typeck.c:7614 +#: c-typeck.c:7829 msgid "excess elements in scalar initializer" msgstr "" -#: cfgrtl.c:1941 +#: cfgrtl.c:2026 msgid "flow control insn inside a basic block" msgstr "" -#: cfgrtl.c:2070 +#: cfgrtl.c:2157 msgid "wrong insn in the fallthru edge" msgstr "" -#: cfgrtl.c:2126 +#: cfgrtl.c:2211 msgid "insn outside basic block" msgstr "" -#: cfgrtl.c:2133 +#: cfgrtl.c:2218 msgid "return not followed by barrier" msgstr "" -#: collect2.c:396 gcc.c:7153 +#: collect2.c:486 gcc.c:7686 #, c-format msgid "internal gcc abort in %s, at %s:%d" msgstr "" -#: collect2.c:910 +#: collect2.c:939 +#, c-format +msgid "COLLECT_LTO_WRAPPER must be set." +msgstr "" + +#: collect2.c:1081 +#, c-format +msgid "too many lto output files" +msgstr "" + +#: collect2.c:1284 #, c-format msgid "no arguments" msgstr "" -#: collect2.c:1284 collect2.c:1432 collect2.c:1467 +#: collect2.c:1677 collect2.c:1839 collect2.c:1874 #, c-format msgid "fopen %s" msgstr "" -#: collect2.c:1287 collect2.c:1437 collect2.c:1470 +#: collect2.c:1680 collect2.c:1844 collect2.c:1877 #, c-format msgid "fclose %s" msgstr "" -#: collect2.c:1296 +#: collect2.c:1689 #, c-format msgid "collect2 version %s" msgstr "" -#: collect2.c:1386 +#: collect2.c:1785 #, c-format msgid "%d constructor(s) found\n" msgstr "" -#: collect2.c:1387 +#: collect2.c:1786 #, c-format msgid "%d destructor(s) found\n" msgstr "" -#: collect2.c:1388 +#: collect2.c:1787 #, c-format msgid "%d frame table(s) found\n" msgstr "" -#: collect2.c:1525 +#: collect2.c:1938 lto-wrapper.c:167 #, c-format msgid "can't get program status" msgstr "" -#: collect2.c:1594 +#: collect2.c:2007 #, c-format msgid "could not open response file %s" msgstr "" -#: collect2.c:1599 +#: collect2.c:2012 #, c-format msgid "could not write to response file %s" msgstr "" -#: collect2.c:1604 +#: collect2.c:2017 #, c-format msgid "could not close response file %s" msgstr "" -#: collect2.c:1622 +#: collect2.c:2035 #, c-format msgid "[cannot find %s]" msgstr "" -#: collect2.c:1637 +#: collect2.c:2050 #, c-format msgid "cannot find '%s'" msgstr "" -#: collect2.c:1641 collect2.c:2132 collect2.c:2287 gcc.c:3021 +#: collect2.c:2054 collect2.c:2577 collect2.c:2773 gcc.c:3075 +#: lto-wrapper.c:139 #, c-format msgid "pex_init failed" msgstr "" -#: collect2.c:1679 +#: collect2.c:2092 #, c-format msgid "[Leaving %s]\n" msgstr "" -#: collect2.c:1900 +#: collect2.c:2324 #, c-format msgid "" "\n" "write_c_file - output name is %s, prefix is %s\n" msgstr "" -#: collect2.c:2106 +#: collect2.c:2551 #, c-format msgid "cannot find 'nm'" msgstr "" -#: collect2.c:2153 +#: collect2.c:2599 #, c-format msgid "can't open nm output" msgstr "" -#: collect2.c:2197 +#: collect2.c:2682 #, c-format msgid "init function found in object %s" msgstr "" -#: collect2.c:2205 +#: collect2.c:2692 #, c-format msgid "fini function found in object %s" msgstr "" -#: collect2.c:2308 +#: collect2.c:2794 #, c-format msgid "can't open ldd output" msgstr "" -#: collect2.c:2311 +#: collect2.c:2797 #, c-format msgid "" "\n" "ldd output with constructors/destructors.\n" msgstr "" -#: collect2.c:2326 +#: collect2.c:2812 #, c-format msgid "dynamic dependency %s not found" msgstr "" -#: collect2.c:2338 +#: collect2.c:2824 #, c-format msgid "unable to open dynamic dependency '%s'" msgstr "" -#: collect2.c:2494 +#: collect2.c:2985 #, c-format msgid "%s: not a COFF file" msgstr "" -#: collect2.c:2614 +#: collect2.c:3115 #, c-format msgid "%s: cannot open as COFF file" msgstr "" -#: collect2.c:2672 +#: collect2.c:3173 #, c-format msgid "library lib%s not found" msgstr "" @@ -670,12 +676,12 @@ msgstr "" msgid "too many input files" msgstr "" -#: diagnostic.c:190 +#: diagnostic.c:185 #, c-format msgid "compilation terminated due to -Wfatal-errors.\n" msgstr "" -#: diagnostic.c:199 +#: diagnostic.c:194 #, c-format msgid "" "Please submit a full bug report,\n" @@ -683,66 +689,66 @@ msgid "" "See %s for instructions.\n" msgstr "" -#: diagnostic.c:208 +#: diagnostic.c:203 #, c-format msgid "compilation terminated.\n" msgstr "" -#: diagnostic.c:377 +#: diagnostic.c:381 #, c-format msgid "" "*** WARNING *** there are active plugins, do not report this as a bug unless " "you can reproduce it without enabling any plugins.\n" msgstr "" -#: diagnostic.c:394 +#: diagnostic.c:398 #, c-format msgid "%s:%d: confused by earlier errors, bailing out\n" msgstr "" -#: diagnostic.c:705 +#: diagnostic.c:709 #, c-format msgid "Internal compiler error: Error reporting routines re-entered.\n" msgstr "" -#: final.c:1134 +#: final.c:1152 msgid "negative insn length" msgstr "" -#: final.c:2608 +#: final.c:2651 msgid "could not split insn" msgstr "" -#: final.c:3005 +#: final.c:3085 msgid "invalid 'asm': " msgstr "" -#: final.c:3188 +#: final.c:3268 #, c-format msgid "nested assembly dialect alternatives" msgstr "" -#: final.c:3205 final.c:3217 +#: final.c:3285 final.c:3297 #, c-format msgid "unterminated assembly dialect alternative" msgstr "" -#: final.c:3264 +#: final.c:3344 #, c-format msgid "operand number missing after %%-letter" msgstr "" -#: final.c:3267 final.c:3308 +#: final.c:3347 final.c:3388 #, c-format msgid "operand number out of range" msgstr "" -#: final.c:3327 +#: final.c:3407 #, c-format msgid "invalid %%-code" msgstr "" -#: final.c:3357 +#: final.c:3437 #, c-format msgid "'%%l' operand isn't a label" msgstr "" @@ -753,118 +759,118 @@ msgstr "" #. handle them. #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. -#: final.c:3503 vmsdbgout.c:488 config/i386/i386.c:10285 -#: config/pdp11/pdp11.c:1677 +#: final.c:3583 vmsdbgout.c:495 config/i386/i386.c:10677 +#: config/pdp11/pdp11.c:1682 #, c-format msgid "floating constant misused" msgstr "" -#: final.c:3565 vmsdbgout.c:545 config/i386/i386.c:10372 -#: config/pdp11/pdp11.c:1724 +#: final.c:3645 vmsdbgout.c:552 config/i386/i386.c:10764 +#: config/pdp11/pdp11.c:1729 #, c-format msgid "invalid expression as operand" msgstr "" -#: gcc.c:1736 +#: gcc.c:1789 #, c-format msgid "Using built-in specs.\n" msgstr "" -#: gcc.c:1921 +#: gcc.c:1974 #, c-format msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" -#: gcc.c:2036 +#: gcc.c:2089 #, c-format msgid "Reading specs from %s\n" msgstr "" -#: gcc.c:2132 gcc.c:2151 +#: gcc.c:2185 gcc.c:2204 #, c-format msgid "specs %%include syntax malformed after %ld characters" msgstr "" -#: gcc.c:2159 +#: gcc.c:2212 #, c-format msgid "could not find specs file %s\n" msgstr "" -#: gcc.c:2176 gcc.c:2184 gcc.c:2193 gcc.c:2202 +#: gcc.c:2229 gcc.c:2237 gcc.c:2246 gcc.c:2255 #, c-format msgid "specs %%rename syntax malformed after %ld characters" msgstr "" -#: gcc.c:2211 +#: gcc.c:2264 #, c-format msgid "specs %s spec was not found to be renamed" msgstr "" -#: gcc.c:2218 +#: gcc.c:2271 #, c-format msgid "%s: attempt to rename spec '%s' to already defined spec '%s'" msgstr "" -#: gcc.c:2223 +#: gcc.c:2276 #, c-format msgid "rename spec %s to %s\n" msgstr "" -#: gcc.c:2225 +#: gcc.c:2278 #, c-format msgid "" "spec is '%s'\n" "\n" msgstr "" -#: gcc.c:2238 +#: gcc.c:2291 #, c-format msgid "specs unknown %% command after %ld characters" msgstr "" -#: gcc.c:2249 gcc.c:2262 +#: gcc.c:2302 gcc.c:2315 #, c-format msgid "specs file malformed after %ld characters" msgstr "" -#: gcc.c:2314 +#: gcc.c:2367 #, c-format msgid "spec file has no spec for linking" msgstr "" -#: gcc.c:2642 gcc.c:4954 +#: gcc.c:2695 gcc.c:5233 #, c-format msgid "%s\n" msgstr "" -#: gcc.c:2843 +#: gcc.c:2896 #, c-format msgid "system path '%s' is not absolute" msgstr "" -#: gcc.c:2915 +#: gcc.c:2968 #, c-format msgid "-pipe not supported" msgstr "" -#: gcc.c:2977 +#: gcc.c:3030 #, c-format msgid "" "\n" "Go ahead? (y or n) " msgstr "" -#: gcc.c:3060 +#: gcc.c:3114 msgid "failed to get exit status" msgstr "" -#: gcc.c:3066 +#: gcc.c:3120 msgid "failed to get process times" msgstr "" -#: gcc.c:3092 +#: gcc.c:3146 #, c-format msgid "" "Internal error: %s (program %s)\n" @@ -872,225 +878,231 @@ msgid "" "See %s for instructions." msgstr "" -#: gcc.c:3118 +#: gcc.c:3174 #, c-format msgid "# %s %.2f %.2f\n" msgstr "" -#: gcc.c:3252 +#: gcc.c:3365 #, c-format msgid "Usage: %s [options] file...\n" msgstr "" -#: gcc.c:3253 +#: gcc.c:3366 msgid "Options:\n" msgstr "" -#: gcc.c:3255 +#: gcc.c:3368 msgid " -pass-exit-codes Exit with highest error code from a phase\n" msgstr "" -#: gcc.c:3256 +#: gcc.c:3369 msgid " --help Display this information\n" msgstr "" -#: gcc.c:3257 +#: gcc.c:3370 msgid "" " --target-help Display target specific command line options\n" msgstr "" -#: gcc.c:3258 +#: gcc.c:3371 msgid "" " --help={target|optimizers|warnings|params|[^]{joined|separate|" "undocumented}}[,...]\n" msgstr "" -#: gcc.c:3259 +#: gcc.c:3372 msgid "" " Display specific types of command line options\n" msgstr "" -#: gcc.c:3261 +#: gcc.c:3374 msgid " (Use '-v --help' to display command line options of sub-processes)\n" msgstr "" -#: gcc.c:3262 +#: gcc.c:3375 msgid " --version Display compiler version information\n" msgstr "" -#: gcc.c:3263 +#: gcc.c:3376 msgid " -dumpspecs Display all of the built in spec strings\n" msgstr "" -#: gcc.c:3264 +#: gcc.c:3377 msgid " -dumpversion Display the version of the compiler\n" msgstr "" -#: gcc.c:3265 +#: gcc.c:3378 msgid " -dumpmachine Display the compiler's target processor\n" msgstr "" -#: gcc.c:3266 +#: gcc.c:3379 msgid "" " -print-search-dirs Display the directories in the compiler's search " "path\n" msgstr "" -#: gcc.c:3267 +#: gcc.c:3380 msgid "" " -print-libgcc-file-name Display the name of the compiler's companion " "library\n" msgstr "" -#: gcc.c:3268 +#: gcc.c:3381 msgid " -print-file-name=<lib> Display the full path to library <lib>\n" msgstr "" -#: gcc.c:3269 +#: gcc.c:3382 msgid "" " -print-prog-name=<prog> Display the full path to compiler component " "<prog>\n" msgstr "" -#: gcc.c:3270 +#: gcc.c:3383 msgid "" " -print-multi-directory Display the root directory for versions of " "libgcc\n" msgstr "" -#: gcc.c:3271 +#: gcc.c:3384 msgid "" " -print-multi-lib Display the mapping between command line options " "and\n" " multiple library search directories\n" msgstr "" -#: gcc.c:3274 +#: gcc.c:3387 msgid " -print-multi-os-directory Display the relative path to OS libraries\n" msgstr "" -#: gcc.c:3275 +#: gcc.c:3388 msgid " -print-sysroot Display the target libraries directory\n" msgstr "" -#: gcc.c:3276 +#: gcc.c:3389 msgid "" " -print-sysroot-headers-suffix Display the sysroot suffix used to find " "headers\n" msgstr "" -#: gcc.c:3277 +#: gcc.c:3390 msgid "" " -Wa,<options> Pass comma-separated <options> on to the " "assembler\n" msgstr "" -#: gcc.c:3278 +#: gcc.c:3391 msgid "" " -Wp,<options> Pass comma-separated <options> on to the " "preprocessor\n" msgstr "" -#: gcc.c:3279 +#: gcc.c:3392 msgid "" " -Wl,<options> Pass comma-separated <options> on to the linker\n" msgstr "" -#: gcc.c:3280 +#: gcc.c:3393 msgid " -Xassembler <arg> Pass <arg> on to the assembler\n" msgstr "" -#: gcc.c:3281 +#: gcc.c:3394 msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor\n" msgstr "" -#: gcc.c:3282 +#: gcc.c:3395 msgid " -Xlinker <arg> Pass <arg> on to the linker\n" msgstr "" -#: gcc.c:3283 +#: gcc.c:3396 msgid "" " -combine Pass multiple source files to compiler at once\n" msgstr "" -#: gcc.c:3284 +#: gcc.c:3397 msgid " -save-temps Do not delete intermediate files\n" msgstr "" -#: gcc.c:3285 +#: gcc.c:3398 msgid " -save-temps=<arg> Do not delete intermediate files\n" msgstr "" -#: gcc.c:3286 +#: gcc.c:3399 +msgid "" +" -no-canonical-prefixes Do not canonicalize paths when building relative\n" +" prefixes to other gcc components\n" +msgstr "" + +#: gcc.c:3402 msgid " -pipe Use pipes rather than intermediate files\n" msgstr "" -#: gcc.c:3287 +#: gcc.c:3403 msgid " -time Time the execution of each subprocess\n" msgstr "" -#: gcc.c:3288 +#: gcc.c:3404 msgid "" " -specs=<file> Override built-in specs with the contents of " "<file>\n" msgstr "" -#: gcc.c:3289 +#: gcc.c:3405 msgid "" " -std=<standard> Assume that the input sources are for <standard>\n" msgstr "" -#: gcc.c:3290 +#: gcc.c:3406 msgid "" " --sysroot=<directory> Use <directory> as the root directory for " "headers\n" " and libraries\n" msgstr "" -#: gcc.c:3293 +#: gcc.c:3409 msgid "" " -B <directory> Add <directory> to the compiler's search paths\n" msgstr "" -#: gcc.c:3294 +#: gcc.c:3410 msgid " -b <machine> Run gcc for target <machine>, if installed\n" msgstr "" -#: gcc.c:3295 +#: gcc.c:3411 msgid "" " -V <version> Run gcc version number <version>, if installed\n" msgstr "" -#: gcc.c:3296 +#: gcc.c:3412 msgid "" " -v Display the programs invoked by the compiler\n" msgstr "" -#: gcc.c:3297 +#: gcc.c:3413 msgid "" " -### Like -v but options quoted and commands not " "executed\n" msgstr "" -#: gcc.c:3298 +#: gcc.c:3414 msgid "" " -E Preprocess only; do not compile, assemble or " "link\n" msgstr "" -#: gcc.c:3299 +#: gcc.c:3415 msgid " -S Compile only; do not assemble or link\n" msgstr "" -#: gcc.c:3300 +#: gcc.c:3416 msgid " -c Compile and assemble, but do not link\n" msgstr "" -#: gcc.c:3301 +#: gcc.c:3417 msgid " -o <file> Place the output into <file>\n" msgstr "" -#: gcc.c:3302 +#: gcc.c:3418 msgid "" " -x <language> Specify the language of the following input " "files\n" @@ -1101,7 +1113,7 @@ msgid "" "extension\n" msgstr "" -#: gcc.c:3309 +#: gcc.c:3425 #, c-format msgid "" "\n" @@ -1110,201 +1122,206 @@ msgid "" " other options on to these processes the -W<letter> options must be used.\n" msgstr "" -#: gcc.c:3439 +#: gcc.c:3557 #, c-format msgid "'-%c' option must have argument" msgstr "" -#: gcc.c:3465 +#: gcc.c:3583 #, c-format msgid "couldn't run '%s': %s" msgstr "" -#: gcc.c:3467 +#: gcc.c:3585 #, c-format msgid "couldn't run '%s': %s: %s" msgstr "" -#: gcc.c:3792 +#: gcc.c:3963 #, c-format msgid "argument to '-Xlinker' is missing" msgstr "" -#: gcc.c:3800 +#: gcc.c:3971 #, c-format msgid "argument to '-Xpreprocessor' is missing" msgstr "" -#: gcc.c:3807 +#: gcc.c:3978 #, c-format msgid "argument to '-Xassembler' is missing" msgstr "" -#: gcc.c:3814 +#: gcc.c:3985 #, c-format msgid "argument to '-l' is missing" msgstr "" -#: gcc.c:3835 +#: gcc.c:4006 #, c-format msgid "'%s' is an unknown -save-temps option" msgstr "" -#: gcc.c:3846 +#: gcc.c:4020 #, c-format msgid "argument to '-specs' is missing" msgstr "" -#: gcc.c:3860 +#: gcc.c:4034 #, c-format msgid "argument to '-specs=' is missing" msgstr "" -#: gcc.c:3882 +#: gcc.c:4062 #, c-format msgid "argument to '-wrapper' is missing" msgstr "" -#: gcc.c:3910 +#: gcc.c:4090 #, c-format msgid "'-%c' must come at the start of the command line" msgstr "" -#: gcc.c:3919 +#: gcc.c:4099 #, c-format msgid "argument to '-B' is missing" msgstr "" -#: gcc.c:4294 +#: gcc.c:4492 #, c-format msgid "argument to '-x' is missing" msgstr "" -#: gcc.c:4322 +#: gcc.c:4520 gcc.c:4951 #, c-format msgid "argument to '-%s' is missing" msgstr "" -#: gcc.c:4695 +#: gcc.c:4746 +#, c-format +msgid "unable to locate default linker script '%s' in the library search paths" +msgstr "" + +#: gcc.c:4927 #, c-format msgid "switch '%s' does not start with '-'" msgstr "" -#: gcc.c:4770 +#: gcc.c:5043 #, c-format msgid "could not open temporary response file %s" msgstr "" -#: gcc.c:4776 +#: gcc.c:5049 #, c-format msgid "could not write to temporary response file %s" msgstr "" -#: gcc.c:4782 +#: gcc.c:5055 #, c-format msgid "could not close temporary response file %s" msgstr "" -#: gcc.c:4882 +#: gcc.c:5157 #, c-format msgid "spec '%s' invalid" msgstr "" -#: gcc.c:5027 +#: gcc.c:5306 #, c-format msgid "spec '%s' has invalid '%%0%c'" msgstr "" -#: gcc.c:5326 +#: gcc.c:5615 #, c-format msgid "spec '%s' has invalid '%%W%c" msgstr "" -#: gcc.c:5346 +#: gcc.c:5635 #, c-format msgid "spec '%s' has invalid '%%x%c'" msgstr "" -#: gcc.c:5568 +#: gcc.c:5857 #, c-format msgid "Processing spec %c%s%c, which is '%s'\n" msgstr "" -#: gcc.c:5692 +#: gcc.c:5982 #, c-format msgid "unknown spec function '%s'" msgstr "" -#: gcc.c:5711 +#: gcc.c:6002 #, c-format msgid "error in args to spec function '%s'" msgstr "" -#: gcc.c:5759 +#: gcc.c:6051 #, c-format msgid "malformed spec function name" msgstr "" #. ) -#: gcc.c:5762 +#: gcc.c:6054 #, c-format msgid "no arguments for spec function" msgstr "" -#: gcc.c:5781 +#: gcc.c:6073 #, c-format msgid "malformed spec function arguments" msgstr "" -#: gcc.c:6027 +#: gcc.c:6319 #, c-format msgid "braced spec '%s' is invalid at '%c'" msgstr "" -#: gcc.c:6115 +#: gcc.c:6407 #, c-format msgid "braced spec body '%s' is invalid" msgstr "" -#: gcc.c:6644 +#: gcc.c:7106 #, c-format msgid "install: %s%s\n" msgstr "" -#: gcc.c:6647 +#: gcc.c:7109 #, c-format msgid "programs: %s\n" msgstr "" -#: gcc.c:6649 +#: gcc.c:7111 #, c-format msgid "libraries: %s\n" msgstr "" #. The error status indicates that only one set of fixed #. headers should be built. -#: gcc.c:6715 +#: gcc.c:7177 #, c-format msgid "not configured with sysroot headers suffix" msgstr "" -#: gcc.c:6724 +#: gcc.c:7186 #, c-format msgid "" "\n" "For bug reporting instructions, please see:\n" msgstr "" -#: gcc.c:6740 +#: gcc.c:7202 #, c-format msgid "%s %s%s\n" msgstr "" -#: gcc.c:6743 gcov.c:430 fortran/gfortranspec.c:383 java/jcf-dump.c:1170 +#: gcc.c:7205 gcov.c:430 fortran/gfortranspec.c:373 java/jcf-dump.c:1170 msgid "(C)" msgstr "" -#: gcc.c:6744 java/jcf-dump.c:1171 +#: gcc.c:7206 java/jcf-dump.c:1171 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -1312,47 +1329,57 @@ msgid "" "\n" msgstr "" -#: gcc.c:6761 +#: gcc.c:7223 #, c-format msgid "Target: %s\n" msgstr "" -#: gcc.c:6762 +#: gcc.c:7224 #, c-format msgid "Configured with: %s\n" msgstr "" -#: gcc.c:6776 +#: gcc.c:7238 #, c-format msgid "Thread model: %s\n" msgstr "" -#: gcc.c:6787 +#: gcc.c:7249 #, c-format msgid "gcc version %s %s\n" msgstr "" -#: gcc.c:6789 +#: gcc.c:7251 #, c-format msgid "gcc driver version %s %sexecuting gcc version %s\n" msgstr "" -#: gcc.c:6797 +#: gcc.c:7259 #, c-format msgid "no input files" msgstr "" -#: gcc.c:6846 +#: gcc.c:7308 #, c-format -msgid "cannot specify -o with -c or -S with multiple files" +msgid "cannot specify -o with -c, -S or -E with multiple files" msgstr "" -#: gcc.c:6880 +#: gcc.c:7342 #, c-format msgid "spec '%s' is invalid" msgstr "" -#: gcc.c:7016 +#: gcc.c:7533 +#, c-format +msgid "-use-linker-plugin, but liblto_plugin.so not found" +msgstr "" + +#: gcc.c:7538 +#, c-format +msgid "could not find libgcc.a" +msgstr "" + +#: gcc.c:7549 #, c-format msgid "" "\n" @@ -1361,59 +1388,59 @@ msgid "" "\n" msgstr "" -#: gcc.c:7017 +#: gcc.c:7550 #, c-format msgid "" "Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n" "\n" msgstr "" -#: gcc.c:7369 +#: gcc.c:7902 #, c-format msgid "multilib spec '%s' is invalid" msgstr "" -#: gcc.c:7560 +#: gcc.c:8093 #, c-format msgid "multilib exclusions '%s' is invalid" msgstr "" -#: gcc.c:7618 gcc.c:7759 +#: gcc.c:8151 gcc.c:8292 #, c-format msgid "multilib select '%s' is invalid" msgstr "" -#: gcc.c:7797 +#: gcc.c:8330 #, c-format msgid "multilib exclusion '%s' is invalid" msgstr "" -#: gcc.c:8003 +#: gcc.c:8536 #, c-format msgid "environment variable \"%s\" not defined" msgstr "" -#: gcc.c:8094 gcc.c:8099 +#: gcc.c:8627 gcc.c:8632 #, c-format msgid "invalid version number `%s'" msgstr "" -#: gcc.c:8142 +#: gcc.c:8675 #, c-format msgid "too few arguments to %%:version-compare" msgstr "" -#: gcc.c:8148 +#: gcc.c:8681 #, c-format msgid "too many arguments to %%:version-compare" msgstr "" -#: gcc.c:8189 +#: gcc.c:8722 #, c-format msgid "unknown operator '%s' in %%:version-compare" msgstr "" -#: gcc.c:8223 +#: gcc.c:8756 #, c-format msgid "" "Assembler options\n" @@ -1421,13 +1448,38 @@ msgid "" "\n" msgstr "" -#: gcc.c:8224 +#: gcc.c:8757 #, c-format msgid "" "Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n" "\n" msgstr "" +#: gcc.c:8803 +#, c-format +msgid "too many arguments to %%:compare-debug-dump-opt" +msgstr "" + +#: gcc.c:8870 +#, c-format +msgid "too many arguments to %%:compare-debug-self-opt" +msgstr "" + +#: gcc.c:8905 +#, c-format +msgid "too few arguments to %%:compare-debug-auxbase-opt" +msgstr "" + +#: gcc.c:8908 +#, c-format +msgid "too many arguments to %%:compare-debug-auxbase-opt" +msgstr "" + +#: gcc.c:8915 +#, c-format +msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk" +msgstr "" + #: gcov.c:403 #, c-format msgid "" @@ -1608,130 +1660,130 @@ msgstr "" msgid "%s:stamp mismatch with graph file\n" msgstr "" -#: gcov.c:1082 +#: gcov.c:1083 #, c-format msgid "%s:unknown function '%u'\n" msgstr "" -#: gcov.c:1095 +#: gcov.c:1097 #, c-format msgid "%s:profile mismatch for '%s'\n" msgstr "" -#: gcov.c:1114 +#: gcov.c:1116 #, c-format msgid "%s:overflowed\n" msgstr "" -#: gcov.c:1138 +#: gcov.c:1140 #, c-format msgid "%s:'%s' lacks entry and/or exit blocks\n" msgstr "" -#: gcov.c:1143 +#: gcov.c:1145 #, c-format msgid "%s:'%s' has arcs to entry block\n" msgstr "" -#: gcov.c:1151 +#: gcov.c:1153 #, c-format msgid "%s:'%s' has arcs from exit block\n" msgstr "" -#: gcov.c:1359 +#: gcov.c:1361 #, c-format msgid "%s:graph is unsolvable for '%s'\n" msgstr "" -#: gcov.c:1439 +#: gcov.c:1441 #, c-format msgid "%s '%s'\n" msgstr "" -#: gcov.c:1442 +#: gcov.c:1444 #, c-format msgid "Lines executed:%s of %d\n" msgstr "" -#: gcov.c:1446 +#: gcov.c:1448 #, c-format msgid "No executable lines\n" msgstr "" -#: gcov.c:1452 +#: gcov.c:1454 #, c-format msgid "Branches executed:%s of %d\n" msgstr "" -#: gcov.c:1456 +#: gcov.c:1458 #, c-format msgid "Taken at least once:%s of %d\n" msgstr "" -#: gcov.c:1462 +#: gcov.c:1464 #, c-format msgid "No branches\n" msgstr "" -#: gcov.c:1464 +#: gcov.c:1466 #, c-format msgid "Calls executed:%s of %d\n" msgstr "" -#: gcov.c:1468 +#: gcov.c:1470 #, c-format msgid "No calls\n" msgstr "" -#: gcov.c:1628 +#: gcov.c:1630 #, c-format msgid "%s:no lines for '%s'\n" msgstr "" -#: gcov.c:1823 +#: gcov.c:1825 #, c-format msgid "call %2d returned %s\n" msgstr "" -#: gcov.c:1828 +#: gcov.c:1830 #, c-format msgid "call %2d never executed\n" msgstr "" -#: gcov.c:1833 +#: gcov.c:1835 #, c-format msgid "branch %2d taken %s%s\n" msgstr "" -#: gcov.c:1837 +#: gcov.c:1839 #, c-format msgid "branch %2d never executed\n" msgstr "" -#: gcov.c:1842 +#: gcov.c:1844 #, c-format msgid "unconditional %2d taken %s\n" msgstr "" -#: gcov.c:1845 +#: gcov.c:1847 #, c-format msgid "unconditional %2d never executed\n" msgstr "" -#: gcov.c:1881 +#: gcov.c:1883 #, c-format msgid "%s:cannot open source file\n" msgstr "" -#: gcse.c:3944 +#: gcse.c:3967 msgid "PRE disabled" msgstr "" -#: gcse.c:4425 +#: gcse.c:4448 msgid "GCSE disabled" msgstr "" -#: gcse.c:4942 +#: gcse.c:4965 msgid "const/copy propagation disabled" msgstr "" @@ -1775,155 +1827,195 @@ msgstr "" msgid "'" msgstr "" -#: langhooks.c:362 +#: langhooks.c:355 msgid "At top level:" msgstr "" -#: langhooks.c:382 cp/error.c:2661 +#: langhooks.c:375 cp/error.c:2710 #, c-format msgid "In member function %qs" msgstr "" -#: langhooks.c:386 cp/error.c:2664 +#: langhooks.c:379 cp/error.c:2713 #, c-format msgid "In function %qs" msgstr "" -#: langhooks.c:437 cp/error.c:2620 +#: langhooks.c:430 cp/error.c:2663 #, c-format msgid " inlined from %qs at %s:%d:%d" msgstr "" -#: langhooks.c:442 cp/error.c:2625 +#: langhooks.c:435 cp/error.c:2668 #, c-format msgid " inlined from %qs at %s:%d" msgstr "" -#: langhooks.c:448 cp/error.c:2631 +#: langhooks.c:441 cp/error.c:2674 #, c-format msgid " inlined from %qs" msgstr "" -#: loop-iv.c:2965 tree-ssa-loop-niter.c:1871 +#: loop-iv.c:2966 tree-ssa-loop-niter.c:1874 msgid "assuming that the loop is not infinite" msgstr "" -#: loop-iv.c:2966 tree-ssa-loop-niter.c:1872 +#: loop-iv.c:2967 tree-ssa-loop-niter.c:1875 msgid "cannot optimize possibly infinite loops" msgstr "" -#: loop-iv.c:2974 tree-ssa-loop-niter.c:1876 +#: loop-iv.c:2975 tree-ssa-loop-niter.c:1879 msgid "assuming that the loop counter does not overflow" msgstr "" -#: loop-iv.c:2975 tree-ssa-loop-niter.c:1877 +#: loop-iv.c:2976 tree-ssa-loop-niter.c:1880 msgid "cannot optimize loop, the loop counter may overflow" msgstr "" +#: lto-wrapper.c:176 +#, c-format +msgid "%s terminated with signal %d [%s], core dumped" +msgstr "" + +#: lto-wrapper.c:179 +#, c-format +msgid "%s terminated with signal %d [%s]" +msgstr "" + +#: lto-wrapper.c:184 collect2.c:1964 +#, gcc-internal-format +msgid "%s returned %d exit status" +msgstr "" + +#: lto-wrapper.c:199 +#, c-format +msgid "deleting LTRANS file %s" +msgstr "" + +#: lto-wrapper.c:221 +#, c-format +msgid "failed to open %s" +msgstr "" + +#: lto-wrapper.c:226 +#, c-format +msgid "could not write to temporary file %s" +msgstr "" + +#: lto-wrapper.c:288 lto-wrapper.c:345 +#, c-format +msgid "invalid LTO mode" +msgstr "" + +#: lto-wrapper.c:336 +#, c-format +msgid "fopen: %s" +msgstr "" + #. What to print when a switch has no documentation. -#: opts.c:339 +#: opts.c:341 msgid "This switch lacks documentation" msgstr "" -#: opts.c:1265 +#: opts.c:1289 msgid "[enabled]" msgstr "" -#: opts.c:1265 +#: opts.c:1289 msgid "[disabled]" msgstr "" -#: opts.c:1280 +#: opts.c:1304 #, c-format msgid " No options with the desired characteristics were found\n" msgstr "" -#: opts.c:1289 +#: opts.c:1313 #, c-format msgid "" " None found. Use --help=%s to show *all* the options supported by the %s " "front-end\n" msgstr "" -#: opts.c:1295 +#: opts.c:1319 #, c-format msgid "" " All options with the desired characteristics have already been displayed\n" msgstr "" -#: opts.c:1349 +#: opts.c:1373 msgid "The following options are target specific" msgstr "" -#: opts.c:1352 +#: opts.c:1376 msgid "The following options control compiler warning messages" msgstr "" -#: opts.c:1355 +#: opts.c:1379 msgid "The following options control optimizations" msgstr "" -#: opts.c:1358 opts.c:1397 +#: opts.c:1382 opts.c:1421 msgid "The following options are language-independent" msgstr "" -#: opts.c:1361 +#: opts.c:1385 msgid "The --param option recognizes the following as parameters" msgstr "" -#: opts.c:1367 +#: opts.c:1391 msgid "The following options are specific to just the language " msgstr "" -#: opts.c:1369 +#: opts.c:1393 msgid "The following options are supported by the language " msgstr "" -#: opts.c:1380 +#: opts.c:1404 msgid "The following options are not documented" msgstr "" -#: opts.c:1382 +#: opts.c:1406 msgid "The following options take separate arguments" msgstr "" -#: opts.c:1384 +#: opts.c:1408 msgid "The following options take joined arguments" msgstr "" -#: opts.c:1395 +#: opts.c:1419 msgid "The following options are language-related" msgstr "" -#: opts.c:1555 +#: opts.c:1579 #, c-format msgid "warning: --help argument %.*s is ambiguous, please be more specific\n" msgstr "" -#: opts.c:1563 +#: opts.c:1587 #, c-format msgid "warning: unrecognized argument to --help= option: %.*s\n" msgstr "" -#: reload.c:3780 +#: reload.c:3813 msgid "unable to generate reloads for:" msgstr "" -#: reload1.c:2094 +#: reload1.c:2151 msgid "this is the insn:" msgstr "" #. It's the compiler's fault. -#: reload1.c:5619 +#: reload1.c:5671 msgid "could not find a spill register" msgstr "" #. It's the compiler's fault. -#: reload1.c:7597 +#: reload1.c:7656 msgid "VOIDmode on an output" msgstr "" -#: reload1.c:8352 +#: reload1.c:8411 msgid "Failure trying to reload:" msgstr "" @@ -1981,70 +2073,75 @@ msgstr "" msgid "collect: relinking\n" msgstr "" -#: toplev.c:606 +#: toplev.c:621 #, c-format msgid "unrecoverable error" msgstr "" -#: toplev.c:1168 +#: toplev.c:1196 #, c-format msgid "" "%s%s%s %sversion %s (%s)\n" "%s\tcompiled by GNU C version %s, " msgstr "" -#: toplev.c:1170 +#: toplev.c:1198 #, c-format msgid "%s%s%s %sversion %s (%s) compiled by CC, " msgstr "" -#: toplev.c:1174 +#: toplev.c:1203 #, c-format -msgid "GMP version %s, MPFR version %s.\n" +msgid "GMP version %s, MPFR version %s, MPC version %s\n" msgstr "" -#: toplev.c:1176 +#: toplev.c:1206 +#, c-format +msgid "GMP version %s, MPFR version %s\n" +msgstr "" + +#: toplev.c:1209 #, c-format msgid "%s%swarning: %s header version %s differs from library version %s.\n" msgstr "" -#: toplev.c:1178 +#: toplev.c:1211 #, c-format msgid "" "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" msgstr "" -#: toplev.c:1336 +#: toplev.c:1380 msgid "options passed: " msgstr "" -#: toplev.c:1370 +#: toplev.c:1414 msgid "options enabled: " msgstr "" -#: toplev.c:1505 +#: toplev.c:1549 #, c-format msgid "created and used with differing settings of '%s'" msgstr "" -#: toplev.c:1507 +#: toplev.c:1551 msgid "out of memory" msgstr "" -#: toplev.c:1522 +#: toplev.c:1566 msgid "created and used with different settings of -fpic" msgstr "" -#: toplev.c:1524 +#: toplev.c:1568 msgid "created and used with different settings of -fpie" msgstr "" -#: tree-vrp.c:6517 +#: tree-vrp.c:6516 msgid "" "assuming signed overflow does not occur when simplifying && or || to & or |" msgstr "" -#: tree-vrp.c:6521 +#: tree-vrp.c:6520 msgid "" "assuming signed overflow does not occur when simplifying ==, != or ! to " "identity or ^" @@ -2167,956 +2264,985 @@ msgstr "" msgid "permerror: " msgstr "" -#: params.def:47 -msgid "" -"The maximum structure size (in bytes) for which GCC will use by-element " -"copies" -msgstr "" - -#: params.def:56 -msgid "" -"The maximum number of structure fields for which GCC will use by-element " -"copies" -msgstr "" - -#: params.def:68 -msgid "" -"The threshold ratio between instantiated fields and the total structure size" -msgstr "" - -#: params.def:78 +#: params.def:48 msgid "The threshold ratio between current and hottest structure counts" msgstr "" -#: params.def:85 +#: params.def:55 msgid "Maximal esitmated outcome of branch considered predictable" msgstr "" -#: params.def:102 +#: params.def:72 msgid "" "The maximum number of instructions in a single function eligible for inlining" msgstr "" -#: params.def:114 +#: params.def:84 msgid "The maximum number of instructions when automatically inlining" msgstr "" -#: params.def:119 +#: params.def:89 msgid "" "The maximum number of instructions inline function can grow to via recursive " "inlining" msgstr "" -#: params.def:124 +#: params.def:94 msgid "" "The maximum number of instructions non-inline function can grow to via " "recursive inlining" msgstr "" -#: params.def:129 +#: params.def:99 msgid "The maximum depth of recursive inlining for inline functions" msgstr "" -#: params.def:134 +#: params.def:104 msgid "The maximum depth of recursive inlining for non-inline functions" msgstr "" -#: params.def:139 +#: params.def:109 msgid "" "Inline recursively only when the probability of call being executed exceeds " "the parameter" msgstr "" -#: params.def:146 +#: params.def:117 +msgid "" +"The maximum number of nested indirect inlining performed by early inliner" +msgstr "" + +#: params.def:124 msgid "" "If -fvariable-expansion-in-unroller is used, the maximum number of times " "that an individual variable will be expanded during loop unrolling" msgstr "" -#: params.def:152 +#: params.def:130 msgid "" "If -ftree-vectorize is used, the minimal loop bound of a loop to be " "considered for vectorization" msgstr "" -#: params.def:163 +#: params.def:141 msgid "The maximum number of instructions to consider to fill a delay slot" msgstr "" -#: params.def:174 +#: params.def:152 msgid "" "The maximum number of instructions to consider to find accurate live " "register information" msgstr "" -#: params.def:184 +#: params.def:162 msgid "The maximum length of scheduling's pending operations list" msgstr "" -#: params.def:189 +#: params.def:167 msgid "The size of function body to be considered large" msgstr "" -#: params.def:193 +#: params.def:171 msgid "Maximal growth due to inlining of large function (in percent)" msgstr "" -#: params.def:197 +#: params.def:175 msgid "The size of translation unit to be considered large" msgstr "" -#: params.def:201 +#: params.def:179 msgid "" "how much can given compilation unit grow because of the inlining (in percent)" msgstr "" -#: params.def:205 +#: params.def:183 msgid "" "how much can given compilation unit grow because of the interprocedural " "constant propagation (in percent)" msgstr "" -#: params.def:209 -msgid "expense of call operation relative to ordinary arithmetic operations" +#: params.def:187 +msgid "" +"maximal estimated growth of function body caused by early inlining of single " +"call" msgstr "" -#: params.def:213 +#: params.def:191 msgid "The size of stack frame to be considered large" msgstr "" -#: params.def:217 +#: params.def:195 msgid "Maximal stack frame growth due to inlining (in percent)" msgstr "" -#: params.def:224 +#: params.def:202 msgid "The maximum amount of memory to be allocated by GCSE" msgstr "" -#: params.def:235 +#: params.def:213 msgid "" "The threshold ratio for performing partial redundancy elimination after " "reload" msgstr "" -#: params.def:242 +#: params.def:220 msgid "" "The threshold ratio of critical edges execution count that permit performing " "redundancy elimination after reload" msgstr "" -#: params.def:253 +#: params.def:231 msgid "The maximum number of instructions to consider to unroll in a loop" msgstr "" -#: params.def:259 +#: params.def:237 msgid "" "The maximum number of instructions to consider to unroll in a loop on average" msgstr "" -#: params.def:264 +#: params.def:242 msgid "The maximum number of unrollings of a single loop" msgstr "" -#: params.def:269 +#: params.def:247 msgid "The maximum number of insns of a peeled loop" msgstr "" -#: params.def:274 +#: params.def:252 msgid "The maximum number of peelings of a single loop" msgstr "" -#: params.def:279 +#: params.def:257 msgid "The maximum number of insns of a completely peeled loop" msgstr "" -#: params.def:284 +#: params.def:262 msgid "" "The maximum number of peelings of a single loop that is peeled completely" msgstr "" -#: params.def:289 +#: params.def:267 msgid "The maximum number of insns of a peeled loop that rolls only once" msgstr "" -#: params.def:295 +#: params.def:273 msgid "The maximum number of insns of an unswitched loop" msgstr "" -#: params.def:300 +#: params.def:278 msgid "The maximum number of unswitchings in a single loop" msgstr "" -#: params.def:307 +#: params.def:285 msgid "" "Bound on the number of iterations the brute force # of iterations analysis " "algorithm evaluates" msgstr "" -#: params.def:313 +#: params.def:291 msgid "Bound on the cost of an expression to compute the number of iterations" msgstr "" -#: params.def:319 +#: params.def:297 msgid "" "A factor for tuning the upper bound that swing modulo scheduler uses for " "scheduling a loop" msgstr "" -#: params.def:323 +#: params.def:301 msgid "" "The number of cycles the swing modulo scheduler considers when checking " "conflicts using DFA" msgstr "" -#: params.def:327 +#: params.def:305 msgid "" "A threshold on the average loop count considered by the swing modulo " "scheduler" msgstr "" -#: params.def:332 +#: params.def:310 msgid "" "Select fraction of the maximal count of repetitions of basic block in " "program given basic block needs to have to be considered hot" msgstr "" -#: params.def:336 +#: params.def:314 msgid "" "Select fraction of the maximal frequency of executions of basic block in " "function given basic block needs to have to be considered hot" msgstr "" -#: params.def:341 +#: params.def:319 msgid "" "Select fraction of the maximal frequency of executions of basic block in " "function given basic block get alignment" msgstr "" -#: params.def:346 +#: params.def:324 msgid "" "Loops iterating at least selected number of iterations will get loop " "alignement." msgstr "" -#: params.def:362 +#: params.def:340 msgid "The maximum number of loop iterations we predict statically" msgstr "" -#: params.def:366 +#: params.def:344 msgid "" "The percentage of function, weighted by execution frequency, that must be " "covered by trace formation. Used when profile feedback is available" msgstr "" -#: params.def:370 +#: params.def:348 msgid "" "The percentage of function, weighted by execution frequency, that must be " "covered by trace formation. Used when profile feedback is not available" msgstr "" -#: params.def:374 +#: params.def:352 msgid "Maximal code growth caused by tail duplication (in percent)" msgstr "" -#: params.def:378 +#: params.def:356 msgid "" "Stop reverse growth if the reverse probability of best edge is less than " "this threshold (in percent)" msgstr "" -#: params.def:382 +#: params.def:360 msgid "" "Stop forward growth if the probability of best edge is less than this " "threshold (in percent). Used when profile feedback is available" msgstr "" -#: params.def:386 +#: params.def:364 msgid "" "Stop forward growth if the probability of best edge is less than this " "threshold (in percent). Used when profile feedback is not available" msgstr "" -#: params.def:392 +#: params.def:370 msgid "The maximum number of incoming edges to consider for crossjumping" msgstr "" -#: params.def:398 +#: params.def:376 msgid "" "The minimum number of matching instructions to consider for crossjumping" msgstr "" -#: params.def:404 +#: params.def:382 msgid "The maximum expansion factor when copying basic blocks" msgstr "" -#: params.def:410 +#: params.def:388 msgid "" "The maximum number of insns to duplicate when unfactoring computed gotos" msgstr "" -#: params.def:416 +#: params.def:394 msgid "The maximum length of path considered in cse" msgstr "" -#: params.def:420 +#: params.def:398 msgid "The maximum instructions CSE process before flushing" msgstr "" -#: params.def:427 +#: params.def:405 msgid "" "The minimum cost of an expensive expression in the loop invariant motion" msgstr "" -#: params.def:436 +#: params.def:414 msgid "" "Bound on number of candidates below that all candidates are considered in iv " "optimizations" msgstr "" -#: params.def:444 +#: params.def:422 msgid "Bound on number of iv uses in loop optimized in iv optimizations" msgstr "" -#: params.def:452 +#: params.def:430 msgid "" "If number of candidates in the set is smaller, we always try to remove " "unused ivs during its optimization" msgstr "" -#: params.def:457 +#: params.def:435 msgid "Bound on size of expressions used in the scalar evolutions analyzer" msgstr "" -#: params.def:462 +#: params.def:440 msgid "Bound on the number of variables in Omega constraint systems" msgstr "" -#: params.def:467 +#: params.def:445 msgid "Bound on the number of inequalities in Omega constraint systems" msgstr "" -#: params.def:472 +#: params.def:450 msgid "Bound on the number of equalities in Omega constraint systems" msgstr "" -#: params.def:477 +#: params.def:455 msgid "Bound on the number of wild cards in Omega constraint systems" msgstr "" -#: params.def:482 +#: params.def:460 msgid "Bound on the size of the hash table in Omega constraint systems" msgstr "" -#: params.def:487 +#: params.def:465 msgid "Bound on the number of keys in Omega constraint systems" msgstr "" -#: params.def:492 +#: params.def:470 msgid "" "When set to 1, use expensive methods to eliminate all redundant constraints" msgstr "" -#: params.def:497 +#: params.def:475 msgid "" "Bound on number of runtime checks inserted by the vectorizer's loop " "versioning for alignment check" msgstr "" -#: params.def:502 +#: params.def:480 msgid "" "Bound on number of runtime checks inserted by the vectorizer's loop " "versioning for alias check" msgstr "" -#: params.def:507 +#: params.def:485 msgid "The maximum memory locations recorded by cselib" msgstr "" -#: params.def:520 +#: params.def:498 msgid "" "Minimum heap expansion to trigger garbage collection, as a percentage of the " "total size of the heap" msgstr "" -#: params.def:525 +#: params.def:503 msgid "Minimum heap size before we start collecting garbage, in kilobytes" msgstr "" -#: params.def:533 +#: params.def:511 msgid "" "The maximum number of instructions to search backward when looking for " "equivalent reload" msgstr "" -#: params.def:538 params.def:548 +#: params.def:516 params.def:526 msgid "" "The maximum number of blocks in a region to be considered for interblock " "scheduling" msgstr "" -#: params.def:543 params.def:553 +#: params.def:521 params.def:531 msgid "" "The maximum number of insns in a region to be considered for interblock " "scheduling" msgstr "" -#: params.def:558 +#: params.def:536 msgid "" "The minimum probability of reaching a source block for interblock " "speculative scheduling" msgstr "" -#: params.def:563 +#: params.def:541 msgid "The maximum number of iterations through CFG to extend regions" msgstr "" -#: params.def:568 +#: params.def:546 msgid "" "The maximum conflict delay for an insn to be considered for speculative " "motion" msgstr "" -#: params.def:573 +#: params.def:551 msgid "" "The minimal probability of speculation success (in percents), so that " "speculative insn will be scheduled." msgstr "" -#: params.def:578 +#: params.def:556 msgid "The maximum size of the lookahead window of selective scheduling" msgstr "" -#: params.def:583 +#: params.def:561 msgid "Maximum number of times that an insn could be scheduled" msgstr "" -#: params.def:588 +#: params.def:566 msgid "" "Maximum number of instructions in the ready list that are considered " "eligible for renaming" msgstr "" -#: params.def:593 +#: params.def:571 msgid "Minimal distance between possibly conflicting store and load" msgstr "" -#: params.def:598 +#: params.def:576 msgid "" "The maximum number of RTL nodes that can be recorded as combiner's last value" msgstr "" -#: params.def:606 +#: params.def:584 msgid "The upper bound for sharing integer constants" msgstr "" -#: params.def:625 +#: params.def:603 msgid "" "Minimum number of virtual mappings to consider switching to full virtual " "renames" msgstr "" -#: params.def:630 +#: params.def:608 msgid "" "Ratio between virtual mappings and virtual symbols to do full virtual renames" msgstr "" -#: params.def:635 +#: params.def:613 msgid "" "The lower bound for a buffer to be considered for stack smashing protection" msgstr "" -#: params.def:653 +#: params.def:631 msgid "" "Maximum number of statements allowed in a block that needs to be duplicated " "when threading jumps" msgstr "" -#: params.def:662 +#: params.def:640 msgid "" "Maximum number of fields in a structure before pointer analysis treats the " "structure as a single variable" msgstr "" -#: params.def:667 +#: params.def:645 msgid "" "The maximum number of instructions ready to be issued to be considered by " "the scheduler during the first scheduling pass" msgstr "" -#: params.def:677 +#: params.def:655 msgid "The number of insns executed before prefetch is completed" msgstr "" -#: params.def:684 +#: params.def:662 msgid "The number of prefetches that can run at the same time" msgstr "" -#: params.def:691 +#: params.def:669 msgid "The size of L1 cache" msgstr "" -#: params.def:698 +#: params.def:676 msgid "The size of L1 cache line" msgstr "" -#: params.def:705 +#: params.def:683 msgid "The size of L2 cache" msgstr "" -#: params.def:716 +#: params.def:694 msgid "Whether to use canonical types" msgstr "" -#: params.def:721 +#: params.def:699 msgid "" "Maximum length of partial antic set when performing tree pre optimization" msgstr "" -#: params.def:731 +#: params.def:709 msgid "Maximum size of a SCC before SCCVN stops processing a function" msgstr "" -#: params.def:736 +#: params.def:714 msgid "max loops number for regional RA" msgstr "" -#: params.def:741 +#: params.def:719 msgid "max size of conflict table in MB" msgstr "" -#: params.def:749 +#: params.def:724 +msgid "" +"The number of registers in each class kept unused by loop invariant motion" +msgstr "" + +#: params.def:732 msgid "" "The maximum ratio between array size and switch branches for a switch " "conversion to take place" msgstr "" -#: params.def:757 +#: params.def:740 msgid "max basic blocks number in loop for loop invariant motion" msgstr "" -#: config/alpha/alpha.c:5054 +#: params.def:746 +msgid "" +"Maximum number of instructions in basic block to be considered for SLP " +"vectorization" +msgstr "" + +#: params.def:751 +msgid "" +"min. ratio of insns to prefetches to enable prefetching for a loop with an " +"unknown trip count" +msgstr "" + +#: params.def:757 +msgid "min. ratio of insns to mem ops to enable prefetching in a loop" +msgstr "" + +#: params.def:764 +msgid "The minimum UID to be used for a nondebug insn" +msgstr "" + +#: params.def:769 +msgid "" +"maximum allowed growth of size of new parameters ipa-sra replaces a pointer " +"to an aggregate with" +msgstr "" + +#: config/alpha/alpha.c:5131 #, c-format msgid "invalid %%H value" msgstr "" -#: config/alpha/alpha.c:5075 config/bfin/bfin.c:1631 +#: config/alpha/alpha.c:5152 config/bfin/bfin.c:1682 #, c-format msgid "invalid %%J value" msgstr "" -#: config/alpha/alpha.c:5105 config/ia64/ia64.c:4765 +#: config/alpha/alpha.c:5182 config/ia64/ia64.c:4978 #, c-format msgid "invalid %%r value" msgstr "" -#: config/alpha/alpha.c:5115 config/ia64/ia64.c:4719 -#: config/rs6000/rs6000.c:12250 config/xtensa/xtensa.c:2242 +#: config/alpha/alpha.c:5192 config/ia64/ia64.c:4932 +#: config/rs6000/rs6000.c:14541 config/xtensa/xtensa.c:2253 #, c-format msgid "invalid %%R value" msgstr "" -#: config/alpha/alpha.c:5121 config/rs6000/rs6000.c:12169 -#: config/xtensa/xtensa.c:2209 +#: config/alpha/alpha.c:5198 config/rs6000/rs6000.c:14460 +#: config/xtensa/xtensa.c:2220 #, c-format msgid "invalid %%N value" msgstr "" -#: config/alpha/alpha.c:5129 config/rs6000/rs6000.c:12197 +#: config/alpha/alpha.c:5206 config/rs6000/rs6000.c:14488 #, c-format msgid "invalid %%P value" msgstr "" -#: config/alpha/alpha.c:5137 +#: config/alpha/alpha.c:5214 #, c-format msgid "invalid %%h value" msgstr "" -#: config/alpha/alpha.c:5145 config/xtensa/xtensa.c:2235 +#: config/alpha/alpha.c:5222 config/xtensa/xtensa.c:2246 #, c-format msgid "invalid %%L value" msgstr "" -#: config/alpha/alpha.c:5184 config/rs6000/rs6000.c:12151 +#: config/alpha/alpha.c:5261 config/rs6000/rs6000.c:14442 #, c-format msgid "invalid %%m value" msgstr "" -#: config/alpha/alpha.c:5192 config/rs6000/rs6000.c:12159 +#: config/alpha/alpha.c:5269 config/rs6000/rs6000.c:14450 #, c-format msgid "invalid %%M value" msgstr "" -#: config/alpha/alpha.c:5236 +#: config/alpha/alpha.c:5313 #, c-format msgid "invalid %%U value" msgstr "" -#: config/alpha/alpha.c:5248 config/alpha/alpha.c:5262 -#: config/rs6000/rs6000.c:12258 +#: config/alpha/alpha.c:5325 config/alpha/alpha.c:5339 +#: config/rs6000/rs6000.c:14549 #, c-format msgid "invalid %%s value" msgstr "" -#: config/alpha/alpha.c:5285 +#: config/alpha/alpha.c:5362 #, c-format msgid "invalid %%C value" msgstr "" -#: config/alpha/alpha.c:5322 config/rs6000/rs6000.c:11986 -#: config/rs6000/rs6000.c:12005 +#: config/alpha/alpha.c:5399 config/rs6000/rs6000.c:14296 #, c-format msgid "invalid %%E value" msgstr "" -#: config/alpha/alpha.c:5347 config/alpha/alpha.c:5395 +#: config/alpha/alpha.c:5424 config/alpha/alpha.c:5472 #, c-format msgid "unknown relocation unspec" msgstr "" -#: config/alpha/alpha.c:5356 config/crx/crx.c:1081 -#: config/rs6000/rs6000.c:12589 config/spu/spu.c:1614 +#: config/alpha/alpha.c:5433 config/crx/crx.c:1092 +#: config/rs6000/rs6000.c:14903 config/spu/spu.c:1647 #, c-format msgid "invalid %%xn code" msgstr "" -#: config/arc/arc.c:1729 config/m32r/m32r.c:1820 +#: config/arc/arc.c:1724 config/m32r/m32r.c:1980 #, c-format msgid "invalid operand to %%R code" msgstr "" -#: config/arc/arc.c:1761 config/m32r/m32r.c:1843 +#: config/arc/arc.c:1756 config/m32r/m32r.c:2003 #, c-format msgid "invalid operand to %%H/%%L code" msgstr "" -#: config/arc/arc.c:1783 config/m32r/m32r.c:1914 +#: config/arc/arc.c:1778 config/m32r/m32r.c:2074 #, c-format msgid "invalid operand to %%U code" msgstr "" -#: config/arc/arc.c:1794 +#: config/arc/arc.c:1789 #, c-format msgid "invalid operand to %%V code" msgstr "" #. Unknown flag. #. Undocumented flag. -#: config/arc/arc.c:1801 config/m32r/m32r.c:1941 config/sparc/sparc.c:7048 +#: config/arc/arc.c:1796 config/m32r/m32r.c:2101 config/sparc/sparc.c:7184 #, c-format msgid "invalid operand output code" msgstr "" -#: config/arm/arm.c:13323 config/arm/arm.c:13341 +#: config/arm/arm.c:14627 config/arm/arm.c:14645 #, c-format msgid "predicated Thumb instruction" msgstr "" -#: config/arm/arm.c:13329 +#: config/arm/arm.c:14633 #, c-format msgid "predicated instruction in conditional sequence" msgstr "" -#: config/arm/arm.c:13499 +#: config/arm/arm.c:14803 #, c-format msgid "invalid shift operand" msgstr "" -#: config/arm/arm.c:13546 config/arm/arm.c:13556 config/arm/arm.c:13566 -#: config/arm/arm.c:13576 config/arm/arm.c:13586 config/arm/arm.c:13625 -#: config/arm/arm.c:13643 config/arm/arm.c:13678 config/arm/arm.c:13697 -#: config/arm/arm.c:13712 config/arm/arm.c:13740 config/arm/arm.c:13747 -#: config/arm/arm.c:13755 config/arm/arm.c:13776 config/arm/arm.c:13783 -#: config/bfin/bfin.c:1644 config/bfin/bfin.c:1651 config/bfin/bfin.c:1658 -#: config/bfin/bfin.c:1665 config/bfin/bfin.c:1674 config/bfin/bfin.c:1681 -#: config/bfin/bfin.c:1688 config/bfin/bfin.c:1695 +#: config/arm/arm.c:14850 config/arm/arm.c:14860 config/arm/arm.c:14870 +#: config/arm/arm.c:14880 config/arm/arm.c:14890 config/arm/arm.c:14929 +#: config/arm/arm.c:14947 config/arm/arm.c:14982 config/arm/arm.c:15001 +#: config/arm/arm.c:15016 config/arm/arm.c:15044 config/arm/arm.c:15051 +#: config/arm/arm.c:15059 config/arm/arm.c:15080 config/arm/arm.c:15087 +#: config/arm/arm.c:15178 config/arm/arm.c:15185 config/bfin/bfin.c:1695 +#: config/bfin/bfin.c:1702 config/bfin/bfin.c:1709 config/bfin/bfin.c:1716 +#: config/bfin/bfin.c:1725 config/bfin/bfin.c:1732 config/bfin/bfin.c:1739 +#: config/bfin/bfin.c:1746 #, c-format msgid "invalid operand for code '%c'" msgstr "" -#: config/arm/arm.c:13638 +#: config/arm/arm.c:14942 #, c-format msgid "instruction never executed" msgstr "" -#: config/arm/arm.c:13850 +#: config/arm/arm.c:15197 #, c-format msgid "missing operand" msgstr "" -#: config/avr/avr.c:1212 +#: config/arm/arm.c:17472 +msgid "function parameters cannot have __fp16 type" +msgstr "" + +#: config/arm/arm.c:17482 +msgid "functions cannot return __fp16 type" +msgstr "" + +#: config/avr/avr.c:1083 #, c-format msgid "address operand requires constraint for X, Y, or Z register" msgstr "" -#: config/avr/avr.c:1324 +#: config/avr/avr.c:1195 msgid "bad address, not (reg+disp):" msgstr "" -#: config/avr/avr.c:1331 +#: config/avr/avr.c:1202 msgid "bad address, not post_inc or pre_dec:" msgstr "" -#: config/avr/avr.c:1342 +#: config/avr/avr.c:1213 msgid "internal compiler error. Bad address:" msgstr "" -#: config/avr/avr.c:1355 +#: config/avr/avr.c:1226 msgid "internal compiler error. Unknown mode:" msgstr "" -#: config/avr/avr.c:1950 config/avr/avr.c:2638 +#: config/avr/avr.c:1813 config/avr/avr.c:2501 msgid "invalid insn:" msgstr "" -#: config/avr/avr.c:1989 config/avr/avr.c:2075 config/avr/avr.c:2124 -#: config/avr/avr.c:2152 config/avr/avr.c:2247 config/avr/avr.c:2416 -#: config/avr/avr.c:2677 config/avr/avr.c:2789 +#: config/avr/avr.c:1852 config/avr/avr.c:1938 config/avr/avr.c:1987 +#: config/avr/avr.c:2015 config/avr/avr.c:2110 config/avr/avr.c:2279 +#: config/avr/avr.c:2540 config/avr/avr.c:2652 msgid "incorrect insn:" msgstr "" -#: config/avr/avr.c:2171 config/avr/avr.c:2332 config/avr/avr.c:2487 -#: config/avr/avr.c:2855 +#: config/avr/avr.c:2034 config/avr/avr.c:2195 config/avr/avr.c:2350 +#: config/avr/avr.c:2718 msgid "unknown move insn:" msgstr "" -#: config/avr/avr.c:3085 +#: config/avr/avr.c:2948 msgid "bad shift insn:" msgstr "" -#: config/avr/avr.c:3201 config/avr/avr.c:3621 config/avr/avr.c:3979 +#: config/avr/avr.c:3064 config/avr/avr.c:3484 config/avr/avr.c:3842 msgid "internal compiler error. Incorrect shift:" msgstr "" -#: config/bfin/bfin.c:1593 +#: config/bfin/bfin.c:1644 #, c-format msgid "invalid %%j value" msgstr "" -#: config/bfin/bfin.c:1786 +#: config/bfin/bfin.c:1837 #, c-format msgid "invalid const_double operand" msgstr "" -#: config/cris/cris.c:504 c-typeck.c:5217 c-typeck.c:5233 c-typeck.c:5250 -#: final.c:3010 final.c:3012 gcc.c:4940 loop-iv.c:2967 loop-iv.c:2976 -#: rtl-error.c:105 toplev.c:610 tree-ssa-loop-niter.c:1882 cp/typeck.c:4743 -#: java/expr.c:411 +#: config/cris/cris.c:520 config/moxie/moxie.c:91 c-typeck.c:5415 +#: c-typeck.c:5431 c-typeck.c:5448 final.c:3090 final.c:3092 fold-const.c:996 +#: gcc.c:5219 loop-iv.c:2968 loop-iv.c:2977 rtl-error.c:105 toplev.c:625 +#: tree-ssa-loop-niter.c:1883 tree-vrp.c:5726 cp/typeck.c:4813 java/expr.c:411 #, gcc-internal-format msgid "%s" msgstr "" -#: config/cris/cris.c:555 +#: config/cris/cris.c:571 msgid "unexpected index-type in cris_print_index" msgstr "" -#: config/cris/cris.c:572 +#: config/cris/cris.c:588 msgid "unexpected base-type in cris_print_base" msgstr "" -#: config/cris/cris.c:688 +#: config/cris/cris.c:704 msgid "invalid operand for 'b' modifier" msgstr "" -#: config/cris/cris.c:705 +#: config/cris/cris.c:721 msgid "invalid operand for 'o' modifier" msgstr "" -#: config/cris/cris.c:724 +#: config/cris/cris.c:740 msgid "invalid operand for 'O' modifier" msgstr "" -#: config/cris/cris.c:757 +#: config/cris/cris.c:773 msgid "invalid operand for 'p' modifier" msgstr "" -#: config/cris/cris.c:796 +#: config/cris/cris.c:812 msgid "invalid operand for 'z' modifier" msgstr "" -#: config/cris/cris.c:860 config/cris/cris.c:894 +#: config/cris/cris.c:876 config/cris/cris.c:910 msgid "invalid operand for 'H' modifier" msgstr "" -#: config/cris/cris.c:870 +#: config/cris/cris.c:886 msgid "bad register" msgstr "" -#: config/cris/cris.c:914 +#: config/cris/cris.c:930 msgid "invalid operand for 'e' modifier" msgstr "" -#: config/cris/cris.c:931 +#: config/cris/cris.c:947 msgid "invalid operand for 'm' modifier" msgstr "" -#: config/cris/cris.c:956 +#: config/cris/cris.c:972 msgid "invalid operand for 'A' modifier" msgstr "" -#: config/cris/cris.c:979 +#: config/cris/cris.c:995 msgid "invalid operand for 'D' modifier" msgstr "" -#: config/cris/cris.c:993 +#: config/cris/cris.c:1009 msgid "invalid operand for 'T' modifier" msgstr "" -#: config/cris/cris.c:1013 +#: config/cris/cris.c:1029 config/moxie/moxie.c:161 msgid "invalid operand modifier letter" msgstr "" -#: config/cris/cris.c:1070 +#: config/cris/cris.c:1086 msgid "unexpected multiplicative operand" msgstr "" -#: config/cris/cris.c:1090 +#: config/cris/cris.c:1106 config/moxie/moxie.c:186 msgid "unexpected operand" msgstr "" -#: config/cris/cris.c:1123 config/cris/cris.c:1133 +#: config/cris/cris.c:1139 config/cris/cris.c:1149 msgid "unrecognized address" msgstr "" -#: config/cris/cris.c:2231 +#: config/cris/cris.c:2257 msgid "unrecognized supposed constant" msgstr "" -#: config/cris/cris.c:2660 config/cris/cris.c:2724 +#: config/cris/cris.c:2686 config/cris/cris.c:2750 msgid "unexpected side-effects in address" msgstr "" #. Can't possibly get a GOT-needing-fixup for a function-call, #. right? -#: config/cris/cris.c:3561 +#: config/cris/cris.c:3587 msgid "Unidentifiable call op" msgstr "" -#: config/cris/cris.c:3613 +#: config/cris/cris.c:3639 #, c-format msgid "PIC register isn't set up" msgstr "" -#: config/fr30/fr30.c:464 +#: config/fr30/fr30.c:481 #, c-format msgid "fr30_print_operand_address: unhandled address" msgstr "" -#: config/fr30/fr30.c:488 +#: config/fr30/fr30.c:505 #, c-format msgid "fr30_print_operand: unrecognized %%p code" msgstr "" -#: config/fr30/fr30.c:508 +#: config/fr30/fr30.c:525 #, c-format msgid "fr30_print_operand: unrecognized %%b code" msgstr "" -#: config/fr30/fr30.c:529 +#: config/fr30/fr30.c:546 #, c-format msgid "fr30_print_operand: unrecognized %%B code" msgstr "" -#: config/fr30/fr30.c:537 +#: config/fr30/fr30.c:554 #, c-format msgid "fr30_print_operand: invalid operand to %%A code" msgstr "" -#: config/fr30/fr30.c:554 +#: config/fr30/fr30.c:571 #, c-format msgid "fr30_print_operand: invalid %%x code" msgstr "" -#: config/fr30/fr30.c:561 +#: config/fr30/fr30.c:578 #, c-format msgid "fr30_print_operand: invalid %%F code" msgstr "" -#: config/fr30/fr30.c:578 +#: config/fr30/fr30.c:595 #, c-format msgid "fr30_print_operand: unknown code" msgstr "" -#: config/fr30/fr30.c:606 config/fr30/fr30.c:615 config/fr30/fr30.c:626 -#: config/fr30/fr30.c:639 +#: config/fr30/fr30.c:623 config/fr30/fr30.c:632 config/fr30/fr30.c:643 +#: config/fr30/fr30.c:656 #, c-format msgid "fr30_print_operand: unhandled MEM" msgstr "" -#: config/frv/frv.c:2589 +#: config/frv/frv.c:2592 msgid "bad insn to frv_print_operand_address:" msgstr "" -#: config/frv/frv.c:2600 +#: config/frv/frv.c:2603 msgid "bad register to frv_print_operand_memory_reference_reg:" msgstr "" -#: config/frv/frv.c:2639 config/frv/frv.c:2649 config/frv/frv.c:2658 -#: config/frv/frv.c:2679 config/frv/frv.c:2684 +#: config/frv/frv.c:2642 config/frv/frv.c:2652 config/frv/frv.c:2661 +#: config/frv/frv.c:2682 config/frv/frv.c:2687 msgid "bad insn to frv_print_operand_memory_reference:" msgstr "" -#: config/frv/frv.c:2770 +#: config/frv/frv.c:2773 #, c-format msgid "bad condition code" msgstr "" -#: config/frv/frv.c:2845 +#: config/frv/frv.c:2848 msgid "bad insn in frv_print_operand, bad const_double" msgstr "" -#: config/frv/frv.c:2906 +#: config/frv/frv.c:2909 msgid "bad insn to frv_print_operand, 'e' modifier:" msgstr "" -#: config/frv/frv.c:2914 +#: config/frv/frv.c:2917 msgid "bad insn to frv_print_operand, 'F' modifier:" msgstr "" -#: config/frv/frv.c:2930 +#: config/frv/frv.c:2933 msgid "bad insn to frv_print_operand, 'f' modifier:" msgstr "" -#: config/frv/frv.c:2944 +#: config/frv/frv.c:2947 msgid "bad insn to frv_print_operand, 'g' modifier:" msgstr "" -#: config/frv/frv.c:2992 +#: config/frv/frv.c:2995 msgid "bad insn to frv_print_operand, 'L' modifier:" msgstr "" -#: config/frv/frv.c:3005 +#: config/frv/frv.c:3008 msgid "bad insn to frv_print_operand, 'M/N' modifier:" msgstr "" -#: config/frv/frv.c:3026 +#: config/frv/frv.c:3029 msgid "bad insn to frv_print_operand, 'O' modifier:" msgstr "" -#: config/frv/frv.c:3044 +#: config/frv/frv.c:3047 msgid "bad insn to frv_print_operand, P modifier:" msgstr "" -#: config/frv/frv.c:3064 +#: config/frv/frv.c:3067 msgid "bad insn in frv_print_operand, z case" msgstr "" -#: config/frv/frv.c:3095 +#: config/frv/frv.c:3098 msgid "bad insn in frv_print_operand, 0 case" msgstr "" -#: config/frv/frv.c:3100 +#: config/frv/frv.c:3103 msgid "frv_print_operand: unknown code" msgstr "" -#: config/frv/frv.c:4469 +#: config/frv/frv.c:4456 msgid "bad output_move_single operand" msgstr "" -#: config/frv/frv.c:4596 +#: config/frv/frv.c:4583 msgid "bad output_move_double operand" msgstr "" -#: config/frv/frv.c:4738 +#: config/frv/frv.c:4725 msgid "bad output_condmove_single operand" msgstr "" @@ -3134,61 +3260,61 @@ msgstr "" msgid " (frv)" msgstr "" -#: config/i386/i386.c:10366 +#: config/i386/i386.c:10758 #, c-format msgid "invalid UNSPEC as operand" msgstr "" -#: config/i386/i386.c:10980 config/i386/i386.c:11055 +#: config/i386/i386.c:11370 config/i386/i386.c:11445 #, c-format msgid "invalid operand size for operand code '%c'" msgstr "" -#: config/i386/i386.c:11050 +#: config/i386/i386.c:11440 #, c-format msgid "invalid operand type used with operand code '%c'" msgstr "" -#: config/i386/i386.c:11130 config/i386/i386.c:11169 config/i386/i386.c:11343 +#: config/i386/i386.c:11520 config/i386/i386.c:11559 #, c-format msgid "operand is not a condition code, invalid operand code 'D'" msgstr "" -#: config/i386/i386.c:11194 +#: config/i386/i386.c:11584 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'C'" msgstr "" -#: config/i386/i386.c:11204 +#: config/i386/i386.c:11594 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'F'" msgstr "" -#: config/i386/i386.c:11222 +#: config/i386/i386.c:11612 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'c'" msgstr "" -#: config/i386/i386.c:11232 +#: config/i386/i386.c:11622 #, c-format msgid "" "operand is neither a constant nor a condition code, invalid operand code 'f'" msgstr "" -#: config/i386/i386.c:11357 +#: config/i386/i386.c:11692 #, c-format msgid "invalid operand code '%c'" msgstr "" -#: config/i386/i386.c:11406 +#: config/i386/i386.c:11741 #, c-format msgid "invalid constraints for operand" msgstr "" -#: config/i386/i386.c:19388 +#: config/i386/i386.c:19309 msgid "unknown insn mode" msgstr "" @@ -3209,195 +3335,201 @@ msgstr "" msgid "environment variable DJGPP points to corrupt file '%s'" msgstr "" -#: config/ia64/ia64.c:4647 +#: config/ia64/ia64.c:4860 #, c-format msgid "invalid %%G mode" msgstr "" -#: config/ia64/ia64.c:4817 +#: config/ia64/ia64.c:5030 #, c-format msgid "ia64_print_operand: unknown code" msgstr "" -#: config/ia64/ia64.c:10495 +#: config/ia64/ia64.c:10748 msgid "invalid conversion from %<__fpreg%>" msgstr "" -#: config/ia64/ia64.c:10498 +#: config/ia64/ia64.c:10751 msgid "invalid conversion to %<__fpreg%>" msgstr "" -#: config/ia64/ia64.c:10511 config/ia64/ia64.c:10522 +#: config/ia64/ia64.c:10764 config/ia64/ia64.c:10775 msgid "invalid operation on %<__fpreg%>" msgstr "" -#: config/iq2000/iq2000.c:3137 +#: config/iq2000/iq2000.c:3130 #, c-format msgid "invalid %%P operand" msgstr "" -#: config/iq2000/iq2000.c:3145 config/rs6000/rs6000.c:12187 +#: config/iq2000/iq2000.c:3138 config/rs6000/rs6000.c:14478 #, c-format msgid "invalid %%p value" msgstr "" -#: config/iq2000/iq2000.c:3201 +#: config/iq2000/iq2000.c:3194 #, c-format msgid "invalid use of %%d, %%x, or %%X" msgstr "" -#: config/m32r/m32r.c:1790 +#: config/m32r/m32r.c:1950 #, c-format msgid "invalid operand to %%s code" msgstr "" -#: config/m32r/m32r.c:1797 +#: config/m32r/m32r.c:1957 #, c-format msgid "invalid operand to %%p code" msgstr "" -#: config/m32r/m32r.c:1852 +#: config/m32r/m32r.c:2012 msgid "bad insn for 'A'" msgstr "" -#: config/m32r/m32r.c:1899 +#: config/m32r/m32r.c:2059 #, c-format msgid "invalid operand to %%T/%%B code" msgstr "" -#: config/m32r/m32r.c:1922 +#: config/m32r/m32r.c:2082 #, c-format msgid "invalid operand to %%N code" msgstr "" -#: config/m32r/m32r.c:1955 +#: config/m32r/m32r.c:2115 msgid "pre-increment address is not a register" msgstr "" -#: config/m32r/m32r.c:1962 +#: config/m32r/m32r.c:2122 msgid "pre-decrement address is not a register" msgstr "" -#: config/m32r/m32r.c:1969 +#: config/m32r/m32r.c:2129 msgid "post-increment address is not a register" msgstr "" -#: config/m32r/m32r.c:2045 config/m32r/m32r.c:2059 -#: config/rs6000/rs6000.c:20957 +#: config/m32r/m32r.c:2205 config/m32r/m32r.c:2219 +#: config/rs6000/rs6000.c:23575 msgid "bad address" msgstr "" -#: config/m32r/m32r.c:2064 +#: config/m32r/m32r.c:2224 msgid "lo_sum not of register" msgstr "" #. !!!! SCz wrong here. -#: config/m68hc11/m68hc11.c:3181 config/m68hc11/m68hc11.c:3559 +#: config/m68hc11/m68hc11.c:3204 config/m68hc11/m68hc11.c:3582 msgid "move insn not handled" msgstr "" -#: config/m68hc11/m68hc11.c:3405 config/m68hc11/m68hc11.c:3489 -#: config/m68hc11/m68hc11.c:3762 +#: config/m68hc11/m68hc11.c:3428 config/m68hc11/m68hc11.c:3512 +#: config/m68hc11/m68hc11.c:3785 msgid "invalid register in the move instruction" msgstr "" -#: config/m68hc11/m68hc11.c:3439 +#: config/m68hc11/m68hc11.c:3462 msgid "invalid operand in the instruction" msgstr "" -#: config/m68hc11/m68hc11.c:3736 +#: config/m68hc11/m68hc11.c:3759 msgid "invalid register in the instruction" msgstr "" -#: config/m68hc11/m68hc11.c:3769 +#: config/m68hc11/m68hc11.c:3792 msgid "operand 1 must be a hard register" msgstr "" -#: config/m68hc11/m68hc11.c:3783 +#: config/m68hc11/m68hc11.c:3806 msgid "invalid rotate insn" msgstr "" -#: config/m68hc11/m68hc11.c:4207 +#: config/m68hc11/m68hc11.c:4234 msgid "registers IX, IY and Z used in the same INSN" msgstr "" -#: config/m68hc11/m68hc11.c:4540 config/m68hc11/m68hc11.c:4840 +#: config/m68hc11/m68hc11.c:4567 config/m68hc11/m68hc11.c:4867 msgid "cannot do z-register replacement" msgstr "" -#: config/m68hc11/m68hc11.c:4903 +#: config/m68hc11/m68hc11.c:4930 msgid "invalid Z register replacement for insn" msgstr "" -#: config/mips/mips.c:7131 config/mips/mips.c:7152 config/mips/mips.c:7264 +#: config/mep/mep.c:3414 +#, c-format +msgid "invalid %%L code" +msgstr "" + +#: config/mips/mips.c:7370 config/mips/mips.c:7391 config/mips/mips.c:7503 #, c-format msgid "'%%%c' is not a valid operand prefix" msgstr "" -#: config/mips/mips.c:7201 config/mips/mips.c:7208 config/mips/mips.c:7215 -#: config/mips/mips.c:7222 config/mips/mips.c:7282 +#: config/mips/mips.c:7440 config/mips/mips.c:7447 config/mips/mips.c:7454 +#: config/mips/mips.c:7461 config/mips/mips.c:7521 config/mips/mips.c:7535 +#: config/mips/mips.c:7548 config/mips/mips.c:7557 #, c-format msgid "invalid use of '%%%c'" msgstr "" -#: config/mips/mips.c:7534 +#: config/mips/mips.c:7779 msgid "mips_debugger_offset called with non stack/frame/arg pointer" msgstr "" -#: config/mmix/mmix.c:1484 config/mmix/mmix.c:1614 +#: config/mmix/mmix.c:1494 config/mmix/mmix.c:1624 msgid "MMIX Internal: Expected a CONST_INT, not this" msgstr "" -#: config/mmix/mmix.c:1563 +#: config/mmix/mmix.c:1573 msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" msgstr "" -#: config/mmix/mmix.c:1582 +#: config/mmix/mmix.c:1592 msgid "MMIX Internal: Expected a register, not this" msgstr "" -#: config/mmix/mmix.c:1592 +#: config/mmix/mmix.c:1602 msgid "MMIX Internal: Expected a constant, not this" msgstr "" #. We need the original here. -#: config/mmix/mmix.c:1676 +#: config/mmix/mmix.c:1686 msgid "MMIX Internal: Cannot decode this operand" msgstr "" -#: config/mmix/mmix.c:1733 +#: config/mmix/mmix.c:1743 msgid "MMIX Internal: This is not a recognized address" msgstr "" -#: config/mmix/mmix.c:2666 +#: config/mmix/mmix.c:2620 msgid "MMIX Internal: Trying to output invalidly reversed condition:" msgstr "" -#: config/mmix/mmix.c:2673 +#: config/mmix/mmix.c:2627 msgid "MMIX Internal: What's the CC of this?" msgstr "" -#: config/mmix/mmix.c:2677 +#: config/mmix/mmix.c:2631 msgid "MMIX Internal: What is the CC of this?" msgstr "" -#: config/mmix/mmix.c:2741 +#: config/mmix/mmix.c:2695 msgid "MMIX Internal: This is not a constant:" msgstr "" -#: config/picochip/picochip.c:2406 +#: config/picochip/picochip.c:2410 msgid "picochip_print_memory_address - Operand isn't memory based" msgstr "" -#: config/picochip/picochip.c:2665 +#: config/picochip/picochip.c:2669 msgid "Unknown mode in print_operand (CONST_DOUBLE) :" msgstr "" -#: config/picochip/picochip.c:2711 config/picochip/picochip.c:2743 +#: config/picochip/picochip.c:2715 config/picochip/picochip.c:2747 msgid "Bad address, not (reg+disp):" msgstr "" -#: config/picochip/picochip.c:2757 +#: config/picochip/picochip.c:2761 msgid "Bad address, not register:" msgstr "" @@ -3411,407 +3543,451 @@ msgstr "" msgid "Try running '%s' in the shell to raise its limit.\n" msgstr "" -#: config/rs6000/rs6000.c:12014 +#: config/rs6000/rs6000.c:2391 +msgid "-mvsx requires hardware floating point" +msgstr "" + +#: config/rs6000/rs6000.c:2396 +msgid "-mvsx and -mpaired are incompatible" +msgstr "" + +#: config/rs6000/rs6000.c:2401 +msgid "-mvsx used with little endian code" +msgstr "" + +#: config/rs6000/rs6000.c:2403 +msgid "-mvsx needs indexed addressing" +msgstr "" + +#: config/rs6000/rs6000.c:6610 +msgid "bad move" +msgstr "" + +#: config/rs6000/rs6000.c:14277 +#, c-format +msgid "invalid %%c value" +msgstr "" + +#: config/rs6000/rs6000.c:14305 #, c-format msgid "invalid %%f value" msgstr "" -#: config/rs6000/rs6000.c:12023 +#: config/rs6000/rs6000.c:14314 #, c-format msgid "invalid %%F value" msgstr "" -#: config/rs6000/rs6000.c:12032 +#: config/rs6000/rs6000.c:14323 #, c-format msgid "invalid %%G value" msgstr "" -#: config/rs6000/rs6000.c:12067 +#: config/rs6000/rs6000.c:14358 #, c-format msgid "invalid %%j code" msgstr "" -#: config/rs6000/rs6000.c:12077 +#: config/rs6000/rs6000.c:14368 #, c-format msgid "invalid %%J code" msgstr "" -#: config/rs6000/rs6000.c:12087 +#: config/rs6000/rs6000.c:14378 #, c-format msgid "invalid %%k value" msgstr "" -#: config/rs6000/rs6000.c:12107 config/xtensa/xtensa.c:2228 +#: config/rs6000/rs6000.c:14398 config/xtensa/xtensa.c:2239 #, c-format msgid "invalid %%K value" msgstr "" -#: config/rs6000/rs6000.c:12177 +#: config/rs6000/rs6000.c:14468 #, c-format msgid "invalid %%O value" msgstr "" -#: config/rs6000/rs6000.c:12224 +#: config/rs6000/rs6000.c:14515 #, c-format msgid "invalid %%q value" msgstr "" -#: config/rs6000/rs6000.c:12268 +#: config/rs6000/rs6000.c:14559 #, c-format msgid "invalid %%S value" msgstr "" -#: config/rs6000/rs6000.c:12308 +#: config/rs6000/rs6000.c:14599 #, c-format msgid "invalid %%T value" msgstr "" -#: config/rs6000/rs6000.c:12318 +#: config/rs6000/rs6000.c:14609 #, c-format msgid "invalid %%u value" msgstr "" -#: config/rs6000/rs6000.c:12327 config/xtensa/xtensa.c:2198 +#: config/rs6000/rs6000.c:14618 config/xtensa/xtensa.c:2209 #, c-format msgid "invalid %%v value" msgstr "" -#: config/rs6000/rs6000.c:12548 +#: config/rs6000/rs6000.c:14717 config/xtensa/xtensa.c:2260 +#, c-format +msgid "invalid %%x value" +msgstr "" + +#: config/rs6000/rs6000.c:14862 #, c-format msgid "invalid %%y value, try using the 'Z' constraint" msgstr "" -#: config/rs6000/rs6000.c:22826 +#: config/rs6000/rs6000.c:25542 msgid "AltiVec argument passed to unprototyped function" msgstr "" -#: config/s390/s390.c:4934 +#: config/s390/s390.c:4944 #, c-format msgid "cannot decompose address" msgstr "" -#: config/s390/s390.c:5147 +#: config/s390/s390.c:5167 msgid "UNKNOWN in print_operand !?" msgstr "" -#: config/score/score3.c:1262 config/score/score3.c:1282 -#: config/score/score7.c:1253 +#: config/score/score3.c:1282 config/score/score3.c:1302 +#: config/score/score7.c:1270 #, c-format msgid "invalid operand for code: '%c'" msgstr "" -#: config/sh/sh.c:785 +#: config/sh/sh.c:1114 #, c-format msgid "invalid operand to %%R" msgstr "" -#: config/sh/sh.c:812 +#: config/sh/sh.c:1141 #, c-format msgid "invalid operand to %%S" msgstr "" -#: config/sh/sh.c:8384 +#: config/sh/sh.c:8877 msgid "created and used with different architectures / ABIs" msgstr "" -#: config/sh/sh.c:8386 +#: config/sh/sh.c:8879 msgid "created and used with different ABIs" msgstr "" -#: config/sh/sh.c:8388 +#: config/sh/sh.c:8881 msgid "created and used with different endianness" msgstr "" -#: config/sparc/sparc.c:6856 config/sparc/sparc.c:6862 +#: config/sparc/sparc.c:6992 config/sparc/sparc.c:6998 #, c-format msgid "invalid %%Y operand" msgstr "" -#: config/sparc/sparc.c:6932 +#: config/sparc/sparc.c:7068 #, c-format msgid "invalid %%A operand" msgstr "" -#: config/sparc/sparc.c:6942 +#: config/sparc/sparc.c:7078 #, c-format msgid "invalid %%B operand" msgstr "" -#: config/sparc/sparc.c:6981 +#: config/sparc/sparc.c:7117 #, c-format msgid "invalid %%c operand" msgstr "" -#: config/sparc/sparc.c:7003 +#: config/sparc/sparc.c:7139 #, c-format msgid "invalid %%d operand" msgstr "" -#: config/sparc/sparc.c:7020 +#: config/sparc/sparc.c:7156 #, c-format msgid "invalid %%f operand" msgstr "" -#: config/sparc/sparc.c:7034 +#: config/sparc/sparc.c:7170 #, c-format msgid "invalid %%s operand" msgstr "" -#: config/sparc/sparc.c:7088 +#: config/sparc/sparc.c:7224 #, c-format msgid "long long constant not a valid immediate operand" msgstr "" -#: config/sparc/sparc.c:7091 +#: config/sparc/sparc.c:7227 #, c-format msgid "floating point constant not a valid immediate operand" msgstr "" -#: config/stormy16/stormy16.c:1746 config/stormy16/stormy16.c:1817 +#: config/stormy16/stormy16.c:1755 config/stormy16/stormy16.c:1826 #, c-format msgid "'B' operand is not constant" msgstr "" -#: config/stormy16/stormy16.c:1773 +#: config/stormy16/stormy16.c:1782 #, c-format msgid "'B' operand has multiple bits set" msgstr "" -#: config/stormy16/stormy16.c:1799 +#: config/stormy16/stormy16.c:1808 #, c-format msgid "'o' operand is not constant" msgstr "" -#: config/stormy16/stormy16.c:1831 +#: config/stormy16/stormy16.c:1840 #, c-format msgid "xstormy16_print_operand: unknown code" msgstr "" -#: config/v850/v850.c:372 +#: config/v850/v850.c:400 msgid "const_double_split got a bad insn:" msgstr "" -#: config/v850/v850.c:936 +#: config/v850/v850.c:971 msgid "output_move_single:" msgstr "" -#: config/vax/vax.c:382 +#: config/vax/vax.c:399 #, c-format msgid "symbol used with both base and indexed registers" msgstr "" -#: config/vax/vax.c:391 +#: config/vax/vax.c:408 #, c-format msgid "symbol with offset used in PIC mode" msgstr "" -#: config/vax/vax.c:475 +#: config/vax/vax.c:494 #, c-format msgid "symbol used as immediate operand" msgstr "" -#: config/vax/vax.c:1469 +#: config/vax/vax.c:1519 msgid "illegal operand detected" msgstr "" -#: config/xtensa/xtensa.c:696 config/xtensa/xtensa.c:728 -#: config/xtensa/xtensa.c:737 +#: config/xtensa/xtensa.c:705 config/xtensa/xtensa.c:737 +#: config/xtensa/xtensa.c:746 msgid "bad test" msgstr "" -#: config/xtensa/xtensa.c:2186 +#: config/xtensa/xtensa.c:2197 #, c-format msgid "invalid %%D value" msgstr "" -#: config/xtensa/xtensa.c:2223 +#: config/xtensa/xtensa.c:2234 msgid "invalid mask" msgstr "" -#: config/xtensa/xtensa.c:2249 -#, c-format -msgid "invalid %%x value" -msgstr "" - -#: config/xtensa/xtensa.c:2256 +#: config/xtensa/xtensa.c:2267 #, c-format msgid "invalid %%d value" msgstr "" -#: config/xtensa/xtensa.c:2277 config/xtensa/xtensa.c:2287 +#: config/xtensa/xtensa.c:2288 config/xtensa/xtensa.c:2298 #, c-format msgid "invalid %%t/%%b value" msgstr "" -#: config/xtensa/xtensa.c:2329 +#: config/xtensa/xtensa.c:2340 msgid "invalid address" msgstr "" -#: config/xtensa/xtensa.c:2354 +#: config/xtensa/xtensa.c:2365 msgid "no register in address" msgstr "" -#: config/xtensa/xtensa.c:2362 +#: config/xtensa/xtensa.c:2373 msgid "address offset not a constant" msgstr "" -#: cp/call.c:2604 +#: cp/call.c:2773 msgid "candidates are:" msgstr "" -#: cp/call.c:6904 +#: cp/call.c:7256 msgid "candidate 1:" msgstr "" -#: cp/call.c:6905 +#: cp/call.c:7257 msgid "candidate 2:" msgstr "" -#: cp/cxx-pretty-print.c:173 cp/error.c:916 objc/objc-act.c:7078 +#: cp/cxx-pretty-print.c:173 cp/error.c:943 objc/objc-act.c:7141 msgid "<unnamed>" msgstr "" -#: cp/cxx-pretty-print.c:2055 +#: cp/cxx-pretty-print.c:2056 msgid "template-parameter-" msgstr "" -#: cp/decl2.c:676 +#: cp/decl2.c:683 msgid "candidates are: %+#D" msgstr "" -#: cp/decl2.c:678 +#: cp/decl2.c:685 msgid "candidate is: %+#D" msgstr "" -#: cp/error.c:305 +#: cp/error.c:322 msgid "<missing>" msgstr "" -#: cp/error.c:346 +#: cp/error.c:363 msgid "<brace-enclosed initializer list>" msgstr "" -#: cp/error.c:348 +#: cp/error.c:365 msgid "<unresolved overloaded function type>" msgstr "" -#: cp/error.c:488 +#: cp/error.c:505 msgid "<type error>" msgstr "" -#: cp/error.c:587 +#: cp/error.c:604 #, c-format msgid "<anonymous %s>" msgstr "" -#: cp/error.c:709 +#. A lambda's "type" is essentially its signature. +#: cp/error.c:609 +msgid "<lambda" +msgstr "" + +#: cp/error.c:735 msgid "<typeprefixerror>" msgstr "" -#: cp/error.c:819 +#: cp/error.c:846 #, c-format msgid "(static initializers for %s)" msgstr "" -#: cp/error.c:821 +#: cp/error.c:848 #, c-format msgid "(static destructors for %s)" msgstr "" -#: cp/error.c:891 +#: cp/error.c:918 msgid "vtable for " msgstr "" -#: cp/error.c:903 +#: cp/error.c:930 msgid "<return value> " msgstr "" -#: cp/error.c:1029 +#: cp/error.c:1056 msgid "<enumerator>" msgstr "" -#: cp/error.c:1069 +#: cp/error.c:1096 msgid "<declaration error>" msgstr "" -#: cp/error.c:1299 +#: cp/error.c:1336 msgid "with" msgstr "" -#: cp/error.c:1464 cp/error.c:1484 +#: cp/error.c:1504 cp/error.c:1524 msgid "<template parameter error>" msgstr "" -#: cp/error.c:1610 +#: cp/error.c:1650 msgid "<statement>" msgstr "" #. While waiting for caret diagnostics, avoid printing #. __cxa_allocate_exception, __cxa_throw, and the like. -#: cp/error.c:1639 +#: cp/error.c:1679 msgid "<throw-expression>" msgstr "" -#: cp/error.c:2085 +#: cp/error.c:2125 msgid "<unparsed>" msgstr "" -#: cp/error.c:2231 +#: cp/error.c:2271 msgid "<expression error>" msgstr "" -#: cp/error.c:2245 +#: cp/error.c:2285 msgid "<unknown operator>" msgstr "" -#: cp/error.c:2449 +#: cp/error.c:2492 msgid "<unknown>" msgstr "" -#: cp/error.c:2469 +#: cp/error.c:2512 msgid "{unknown}" msgstr "" -#: cp/error.c:2551 +#: cp/error.c:2594 msgid "At global scope:" msgstr "" -#: cp/error.c:2653 +#: cp/error.c:2700 #, c-format msgid "In static member function %qs" msgstr "" -#: cp/error.c:2655 +#: cp/error.c:2702 #, c-format msgid "In copy constructor %qs" msgstr "" -#: cp/error.c:2657 +#: cp/error.c:2704 #, c-format msgid "In constructor %qs" msgstr "" -#: cp/error.c:2659 +#: cp/error.c:2706 #, c-format msgid "In destructor %qs" msgstr "" -#: cp/error.c:2689 +#: cp/error.c:2708 +msgid "In lambda function" +msgstr "" + +#: cp/error.c:2738 #, c-format msgid "%s: In instantiation of %qs:\n" msgstr "" -#: cp/error.c:2713 +#: cp/error.c:2767 +#, c-format +msgid "%s:%d:%d: instantiated from %qs\n" +msgstr "" + +#: cp/error.c:2771 #, c-format msgid "%s:%d: instantiated from %qs\n" msgstr "" -#: cp/error.c:2719 +#: cp/error.c:2776 +#, c-format +msgid "%s:%d:%d: instantiated from here" +msgstr "" + +#: cp/error.c:2779 #, c-format msgid "%s:%d: instantiated from here" msgstr "" -#: cp/g++spec.c:254 java/jvspec.c:406 +#: cp/g++spec.c:266 java/jvspec.c:407 #, c-format msgid "argument to '%s' missing\n" msgstr "" @@ -3849,73 +4025,68 @@ msgstr "" msgid "Integer outside symmetric range implied by Standard Fortran at %L" msgstr "" -#: fortran/arith.c:1072 fortran/arith.c:1096 +#: fortran/arith.c:1151 fortran/arith.c:1173 #, no-c-format msgid "Fortran 2003: Noninteger exponent in an initialization expression at %L" msgstr "" -#: fortran/arith.c:1080 +#: fortran/arith.c:1159 #, no-c-format msgid "Raising a negative REAL at %L to a REAL power is prohibited" msgstr "" -#: fortran/arith.c:1564 +#: fortran/arith.c:1666 msgid "elemental binary operation" msgstr "" -#: fortran/arith.c:2143 +#: fortran/arith.c:2250 #, no-c-format msgid "Arithmetic OK converting %s to %s at %L" msgstr "" -#: fortran/arith.c:2147 +#: fortran/arith.c:2254 #, no-c-format msgid "" "Arithmetic overflow converting %s to %s at %L. This check can be disabled " "with the option -fno-range-check" msgstr "" -#: fortran/arith.c:2152 +#: fortran/arith.c:2259 #, no-c-format msgid "" "Arithmetic underflow converting %s to %s at %L. This check can be disabled " "with the option -fno-range-check" msgstr "" -#: fortran/arith.c:2157 +#: fortran/arith.c:2264 #, no-c-format msgid "" "Arithmetic NaN converting %s to %s at %L. This check can be disabled with " "the option -fno-range-check" msgstr "" -#: fortran/arith.c:2162 +#: fortran/arith.c:2269 #, no-c-format msgid "Division by zero converting %s to %s at %L" msgstr "" -#: fortran/arith.c:2166 +#: fortran/arith.c:2273 #, no-c-format msgid "Array operands are incommensurate converting %s to %s at %L" msgstr "" -#: fortran/arith.c:2170 +#: fortran/arith.c:2277 #, no-c-format msgid "" "Integer outside symmetric range implied by Standard Fortran converting %s to " "%s at %L" msgstr "" -#: fortran/arith.c:2503 +#: fortran/arith.c:2628 #, no-c-format msgid "The Hollerith constant at %L is too long to convert to %s" msgstr "" -#: fortran/arith.c:2662 -#, no-c-format -msgid "Enumerator exceeds the C integer type at %C" -msgstr "" - #: fortran/array.c:90 #, no-c-format msgid "Expected array subscript at %C" @@ -3981,47 +4152,47 @@ msgstr "" msgid "Fortran 2008: Array specification at %C with more than 7 dimensions" msgstr "" -#: fortran/array.c:644 +#: fortran/array.c:645 #, no-c-format msgid "duplicated initializer" msgstr "" -#: fortran/array.c:736 +#: fortran/array.c:737 #, no-c-format msgid "DO-iterator '%s' at %L is inside iterator of the same name" msgstr "" -#: fortran/array.c:838 fortran/array.c:980 +#: fortran/array.c:839 fortran/array.c:981 #, no-c-format msgid "Syntax error in array constructor at %C" msgstr "" -#: fortran/array.c:895 +#: fortran/array.c:896 #, no-c-format msgid "Fortran 2003: [...] style array constructors at %C" msgstr "" -#: fortran/array.c:915 +#: fortran/array.c:916 #, no-c-format msgid "Fortran 2003: Array constructor including type specification at %C" msgstr "" -#: fortran/array.c:930 +#: fortran/array.c:931 #, no-c-format msgid "Empty array constructor at %C is not allowed" msgstr "" -#: fortran/array.c:1027 +#: fortran/array.c:1028 #, no-c-format msgid "Element in %s array constructor at %L is %s" msgstr "" -#: fortran/array.c:1364 +#: fortran/array.c:1365 #, no-c-format msgid "Iterator step at %L cannot be zero" msgstr "" -#: fortran/array.c:1650 +#: fortran/array.c:1649 #, no-c-format msgid "Different CHARACTER lengths (%d/%d) in array constructor at %L" msgstr "" @@ -4041,7 +4212,7 @@ msgstr "" msgid "'%s' argument of '%s' intrinsic at %L must be a numeric type" msgstr "" -#: fortran/check.c:101 fortran/check.c:830 fortran/check.c:840 +#: fortran/check.c:101 fortran/check.c:855 fortran/check.c:865 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or REAL" msgstr "" @@ -4107,290 +4278,359 @@ msgstr "" msgid "'%s' argument of '%s' intrinsic at %L must be a variable" msgstr "" -#: fortran/check.c:361 +#: fortran/check.c:364 #, no-c-format msgid "'dim' argument of '%s' intrinsic at %L is not a valid dimension index" msgstr "" -#: fortran/check.c:431 +#: fortran/check.c:434 #, no-c-format msgid "Unequal character lengths (%ld/%ld) in %s at %L" msgstr "" -#: fortran/check.c:537 fortran/check.c:2039 fortran/check.c:2054 +#: fortran/check.c:543 fortran/check.c:2141 fortran/check.c:2153 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE" msgstr "" -#: fortran/check.c:561 fortran/check.c:3908 +#: fortran/check.c:564 fortran/check.c:4236 #, no-c-format msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type" msgstr "" -#: fortran/check.c:570 fortran/check.c:1202 fortran/check.c:1345 -#: fortran/check.c:1419 fortran/check.c:1708 +#: fortran/check.c:573 fortran/check.c:1316 fortran/check.c:1459 +#: fortran/check.c:1533 fortran/check.c:1819 #, no-c-format msgid "Extension: Different type kinds at %L" msgstr "" -#: fortran/check.c:610 fortran/check.c:2123 +#: fortran/check.c:613 fortran/check.c:2222 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER" msgstr "" -#: fortran/check.c:630 +#: fortran/check.c:633 #, no-c-format msgid "" "'%s' argument of '%s' intrinsic at %L must be a pointer or target VARIABLE " "or FUNCTION" msgstr "" -#: fortran/check.c:638 +#: fortran/check.c:641 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER or a TARGET" msgstr "" -#: fortran/check.c:654 +#: fortran/check.c:657 #, no-c-format msgid "" "Array section with a vector subscript at %L shall not be the target of a " "pointer" msgstr "" -#: fortran/check.c:665 +#: fortran/check.c:668 #, no-c-format msgid "" "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic " "function" msgstr "" -#: fortran/check.c:811 fortran/check.c:935 +#: fortran/check.c:827 fortran/check.c:994 #, no-c-format msgid "" "'%s' argument of '%s' intrinsic at %L must not be present if 'x' is COMPLEX" msgstr "" -#: fortran/check.c:861 fortran/check.c:1264 fortran/check.c:1367 -#: fortran/check.c:1526 fortran/check.c:1543 fortran/check.c:2427 -#: fortran/check.c:2569 fortran/check.c:2912 fortran/check.c:2973 +#: fortran/check.c:835 fortran/check.c:1002 #, no-c-format -msgid "Fortran 2003: '%s' intrinsic with KIND argument at %L" +msgid "" +"'%s' argument of '%s' intrinsic at %L must have a type of either REAL or " +"INTEGER" msgstr "" -#: fortran/check.c:886 +#: fortran/check.c:888 fortran/check.c:1378 fortran/check.c:1481 +#: fortran/check.c:1637 fortran/check.c:1654 fortran/check.c:2710 +#: fortran/check.c:2849 fortran/check.c:3201 fortran/check.c:3301 #, no-c-format -msgid "SHIFT argument at %L of CSHIFT must have rank %d or be a scalar" +msgid "Fortran 2003: '%s' intrinsic with KIND argument at %L" msgstr "" -#: fortran/check.c:984 fortran/check.c:1804 fortran/check.c:1812 +#: fortran/check.c:935 fortran/check.c:1141 #, no-c-format -msgid "'%s' argument of '%s' intrinsic at %L must be numeric or LOGICAL" +msgid "" +"'%s' argument of '%s' intrinsic at %L has invalid shape in dimension %d (%ld/" +"%ld)" msgstr "" -#: fortran/check.c:998 +#: fortran/check.c:950 fortran/check.c:1156 fortran/check.c:1184 #, no-c-format msgid "" -"Different shape for arguments '%s' and '%s' at %L for intrinsic 'dot_product'" +"'%s' argument of intrinsic '%s' at %L of must have rank %d or be a scalar" msgstr "" -#: fortran/check.c:1017 fortran/check.c:1025 +#: fortran/check.c:1051 fortran/check.c:1913 fortran/check.c:1921 #, no-c-format -msgid "'%s' argument of '%s' intrinsic at %L must be default real" +msgid "'%s' argument of '%s' intrinsic at %L must be numeric or LOGICAL" msgstr "" -#: fortran/check.c:1052 +#: fortran/check.c:1065 #, no-c-format -msgid "SHIFT argument at %L of EOSHIFT must have rank %d or be a scalar" +msgid "" +"Different shape for arguments '%s' and '%s' at %L for intrinsic 'dot_product'" msgstr "" -#: fortran/check.c:1072 +#: fortran/check.c:1084 fortran/check.c:1092 #, no-c-format -msgid "BOUNDARY argument at %L of EOSHIFT must have rank %d or be a scalar" +msgid "'%s' argument of '%s' intrinsic at %L must be default real" msgstr "" -#: fortran/check.c:1083 +#: fortran/check.c:1175 fortran/check.c:2028 fortran/check.c:2082 +#, c-format +msgid "arguments '%s' and '%s' for intrinsic %s" +msgstr "" + +#: fortran/check.c:1248 #, no-c-format -msgid "" -"Different shape in dimension %d for SHIFT and BOUNDARY arguments of EOSHIFT " -"at %L" +msgid "Fortran 2008: COMPLEX argument '%s' argument of '%s' intrinsic at %L" msgstr "" -#: fortran/check.c:1315 +#: fortran/check.c:1429 #, no-c-format msgid "Argument of %s at %L must be of length one" msgstr "" -#: fortran/check.c:1374 +#: fortran/check.c:1488 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be the same kind as '%s'" msgstr "" -#: fortran/check.c:1499 +#: fortran/check.c:1613 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be a non-derived type" msgstr "" -#: fortran/check.c:1681 +#: fortran/check.c:1792 #, no-c-format msgid "Intrinsic '%s' at %L must have at least two arguments" msgstr "" -#: fortran/check.c:1714 +#: fortran/check.c:1825 #, no-c-format msgid "'a%d' argument of '%s' intrinsic at %L must be %s(%d)" msgstr "" -#: fortran/check.c:1747 +#: fortran/check.c:1834 +#, c-format +msgid "arguments 'a%d' and 'a%d' for intrinsic '%s'" +msgstr "" + +#: fortran/check.c:1856 #, no-c-format msgid "Fortran 2003: '%s' intrinsic with CHARACTER argument at %L" msgstr "" -#: fortran/check.c:1754 +#: fortran/check.c:1863 #, no-c-format msgid "" "'a1' argument of '%s' intrinsic at %L must be INTEGER, REAL or CHARACTER" msgstr "" -#: fortran/check.c:1821 +#: fortran/check.c:1930 #, no-c-format msgid "Argument types of '%s' intrinsic at %L must match (%s/%s)" msgstr "" -#: fortran/check.c:1835 +#: fortran/check.c:1944 #, no-c-format msgid "" "Different shape on dimension 1 for arguments '%s' and '%s' at %L for " "intrinsic matmul" msgstr "" -#: fortran/check.c:1854 +#: fortran/check.c:1963 #, no-c-format msgid "" "Different shape on dimension 2 for argument '%s' and dimension 1 for " "argument '%s' at %L for intrinsic matmul" msgstr "" -#: fortran/check.c:1863 +#: fortran/check.c:1972 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be of rank 1 or 2" msgstr "" -#: fortran/check.c:2065 +#: fortran/check.c:2164 #, no-c-format msgid "" "the '%s' and '%s' arguments of '%s' intrinsic at %L must have the same rank %" "d/%d" msgstr "" -#: fortran/check.c:2074 +#: fortran/check.c:2173 #, no-c-format msgid "" "the '%s' and '%s' arguments of '%s' intrinsic at %L must be of the same kind " "%d/%d" msgstr "" -#: fortran/check.c:2170 +#: fortran/check.c:2242 fortran/intrinsic.c:3639 +#, c-format +msgid "arguments '%s' and '%s' for intrinsic '%s'" +msgstr "" + +#: fortran/check.c:2293 fortran/check.c:3248 +#, no-c-format +msgid "" +"'%s' argument of '%s' intrinsic at %L must provide at least as many elements " +"as there are .TRUE. values in '%s' (%ld/%d)" +msgstr "" + +#: fortran/check.c:2318 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be of type REAL or COMPLEX" msgstr "" -#: fortran/check.c:2191 +#: fortran/check.c:2339 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be of a dummy variable" msgstr "" -#: fortran/check.c:2199 +#: fortran/check.c:2347 #, no-c-format msgid "" "'%s' argument of '%s' intrinsic at %L must be of an OPTIONAL dummy variable" msgstr "" -#: fortran/check.c:2215 +#: fortran/check.c:2363 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must not be a subobject of '%s'" msgstr "" -#: fortran/check.c:2340 +#: fortran/check.c:2488 #, no-c-format msgid "" "'shape' argument of 'reshape' intrinsic at %L must be an array of constant " "size" msgstr "" -#: fortran/check.c:2350 +#: fortran/check.c:2498 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L is empty" +msgstr "" + +#: fortran/check.c:2505 #, no-c-format msgid "'shape' argument of 'reshape' intrinsic at %L has more than %d elements" msgstr "" -#: fortran/check.c:2388 +#: fortran/check.c:2525 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L has negative element (%d)" +msgstr "" + +#: fortran/check.c:2566 +#, no-c-format +msgid "" +"'%s' argument of '%s' intrinsic at %L has wrong number of elements (%d/%d)" +msgstr "" + +#: fortran/check.c:2587 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L has out-of-range dimension (%d)" +msgstr "" + +#: fortran/check.c:2596 +#, no-c-format +msgid "" +"'%s' argument of '%s' intrinsic at %L has invalid permutation of dimensions " +"(dimension '%d' duplicated)" +msgstr "" + +#: fortran/check.c:2631 #, no-c-format msgid "" "Without padding, there are not enough elements in the intrinsic RESHAPE " "source at %L to match the shape" msgstr "" -#: fortran/check.c:2489 +#: fortran/check.c:2649 fortran/check.c:2665 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be of a derived type" +msgstr "" + +#: fortran/check.c:2657 fortran/check.c:2673 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L must be of an extensible type" +msgstr "" + +#: fortran/check.c:2772 #, no-c-format msgid "Missing arguments to %s intrinsic at %L" msgstr "" -#: fortran/check.c:2530 +#: fortran/check.c:2813 #, no-c-format msgid "" "'source' argument of 'shape' intrinsic at %L must not be an assumed size " "array" msgstr "" -#: fortran/check.c:2604 +#: fortran/check.c:2884 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be less than rank %d" msgstr "" -#: fortran/check.c:2864 +#: fortran/check.c:2903 +#, no-c-format +msgid "'%s' argument of '%s' intrinsic at %L is not a valid dimension index" +msgstr "" + +#: fortran/check.c:3156 #, no-c-format msgid "'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s" msgstr "" -#: fortran/check.c:2938 +#: fortran/check.c:3262 #, no-c-format msgid "" -"FIELD argument at %L of UNPACK must have the same rank as MASK or be a scalar" +"'%s' argument of '%s' intrinsic at %L must have the same rank as '%s' or be " +"a scalar" msgstr "" -#: fortran/check.c:2949 +#: fortran/check.c:3275 #, no-c-format msgid "" -"Different shape in dimension %d for MASK and FIELD arguments of UNPACK at %L" +"'%s' and '%s' arguments of '%s' intrinsic at %L must have identical shape." msgstr "" -#: fortran/check.c:3190 fortran/check.c:3222 +#: fortran/check.c:3518 fortran/check.c:3550 #, no-c-format msgid "Size of '%s' argument of '%s' intrinsic at %L too small (%i/%i)" msgstr "" -#: fortran/check.c:3230 +#: fortran/check.c:3558 #, no-c-format msgid "Too many arguments to %s at %L" msgstr "" -#: fortran/check.c:3342 fortran/check.c:3819 fortran/check.c:3843 +#: fortran/check.c:3670 fortran/check.c:4147 fortran/check.c:4171 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or PROCEDURE" msgstr "" -#: fortran/check.c:3525 +#: fortran/check.c:3853 #, no-c-format msgid "" "'%s' argument of '%s' intrinsic at %L must be of a kind not wider than the " "default kind (%d)" msgstr "" -#: fortran/check.c:3892 fortran/check.c:3900 +#: fortran/check.c:4220 fortran/check.c:4228 #, no-c-format msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL" msgstr "" -#: fortran/cpp.c:381 c-opts.c:902 +#: fortran/cpp.c:381 c-opts.c:909 #, gcc-internal-format msgid "output filename specified twice" msgstr "" @@ -4440,497 +4680,502 @@ msgstr "" msgid "Extension: re-initialization of '%s' at %L" msgstr "" -#: fortran/decl.c:258 +#: fortran/decl.c:259 #, no-c-format msgid "Host associated variable '%s' may not be in the DATA statement at %C" msgstr "" -#: fortran/decl.c:265 +#: fortran/decl.c:266 #, no-c-format msgid "" "Extension: initialization of common block variable '%s' in DATA statement at " "%C" msgstr "" -#: fortran/decl.c:370 +#: fortran/decl.c:371 #, no-c-format msgid "Symbol '%s' must be a PARAMETER in DATA statement at %C" msgstr "" -#: fortran/decl.c:395 +#: fortran/decl.c:396 #, no-c-format msgid "Invalid initializer %s in Data statement at %C" msgstr "" -#: fortran/decl.c:498 +#: fortran/decl.c:499 #, no-c-format msgid "Initialization at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:557 +#: fortran/decl.c:558 #, no-c-format msgid "DATA statement at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:586 +#: fortran/decl.c:587 #, no-c-format msgid "Bad INTENT specification at %C" msgstr "" -#: fortran/decl.c:633 +#: fortran/decl.c:634 #, no-c-format msgid "Conflict in attributes of function argument at %C" msgstr "" -#: fortran/decl.c:686 +#: fortran/decl.c:658 +#, no-c-format +msgid "Obsolescent feature: Old-style character length at %C" +msgstr "" + +#: fortran/decl.c:690 #, no-c-format msgid "Syntax error in character length specification at %C" msgstr "" -#: fortran/decl.c:805 +#: fortran/decl.c:813 #, no-c-format msgid "Procedure '%s' at %C is already defined at %L" msgstr "" -#: fortran/decl.c:813 +#: fortran/decl.c:821 #, no-c-format msgid "Name '%s' at %C is already defined as a generic interface at %L" msgstr "" -#: fortran/decl.c:826 +#: fortran/decl.c:834 #, no-c-format msgid "" "Procedure '%s' at %C has an explicit interface and must not have attributes " "declared at %L" msgstr "" -#: fortran/decl.c:898 +#: fortran/decl.c:906 #, no-c-format msgid "" "Procedure '%s' at %L must have the BIND(C) attribute to be C interoperable" msgstr "" -#: fortran/decl.c:928 +#: fortran/decl.c:936 #, no-c-format msgid "" "Type '%s' at %L is a parameter to the BIND(C) procedure '%s' but is not C " "interoperable because derived type '%s' is not C interoperable" msgstr "" -#: fortran/decl.c:935 +#: fortran/decl.c:943 #, no-c-format msgid "" "Variable '%s' at %L is a parameter to the BIND(C) procedure '%s' but may not " "be C interoperable" msgstr "" -#: fortran/decl.c:950 +#: fortran/decl.c:958 #, no-c-format msgid "" "Character argument '%s' at %L must be length 1 because procedure '%s' is BIND" "(C)" msgstr "" -#: fortran/decl.c:964 +#: fortran/decl.c:972 #, no-c-format msgid "" "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure " "'%s' is BIND(C)" msgstr "" -#: fortran/decl.c:973 +#: fortran/decl.c:981 #, no-c-format msgid "" "Variable '%s' at %L cannot have the POINTER attribute because procedure '%s' " "is BIND(C)" msgstr "" -#: fortran/decl.c:982 +#: fortran/decl.c:990 #, no-c-format msgid "" "Variable '%s' at %L cannot have the OPTIONAL attribute because procedure '%" "s' is BIND(C)" msgstr "" -#: fortran/decl.c:995 +#: fortran/decl.c:1003 #, no-c-format msgid "" "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' " "at %L because the procedure is BIND(C)" msgstr "" -#: fortran/decl.c:1005 +#: fortran/decl.c:1013 #, no-c-format msgid "" "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' " "at %L because the procedure is BIND(C)" msgstr "" -#: fortran/decl.c:1081 +#: fortran/decl.c:1172 #, no-c-format msgid "" "Variable '%s' in common block '%s' at %C must be declared with a C " "interoperable kind since common block '%s' is BIND(C)" msgstr "" -#: fortran/decl.c:1120 +#: fortran/decl.c:1214 #, no-c-format msgid "CHARACTER expression at %L is being truncated (%d/%d)" msgstr "" -#: fortran/decl.c:1127 +#: fortran/decl.c:1221 #, no-c-format msgid "" "The CHARACTER elements of the array constructor at %L must have the same " "length (%d/%d)" msgstr "" -#: fortran/decl.c:1217 +#: fortran/decl.c:1311 #, no-c-format msgid "Initializer not allowed for PARAMETER '%s' at %C" msgstr "" -#: fortran/decl.c:1227 +#: fortran/decl.c:1321 #, no-c-format msgid "PARAMETER at %L is missing an initializer" msgstr "" -#: fortran/decl.c:1237 +#: fortran/decl.c:1331 #, no-c-format msgid "" "Variable '%s' at %C with an initializer already appears in a DATA statement" msgstr "" -#: fortran/decl.c:1387 +#: fortran/decl.c:1482 #, no-c-format msgid "Component at %C must have the POINTER attribute" msgstr "" -#: fortran/decl.c:1395 +#: fortran/decl.c:1490 #, no-c-format msgid "Array component of structure at %C must have explicit or deferred shape" msgstr "" -#: fortran/decl.c:1468 -#, no-c-format -msgid "Allocatable component at %C must be an array" -msgstr "" - -#: fortran/decl.c:1479 +#: fortran/decl.c:1568 #, no-c-format msgid "Pointer array component of structure at %C must have a deferred shape" msgstr "" -#: fortran/decl.c:1488 +#: fortran/decl.c:1577 #, no-c-format msgid "Allocatable component of structure at %C must have a deferred shape" msgstr "" -#: fortran/decl.c:1497 +#: fortran/decl.c:1586 #, no-c-format msgid "Array component of structure at %C must have an explicit shape" msgstr "" -#: fortran/decl.c:1523 +#: fortran/decl.c:1612 #, no-c-format msgid "NULL() initialization at %C is ambiguous" msgstr "" -#: fortran/decl.c:1646 fortran/decl.c:5778 +#: fortran/decl.c:1731 fortran/decl.c:5890 #, no-c-format msgid "Duplicate array spec for Cray pointee at %C" msgstr "" -#: fortran/decl.c:1717 +#: fortran/decl.c:1802 #, no-c-format msgid "the type of '%s' at %C has not been declared within the interface" msgstr "" -#: fortran/decl.c:1733 +#: fortran/decl.c:1818 #, no-c-format msgid "Function name '%s' not allowed at %C" msgstr "" -#: fortran/decl.c:1749 +#: fortran/decl.c:1834 #, no-c-format msgid "Extension: Old-style initialization at %C" msgstr "" -#: fortran/decl.c:1764 fortran/decl.c:4330 +#: fortran/decl.c:1849 fortran/decl.c:4437 #, no-c-format msgid "Initialization at %C isn't for a pointer variable" msgstr "" -#: fortran/decl.c:1772 fortran/decl.c:4338 fortran/decl.c:4480 +#: fortran/decl.c:1857 fortran/decl.c:4445 fortran/decl.c:4585 #, no-c-format msgid "Pointer initialization requires a NULL() at %C" msgstr "" -#: fortran/decl.c:1778 fortran/decl.c:4344 fortran/decl.c:4485 +#: fortran/decl.c:1863 fortran/decl.c:4451 fortran/decl.c:4590 #, no-c-format msgid "Initialization of pointer at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:1791 +#: fortran/decl.c:1876 #, no-c-format msgid "Pointer initialization at %C requires '=>', not '='" msgstr "" -#: fortran/decl.c:1800 fortran/decl.c:6864 +#: fortran/decl.c:1885 fortran/decl.c:7071 #, no-c-format msgid "Expected an initialization expression at %C" msgstr "" -#: fortran/decl.c:1806 +#: fortran/decl.c:1891 #, no-c-format msgid "Initialization of variable at %C is not allowed in a PURE procedure" msgstr "" -#: fortran/decl.c:1819 +#: fortran/decl.c:1904 #, no-c-format msgid "Initialization of allocatable component at %C is not allowed" msgstr "" -#: fortran/decl.c:1873 fortran/decl.c:1882 +#: fortran/decl.c:1958 fortran/decl.c:1967 #, no-c-format msgid "Old-style type declaration %s*%d not supported at %C" msgstr "" -#: fortran/decl.c:1887 +#: fortran/decl.c:1972 #, no-c-format msgid "Nonstandard type declaration %s*%d at %C" msgstr "" -#: fortran/decl.c:1938 fortran/decl.c:2014 +#: fortran/decl.c:2023 fortran/decl.c:2099 #, no-c-format msgid "Missing right parenthesis at %C" msgstr "" -#: fortran/decl.c:1951 fortran/decl.c:2059 +#: fortran/decl.c:2036 fortran/decl.c:2144 #, no-c-format msgid "Expected initialization expression at %C" msgstr "" -#: fortran/decl.c:1959 fortran/decl.c:2065 +#: fortran/decl.c:2044 fortran/decl.c:2150 #, no-c-format msgid "Expected scalar initialization expression at %C" msgstr "" -#: fortran/decl.c:1990 +#: fortran/decl.c:2075 #, no-c-format msgid "Kind %d not supported for type %s at %C" msgstr "" -#: fortran/decl.c:2003 +#: fortran/decl.c:2088 #, no-c-format msgid "C kind type parameter is for type %s but type at %L is %s" msgstr "" -#: fortran/decl.c:2012 +#: fortran/decl.c:2097 #, no-c-format msgid "Missing right parenthesis or comma at %C" msgstr "" -#: fortran/decl.c:2085 +#: fortran/decl.c:2170 #, no-c-format msgid "Kind %d is not supported for CHARACTER at %C" msgstr "" -#: fortran/decl.c:2214 +#: fortran/decl.c:2300 #, no-c-format msgid "Syntax error in CHARACTER declaration at %C" msgstr "" -#: fortran/decl.c:2299 +#: fortran/decl.c:2383 #, no-c-format msgid "Extension: BYTE type at %C" msgstr "" -#: fortran/decl.c:2305 +#: fortran/decl.c:2389 #, no-c-format msgid "BYTE type used at %C is not available on the target machine" msgstr "" -#: fortran/decl.c:2354 +#: fortran/decl.c:2438 #, no-c-format msgid "DOUBLE COMPLEX at %C does not conform to the Fortran 95 standard" msgstr "" -#: fortran/decl.c:2394 fortran/decl.c:2403 fortran/decl.c:2718 -#: fortran/decl.c:2726 +#: fortran/decl.c:2464 +#, no-c-format +msgid "Fortran 2003: CLASS statement at %C" +msgstr "" + +#: fortran/decl.c:2487 fortran/decl.c:2496 fortran/decl.c:2809 +#: fortran/decl.c:2817 #, no-c-format msgid "Type name '%s' at %C is ambiguous" msgstr "" -#: fortran/decl.c:2479 +#: fortran/decl.c:2572 #, no-c-format msgid "Missing character range in IMPLICIT at %C" msgstr "" -#: fortran/decl.c:2525 +#: fortran/decl.c:2618 #, no-c-format msgid "Letters must be in alphabetic order in IMPLICIT statement at %C" msgstr "" -#: fortran/decl.c:2581 +#: fortran/decl.c:2674 #, no-c-format msgid "Empty IMPLICIT statement at %C" msgstr "" -#: fortran/decl.c:2684 +#: fortran/decl.c:2775 #, no-c-format msgid "IMPORT statement at %C only permitted in an INTERFACE body" msgstr "" -#: fortran/decl.c:2689 +#: fortran/decl.c:2780 #, no-c-format msgid "Fortran 2003: IMPORT statement at %C" msgstr "" -#: fortran/decl.c:2704 +#: fortran/decl.c:2795 #, no-c-format msgid "Expecting list of named entities at %C" msgstr "" -#: fortran/decl.c:2732 +#: fortran/decl.c:2823 #, no-c-format msgid "Cannot IMPORT '%s' from host scoping unit at %C - does not exist." msgstr "" -#: fortran/decl.c:2739 +#: fortran/decl.c:2830 #, no-c-format msgid "'%s' is already IMPORTed from host scoping unit at %C." msgstr "" -#: fortran/decl.c:2768 +#: fortran/decl.c:2859 #, no-c-format msgid "Syntax error in IMPORT statement at %C" msgstr "" -#: fortran/decl.c:3017 +#: fortran/decl.c:3108 #, no-c-format msgid "Missing dimension specification at %C" msgstr "" -#: fortran/decl.c:3091 +#: fortran/decl.c:3182 #, no-c-format msgid "Duplicate %s attribute at %L" msgstr "" -#: fortran/decl.c:3110 +#: fortran/decl.c:3201 #, no-c-format msgid "Fortran 2003: ALLOCATABLE attribute at %C in a TYPE definition" msgstr "" -#: fortran/decl.c:3120 +#: fortran/decl.c:3211 #, no-c-format msgid "Attribute at %L is not allowed in a TYPE definition" msgstr "" -#: fortran/decl.c:3138 +#: fortran/decl.c:3229 #, no-c-format msgid "Fortran 2003: Attribute %s at %L in a TYPE definition" msgstr "" -#: fortran/decl.c:3149 +#: fortran/decl.c:3240 #, no-c-format msgid "" "%s attribute at %L is not allowed outside of the specification part of a " "module" msgstr "" -#: fortran/decl.c:3201 fortran/decl.c:6018 +#: fortran/decl.c:3292 fortran/decl.c:6143 #, no-c-format msgid "PROTECTED at %C only allowed in specification part of a module" msgstr "" -#: fortran/decl.c:3207 +#: fortran/decl.c:3298 #, no-c-format msgid "Fortran 2003: PROTECTED attribute at %C" msgstr "" -#: fortran/decl.c:3238 +#: fortran/decl.c:3329 #, no-c-format msgid "Fortran 2003: VALUE attribute at %C" msgstr "" -#: fortran/decl.c:3248 +#: fortran/decl.c:3339 #, no-c-format msgid "Fortran 2003: VOLATILE attribute at %C" msgstr "" -#: fortran/decl.c:3288 +#: fortran/decl.c:3379 #, no-c-format msgid "Multiple identifiers provided with single NAME= specifier at %C" msgstr "" -#: fortran/decl.c:3384 +#: fortran/decl.c:3475 #, no-c-format msgid "" "Implicitly declared BIND(C) function '%s' at %L may not be C interoperable" msgstr "" -#: fortran/decl.c:3405 +#: fortran/decl.c:3496 #, no-c-format msgid "" "Variable '%s' in common block '%s' at %L may not be a C interoperable kind " "though common block '%s' is BIND(C)" msgstr "" -#: fortran/decl.c:3414 +#: fortran/decl.c:3505 #, no-c-format msgid "Type declaration '%s' at %L is not C interoperable but it is BIND(C)" msgstr "" -#: fortran/decl.c:3418 +#: fortran/decl.c:3509 #, no-c-format msgid "Variable '%s' at %L may not be a C interoperable kind but it is bind(c)" msgstr "" -#: fortran/decl.c:3430 +#: fortran/decl.c:3521 #, no-c-format msgid "" "Variable '%s' in common block '%s' at %L cannot be declared with BIND(C) " "since it is not a global" msgstr "" -#: fortran/decl.c:3444 +#: fortran/decl.c:3535 #, no-c-format msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes" msgstr "" -#: fortran/decl.c:3452 +#: fortran/decl.c:3543 #, no-c-format msgid "" "Variable '%s' at %L cannot have both the ALLOCATABLE and BIND(C) attributes" msgstr "" -#: fortran/decl.c:3464 +#: fortran/decl.c:3555 #, no-c-format msgid "Return type of BIND(C) function '%s' at %L cannot be an array" msgstr "" -#: fortran/decl.c:3472 +#: fortran/decl.c:3563 #, no-c-format msgid "Return type of BIND(C) function '%s' at %L cannot be a character string" msgstr "" #. Use gfc_warning_now because we won't say that the symbol fails #. just because of this. -#: fortran/decl.c:3483 +#: fortran/decl.c:3574 #, no-c-format msgid "" "Symbol '%s' at %L is marked PRIVATE but has been given the binding label '%s'" msgstr "" -#: fortran/decl.c:3558 +#: fortran/decl.c:3649 #, no-c-format msgid "" "Need either entity or common block name for attribute specification " "statement at %C" msgstr "" -#: fortran/decl.c:3605 +#: fortran/decl.c:3696 #, no-c-format msgid "" "Missing entity or common block name for attribute specification statement at " @@ -4939,702 +5184,737 @@ msgstr "" #. Now we have an error, which we signal, and then fix up #. because the knock-on is plain and simple confusing. -#: fortran/decl.c:3712 +#: fortran/decl.c:3803 #, no-c-format msgid "" "Derived type at %C has not been previously defined and so cannot appear in a " "derived type definition" msgstr "" -#: fortran/decl.c:3744 +#: fortran/decl.c:3835 #, no-c-format msgid "Syntax error in data declaration at %C" msgstr "" -#: fortran/decl.c:3901 +#: fortran/decl.c:3992 #, no-c-format msgid "Name '%s' at %C is the name of the procedure" msgstr "" -#: fortran/decl.c:3913 +#: fortran/decl.c:4004 #, no-c-format msgid "Unexpected junk in formal argument list at %C" msgstr "" -#: fortran/decl.c:3930 +#: fortran/decl.c:4021 #, no-c-format msgid "Duplicate symbol '%s' in formal argument list at %C" msgstr "" -#: fortran/decl.c:3981 +#: fortran/decl.c:4072 #, no-c-format msgid "RESULT variable at %C must be different than function name" msgstr "" -#: fortran/decl.c:4058 +#: fortran/decl.c:4149 #, no-c-format msgid "Unexpected junk after function declaration at %C" msgstr "" -#: fortran/decl.c:4068 fortran/decl.c:5102 +#: fortran/decl.c:4159 fortran/decl.c:5204 #, no-c-format msgid "" "Fortran 2008: BIND(C) attribute at %L may not be specified for an internal " "procedure" msgstr "" -#: fortran/decl.c:4196 +#: fortran/decl.c:4303 #, no-c-format msgid "Interface '%s' at %C may not be generic" msgstr "" -#: fortran/decl.c:4202 +#: fortran/decl.c:4309 #, no-c-format msgid "Interface '%s' at %C may not be a statement function" msgstr "" -#: fortran/decl.c:4215 +#: fortran/decl.c:4322 #, no-c-format msgid "Intrinsic procedure '%s' not allowed in PROCEDURE statement at %C" msgstr "" -#: fortran/decl.c:4270 +#: fortran/decl.c:4377 #, no-c-format msgid "BIND(C) attribute at %C requires an interface with BIND(C)" msgstr "" -#: fortran/decl.c:4277 +#: fortran/decl.c:4384 #, no-c-format msgid "BIND(C) procedure with NAME may not have POINTER attribute at %C" msgstr "" -#: fortran/decl.c:4283 +#: fortran/decl.c:4390 #, no-c-format msgid "Dummy procedure at %C may not have BIND(C) attribute with NAME" msgstr "" -#: fortran/decl.c:4306 +#: fortran/decl.c:4413 #, no-c-format msgid "Procedure '%s' at %L already has basic type of %s" msgstr "" -#: fortran/decl.c:4367 fortran/decl.c:4547 +#: fortran/decl.c:4474 fortran/decl.c:4652 #, no-c-format msgid "Syntax error in PROCEDURE statement at %C" msgstr "" -#: fortran/decl.c:4410 +#: fortran/decl.c:4523 fortran/decl.c:7453 #, no-c-format -msgid "Procedure Pointer Component with PASS at %C not yet implemented" +msgid "Expected '::' after binding-attributes at %C" msgstr "" -#: fortran/decl.c:4424 fortran/decl.c:7246 +#: fortran/decl.c:4530 #, no-c-format -msgid "Expected '::' after binding-attributes at %C" +msgid "NOPASS or explicit interface required at %C" msgstr "" -#: fortran/decl.c:4431 +#: fortran/decl.c:4534 #, no-c-format -msgid "NOPASS or explicit interface required at %C" +msgid "Fortran 2003: Procedure pointer component at %C" msgstr "" -#: fortran/decl.c:4504 +#: fortran/decl.c:4609 #, no-c-format msgid "Syntax error in procedure pointer component at %C" msgstr "" -#: fortran/decl.c:4521 +#: fortran/decl.c:4626 #, no-c-format msgid "PROCEDURE at %C must be in a generic interface" msgstr "" -#: fortran/decl.c:4586 +#: fortran/decl.c:4691 #, no-c-format msgid "Fortran 2003: PROCEDURE statement at %C" msgstr "" -#: fortran/decl.c:4654 +#: fortran/decl.c:4759 #, no-c-format msgid "Expected formal argument list in function definition at %C" msgstr "" -#: fortran/decl.c:4678 fortran/decl.c:4682 fortran/decl.c:4884 -#: fortran/decl.c:4888 fortran/decl.c:5070 fortran/decl.c:5074 -#: fortran/symbol.c:1484 +#: fortran/decl.c:4783 fortran/decl.c:4787 fortran/decl.c:4986 +#: fortran/decl.c:4990 fortran/decl.c:5172 fortran/decl.c:5176 +#: fortran/symbol.c:1490 #, no-c-format msgid "BIND(C) attribute at %L can only be used for variables or common blocks" msgstr "" -#: fortran/decl.c:4714 -#, no-c-format -msgid "Function '%s' at %C already has a type of %s" -msgstr "" - -#: fortran/decl.c:4806 +#: fortran/decl.c:4908 #, no-c-format msgid "ENTRY statement at %C cannot appear within a PROGRAM" msgstr "" -#: fortran/decl.c:4809 +#: fortran/decl.c:4911 #, no-c-format msgid "ENTRY statement at %C cannot appear within a MODULE" msgstr "" -#: fortran/decl.c:4812 +#: fortran/decl.c:4914 #, no-c-format msgid "ENTRY statement at %C cannot appear within a BLOCK DATA" msgstr "" -#: fortran/decl.c:4816 +#: fortran/decl.c:4918 #, no-c-format msgid "ENTRY statement at %C cannot appear within an INTERFACE" msgstr "" -#: fortran/decl.c:4820 +#: fortran/decl.c:4922 #, no-c-format msgid "ENTRY statement at %C cannot appear within a DERIVED TYPE block" msgstr "" -#: fortran/decl.c:4824 +#: fortran/decl.c:4926 #, no-c-format msgid "ENTRY statement at %C cannot appear within an IF-THEN block" msgstr "" -#: fortran/decl.c:4828 +#: fortran/decl.c:4930 #, no-c-format msgid "ENTRY statement at %C cannot appear within a DO block" msgstr "" -#: fortran/decl.c:4832 +#: fortran/decl.c:4934 #, no-c-format msgid "ENTRY statement at %C cannot appear within a SELECT block" msgstr "" -#: fortran/decl.c:4836 +#: fortran/decl.c:4938 #, no-c-format msgid "ENTRY statement at %C cannot appear within a FORALL block" msgstr "" -#: fortran/decl.c:4840 +#: fortran/decl.c:4942 #, no-c-format msgid "ENTRY statement at %C cannot appear within a WHERE block" msgstr "" -#: fortran/decl.c:4844 +#: fortran/decl.c:4946 #, no-c-format msgid "ENTRY statement at %C cannot appear within a contained subprogram" msgstr "" -#: fortran/decl.c:4862 +#: fortran/decl.c:4964 #, no-c-format msgid "ENTRY statement at %C cannot appear in a contained procedure" msgstr "" -#: fortran/decl.c:4916 fortran/decl.c:5110 +#: fortran/decl.c:5018 fortran/decl.c:5212 #, no-c-format msgid "Missing required parentheses before BIND(C) at %C" msgstr "" -#: fortran/decl.c:5172 fortran/decl.c:5188 +#: fortran/decl.c:5274 fortran/decl.c:5290 #, no-c-format msgid "Syntax error in NAME= specifier for binding label at %C" msgstr "" -#: fortran/decl.c:5203 +#: fortran/decl.c:5305 #, no-c-format msgid "Missing closing quote '\"' for binding label at %C" msgstr "" -#: fortran/decl.c:5212 +#: fortran/decl.c:5314 #, no-c-format msgid "Missing closing quote ''' for binding label at %C" msgstr "" -#: fortran/decl.c:5222 +#: fortran/decl.c:5324 #, no-c-format msgid "Missing closing paren for binding label at %C" msgstr "" -#: fortran/decl.c:5228 +#: fortran/decl.c:5330 #, no-c-format msgid "No binding name is allowed in BIND(C) at %C" msgstr "" -#: fortran/decl.c:5234 +#: fortran/decl.c:5336 #, no-c-format msgid "For dummy procedure %s, no binding name is allowed in BIND(C) at %C" msgstr "" -#: fortran/decl.c:5265 +#: fortran/decl.c:5367 #, no-c-format msgid "NAME not allowed on BIND(C) for ABSTRACT INTERFACE at %C" msgstr "" -#: fortran/decl.c:5438 +#: fortran/decl.c:5550 #, no-c-format msgid "Unexpected END statement at %C" msgstr "" #. We would have required END [something]. -#: fortran/decl.c:5447 +#: fortran/decl.c:5559 #, no-c-format msgid "%s statement expected at %L" msgstr "" -#: fortran/decl.c:5458 +#: fortran/decl.c:5570 #, no-c-format msgid "Expecting %s statement at %C" msgstr "" -#: fortran/decl.c:5473 +#: fortran/decl.c:5585 #, no-c-format msgid "Expected block name of '%s' in %s statement at %C" msgstr "" -#: fortran/decl.c:5490 +#: fortran/decl.c:5602 #, no-c-format msgid "Expected terminating name at %C" msgstr "" -#: fortran/decl.c:5499 fortran/decl.c:5507 +#: fortran/decl.c:5611 fortran/decl.c:5619 #, no-c-format msgid "Expected label '%s' for %s statement at %C" msgstr "" -#: fortran/decl.c:5562 +#: fortran/decl.c:5674 #, no-c-format msgid "Missing array specification at %L in DIMENSION statement" msgstr "" -#: fortran/decl.c:5570 +#: fortran/decl.c:5682 #, no-c-format msgid "Dimensions specified for %s at %L after its initialisation" msgstr "" -#: fortran/decl.c:5579 +#: fortran/decl.c:5691 #, no-c-format msgid "Array specification must be deferred at %L" msgstr "" -#: fortran/decl.c:5658 +#: fortran/decl.c:5770 #, no-c-format msgid "Unexpected character in variable list at %C" msgstr "" -#: fortran/decl.c:5695 +#: fortran/decl.c:5807 #, no-c-format msgid "Expected '(' at %C" msgstr "" -#: fortran/decl.c:5709 fortran/decl.c:5749 +#: fortran/decl.c:5821 fortran/decl.c:5861 #, no-c-format msgid "Expected variable name at %C" msgstr "" -#: fortran/decl.c:5725 +#: fortran/decl.c:5837 #, no-c-format msgid "Cray pointer at %C must be an integer" msgstr "" -#: fortran/decl.c:5729 +#: fortran/decl.c:5841 #, no-c-format msgid "" "Cray pointer at %C has %d bytes of precision; memory addresses require %d " "bytes" msgstr "" -#: fortran/decl.c:5735 +#: fortran/decl.c:5847 #, no-c-format msgid "Expected \",\" at %C" msgstr "" -#: fortran/decl.c:5798 +#: fortran/decl.c:5910 #, no-c-format msgid "Expected \")\" at %C" msgstr "" -#: fortran/decl.c:5810 +#: fortran/decl.c:5922 #, no-c-format msgid "Expected \",\" or end of statement at %C" msgstr "" -#: fortran/decl.c:5874 +#: fortran/decl.c:5948 +#, no-c-format +msgid "INTENT is not allowed inside of BLOCK at %C" +msgstr "" + +#: fortran/decl.c:5980 +#, no-c-format +msgid "OPTIONAL is not allowed inside of BLOCK at %C" +msgstr "" + +#: fortran/decl.c:5999 #, no-c-format msgid "Cray pointer declaration at %C requires -fcray-pointer flag" msgstr "" -#: fortran/decl.c:5969 +#: fortran/decl.c:6094 #, no-c-format msgid "" "Access specification of the %s operator at %C has already been specified" msgstr "" -#: fortran/decl.c:5986 +#: fortran/decl.c:6111 #, no-c-format msgid "" "Access specification of the .%s. operator at %C has already been specified" msgstr "" -#: fortran/decl.c:6024 +#: fortran/decl.c:6149 #, no-c-format msgid "Fortran 2003: PROTECTED statement at %C" msgstr "" -#: fortran/decl.c:6064 +#: fortran/decl.c:6189 #, no-c-format msgid "Syntax error in PROTECTED statement at %C" msgstr "" -#: fortran/decl.c:6088 +#: fortran/decl.c:6213 #, no-c-format msgid "" "PRIVATE statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.c:6125 +#: fortran/decl.c:6250 #, no-c-format msgid "" "PUBLIC statement at %C is only allowed in the specification part of a module" msgstr "" -#: fortran/decl.c:6152 +#: fortran/decl.c:6278 #, no-c-format msgid "Expected variable name at %C in PARAMETER statement" msgstr "" -#: fortran/decl.c:6159 +#: fortran/decl.c:6285 #, no-c-format msgid "Expected = sign in PARAMETER statement at %C" msgstr "" -#: fortran/decl.c:6165 +#: fortran/decl.c:6291 #, no-c-format msgid "Expected expression at %C in PARAMETER statement" msgstr "" -#: fortran/decl.c:6185 +#: fortran/decl.c:6311 #, no-c-format msgid "Initializing already initialized variable at %C" msgstr "" -#: fortran/decl.c:6247 +#: fortran/decl.c:6346 #, no-c-format msgid "Unexpected characters in PARAMETER statement at %C" msgstr "" -#: fortran/decl.c:6271 +#: fortran/decl.c:6370 #, no-c-format msgid "Blanket SAVE statement at %C follows previous SAVE statement" msgstr "" -#: fortran/decl.c:6283 +#: fortran/decl.c:6382 #, no-c-format msgid "SAVE statement at %C follows blanket SAVE statement" msgstr "" -#: fortran/decl.c:6330 +#: fortran/decl.c:6429 #, no-c-format msgid "Syntax error in SAVE statement at %C" msgstr "" -#: fortran/decl.c:6341 +#: fortran/decl.c:6443 +#, no-c-format +msgid "VALUE is not allowed inside of BLOCK at %C" +msgstr "" + +#: fortran/decl.c:6447 #, no-c-format msgid "Fortran 2003: VALUE statement at %C" msgstr "" -#: fortran/decl.c:6381 +#: fortran/decl.c:6487 #, no-c-format msgid "Syntax error in VALUE statement at %C" msgstr "" -#: fortran/decl.c:6392 +#: fortran/decl.c:6498 #, no-c-format msgid "Fortran 2003: VOLATILE statement at %C" msgstr "" -#: fortran/decl.c:6434 +#: fortran/decl.c:6540 #, no-c-format msgid "Syntax error in VOLATILE statement at %C" msgstr "" -#: fortran/decl.c:6457 +#: fortran/decl.c:6563 #, no-c-format msgid "MODULE PROCEDURE at %C must be in a generic module interface" msgstr "" -#: fortran/decl.c:6539 +#: fortran/decl.c:6608 +#, no-c-format +msgid "Intrinsic procedure at %L cannot be a MODULE PROCEDURE" +msgstr "" + +#: fortran/decl.c:6657 #, no-c-format msgid "Ambiguous symbol in TYPE definition at %C" msgstr "" -#: fortran/decl.c:6545 +#: fortran/decl.c:6663 #, no-c-format msgid "No such symbol in TYPE definition at %C" msgstr "" -#: fortran/decl.c:6551 +#: fortran/decl.c:6669 #, no-c-format msgid "'%s' in EXTENDS expression at %C is not a derived type" msgstr "" -#: fortran/decl.c:6558 +#: fortran/decl.c:6676 #, no-c-format msgid "'%s' cannot be extended at %C because it is BIND(C)" msgstr "" -#: fortran/decl.c:6565 +#: fortran/decl.c:6683 #, no-c-format msgid "'%s' cannot be extended at %C because it is a SEQUENCE type" msgstr "" -#: fortran/decl.c:6588 +#: fortran/decl.c:6706 #, no-c-format msgid "" "Derived type at %C can only be PRIVATE in the specification part of a module" msgstr "" -#: fortran/decl.c:6600 +#: fortran/decl.c:6718 #, no-c-format msgid "" "Derived type at %C can only be PUBLIC in the specification part of a module" msgstr "" -#: fortran/decl.c:6621 +#: fortran/decl.c:6739 #, no-c-format msgid "Fortran 2003: ABSTRACT type at %C" msgstr "" -#: fortran/decl.c:6685 +#: fortran/decl.c:6843 #, no-c-format msgid "Expected :: in TYPE definition at %C" msgstr "" -#: fortran/decl.c:6696 +#: fortran/decl.c:6854 #, no-c-format msgid "Type name '%s' at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/decl.c:6706 +#: fortran/decl.c:6864 #, no-c-format msgid "Derived type name '%s' at %C already has a basic type of %s" msgstr "" -#: fortran/decl.c:6722 +#: fortran/decl.c:6880 #, no-c-format msgid "Derived type definition of '%s' at %C has already been defined" msgstr "" -#: fortran/decl.c:6789 +#: fortran/decl.c:6951 #, no-c-format msgid "Cray Pointee at %C cannot be assumed shape array" msgstr "" -#: fortran/decl.c:6809 +#: fortran/decl.c:6971 #, no-c-format msgid "Fortran 2003: ENUM and ENUMERATOR at %C" msgstr "" -#: fortran/decl.c:6881 +#: fortran/decl.c:7009 +#, no-c-format +msgid "Enumerator exceeds the C integer type at %C" +msgstr "" + +#: fortran/decl.c:7088 #, no-c-format msgid "ENUMERATOR %L not initialized with integer expression" msgstr "" -#: fortran/decl.c:6930 +#: fortran/decl.c:7137 #, no-c-format msgid "ENUM definition statement expected before %C" msgstr "" -#: fortran/decl.c:6963 +#: fortran/decl.c:7170 #, no-c-format msgid "Syntax error in ENUMERATOR definition at %C" msgstr "" -#: fortran/decl.c:7011 fortran/decl.c:7026 +#: fortran/decl.c:7217 fortran/decl.c:7232 #, no-c-format msgid "Duplicate access-specifier at %C" msgstr "" -#: fortran/decl.c:7046 +#: fortran/decl.c:7252 #, no-c-format msgid "Binding attributes already specify passing, illegal NOPASS at %C" msgstr "" -#: fortran/decl.c:7066 +#: fortran/decl.c:7272 #, no-c-format msgid "Binding attributes already specify passing, illegal PASS at %C" msgstr "" -#: fortran/decl.c:7093 +#: fortran/decl.c:7299 #, no-c-format msgid "Duplicate POINTER attribute at %C" msgstr "" -#: fortran/decl.c:7112 +#: fortran/decl.c:7317 #, no-c-format msgid "Duplicate NON_OVERRIDABLE at %C" msgstr "" -#: fortran/decl.c:7128 +#: fortran/decl.c:7333 #, no-c-format msgid "Duplicate DEFERRED at %C" msgstr "" -#: fortran/decl.c:7141 +#: fortran/decl.c:7346 #, no-c-format msgid "Expected access-specifier at %C" msgstr "" -#: fortran/decl.c:7143 +#: fortran/decl.c:7348 #, no-c-format msgid "Expected binding attribute at %C" msgstr "" -#: fortran/decl.c:7151 +#: fortran/decl.c:7356 #, no-c-format msgid "NON_OVERRIDABLE and DEFERRED can't both appear at %C" msgstr "" -#: fortran/decl.c:7160 +#: fortran/decl.c:7368 #, no-c-format msgid "POINTER attribute is required for procedure pointer component at %C" msgstr "" -#: fortran/decl.c:7202 +#: fortran/decl.c:7409 #, no-c-format msgid "Interface-name expected after '(' at %C" msgstr "" -#: fortran/decl.c:7208 +#: fortran/decl.c:7415 #, no-c-format msgid "')' expected at %C" msgstr "" -#: fortran/decl.c:7230 +#: fortran/decl.c:7437 #, no-c-format msgid "Interface must be specified for DEFERRED binding at %C" msgstr "" -#: fortran/decl.c:7235 +#: fortran/decl.c:7442 #, no-c-format msgid "PROCEDURE(interface) at %C should be declared DEFERRED" msgstr "" -#: fortran/decl.c:7256 +#: fortran/decl.c:7463 #, no-c-format msgid "Expected binding name at %C" msgstr "" -#: fortran/decl.c:7268 +#: fortran/decl.c:7475 #, no-c-format msgid "'=> target' is invalid for DEFERRED binding at %C" msgstr "" -#: fortran/decl.c:7274 +#: fortran/decl.c:7481 #, no-c-format msgid "'::' needed in PROCEDURE binding with explicit target at %C" msgstr "" -#: fortran/decl.c:7284 +#: fortran/decl.c:7491 #, no-c-format msgid "Expected binding target after '=>' at %C" msgstr "" -#: fortran/decl.c:7296 +#: fortran/decl.c:7503 #, no-c-format msgid "Junk after PROCEDURE declaration at %C" msgstr "" -#: fortran/decl.c:7311 +#: fortran/decl.c:7518 #, no-c-format msgid "Type '%s' containing DEFERRED binding at %C is not ABSTRACT" msgstr "" -#: fortran/decl.c:7322 +#: fortran/decl.c:7529 #, no-c-format msgid "" "There's already a procedure with binding name '%s' for the derived type '%s' " "at %C" msgstr "" -#: fortran/decl.c:7360 +#: fortran/decl.c:7569 #, no-c-format msgid "GENERIC at %C must be inside a derived-type CONTAINS" msgstr "" -#: fortran/decl.c:7377 +#: fortran/decl.c:7586 #, no-c-format msgid "Expected '::' at %C" msgstr "" -#: fortran/decl.c:7387 +#: fortran/decl.c:7598 #, no-c-format -msgid "Expected generic name at %C" +msgid "Expected generic name or operator descriptor at %C" msgstr "" -#: fortran/decl.c:7401 +#: fortran/decl.c:7624 +#, no-c-format +msgid "Expected '=>' at %C" +msgstr "" + +#: fortran/decl.c:7666 #, no-c-format msgid "" "There's already a non-generic procedure with binding name '%s' for the " "derived type '%s' at %C" msgstr "" -#: fortran/decl.c:7409 +#: fortran/decl.c:7674 #, no-c-format msgid "Binding at %C must have the same access as already defined binding '%s'" msgstr "" -#: fortran/decl.c:7437 +#: fortran/decl.c:7723 #, no-c-format msgid "Expected specific binding name at %C" msgstr "" -#: fortran/decl.c:7447 +#: fortran/decl.c:7733 #, no-c-format msgid "'%s' already defined as specific binding for the generic '%s' at %C" msgstr "" -#: fortran/decl.c:7463 +#: fortran/decl.c:7749 #, no-c-format msgid "Junk after GENERIC binding at %C" msgstr "" -#: fortran/decl.c:7488 +#: fortran/decl.c:7774 #, no-c-format msgid "FINAL declaration at %C must be inside a derived type CONTAINS section" msgstr "" -#: fortran/decl.c:7499 +#: fortran/decl.c:7785 #, no-c-format msgid "" "Derived type declaration with FINAL at %C must be in the specification part " "of a MODULE" msgstr "" -#: fortran/decl.c:7521 +#: fortran/decl.c:7807 #, no-c-format msgid "Empty FINAL at %C" msgstr "" -#: fortran/decl.c:7528 +#: fortran/decl.c:7814 #, no-c-format msgid "Expected module procedure name at %C" msgstr "" -#: fortran/decl.c:7538 +#: fortran/decl.c:7824 #, no-c-format msgid "Expected ',' at %C" msgstr "" -#: fortran/decl.c:7544 +#: fortran/decl.c:7830 #, no-c-format msgid "Unknown procedure name \"%s\" at %C" msgstr "" -#: fortran/decl.c:7558 +#: fortran/decl.c:7844 #, no-c-format msgid "'%s' at %C is already defined as FINAL procedure!" msgstr "" +#: fortran/decl.c:7913 +#, no-c-format +msgid "Unknown attribute in !GCC$ ATTRIBUTES statement at %C" +msgstr "" + +#: fortran/decl.c:7960 +#, no-c-format +msgid "Syntax error in !GCC$ ATTRIBUTES statement at %C" +msgstr "" + #. We are told not to check dependencies. #. We do it, however, and issue a warning in case we find one. #. If a dependency is found in the case @@ -5646,435 +5926,443 @@ msgid "" "INTENT(%s) actual argument at %L might interfere with actual argument at %L." msgstr "" -#: fortran/error.c:298 +#: fortran/error.c:300 #, no-c-format msgid " Included at %s:%d:" msgstr "" -#: fortran/error.c:382 +#: fortran/error.c:384 #, no-c-format msgid "<During initialization>\n" msgstr "" -#: fortran/error.c:716 +#: fortran/error.c:718 #, no-c-format msgid "Error count reached limit of %d." msgstr "" -#: fortran/error.c:735 fortran/error.c:789 fortran/error.c:826 +#: fortran/error.c:737 fortran/error.c:791 fortran/error.c:826 +#: fortran/error.c:901 msgid "Warning:" msgstr "" -#: fortran/error.c:791 fortran/error.c:874 fortran/error.c:900 +#: fortran/error.c:793 fortran/error.c:881 fortran/error.c:931 msgid "Error:" msgstr "" -#: fortran/error.c:924 +#: fortran/error.c:955 msgid "Fatal Error:" msgstr "" -#: fortran/error.c:943 +#: fortran/error.c:974 #, no-c-format msgid "Internal Error at (1):" msgstr "" -#: fortran/expr.c:257 +#: fortran/expr.c:261 #, c-format msgid "Constant expression required at %C" msgstr "" -#: fortran/expr.c:260 +#: fortran/expr.c:264 #, c-format msgid "Integer expression required at %C" msgstr "" -#: fortran/expr.c:265 +#: fortran/expr.c:269 #, c-format msgid "Integer value too large in expression at %C" msgstr "" -#: fortran/expr.c:1058 +#: fortran/expr.c:1098 #, no-c-format msgid "Index in dimension %d is out of bounds at %L" msgstr "" -#: fortran/expr.c:1234 fortran/expr.c:1285 +#: fortran/expr.c:1274 fortran/expr.c:1325 #, no-c-format msgid "index in dimension %d is out of bounds at %L" msgstr "" -#: fortran/expr.c:1888 +#: fortran/expr.c:1923 #, no-c-format msgid "elemental function arguments at %C are not compliant" msgstr "" -#: fortran/expr.c:1932 +#: fortran/expr.c:1967 #, no-c-format msgid "Numeric or CHARACTER operands are required in expression at %L" msgstr "" -#: fortran/expr.c:1957 +#: fortran/expr.c:1992 #, no-c-format msgid "" "Concatenation operator in expression at %L must have two CHARACTER operands" msgstr "" -#: fortran/expr.c:1964 +#: fortran/expr.c:1999 #, no-c-format msgid "Concat operator at %L must concatenate strings of the same kind" msgstr "" -#: fortran/expr.c:1974 +#: fortran/expr.c:2009 #, no-c-format msgid ".NOT. operator in expression at %L must have a LOGICAL operand" msgstr "" -#: fortran/expr.c:1990 +#: fortran/expr.c:2025 #, no-c-format msgid "LOGICAL operands are required in expression at %L" msgstr "" -#: fortran/expr.c:2001 +#: fortran/expr.c:2036 #, no-c-format msgid "Only intrinsic operators can be used in expression at %L" msgstr "" -#: fortran/expr.c:2009 +#: fortran/expr.c:2044 #, no-c-format msgid "Numeric operands are required in expression at %L" msgstr "" -#: fortran/expr.c:2102 +#: fortran/expr.c:2137 #, no-c-format msgid "Assumed character length variable '%s' in constant expression at %L" msgstr "" -#: fortran/expr.c:2153 fortran/expr.c:2159 +#: fortran/expr.c:2195 #, no-c-format msgid "" "transformational intrinsic '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2191 +#: fortran/expr.c:2226 #, no-c-format msgid "Extension: Evaluation of nonstandard initialization expression at %L" msgstr "" -#: fortran/expr.c:2248 +#: fortran/expr.c:2283 #, no-c-format msgid "" "Function '%s' in initialization expression at %L must be an intrinsic or a " "specification function" msgstr "" -#: fortran/expr.c:2260 +#: fortran/expr.c:2295 #, no-c-format msgid "" "Intrinsic function '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2292 +#: fortran/expr.c:2327 #, no-c-format msgid "PARAMETER '%s' is used at %L before its definition is complete" msgstr "" -#: fortran/expr.c:2312 +#: fortran/expr.c:2347 #, no-c-format msgid "" "Assumed size array '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2318 +#: fortran/expr.c:2353 #, no-c-format msgid "" "Assumed shape array '%s' at %L is not permitted in an initialization " "expression" msgstr "" -#: fortran/expr.c:2324 +#: fortran/expr.c:2359 #, no-c-format msgid "" "Deferred array '%s' at %L is not permitted in an initialization expression" msgstr "" -#: fortran/expr.c:2330 +#: fortran/expr.c:2365 #, no-c-format msgid "" "Array '%s' at %L is a variable, which does not reduce to a constant " "expression" msgstr "" -#: fortran/expr.c:2340 +#: fortran/expr.c:2375 #, no-c-format msgid "" "Parameter '%s' at %L has not been declared or is a variable, which does not " "reduce to a constant expression" msgstr "" -#: fortran/expr.c:2416 +#: fortran/expr.c:2451 #, no-c-format msgid "Initialization expression didn't reduce %C" msgstr "" -#: fortran/expr.c:2495 +#: fortran/expr.c:2530 #, no-c-format msgid "Specification function '%s' at %L cannot be a statement function" msgstr "" -#: fortran/expr.c:2502 +#: fortran/expr.c:2537 #, no-c-format msgid "Specification function '%s' at %L cannot be an internal function" msgstr "" -#: fortran/expr.c:2509 +#: fortran/expr.c:2544 #, no-c-format msgid "Specification function '%s' at %L must be PURE" msgstr "" -#: fortran/expr.c:2516 +#: fortran/expr.c:2551 #, no-c-format msgid "Specification function '%s' at %L cannot be RECURSIVE" msgstr "" -#: fortran/expr.c:2650 +#: fortran/expr.c:2685 #, no-c-format msgid "Dummy argument '%s' not allowed in expression at %L" msgstr "" -#: fortran/expr.c:2657 +#: fortran/expr.c:2692 #, no-c-format msgid "Dummy argument '%s' at %L cannot be OPTIONAL" msgstr "" -#: fortran/expr.c:2664 +#: fortran/expr.c:2699 #, no-c-format msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)" msgstr "" -#: fortran/expr.c:2695 +#: fortran/expr.c:2730 #, no-c-format msgid "Variable '%s' cannot appear in the expression at %L" msgstr "" -#: fortran/expr.c:2745 +#: fortran/expr.c:2780 #, no-c-format msgid "Expression at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/expr.c:2755 +#: fortran/expr.c:2790 #, no-c-format msgid "Function '%s' at %L must be PURE" msgstr "" -#: fortran/expr.c:2764 +#: fortran/expr.c:2799 #, no-c-format msgid "Expression at %L must be scalar" msgstr "" -#: fortran/expr.c:2791 +#: fortran/expr.c:2833 #, no-c-format msgid "Incompatible ranks in %s (%d and %d) at %L" msgstr "" -#: fortran/expr.c:2805 +#: fortran/expr.c:2847 #, no-c-format msgid "Different shape for %s at %L on dimension %d (%d and %d)" msgstr "" -#: fortran/expr.c:2851 fortran/expr.c:3111 +#: fortran/expr.c:2893 fortran/expr.c:3153 #, no-c-format msgid "Cannot assign to INTENT(IN) variable '%s' at %L" msgstr "" -#: fortran/expr.c:2903 +#: fortran/expr.c:2945 #, no-c-format msgid "'%s' at %L is not a VALUE" msgstr "" -#: fortran/expr.c:2910 +#: fortran/expr.c:2952 #, no-c-format msgid "Incompatible ranks %d and %d in assignment at %L" msgstr "" -#: fortran/expr.c:2917 +#: fortran/expr.c:2959 #, no-c-format msgid "Variable type is UNKNOWN in assignment at %L" msgstr "" -#: fortran/expr.c:2929 +#: fortran/expr.c:2971 #, no-c-format msgid "NULL appears on right-hand side in assignment at %L" msgstr "" -#: fortran/expr.c:2940 +#: fortran/expr.c:2982 #, no-c-format msgid "Vector assignment to assumed-size Cray Pointee at %L is illegal" msgstr "" -#: fortran/expr.c:2949 +#: fortran/expr.c:2991 #, no-c-format msgid "POINTER valued function appears on right-hand side of assignment at %L" msgstr "" -#: fortran/expr.c:2954 +#: fortran/expr.c:2996 msgid "array assignment" msgstr "" -#: fortran/expr.c:2959 +#: fortran/expr.c:3001 #, no-c-format msgid "" "Extension: BOZ literal at %L used to initialize non-integer variable '%s'" msgstr "" -#: fortran/expr.c:2965 fortran/resolve.c:6726 +#: fortran/expr.c:3007 fortran/resolve.c:7535 #, no-c-format msgid "" "Extension: BOZ literal at %L outside a DATA statement and outside INT/REAL/" "DBLE/CMPLX" msgstr "" -#: fortran/expr.c:2975 fortran/resolve.c:6736 +#: fortran/expr.c:3017 fortran/resolve.c:7545 #, no-c-format msgid "BOZ literal at %L is bitwise transferred non-integer symbol '%s'" msgstr "" -#: fortran/expr.c:2983 fortran/resolve.c:6745 +#: fortran/expr.c:3025 fortran/resolve.c:7554 #, no-c-format msgid "" "Arithmetic underflow of bit-wise transferred BOZ at %L. This check can be " "disabled with the option -fno-range-check" msgstr "" -#: fortran/expr.c:2987 fortran/resolve.c:6749 +#: fortran/expr.c:3029 fortran/resolve.c:7558 #, no-c-format msgid "" "Arithmetic overflow of bit-wise transferred BOZ at %L. This check can be " "disabled with the option -fno-range-check" msgstr "" -#: fortran/expr.c:2991 fortran/resolve.c:6753 +#: fortran/expr.c:3033 fortran/resolve.c:7562 #, no-c-format msgid "" "Arithmetic NaN of bit-wise transferred BOZ at %L. This check can be disabled " "with the option -fno-range-check" msgstr "" -#: fortran/expr.c:3013 +#: fortran/expr.c:3055 #, no-c-format msgid "" "Incompatible types in DATA statement at %L; attempted conversion of %s to %s" msgstr "" -#: fortran/expr.c:3049 +#: fortran/expr.c:3091 #, no-c-format msgid "Pointer assignment target is not a POINTER at %L" msgstr "" -#: fortran/expr.c:3058 +#: fortran/expr.c:3100 #, no-c-format msgid "" "'%s' in the pointer assignment at %L cannot be an l-value since it is a " "procedure" msgstr "" -#: fortran/expr.c:3089 +#: fortran/expr.c:3131 #, no-c-format msgid "Expected bounds specification for '%s' at %L" msgstr "" -#: fortran/expr.c:3094 +#: fortran/expr.c:3136 #, no-c-format msgid "Fortran 2003: Bounds specification for '%s' in pointer assignment at %L" msgstr "" -#: fortran/expr.c:3100 +#: fortran/expr.c:3142 #, no-c-format msgid "Pointer bounds remapping at %L is not yet implemented in gfortran" msgstr "" -#: fortran/expr.c:3118 +#: fortran/expr.c:3162 #, no-c-format msgid "Pointer assignment to non-POINTER at %L" msgstr "" -#: fortran/expr.c:3127 +#: fortran/expr.c:3171 #, no-c-format msgid "Bad pointer object in PURE procedure at %L" msgstr "" -#: fortran/expr.c:3147 +#: fortran/expr.c:3196 #, no-c-format msgid "Invalid procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3153 +#: fortran/expr.c:3202 #, no-c-format msgid "" "Abstract interface '%s' is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3163 +#: fortran/expr.c:3212 #, no-c-format msgid "" "Statement function '%s' is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3169 +#: fortran/expr.c:3218 #, no-c-format msgid "" "Internal procedure '%s' is invalid in procedure pointer assignment at %L" msgstr "" -#: fortran/expr.c:3181 +#: fortran/expr.c:3241 #, no-c-format -msgid "Interfaces don't match in procedure pointer assignment at %L" +msgid "" +"Mismatch in the procedure pointer assignment at %L: mismatch in the calling " +"convention" msgstr "" -#: fortran/expr.c:3190 +#: fortran/expr.c:3272 +#, no-c-format +msgid "Interface mismatch in procedure pointer assignment at %L: %s" +msgstr "" + +#: fortran/expr.c:3282 #, no-c-format msgid "" "Different types in pointer assignment at %L; attempted assignment of %s to %s" msgstr "" -#: fortran/expr.c:3198 +#: fortran/expr.c:3290 #, no-c-format msgid "Different kind type parameters in pointer assignment at %L" msgstr "" -#: fortran/expr.c:3205 +#: fortran/expr.c:3297 #, no-c-format msgid "Different ranks in pointer assignment at %L" msgstr "" -#: fortran/expr.c:3227 +#: fortran/expr.c:3319 #, no-c-format msgid "Pointer assignment target is neither TARGET nor POINTER at %L" msgstr "" -#: fortran/expr.c:3234 +#: fortran/expr.c:3326 #, no-c-format msgid "Bad target in pointer assignment in PURE procedure at %L" msgstr "" -#: fortran/expr.c:3240 +#: fortran/expr.c:3332 #, no-c-format msgid "Pointer assignment with vector subscript on rhs at %L" msgstr "" -#: fortran/expr.c:3248 +#: fortran/expr.c:3340 #, no-c-format msgid "Pointer assignment target has PROTECTED attribute at %L" msgstr "" -#: fortran/gfortranspec.c:251 +#: fortran/gfortranspec.c:245 #, c-format msgid "overflowed output arg list for '%s'" msgstr "" -#: fortran/gfortranspec.c:384 +#: fortran/gfortranspec.c:374 #, c-format msgid "" "GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n" @@ -6084,287 +6372,292 @@ msgid "" "\n" msgstr "" -#: fortran/gfortranspec.c:406 fortran/gfortranspec.c:445 +#: fortran/gfortranspec.c:396 fortran/gfortranspec.c:435 #, c-format msgid "argument to '%s' missing" msgstr "" -#: fortran/gfortranspec.c:410 +#: fortran/gfortranspec.c:400 #, c-format msgid "no input files; unwilling to write output files" msgstr "" -#: fortran/gfortranspec.c:432 +#: fortran/gfortranspec.c:422 #, c-format msgid "Warning: Using -M <directory> is deprecated, use -J instead\n" msgstr "" -#: fortran/gfortranspec.c:578 +#: fortran/gfortranspec.c:557 #, c-format msgid "Driving:" msgstr "" -#: fortran/interface.c:173 +#: fortran/interface.c:174 #, no-c-format msgid "Syntax error in generic specification at %C" msgstr "" -#: fortran/interface.c:200 +#: fortran/interface.c:201 #, no-c-format msgid "Syntax error: Trailing garbage in INTERFACE statement at %C" msgstr "" -#: fortran/interface.c:219 +#: fortran/interface.c:220 #, no-c-format msgid "Dummy procedure '%s' at %C cannot have a generic interface" msgstr "" -#: fortran/interface.c:252 +#: fortran/interface.c:253 #, no-c-format msgid "Fortran 2003: ABSTRACT INTERFACE at %C" msgstr "" -#: fortran/interface.c:260 +#: fortran/interface.c:261 #, no-c-format msgid "Syntax error in ABSTRACT INTERFACE statement at %C" msgstr "" -#: fortran/interface.c:291 +#: fortran/interface.c:292 #, no-c-format msgid "Syntax error: Trailing garbage in END INTERFACE statement at %C" msgstr "" -#: fortran/interface.c:304 +#: fortran/interface.c:305 #, no-c-format msgid "Expected a nameless interface at %C" msgstr "" -#: fortran/interface.c:315 +#: fortran/interface.c:316 #, no-c-format msgid "Expected 'END INTERFACE ASSIGNMENT (=)' at %C" msgstr "" -#: fortran/interface.c:317 +#: fortran/interface.c:318 #, no-c-format msgid "Expecting 'END INTERFACE OPERATOR (%s)' at %C" msgstr "" -#: fortran/interface.c:331 +#: fortran/interface.c:332 #, no-c-format msgid "Expecting 'END INTERFACE OPERATOR (.%s.)' at %C" msgstr "" -#: fortran/interface.c:342 +#: fortran/interface.c:343 #, no-c-format msgid "Expecting 'END INTERFACE %s' at %C" msgstr "" -#: fortran/interface.c:569 +#: fortran/interface.c:574 #, no-c-format msgid "Alternate return cannot appear in operator interface at %L" msgstr "" -#: fortran/interface.c:599 +#: fortran/interface.c:602 #, no-c-format msgid "Operator interface at %L has the wrong number of arguments" msgstr "" -#: fortran/interface.c:610 +#: fortran/interface.c:613 #, no-c-format msgid "Assignment operator interface at %L must be a SUBROUTINE" msgstr "" -#: fortran/interface.c:616 +#: fortran/interface.c:619 #, no-c-format msgid "Assignment operator interface at %L must have two arguments" msgstr "" -#: fortran/interface.c:631 +#: fortran/interface.c:634 #, no-c-format msgid "" "Assignment operator interface at %L must not redefine an INTRINSIC type " "assignment" msgstr "" -#: fortran/interface.c:640 +#: fortran/interface.c:643 #, no-c-format msgid "Intrinsic operator interface at %L must be a FUNCTION" msgstr "" -#: fortran/interface.c:650 +#: fortran/interface.c:654 #, no-c-format msgid "" "First argument of defined assignment at %L must be INTENT(OUT) or INTENT" "(INOUT)" msgstr "" -#: fortran/interface.c:654 +#: fortran/interface.c:661 #, no-c-format msgid "Second argument of defined assignment at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.c:660 fortran/resolve.c:10741 +#: fortran/interface.c:670 fortran/resolve.c:11879 #, no-c-format msgid "First argument of operator interface at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.c:664 fortran/resolve.c:10753 +#: fortran/interface.c:677 fortran/resolve.c:11897 #, no-c-format msgid "Second argument of operator interface at %L must be INTENT(IN)" msgstr "" -#: fortran/interface.c:767 +#: fortran/interface.c:782 #, no-c-format msgid "Operator interface at %L conflicts with intrinsic interface" msgstr "" -#: fortran/interface.c:1029 +#: fortran/interface.c:1074 #, no-c-format msgid "Procedure '%s' in %s at %L has no explicit interface" msgstr "" -#: fortran/interface.c:1032 +#: fortran/interface.c:1077 #, no-c-format msgid "Procedure '%s' in %s at %L is neither function nor subroutine" msgstr "" -#: fortran/interface.c:1087 fortran/interface.c:1093 +#: fortran/interface.c:1133 fortran/interface.c:1139 #, no-c-format msgid "Ambiguous interfaces '%s' and '%s' in %s at %L" msgstr "" -#: fortran/interface.c:1129 +#: fortran/interface.c:1175 #, no-c-format msgid "'%s' at %L is not a module procedure" msgstr "" -#: fortran/interface.c:1372 +#: fortran/interface.c:1408 #, no-c-format -msgid "Type/rank mismatch in argument '%s' at %L" +msgid "Invalid procedure argument at %L" msgstr "" -#: fortran/interface.c:1381 +#: fortran/interface.c:1416 +#, no-c-format +msgid "Interface mismatch in dummy procedure '%s' at %L: %s" +msgstr "" + +#: fortran/interface.c:1440 #, no-c-format msgid "Type mismatch in argument '%s' at %L; passed %s to %s" msgstr "" -#: fortran/interface.c:1399 fortran/interface.c:1439 +#: fortran/interface.c:1458 fortran/interface.c:1498 #, no-c-format msgid "Rank mismatch in argument '%s' at %L (%d and %d)" msgstr "" -#: fortran/interface.c:1426 +#: fortran/interface.c:1485 #, no-c-format msgid "" "Fortran 2003: Scalar CHARACTER actual argument with array dummy argument '%" "s' at %L" msgstr "" -#: fortran/interface.c:1451 +#: fortran/interface.c:1510 #, no-c-format msgid "Element of assumed-shaped array passed to dummy argument '%s' at %L" msgstr "" -#: fortran/interface.c:1768 +#: fortran/interface.c:1827 #, no-c-format msgid "Keyword argument '%s' at %L is not in the procedure" msgstr "" -#: fortran/interface.c:1776 +#: fortran/interface.c:1835 #, no-c-format msgid "" "Keyword argument '%s' at %L is already associated with another actual " "argument" msgstr "" -#: fortran/interface.c:1786 +#: fortran/interface.c:1845 #, no-c-format msgid "More actual than formal arguments in procedure call at %L" msgstr "" -#: fortran/interface.c:1798 fortran/interface.c:2031 +#: fortran/interface.c:1857 fortran/interface.c:2093 #, no-c-format msgid "Missing alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.c:1806 +#: fortran/interface.c:1865 #, no-c-format msgid "Unexpected alternate return spec in subroutine call at %L" msgstr "" -#: fortran/interface.c:1829 +#: fortran/interface.c:1888 #, no-c-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and pointer or " "allocatable dummy argument '%s' at %L" msgstr "" -#: fortran/interface.c:1836 +#: fortran/interface.c:1895 #, no-c-format msgid "" "Character length mismatch (%ld/%ld) between actual argument and assumed-" "shape dummy argument '%s' at %L" msgstr "" -#: fortran/interface.c:1852 +#: fortran/interface.c:1911 #, no-c-format msgid "" "Character length of actual argument shorter than of dummy argument '%s' (%lu/" "%lu) at %L" msgstr "" -#: fortran/interface.c:1857 +#: fortran/interface.c:1916 #, no-c-format msgid "" "Actual argument contains too few elements for dummy argument '%s' (%lu/%lu) " "at %L" msgstr "" -#: fortran/interface.c:1871 +#: fortran/interface.c:1933 #, no-c-format msgid "Expected a procedure pointer for argument '%s' at %L" msgstr "" -#: fortran/interface.c:1883 +#: fortran/interface.c:1945 #, no-c-format msgid "Expected a procedure for argument '%s' at %L" msgstr "" -#: fortran/interface.c:1893 +#: fortran/interface.c:1955 #, no-c-format msgid "Expected a PURE procedure for argument '%s' at %L" msgstr "" -#: fortran/interface.c:1907 +#: fortran/interface.c:1969 #, no-c-format msgid "Actual argument for '%s' cannot be an assumed-size array at %L" msgstr "" -#: fortran/interface.c:1916 +#: fortran/interface.c:1978 #, no-c-format msgid "Actual argument for '%s' must be a pointer at %L" msgstr "" -#: fortran/interface.c:1925 +#: fortran/interface.c:1987 #, no-c-format msgid "Actual argument for '%s' must be ALLOCATABLE at %L" msgstr "" -#: fortran/interface.c:1938 +#: fortran/interface.c:2000 #, no-c-format msgid "" "Actual argument at %L must be definable as the dummy argument '%s' is INTENT " "= OUT/INOUT" msgstr "" -#: fortran/interface.c:1947 +#: fortran/interface.c:2009 #, no-c-format msgid "" "Actual argument at %L is use-associated with PROTECTED attribute and dummy " "argument '%s' is INTENT = OUT/INOUT" msgstr "" -#: fortran/interface.c:1960 +#: fortran/interface.c:2022 #, no-c-format msgid "" "Array-section actual argument with vector subscripts at %L is incompatible " @@ -6372,80 +6665,88 @@ msgid "" "'%s'" msgstr "" -#: fortran/interface.c:1977 +#: fortran/interface.c:2039 #, no-c-format msgid "" "Assumed-shape actual argument at %L is incompatible with the non-assumed-" "shape dummy argument '%s' due to VOLATILE attribute" msgstr "" -#: fortran/interface.c:1989 +#: fortran/interface.c:2051 #, no-c-format msgid "" "Array-section actual argument at %L is incompatible with the non-assumed-" "shape dummy argument '%s' due to VOLATILE attribute" msgstr "" -#: fortran/interface.c:2008 +#: fortran/interface.c:2070 #, no-c-format msgid "" "Pointer-array actual argument at %L requires an assumed-shape or pointer-" "array dummy argument '%s' due to VOLATILE attribute" msgstr "" -#: fortran/interface.c:2038 +#: fortran/interface.c:2100 #, no-c-format msgid "Missing actual argument for argument '%s' at %L" msgstr "" -#: fortran/interface.c:2224 +#: fortran/interface.c:2286 #, no-c-format msgid "" "Same actual argument associated with INTENT(%s) argument '%s' and INTENT(%s) " "argument '%s' at %L" msgstr "" -#: fortran/interface.c:2280 +#: fortran/interface.c:2342 #, no-c-format msgid "" "Procedure argument at %L is INTENT(IN) while interface specifies INTENT(%s)" msgstr "" -#: fortran/interface.c:2290 +#: fortran/interface.c:2352 #, no-c-format msgid "" "Procedure argument at %L is local to a PURE procedure and is passed to an " "INTENT(%s) argument" msgstr "" -#: fortran/interface.c:2298 +#: fortran/interface.c:2360 #, no-c-format msgid "" "Procedure argument at %L is local to a PURE procedure and has the POINTER " "attribute" msgstr "" -#: fortran/interface.c:2324 +#: fortran/interface.c:2386 #, no-c-format msgid "Procedure '%s' called with an implicit interface at %L" msgstr "" -#: fortran/interface.c:2335 +#: fortran/interface.c:2397 #, no-c-format msgid "Keyword argument requires explicit interface for procedure '%s' at %L" msgstr "" -#: fortran/interface.c:2570 +#: fortran/interface.c:2429 #, no-c-format -msgid "Function '%s' called in lieu of an operator at %L must be PURE" +msgid "" +"Procedure pointer component '%s' called with an implicit interface at %L" msgstr "" -#: fortran/interface.c:2650 +#: fortran/interface.c:2440 +#, no-c-format +msgid "" +"Keyword argument requires explicit interface for procedure pointer component " +"'%s' at %L" +msgstr "" + +#: fortran/interface.c:2916 #, no-c-format msgid "Entity '%s' at %C is already present in the interface" msgstr "" -#: fortran/intrinsic.c:842 +#: fortran/intrinsic.c:961 #, no-c-format msgid "" "The intrinsic '%s' at %L is not included in the selected standard but %s and " @@ -6453,818 +6754,957 @@ msgid "" "option or define -fall-intrinsics to allow this intrinsic." msgstr "" -#: fortran/intrinsic.c:3083 +#: fortran/intrinsic.c:3241 #, no-c-format msgid "Too many arguments in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:3098 +#: fortran/intrinsic.c:3256 #, no-c-format msgid "" "The argument list functions %%VAL, %%LOC or %%REF are not allowed in this " "context at %L" msgstr "" -#: fortran/intrinsic.c:3101 +#: fortran/intrinsic.c:3259 #, no-c-format msgid "Can't find keyword named '%s' in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:3108 +#: fortran/intrinsic.c:3266 #, no-c-format msgid "Argument '%s' is appears twice in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:3122 +#: fortran/intrinsic.c:3280 #, no-c-format msgid "Missing actual argument '%s' in call to '%s' at %L" msgstr "" -#: fortran/intrinsic.c:3137 +#: fortran/intrinsic.c:3295 #, no-c-format msgid "ALTERNATE RETURN not permitted at %L" msgstr "" -#: fortran/intrinsic.c:3194 +#: fortran/intrinsic.c:3352 #, no-c-format msgid "Type of argument '%s' in call to '%s' at %L should be %s, not %s" msgstr "" -#: fortran/intrinsic.c:3560 +#: fortran/intrinsic.c:3717 #, no-c-format msgid "Intrinsic '%s' (is %s) is used at %L" msgstr "" -#: fortran/intrinsic.c:3624 +#: fortran/intrinsic.c:3781 #, no-c-format msgid "Fortran 2003: Function '%s' as initialization expression at %L" msgstr "" -#: fortran/intrinsic.c:3700 +#: fortran/intrinsic.c:3857 #, no-c-format msgid "" "Fortran 2003: Elemental function as initialization expression with non-" "integer/non-character arguments at %L" msgstr "" -#: fortran/intrinsic.c:3761 +#: fortran/intrinsic.c:3918 #, no-c-format msgid "Subroutine call to intrinsic '%s' at %L is not PURE" msgstr "" -#: fortran/intrinsic.c:3833 +#: fortran/intrinsic.c:3990 #, no-c-format msgid "Extension: Conversion from %s to %s at %L" msgstr "" -#: fortran/intrinsic.c:3836 +#: fortran/intrinsic.c:3993 #, no-c-format msgid "Conversion from %s to %s at %L" msgstr "" -#: fortran/intrinsic.c:3883 +#: fortran/intrinsic.c:4041 #, no-c-format msgid "Can't convert %s to %s at %L" msgstr "" -#: fortran/intrinsic.c:3979 +#: fortran/intrinsic.c:4137 #, no-c-format msgid "" "'%s' declared at %L may shadow the intrinsic of the same name. In order to " "call the intrinsic, explicit INTRINSIC declarations may be required." msgstr "" -#: fortran/intrinsic.c:3984 +#: fortran/intrinsic.c:4142 #, no-c-format msgid "" "'%s' declared at %L is also the name of an intrinsic. It can only be called " "via an explicit interface or if declared EXTERNAL." msgstr "" -#: fortran/io.c:165 fortran/primary.c:768 +#: fortran/io.c:167 fortran/primary.c:771 #, no-c-format msgid "Extension: backslash character at %C" msgstr "" -#: fortran/io.c:201 fortran/io.c:204 +#: fortran/io.c:203 fortran/io.c:206 #, no-c-format msgid "Extension: Tab character in format at %C" msgstr "" -#: fortran/io.c:448 +#: fortran/io.c:452 #, no-c-format msgid "Fortran 2003: DP format specifier not allowed at %C" msgstr "" -#: fortran/io.c:455 +#: fortran/io.c:459 #, no-c-format msgid "Fortran 2003: DC format specifier not allowed at %C" msgstr "" -#: fortran/io.c:491 +#: fortran/io.c:548 msgid "Positive width required" msgstr "" -#: fortran/io.c:492 +#: fortran/io.c:549 msgid "Nonnegative width required" msgstr "" -#: fortran/io.c:493 +#: fortran/io.c:550 msgid "Unexpected element '%c' in format string at %L" msgstr "" -#: fortran/io.c:495 +#: fortran/io.c:552 msgid "Unexpected end of format string" msgstr "" -#: fortran/io.c:496 +#: fortran/io.c:553 msgid "Zero width in format descriptor" msgstr "" -#: fortran/io.c:516 +#: fortran/io.c:573 msgid "Missing leading left parenthesis" msgstr "" -#: fortran/io.c:563 +#: fortran/io.c:602 +msgid "Left parenthesis required after '*'" +msgstr "" + +#: fortran/io.c:633 msgid "Expected P edit descriptor" msgstr "" #. P requires a prior number. -#: fortran/io.c:571 +#: fortran/io.c:641 msgid "P descriptor requires leading scale factor" msgstr "" -#. X requires a prior number if we're being pedantic. -#: fortran/io.c:576 +#: fortran/io.c:648 #, no-c-format -msgid "Extension: X descriptor requires leading space count at %C" +msgid "Extension: X descriptor requires leading space count at %L" msgstr "" -#: fortran/io.c:600 +#: fortran/io.c:678 #, no-c-format -msgid "Extension: $ descriptor at %C" +msgid "Extension: $ descriptor at %L" msgstr "" -#: fortran/io.c:605 +#: fortran/io.c:683 #, no-c-format -msgid "$ should be the last specifier in format at %C" +msgid "$ should be the last specifier in format at %L" msgstr "" -#: fortran/io.c:654 -msgid "Repeat count cannot follow P descriptor" +#: fortran/io.c:736 fortran/io.c:750 +msgid "Comma required after P descriptor" msgstr "" -#: fortran/io.c:669 +#: fortran/io.c:764 msgid "Positive width required with T descriptor" msgstr "" -#: fortran/io.c:684 +#: fortran/io.c:781 #, no-c-format -msgid "Extension: Missing positive width after L descriptor at %C" +msgid "Extension: Missing positive width after L descriptor at %L" msgstr "" -#: fortran/io.c:727 +#: fortran/io.c:825 #, no-c-format -msgid "Fortran 2008: 'G0' in format at %C" +msgid "Fortran 2008: 'G0' in format at %L" msgstr "" -#: fortran/io.c:745 +#: fortran/io.c:843 msgid "E specifier not allowed with g0 descriptor" msgstr "" -#: fortran/io.c:759 fortran/io.c:761 fortran/io.c:822 fortran/io.c:824 +#: fortran/io.c:853 #, no-c-format -msgid "Period required in format specifier at %C" +msgid "Positive width required in format specifier %s at %L" msgstr "" -#: fortran/io.c:793 +#: fortran/io.c:869 fortran/io.c:876 +#, no-c-format +msgid "Period required in format specifier %s at %L" +msgstr "" + +#: fortran/io.c:913 msgid "Positive exponent width required" msgstr "" -#: fortran/io.c:842 +#: fortran/io.c:943 +msgid "Period required in format specifier" +msgstr "" + +#: fortran/io.c:948 +#, no-c-format +msgid "Period required in format specifier at %L" +msgstr "" + +#: fortran/io.c:970 #, no-c-format -msgid "The H format specifier at %C is a Fortran 95 deleted feature" +msgid "The H format specifier at %L is a Fortran 95 deleted feature" msgstr "" -#: fortran/io.c:927 fortran/io.c:984 +#: fortran/io.c:1058 fortran/io.c:1121 #, no-c-format -msgid "Extension: Missing comma at %C" +msgid "Extension: Missing comma at %L" msgstr "" -#: fortran/io.c:999 +#: fortran/io.c:1140 #, no-c-format msgid "%s in format string at %L" msgstr "" -#: fortran/io.c:1044 +#: fortran/io.c:1185 #, no-c-format msgid "Format statement in module main block at %C" msgstr "" -#: fortran/io.c:1050 +#: fortran/io.c:1191 #, no-c-format msgid "Missing format label at %C" msgstr "" -#: fortran/io.c:1110 fortran/io.c:1141 fortran/io.c:1203 +#: fortran/io.c:1251 fortran/io.c:1282 fortran/io.c:1344 #, no-c-format msgid "Invalid value for %s specification at %C" msgstr "" -#: fortran/io.c:1116 fortran/io.c:1147 +#: fortran/io.c:1257 fortran/io.c:1288 #, no-c-format msgid "Duplicate %s specification at %C" msgstr "" -#: fortran/io.c:1154 +#: fortran/io.c:1295 #, no-c-format msgid "Variable %s cannot be INTENT(IN) at %C" msgstr "" -#: fortran/io.c:1161 +#: fortran/io.c:1302 #, no-c-format msgid "Variable %s cannot be assigned in PURE procedure at %C" msgstr "" -#: fortran/io.c:1209 +#: fortran/io.c:1350 #, no-c-format msgid "Duplicate %s label specification at %C" msgstr "" -#: fortran/io.c:1229 +#: fortran/io.c:1370 #, no-c-format msgid "" "Constant expression in FORMAT tag at %L must be of type default CHARACTER" msgstr "" -#: fortran/io.c:1242 +#: fortran/io.c:1386 #, no-c-format msgid "FORMAT tag at %L must be of type CHARACTER or INTEGER" msgstr "" -#: fortran/io.c:1248 +#: fortran/io.c:1392 #, no-c-format msgid "Deleted feature: ASSIGNED variable in FORMAT tag at %L" msgstr "" -#: fortran/io.c:1254 +#: fortran/io.c:1398 #, no-c-format msgid "Variable '%s' at %L has not been assigned a format label" msgstr "" -#: fortran/io.c:1261 +#: fortran/io.c:1405 #, no-c-format msgid "Scalar '%s' in FORMAT tag at %L is not an ASSIGNED variable" msgstr "" -#: fortran/io.c:1274 +#: fortran/io.c:1417 #, no-c-format -msgid "Extension: Character array in FORMAT tag at %L" +msgid "Extension: Non-character in FORMAT tag at %L" msgstr "" -#: fortran/io.c:1280 +#: fortran/io.c:1423 #, no-c-format -msgid "Extension: Non-character in FORMAT tag at %L" +msgid "Non-character assumed shape array element in FORMAT tag at %L" +msgstr "" + +#: fortran/io.c:1430 +#, no-c-format +msgid "Non-character assumed size array element in FORMAT tag at %L" +msgstr "" + +#: fortran/io.c:1437 +#, no-c-format +msgid "Non-character pointer array element in FORMAT tag at %L" msgstr "" -#: fortran/io.c:1305 +#: fortran/io.c:1463 #, no-c-format msgid "%s tag at %L must be of type %s" msgstr "" -#: fortran/io.c:1312 +#: fortran/io.c:1470 #, no-c-format msgid "%s tag at %L must be scalar" msgstr "" -#: fortran/io.c:1318 +#: fortran/io.c:1476 #, no-c-format msgid "Fortran 2003: IOMSG tag at %L" msgstr "" -#: fortran/io.c:1326 +#: fortran/io.c:1484 #, no-c-format msgid "Fortran 95 requires default INTEGER in %s tag at %L" msgstr "" -#: fortran/io.c:1334 +#: fortran/io.c:1492 #, no-c-format msgid "Extension: CONVERT tag at %L" msgstr "" -#: fortran/io.c:1515 fortran/io.c:1523 +#: fortran/io.c:1678 fortran/io.c:1686 #, no-c-format msgid "Fortran 2003: %s specifier in %s statement at %C has value '%s'" msgstr "" -#: fortran/io.c:1542 fortran/io.c:1550 +#: fortran/io.c:1705 fortran/io.c:1713 #, no-c-format msgid "Extension: %s specifier in %s statement at %C has value '%s'" msgstr "" -#: fortran/io.c:1563 fortran/io.c:1571 +#: fortran/io.c:1726 fortran/io.c:1734 #, no-c-format msgid "%s specifier in %s statement at %C has invalid value '%s'" msgstr "" -#: fortran/io.c:1626 +#: fortran/io.c:1789 #, no-c-format msgid "OPEN statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:1659 +#: fortran/io.c:1800 +#, no-c-format +msgid "UNIT specifier not allowed with NEWUNIT at %C" +msgstr "" + +#: fortran/io.c:1808 +#, no-c-format +msgid "NEWUNIT specifier must have FILE= or STATUS='scratch' at %C" +msgstr "" + +#: fortran/io.c:1842 #, no-c-format msgid "Fortran 2003: ASYNCHRONOUS= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1677 fortran/io.c:3060 +#: fortran/io.c:1860 fortran/io.c:3274 #, no-c-format msgid "Fortran 2003: BLANK= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1695 fortran/io.c:3039 +#: fortran/io.c:1878 fortran/io.c:3253 #, no-c-format msgid "Fortran 2003: DECIMAL= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1713 fortran/io.c:3150 +#: fortran/io.c:1896 fortran/io.c:3361 #, no-c-format msgid "Fortran 2003: DELIM= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1731 +#: fortran/io.c:1914 #, no-c-format msgid "Fortran 2003: ENCODING= at %C not allowed in Fortran 95" msgstr "" -#. When implemented, change the following to use gfc_notify_std F2003. -#: fortran/io.c:1783 +#: fortran/io.c:1965 #, no-c-format -msgid "Fortran F2003: ROUND= specifier at %C not implemented" +msgid "Fortran F2003: ROUND= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:1802 +#: fortran/io.c:1985 #, no-c-format msgid "Fortran 2003: SIGN= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:2015 +#: fortran/io.c:2198 #, no-c-format msgid "CLOSE statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:2152 fortran/match.c:1949 +#: fortran/io.c:2245 +#, no-c-format +msgid "UNIT number in CLOSE statement at %L must be non-negative" +msgstr "" + +#: fortran/io.c:2343 fortran/match.c:1976 #, no-c-format msgid "%s statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:2208 +#: fortran/io.c:2375 fortran/io.c:2783 +#, no-c-format +msgid "UNIT number in statement at %L must be non-negative" +msgstr "" + +#: fortran/io.c:2407 #, no-c-format msgid "Fortran 2003: FLUSH statement at %C" msgstr "" -#: fortran/io.c:2264 +#: fortran/io.c:2463 #, no-c-format msgid "Duplicate UNIT specification at %C" msgstr "" -#: fortran/io.c:2324 +#: fortran/io.c:2523 #, no-c-format msgid "Duplicate format specification at %C" msgstr "" -#: fortran/io.c:2341 +#: fortran/io.c:2540 #, no-c-format msgid "Symbol '%s' in namelist '%s' is INTENT(IN) at %C" msgstr "" -#: fortran/io.c:2377 +#: fortran/io.c:2576 #, no-c-format msgid "Duplicate NML specification at %C" msgstr "" -#: fortran/io.c:2386 +#: fortran/io.c:2585 #, no-c-format msgid "Symbol '%s' at %C must be a NAMELIST group name" msgstr "" -#: fortran/io.c:2451 +#: fortran/io.c:2650 #, no-c-format msgid "END tag at %C not allowed in output statement" msgstr "" -#: fortran/io.c:2528 +#: fortran/io.c:2721 +#, no-c-format +msgid "UNIT not specified at %L" +msgstr "" + +#: fortran/io.c:2733 #, no-c-format msgid "" "UNIT specification at %L must be an INTEGER expression or a CHARACTER " "variable" msgstr "" -#: fortran/io.c:2553 +#: fortran/io.c:2758 #, no-c-format msgid "Invalid form of WRITE statement at %L, UNIT required" msgstr "" -#: fortran/io.c:2564 +#: fortran/io.c:2769 #, no-c-format msgid "Internal unit with vector subscript at %L" msgstr "" -#: fortran/io.c:2571 +#: fortran/io.c:2776 #, no-c-format msgid "External IO UNIT cannot be an array at %L" msgstr "" -#: fortran/io.c:2576 +#: fortran/io.c:2788 #, no-c-format msgid "Extension: Comma before i/o item list at %L" msgstr "" -#: fortran/io.c:2586 +#: fortran/io.c:2798 #, no-c-format msgid "ERR tag label %d at %L not defined" msgstr "" -#: fortran/io.c:2598 +#: fortran/io.c:2810 #, no-c-format msgid "END tag label %d at %L not defined" msgstr "" -#: fortran/io.c:2610 +#: fortran/io.c:2822 #, no-c-format msgid "EOR tag label %d at %L not defined" msgstr "" -#: fortran/io.c:2620 +#: fortran/io.c:2832 #, no-c-format msgid "FORMAT label %d at %L not defined" msgstr "" -#: fortran/io.c:2741 +#: fortran/io.c:2953 #, no-c-format msgid "Syntax error in I/O iterator at %C" msgstr "" -#: fortran/io.c:2772 +#: fortran/io.c:2984 #, no-c-format msgid "Expected variable in READ statement at %C" msgstr "" -#: fortran/io.c:2778 +#: fortran/io.c:2990 #, no-c-format msgid "Expected expression in %s statement at %C" msgstr "" -#: fortran/io.c:2788 +#: fortran/io.c:3000 #, no-c-format msgid "Variable '%s' in input list at %C cannot be INTENT(IN)" msgstr "" -#: fortran/io.c:2797 +#: fortran/io.c:3010 #, no-c-format msgid "Cannot read to variable '%s' in PURE procedure at %C" msgstr "" -#: fortran/io.c:2813 +#: fortran/io.c:3027 #, no-c-format msgid "Cannot write to internal file unit '%s' at %C inside a PURE procedure" msgstr "" #. A general purpose syntax error. -#: fortran/io.c:2874 fortran/io.c:3481 fortran/gfortran.h:2232 +#: fortran/io.c:3088 fortran/io.c:3692 fortran/gfortran.h:2362 #, no-c-format msgid "Syntax error in %s statement at %C" msgstr "" -#: fortran/io.c:2959 +#: fortran/io.c:3173 #, no-c-format msgid "Fortran 2003: Internal file at %L with namelist" msgstr "" -#: fortran/io.c:3013 +#: fortran/io.c:3227 #, no-c-format msgid "ASYNCHRONOUS= specifier at %L must be an initialization expression" msgstr "" -#: fortran/io.c:3081 +#: fortran/io.c:3295 #, no-c-format msgid "Fortran 2003: PAD= at %C not allowed in Fortran 95" msgstr "" -#. When implemented, change the following to use gfc_notify_std F2003. -#. if (gfc_notify_std (GFC_STD_F2003, "Fortran 2003: ROUND= at %C " -#. "not allowed in Fortran 95") == FAILURE) -#. return MATCH_ERROR; -#: fortran/io.c:3106 +#: fortran/io.c:3316 #, no-c-format -msgid "F2003 Feature: ROUND= specifier at %C not implemented" +msgid "Fortran 2003: ROUND= at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:3299 +#: fortran/io.c:3510 #, no-c-format msgid "PRINT namelist at %C is an extension" msgstr "" -#: fortran/io.c:3451 +#: fortran/io.c:3662 #, no-c-format msgid "Expected comma in I/O list at %C" msgstr "" -#: fortran/io.c:3515 +#: fortran/io.c:3726 #, no-c-format msgid "PRINT statement at %C not allowed within PURE procedure" msgstr "" -#: fortran/io.c:3671 fortran/io.c:3722 +#: fortran/io.c:3882 fortran/io.c:3933 #, no-c-format msgid "INQUIRE statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/io.c:3698 +#: fortran/io.c:3909 #, no-c-format msgid "IOLENGTH tag invalid in INQUIRE statement at %C" msgstr "" -#: fortran/io.c:3708 fortran/trans-io.c:1176 +#: fortran/io.c:3919 fortran/trans-io.c:1181 #, no-c-format msgid "INQUIRE statement at %L cannot contain both FILE and UNIT specifiers" msgstr "" -#: fortran/io.c:3715 +#: fortran/io.c:3926 #, no-c-format msgid "INQUIRE statement at %L requires either FILE or UNIT specifier" msgstr "" -#: fortran/io.c:3728 +#: fortran/io.c:3939 #, no-c-format msgid "" "INQUIRE statement at %L requires a PENDING= specifier with the ID= specifier" msgstr "" -#: fortran/io.c:3888 +#: fortran/io.c:4099 #, no-c-format msgid "Fortran 2003: WAIT at %C not allowed in Fortran 95" msgstr "" -#: fortran/io.c:3894 +#: fortran/io.c:4105 #, no-c-format msgid "WAIT statement not allowed in PURE procedure at %C" msgstr "" -#: fortran/match.c:158 +#: fortran/match.c:161 #, no-c-format msgid "Missing ')' in statement at or before %L" msgstr "" -#: fortran/match.c:163 +#: fortran/match.c:166 #, no-c-format msgid "Missing '(' in statement at or before %L" msgstr "" -#: fortran/match.c:360 +#: fortran/match.c:363 #, no-c-format msgid "Integer too large at %C" msgstr "" -#: fortran/match.c:453 fortran/parse.c:599 +#: fortran/match.c:456 fortran/parse.c:631 #, no-c-format msgid "Too many digits in statement label at %C" msgstr "" -#: fortran/match.c:459 +#: fortran/match.c:462 #, no-c-format msgid "Statement label at %C is zero" msgstr "" -#: fortran/match.c:492 +#: fortran/match.c:495 #, no-c-format msgid "Label name '%s' at %C is ambiguous" msgstr "" -#: fortran/match.c:498 +#: fortran/match.c:501 #, no-c-format msgid "Duplicate construct label '%s' at %C" msgstr "" -#: fortran/match.c:529 +#: fortran/match.c:532 #, no-c-format msgid "Invalid character in name at %C" msgstr "" -#: fortran/match.c:542 fortran/match.c:623 +#: fortran/match.c:545 fortran/match.c:626 #, no-c-format msgid "Name at %C is too long" msgstr "" -#: fortran/match.c:553 +#: fortran/match.c:556 #, no-c-format msgid "" "Invalid character '$' at %C. Use -fdollar-ok to allow it as an extension" msgstr "" -#: fortran/match.c:604 fortran/match.c:652 +#: fortran/match.c:607 fortran/match.c:655 #, no-c-format msgid "Invalid C name in NAME= specifier at %C" msgstr "" -#: fortran/match.c:643 +#: fortran/match.c:646 #, no-c-format msgid "Embedded space in NAME= specifier at %C" msgstr "" -#: fortran/match.c:968 +#: fortran/match.c:971 #, no-c-format msgid "Loop variable at %C cannot be a sub-component" msgstr "" -#: fortran/match.c:974 +#: fortran/match.c:977 #, no-c-format msgid "Loop variable '%s' at %C cannot be INTENT(IN)" msgstr "" -#: fortran/match.c:1007 +#: fortran/match.c:1010 #, no-c-format msgid "Expected a step value in iterator at %C" msgstr "" -#: fortran/match.c:1019 +#: fortran/match.c:1022 #, no-c-format msgid "Syntax error in iterator at %C" msgstr "" -#: fortran/match.c:1260 +#: fortran/match.c:1263 #, no-c-format msgid "Invalid form of PROGRAM statement at %C" msgstr "" -#: fortran/match.c:1386 fortran/match.c:1467 +#: fortran/match.c:1389 fortran/match.c:1470 #, no-c-format -msgid "Obsolescent: arithmetic IF statement at %C" +msgid "Obsolescent feature: Arithmetic IF statement at %C" msgstr "" -#: fortran/match.c:1442 +#: fortran/match.c:1445 #, no-c-format msgid "Syntax error in IF-expression at %C" msgstr "" -#: fortran/match.c:1453 +#: fortran/match.c:1456 #, no-c-format msgid "Block label not appropriate for arithmetic IF statement at %C" msgstr "" -#: fortran/match.c:1491 +#: fortran/match.c:1494 #, no-c-format msgid "Block label is not appropriate for IF statement at %C" msgstr "" -#: fortran/match.c:1571 fortran/primary.c:2931 +#: fortran/match.c:1574 fortran/primary.c:2992 #, no-c-format msgid "Cannot assign to a named constant at %C" msgstr "" -#: fortran/match.c:1581 +#: fortran/match.c:1584 #, no-c-format msgid "Unclassifiable statement in IF-clause at %C" msgstr "" -#: fortran/match.c:1588 +#: fortran/match.c:1591 #, no-c-format msgid "Syntax error in IF-clause at %C" msgstr "" -#: fortran/match.c:1632 +#: fortran/match.c:1635 #, no-c-format msgid "Unexpected junk after ELSE statement at %C" msgstr "" -#: fortran/match.c:1638 fortran/match.c:1673 +#: fortran/match.c:1641 fortran/match.c:1676 #, no-c-format msgid "Label '%s' at %C doesn't match IF label '%s'" msgstr "" -#: fortran/match.c:1667 +#: fortran/match.c:1670 #, no-c-format msgid "Unexpected junk after ELSE IF statement at %C" msgstr "" -#: fortran/match.c:1835 +#: fortran/match.c:1862 #, no-c-format msgid "Name '%s' in %s statement at %C is not a loop name" msgstr "" -#: fortran/match.c:1851 +#: fortran/match.c:1878 #, no-c-format msgid "%s statement at %C is not within a loop" msgstr "" -#: fortran/match.c:1854 +#: fortran/match.c:1881 #, no-c-format msgid "%s statement at %C is not within loop '%s'" msgstr "" -#: fortran/match.c:1862 +#: fortran/match.c:1889 #, no-c-format msgid "%s statement at %C leaving OpenMP structured block" msgstr "" -#: fortran/match.c:1875 +#: fortran/match.c:1902 #, no-c-format msgid "EXIT statement at %C terminating !$OMP DO loop" msgstr "" -#: fortran/match.c:1927 +#: fortran/match.c:1954 #, no-c-format msgid "Too many digits in STOP code at %C" msgstr "" -#: fortran/match.c:1980 +#: fortran/match.c:2007 #, no-c-format msgid "Deleted feature: PAUSE statement at %C" msgstr "" -#: fortran/match.c:2028 +#: fortran/match.c:2055 #, no-c-format msgid "Deleted feature: ASSIGN statement at %C" msgstr "" -#: fortran/match.c:2074 +#: fortran/match.c:2101 #, no-c-format msgid "Deleted feature: Assigned GOTO statement at %C" msgstr "" -#: fortran/match.c:2121 fortran/match.c:2173 +#: fortran/match.c:2148 fortran/match.c:2200 #, no-c-format msgid "Statement label list in GOTO at %C cannot be empty" msgstr "" -#: fortran/match.c:2258 +#: fortran/match.c:2210 +#, no-c-format +msgid "Obsolescent feature: Computed GOTO at %C" +msgstr "" + +#. Enforce F03:C476. +#: fortran/match.c:2273 +#, no-c-format +msgid "'%s' at %L is not an accessible derived type" +msgstr "" + +#: fortran/match.c:2351 +#, no-c-format +msgid "Derived type '%s' at %L may not be ABSTRACT" +msgstr "" + +#: fortran/match.c:2369 +#, no-c-format +msgid "Invalid type-spec at %C" +msgstr "" + +#: fortran/match.c:2401 +#, no-c-format +msgid "" +"Source-expr at %L must be scalar or have the same rank as the allocate-" +"object at %L" +msgstr "" + +#: fortran/match.c:2429 +#, no-c-format +msgid "Source-expr at %L and allocate-object at %L must have the same shape" +msgstr "" + +#: fortran/match.c:2474 +#, no-c-format +msgid "Fortran 2003: typespec in ALLOCATE at %L" +msgstr "" + +#: fortran/match.c:2506 #, no-c-format msgid "Bad allocate-object at %C for a PURE procedure" msgstr "" -#: fortran/match.c:2274 fortran/match.c:2476 +#: fortran/match.c:2517 +#, no-c-format +msgid "Type of entity at %L is type incompatible with typespec" +msgstr "" + +#: fortran/match.c:2525 +#, no-c-format +msgid "" +"Kind type parameter for entity at %L differs from the kind type parameter of " +"the typespec" +msgstr "" + +#: fortran/match.c:2552 fortran/match.c:2829 #, no-c-format msgid "" "Allocate-object at %C is not a nonprocedure pointer or an allocatable " "variable" msgstr "" -#: fortran/match.c:2291 fortran/match.c:2493 +#: fortran/match.c:2570 fortran/match.c:2846 #, no-c-format msgid "Redundant STAT tag found at %L " msgstr "" -#: fortran/match.c:2311 fortran/match.c:2513 +#: fortran/match.c:2589 #, no-c-format -msgid "Fortran 2003: ERRMSG at %L" +msgid "Fortran 2003: ERRMSG tag at %L" msgstr "" -#: fortran/match.c:2317 fortran/match.c:2519 +#: fortran/match.c:2596 fortran/match.c:2872 #, no-c-format msgid "Redundant ERRMSG tag found at %L " msgstr "" -#: fortran/match.c:2385 +#: fortran/match.c:2612 +#, no-c-format +msgid "Fortran 2003: SOURCE tag at %L" +msgstr "" + +#: fortran/match.c:2619 +#, no-c-format +msgid "Redundant SOURCE tag found at %L " +msgstr "" + +#: fortran/match.c:2626 +#, no-c-format +msgid "SOURCE tag at %L conflicts with the typespec at %L" +msgstr "" + +#: fortran/match.c:2633 +#, no-c-format +msgid "SOURCE tag at %L requires only a single entity in the allocation-list" +msgstr "" + +#: fortran/match.c:2642 +#, no-c-format +msgid "Type of entity at %L is type incompatible with source-expr at %L" +msgstr "" + +#: fortran/match.c:2650 +#, no-c-format +msgid "" +"The allocate-object at %L and the source-expr at %L shall have the same kind " +"type parameter" +msgstr "" + +#: fortran/match.c:2727 #, no-c-format msgid "Illegal variable in NULLIFY at %C for a PURE procedure" msgstr "" -#: fortran/match.c:2463 +#: fortran/match.c:2813 #, no-c-format msgid "Illegal allocate-object at %C for a PURE procedure" msgstr "" -#: fortran/match.c:2573 +#: fortran/match.c:2866 +#, no-c-format +msgid "Fortran 2003: ERRMSG at %L" +msgstr "" + +#: fortran/match.c:2926 #, no-c-format msgid "Alternate RETURN statement at %C is only allowed within a SUBROUTINE" msgstr "" -#: fortran/match.c:2604 +#: fortran/match.c:2931 +#, no-c-format +msgid "Obsolescent feature: Alternate RETURN at %C" +msgstr "" + +#: fortran/match.c:2961 #, no-c-format msgid "Extension: RETURN statement in main program at %C" msgstr "" -#: fortran/match.c:2635 +#: fortran/match.c:2992 #, no-c-format msgid "Expected component reference at %C" msgstr "" -#: fortran/match.c:2641 +#: fortran/match.c:2998 #, no-c-format msgid "Junk after CALL at %C" msgstr "" -#: fortran/match.c:2651 +#: fortran/match.c:3008 #, no-c-format msgid "Expected type-bound procedure or procedure pointer component at %C" msgstr "" -#: fortran/match.c:2868 +#: fortran/match.c:3226 #, no-c-format msgid "Syntax error in common block name at %C" msgstr "" -#: fortran/match.c:2904 +#: fortran/match.c:3262 #, no-c-format msgid "Symbol '%s' at %C is already an external symbol that is not COMMON" msgstr "" @@ -7272,131 +7712,162 @@ msgstr "" #. If we find an error, just print it and continue, #. cause it's just semantic, and we can see if there #. are more errors. -#: fortran/match.c:2963 +#: fortran/match.c:3321 #, no-c-format msgid "" "Variable '%s' at %L in common block '%s' at %C must be declared with a C " "interoperable kind since common block '%s' is bind(c)" msgstr "" -#: fortran/match.c:2972 +#: fortran/match.c:3330 #, no-c-format msgid "" "Variable '%s' in common block '%s' at %C can not be bind(c) since it is not " "global" msgstr "" -#: fortran/match.c:2979 +#: fortran/match.c:3337 #, no-c-format msgid "Symbol '%s' at %C is already in a COMMON block" msgstr "" -#: fortran/match.c:2987 +#: fortran/match.c:3345 #, no-c-format msgid "Initialized symbol '%s' at %C can only be COMMON in BLOCK DATA" msgstr "" -#: fortran/match.c:3014 +#: fortran/match.c:3372 #, no-c-format msgid "Array specification for symbol '%s' in COMMON at %C must be explicit" msgstr "" -#: fortran/match.c:3024 +#: fortran/match.c:3382 #, no-c-format msgid "Symbol '%s' in COMMON at %C cannot be a POINTER array" msgstr "" -#: fortran/match.c:3056 +#: fortran/match.c:3414 #, no-c-format msgid "" "Symbol '%s', in COMMON block '%s' at %C is being indirectly equivalenced to " "another COMMON block '%s'" msgstr "" -#: fortran/match.c:3164 +#: fortran/match.c:3522 #, no-c-format msgid "Namelist group name '%s' at %C already has a basic type of %s" msgstr "" -#: fortran/match.c:3172 +#: fortran/match.c:3530 #, no-c-format msgid "" "Namelist group name '%s' at %C already is USE associated and cannot be " "respecified." msgstr "" -#: fortran/match.c:3199 +#: fortran/match.c:3557 #, no-c-format msgid "Assumed size array '%s' in namelist '%s' at %C is not allowed" msgstr "" -#: fortran/match.c:3206 +#: fortran/match.c:3564 #, no-c-format msgid "Assumed character length '%s' in namelist '%s' at %C is not allowed" msgstr "" -#: fortran/match.c:3333 +#: fortran/match.c:3691 #, no-c-format msgid "Derived type component %C is not a permitted EQUIVALENCE member" msgstr "" -#: fortran/match.c:3341 +#: fortran/match.c:3699 #, no-c-format msgid "Array reference in EQUIVALENCE at %C cannot be an array section" msgstr "" -#: fortran/match.c:3369 +#: fortran/match.c:3727 #, no-c-format msgid "EQUIVALENCE at %C requires two or more objects" msgstr "" -#: fortran/match.c:3383 +#: fortran/match.c:3741 #, no-c-format msgid "" "Attempt to indirectly overlap COMMON blocks %s and %s by EQUIVALENCE at %C" msgstr "" -#: fortran/match.c:3509 +#: fortran/match.c:3867 #, no-c-format msgid "Statement function at %L is recursive" msgstr "" -#: fortran/match.c:3597 +#: fortran/match.c:3873 +#, no-c-format +msgid "Obsolescent feature: Statement function at %C" +msgstr "" + +#: fortran/match.c:3959 #, no-c-format msgid "Expected initialization expression in CASE at %C" msgstr "" -#: fortran/match.c:3620 +#: fortran/match.c:3991 +#, no-c-format +msgid "Expected block name '%s' of SELECT construct at %C" +msgstr "" + +#: fortran/match.c:4098 #, no-c-format -msgid "Expected the name of the SELECT CASE construct at %C" +msgid "" +"Selector in SELECT TYPE at %C is not a named variable; use associate-name=>" msgstr "" -#: fortran/match.c:3632 +#: fortran/match.c:4106 #, no-c-format -msgid "Expected case name of '%s' at %C" +msgid "Selector shall be polymorphic in SELECT TYPE statement at %C" msgstr "" -#: fortran/match.c:3676 +#: fortran/match.c:4134 #, no-c-format msgid "Unexpected CASE statement at %C" msgstr "" -#: fortran/match.c:3728 +#: fortran/match.c:4186 +#, no-c-format +msgid "Syntax error in CASE specification at %C" +msgstr "" + +#: fortran/match.c:4204 +#, no-c-format +msgid "Unexpected TYPE IS statement at %C" +msgstr "" + +#: fortran/match.c:4237 +#, no-c-format +msgid "Syntax error in TYPE IS specification at %C" +msgstr "" + +#: fortran/match.c:4303 #, no-c-format -msgid "Syntax error in CASE-specification at %C" +msgid "CLASS IS specification at %C is not yet supported" msgstr "" -#: fortran/match.c:3848 +#: fortran/match.c:4308 +#, no-c-format +msgid "Syntax error in CLASS IS specification at %C" +msgstr "" + +#: fortran/match.c:4430 #, no-c-format msgid "ELSEWHERE statement at %C not enclosed in WHERE block" msgstr "" -#: fortran/match.c:3886 +#: fortran/match.c:4468 #, no-c-format msgid "Label '%s' at %C doesn't match WHERE label '%s'" msgstr "" -#: fortran/match.c:3986 +#: fortran/match.c:4568 #, no-c-format msgid "Syntax error in FORALL iterator at %C" msgstr "" @@ -7439,284 +7910,284 @@ msgstr "" msgid "Out of memory-- malloc() failed" msgstr "" -#: fortran/module.c:509 +#: fortran/module.c:519 #, no-c-format msgid "Fortran 2003: module nature in USE statement at %C" msgstr "" -#: fortran/module.c:521 +#: fortran/module.c:531 #, no-c-format msgid "" "Module nature in USE statement at %C shall be either INTRINSIC or " "NON_INTRINSIC" msgstr "" -#: fortran/module.c:534 +#: fortran/module.c:544 #, no-c-format msgid "\"::\" was expected after module nature at %C but was not found" msgstr "" -#: fortran/module.c:543 +#: fortran/module.c:553 #, no-c-format msgid "Fortran 2003: \"USE :: module\" at %C" msgstr "" -#: fortran/module.c:597 +#: fortran/module.c:607 #, no-c-format msgid "Missing generic specification in USE statement at %C" msgstr "" -#: fortran/module.c:605 +#: fortran/module.c:615 #, no-c-format msgid "Fortran 2003: Renaming operators in USE statements at %C" msgstr "" -#: fortran/module.c:647 +#: fortran/module.c:657 #, no-c-format msgid "The name '%s' at %C has already been used as an external module name." msgstr "" -#: fortran/module.c:925 +#: fortran/module.c:935 #, no-c-format msgid "Reading module %s at line %d column %d: %s" msgstr "" -#: fortran/module.c:929 +#: fortran/module.c:939 #, no-c-format msgid "Writing module %s at line %d column %d: %s" msgstr "" -#: fortran/module.c:933 +#: fortran/module.c:943 #, no-c-format msgid "Module %s at line %d column %d: %s" msgstr "" -#: fortran/module.c:973 +#: fortran/module.c:983 msgid "Unexpected EOF" msgstr "" -#: fortran/module.c:1005 +#: fortran/module.c:1015 msgid "Unexpected end of module in string constant" msgstr "" -#: fortran/module.c:1059 +#: fortran/module.c:1069 msgid "Integer overflow" msgstr "" -#: fortran/module.c:1090 +#: fortran/module.c:1100 msgid "Name too long" msgstr "" -#: fortran/module.c:1197 +#: fortran/module.c:1207 msgid "Bad name" msgstr "" -#: fortran/module.c:1241 +#: fortran/module.c:1251 msgid "Expected name" msgstr "" -#: fortran/module.c:1244 +#: fortran/module.c:1254 msgid "Expected left parenthesis" msgstr "" -#: fortran/module.c:1247 +#: fortran/module.c:1257 msgid "Expected right parenthesis" msgstr "" -#: fortran/module.c:1250 +#: fortran/module.c:1260 msgid "Expected integer" msgstr "" -#: fortran/module.c:1253 +#: fortran/module.c:1263 msgid "Expected string" msgstr "" -#: fortran/module.c:1277 +#: fortran/module.c:1287 msgid "find_enum(): Enum not found" msgstr "" -#: fortran/module.c:1291 +#: fortran/module.c:1301 #, no-c-format msgid "Error writing modules file: %s" msgstr "" -#: fortran/module.c:1841 +#: fortran/module.c:1882 msgid "Expected attribute bit name" msgstr "" -#: fortran/module.c:2666 +#: fortran/module.c:2741 msgid "Expected integer string" msgstr "" -#: fortran/module.c:2670 +#: fortran/module.c:2745 msgid "Error converting integer" msgstr "" -#: fortran/module.c:2692 +#: fortran/module.c:2767 msgid "Expected real string" msgstr "" -#: fortran/module.c:2894 +#: fortran/module.c:2969 msgid "Expected expression type" msgstr "" -#: fortran/module.c:2948 +#: fortran/module.c:3023 msgid "Bad operator" msgstr "" -#: fortran/module.c:3037 +#: fortran/module.c:3112 msgid "Bad type in constant expression" msgstr "" -#: fortran/module.c:3079 +#: fortran/module.c:3154 #, no-c-format msgid "Namelist %s cannot be renamed by USE association to %s" msgstr "" -#: fortran/module.c:4261 +#: fortran/module.c:4428 #, no-c-format msgid "Symbol '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:4268 +#: fortran/module.c:4435 #, no-c-format msgid "User operator '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:4273 +#: fortran/module.c:4440 #, no-c-format msgid "Intrinsic operator '%s' referenced at %L not found in module '%s'" msgstr "" -#: fortran/module.c:4836 +#: fortran/module.c:5049 #, no-c-format msgid "Can't open module file '%s' for writing at %C: %s" msgstr "" -#: fortran/module.c:4874 +#: fortran/module.c:5087 #, no-c-format msgid "Error writing module file '%s' for writing: %s" msgstr "" -#: fortran/module.c:4883 +#: fortran/module.c:5096 #, no-c-format msgid "Can't delete module file '%s': %s" msgstr "" -#: fortran/module.c:4886 +#: fortran/module.c:5099 #, no-c-format msgid "Can't rename module file '%s' to '%s': %s" msgstr "" -#: fortran/module.c:4892 +#: fortran/module.c:5105 #, no-c-format msgid "Can't delete temporary module file '%s': %s" msgstr "" -#: fortran/module.c:4912 fortran/module.c:4994 +#: fortran/module.c:5125 fortran/module.c:5208 #, no-c-format msgid "" "Symbol '%s' referenced at %L does not exist in intrinsic module " "ISO_C_BINDING." msgstr "" -#: fortran/module.c:5029 +#: fortran/module.c:5243 #, no-c-format msgid "" "Symbol '%s' referenced at %L not found in intrinsic module ISO_C_BINDING" msgstr "" -#: fortran/module.c:5051 +#: fortran/module.c:5265 #, no-c-format msgid "Symbol '%s' already declared" msgstr "" -#: fortran/module.c:5106 +#: fortran/module.c:5320 #, no-c-format msgid "" "Use of intrinsic module '%s' at %C conflicts with non-intrinsic module name " "used previously" msgstr "" -#: fortran/module.c:5119 +#: fortran/module.c:5333 #, no-c-format msgid "" "Symbol '%s' referenced at %L does not exist in intrinsic module " "ISO_FORTRAN_ENV" msgstr "" -#: fortran/module.c:5127 +#: fortran/module.c:5341 #, no-c-format msgid "" "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module " "ISO_FORTRAN_ENV at %L is incompatible with option %s" msgstr "" -#: fortran/module.c:5155 +#: fortran/module.c:5369 #, no-c-format msgid "" "Use of the NUMERIC_STORAGE_SIZE named constant from intrinsic module " "ISO_FORTRAN_ENV at %C is incompatible with option %s" msgstr "" -#: fortran/module.c:5171 +#: fortran/module.c:5385 #, no-c-format msgid "" "Symbol '%s' referenced at %L not found in intrinsic module ISO_FORTRAN_ENV" msgstr "" -#: fortran/module.c:5205 +#: fortran/module.c:5419 #, no-c-format msgid "Fortran 2003: ISO_FORTRAN_ENV intrinsic module at %C" msgstr "" -#: fortran/module.c:5213 +#: fortran/module.c:5427 #, no-c-format msgid "Fortran 2003: ISO_C_BINDING module at %C" msgstr "" -#: fortran/module.c:5223 +#: fortran/module.c:5437 #, no-c-format msgid "Can't find an intrinsic module named '%s' at %C" msgstr "" -#: fortran/module.c:5228 +#: fortran/module.c:5442 #, no-c-format msgid "Can't open module file '%s' for reading at %C: %s" msgstr "" -#: fortran/module.c:5236 +#: fortran/module.c:5450 #, no-c-format msgid "" "Use of non-intrinsic module '%s' at %C conflicts with intrinsic module name " "used previously" msgstr "" -#: fortran/module.c:5251 +#: fortran/module.c:5465 msgid "Unexpected end of module" msgstr "" -#: fortran/module.c:5256 +#: fortran/module.c:5470 #, no-c-format msgid "File '%s' opened at %C is not a GFORTRAN module file" msgstr "" -#: fortran/module.c:5263 +#: fortran/module.c:5477 #, no-c-format msgid "Parse error when checking module version for file '%s' opened at %C" msgstr "" -#: fortran/module.c:5268 +#: fortran/module.c:5482 #, no-c-format msgid "Wrong module version '%s' (expected '" msgstr "" -#: fortran/module.c:5281 +#: fortran/module.c:5495 #, no-c-format msgid "Can't USE the same module we're building!" msgstr "" -#: fortran/openmp.c:134 fortran/openmp.c:562 +#: fortran/openmp.c:134 fortran/openmp.c:563 #, no-c-format msgid "COMMON block /%s/ not found at %C" msgstr "" @@ -7736,689 +8207,701 @@ msgstr "" msgid "COLLAPSE clause argument not constant positive integer at %C" msgstr "" -#: fortran/openmp.c:541 +#: fortran/openmp.c:542 #, no-c-format msgid "Threadprivate variable at %C is an element of a COMMON block" msgstr "" -#: fortran/openmp.c:581 +#: fortran/openmp.c:582 #, no-c-format msgid "Syntax error in !$OMP THREADPRIVATE list at %C" msgstr "" -#: fortran/openmp.c:759 fortran/resolve.c:6635 fortran/resolve.c:6989 +#: fortran/openmp.c:760 fortran/resolve.c:7424 fortran/resolve.c:7813 #, no-c-format msgid "IF clause at %L requires a scalar LOGICAL expression" msgstr "" -#: fortran/openmp.c:767 +#: fortran/openmp.c:768 #, no-c-format msgid "NUM_THREADS clause at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.c:775 +#: fortran/openmp.c:776 #, no-c-format msgid "SCHEDULE clause's chunk_size at %L requires a scalar INTEGER expression" msgstr "" -#: fortran/openmp.c:815 +#: fortran/openmp.c:816 #, no-c-format msgid "Object '%s' is not a variable at %L" msgstr "" -#: fortran/openmp.c:823 fortran/openmp.c:833 fortran/openmp.c:840 -#: fortran/openmp.c:850 +#: fortran/openmp.c:824 fortran/openmp.c:834 fortran/openmp.c:841 +#: fortran/openmp.c:851 #, no-c-format msgid "Symbol '%s' present on multiple clauses at %L" msgstr "" -#: fortran/openmp.c:873 +#: fortran/openmp.c:874 #, no-c-format msgid "Non-THREADPRIVATE object '%s' in COPYIN clause at %L" msgstr "" -#: fortran/openmp.c:876 +#: fortran/openmp.c:877 #, no-c-format msgid "COPYIN clause object '%s' at %L has ALLOCATABLE components" msgstr "" -#: fortran/openmp.c:884 +#: fortran/openmp.c:885 #, no-c-format msgid "Assumed size array '%s' in COPYPRIVATE clause at %L" msgstr "" -#: fortran/openmp.c:887 +#: fortran/openmp.c:888 #, no-c-format msgid "COPYPRIVATE clause object '%s' at %L has ALLOCATABLE components" msgstr "" -#: fortran/openmp.c:895 +#: fortran/openmp.c:896 #, no-c-format msgid "THREADPRIVATE object '%s' in SHARED clause at %L" msgstr "" -#: fortran/openmp.c:898 +#: fortran/openmp.c:899 #, no-c-format msgid "Cray pointee '%s' in SHARED clause at %L" msgstr "" -#: fortran/openmp.c:906 +#: fortran/openmp.c:907 #, no-c-format msgid "THREADPRIVATE object '%s' in %s clause at %L" msgstr "" -#: fortran/openmp.c:909 +#: fortran/openmp.c:910 #, no-c-format msgid "Cray pointee '%s' in %s clause at %L" msgstr "" -#: fortran/openmp.c:914 +#: fortran/openmp.c:915 #, no-c-format msgid "POINTER object '%s' in %s clause at %L" msgstr "" -#: fortran/openmp.c:919 +#: fortran/openmp.c:920 #, no-c-format msgid "%s clause object '%s' has ALLOCATABLE components at %L" msgstr "" -#: fortran/openmp.c:922 +#: fortran/openmp.c:923 #, no-c-format msgid "Cray pointer '%s' in %s clause at %L" msgstr "" -#: fortran/openmp.c:926 +#: fortran/openmp.c:927 #, no-c-format msgid "Assumed size array '%s' in %s clause at %L" msgstr "" -#: fortran/openmp.c:931 +#: fortran/openmp.c:932 #, no-c-format msgid "Variable '%s' in %s clause is used in NAMELIST statement at %L" msgstr "" -#: fortran/openmp.c:940 +#: fortran/openmp.c:941 #, no-c-format msgid "%c REDUCTION variable '%s' at %L must be of numeric type, got %s" msgstr "" -#: fortran/openmp.c:951 +#: fortran/openmp.c:952 #, no-c-format msgid "%s REDUCTION variable '%s' must be LOGICAL at %L" msgstr "" -#: fortran/openmp.c:962 +#: fortran/openmp.c:963 #, no-c-format msgid "%s REDUCTION variable '%s' must be INTEGER or REAL at %L" msgstr "" -#: fortran/openmp.c:971 +#: fortran/openmp.c:972 #, no-c-format msgid "%s REDUCTION variable '%s' must be INTEGER at %L" msgstr "" -#: fortran/openmp.c:1083 +#: fortran/openmp.c:1084 #, no-c-format msgid "" "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L" msgstr "" -#: fortran/openmp.c:1123 +#: fortran/openmp.c:1124 #, no-c-format msgid "" "!$OMP ATOMIC assignment operator must be +, *, -, /, .AND., .OR., .EQV. or ." "NEQV. at %L" msgstr "" -#: fortran/openmp.c:1171 +#: fortran/openmp.c:1172 #, no-c-format msgid "" "!$OMP ATOMIC assignment must be var = var op expr or var = expr op var at %L" msgstr "" -#: fortran/openmp.c:1185 +#: fortran/openmp.c:1186 #, no-c-format msgid "" "!$OMP ATOMIC var = var op expr not mathematically equivalent to var = var op " "(expr) at %L" msgstr "" -#: fortran/openmp.c:1217 +#: fortran/openmp.c:1218 #, no-c-format msgid "" "expr in !$OMP ATOMIC assignment var = var op expr must be scalar and cannot " "reference var at %L" msgstr "" -#: fortran/openmp.c:1241 +#: fortran/openmp.c:1242 #, no-c-format msgid "" "!$OMP ATOMIC assignment intrinsic IAND, IOR or IEOR must have two arguments " "at %L" msgstr "" -#: fortran/openmp.c:1248 +#: fortran/openmp.c:1249 #, no-c-format msgid "" "!$OMP ATOMIC assignment intrinsic must be MIN, MAX, IAND, IOR or IEOR at %L" msgstr "" -#: fortran/openmp.c:1264 +#: fortran/openmp.c:1265 #, no-c-format msgid "" "!$OMP ATOMIC intrinsic arguments except one must not reference '%s' at %L" msgstr "" -#: fortran/openmp.c:1267 +#: fortran/openmp.c:1268 #, no-c-format msgid "!$OMP ATOMIC intrinsic arguments must be scalar at %L" msgstr "" -#: fortran/openmp.c:1273 +#: fortran/openmp.c:1274 #, no-c-format msgid "First or last !$OMP ATOMIC intrinsic argument must be '%s' at %L" msgstr "" -#: fortran/openmp.c:1291 +#: fortran/openmp.c:1292 #, no-c-format msgid "" "!$OMP ATOMIC assignment must have an operator or intrinsic on right hand " "side at %L" msgstr "" -#: fortran/openmp.c:1426 +#: fortran/openmp.c:1427 #, no-c-format msgid "!$OMP DO cannot be a DO WHILE or DO without loop control at %L" msgstr "" -#: fortran/openmp.c:1432 +#: fortran/openmp.c:1433 #, no-c-format msgid "!$OMP DO iteration variable must be of type integer at %L" msgstr "" -#: fortran/openmp.c:1436 +#: fortran/openmp.c:1437 #, no-c-format msgid "!$OMP DO iteration variable must not be THREADPRIVATE at %L" msgstr "" -#: fortran/openmp.c:1444 +#: fortran/openmp.c:1445 #, no-c-format msgid "" "!$OMP DO iteration variable present on clause other than PRIVATE or " "LASTPRIVATE at %L" msgstr "" -#: fortran/openmp.c:1462 +#: fortran/openmp.c:1463 #, no-c-format msgid "!$OMP DO collapsed loops don't form rectangular iteration space at %L" msgstr "" -#: fortran/openmp.c:1476 +#: fortran/openmp.c:1477 #, no-c-format msgid "collapsed !$OMP DO loops not perfectly nested at %L" msgstr "" -#: fortran/openmp.c:1485 fortran/openmp.c:1492 +#: fortran/openmp.c:1486 fortran/openmp.c:1493 #, no-c-format msgid "not enough DO loops for collapsed !$OMP DO at %L" msgstr "" -#: fortran/options.c:243 -#, no-c-format -msgid "Option -fwhole-program is not supported for Fortran" -msgstr "" - -#: fortran/options.c:301 +#: fortran/options.c:326 #, no-c-format msgid "Reading file '%s' as free form" msgstr "" -#: fortran/options.c:311 +#: fortran/options.c:336 #, no-c-format msgid "'-fd-lines-as-comments' has no effect in free form" msgstr "" -#: fortran/options.c:314 +#: fortran/options.c:339 #, no-c-format msgid "'-fd-lines-as-code' has no effect in free form" msgstr "" -#: fortran/options.c:332 +#: fortran/options.c:357 #, no-c-format msgid "Flag -fno-automatic overwrites -fmax-stack-var-size=%d" msgstr "" -#: fortran/options.c:335 +#: fortran/options.c:360 #, no-c-format msgid "Flag -fno-automatic overwrites -frecursive" msgstr "" -#: fortran/options.c:337 +#: fortran/options.c:362 #, no-c-format msgid "Flag -fno-automatic overwrites -frecursive implied by -fopenmp" msgstr "" -#: fortran/options.c:341 +#: fortran/options.c:366 #, no-c-format msgid "Flag -frecursive overwrites -fmax-stack-var-size=%d" msgstr "" -#: fortran/options.c:345 +#: fortran/options.c:370 #, no-c-format msgid "Flag -fmax-stack-var-size=%d overwrites -frecursive implied by -fopenmp" msgstr "" -#: fortran/options.c:418 +#: fortran/options.c:446 #, no-c-format msgid "gfortran: Only one -J option allowed" msgstr "" -#: fortran/options.c:461 +#: fortran/options.c:489 #, no-c-format msgid "Argument to -ffpe-trap is not valid: %s" msgstr "" -#: fortran/options.c:498 +#: fortran/options.c:527 #, no-c-format msgid "Argument to -fcheck is not valid: %s" msgstr "" -#: fortran/options.c:651 +#: fortran/options.c:680 #, no-c-format msgid "Fixed line length must be at least seven." msgstr "" -#: fortran/options.c:669 +#: fortran/options.c:698 #, no-c-format msgid "Free line length must be at least three." msgstr "" -#: fortran/options.c:687 +#: fortran/options.c:716 #, no-c-format msgid "-static-libgfortran is not supported in this configuration" msgstr "" -#: fortran/options.c:735 +#: fortran/options.c:764 #, no-c-format msgid "Maximum supported identifier length is %d" msgstr "" -#: fortran/options.c:767 +#: fortran/options.c:796 #, no-c-format msgid "Unrecognized option to -finit-logical: %s" msgstr "" -#: fortran/options.c:783 +#: fortran/options.c:812 #, no-c-format msgid "Unrecognized option to -finit-real: %s" msgstr "" -#: fortran/options.c:799 +#: fortran/options.c:828 #, no-c-format msgid "The value of n in -finit-character=n must be between 0 and 127" msgstr "" -#: fortran/options.c:890 +#: fortran/options.c:919 #, no-c-format msgid "Maximum subrecord length cannot exceed %d" msgstr "" -#: fortran/parse.c:455 +#: fortran/parse.c:459 #, no-c-format msgid "Unclassifiable statement at %C" msgstr "" -#: fortran/parse.c:479 +#: fortran/parse.c:483 #, no-c-format msgid "OpenMP directives at %C may not appear in PURE or ELEMENTAL procedures" msgstr "" -#: fortran/parse.c:560 +#: fortran/parse.c:564 #, no-c-format msgid "Unclassifiable OpenMP directive at %C" msgstr "" -#: fortran/parse.c:602 fortran/parse.c:743 +#: fortran/parse.c:592 +#, no-c-format +msgid "Unclassifiable GCC directive at %C" +msgstr "" + +#: fortran/parse.c:634 fortran/parse.c:803 #, no-c-format msgid "Zero is not a valid statement label at %C" msgstr "" -#: fortran/parse.c:609 fortran/parse.c:735 +#: fortran/parse.c:641 fortran/parse.c:795 #, no-c-format msgid "Non-numeric character in statement label at %C" msgstr "" -#: fortran/parse.c:621 fortran/parse.c:657 fortran/parse.c:783 +#: fortran/parse.c:653 fortran/parse.c:707 fortran/parse.c:843 #, no-c-format msgid "Semicolon at %C needs to be preceded by statement" msgstr "" -#: fortran/parse.c:629 fortran/parse.c:795 +#: fortran/parse.c:661 fortran/parse.c:855 #, no-c-format -msgid "Ignoring statement label in empty statement at %C" +msgid "Ignoring statement label in empty statement at %L" msgstr "" -#: fortran/parse.c:722 fortran/parse.c:762 +#: fortran/parse.c:782 fortran/parse.c:822 #, no-c-format msgid "Bad continuation line at %C" msgstr "" -#: fortran/parse.c:822 -#, no-c-format -msgid "Line truncated at %C" -msgstr "" - -#: fortran/parse.c:1009 +#: fortran/parse.c:1069 #, no-c-format msgid "FORMAT statement at %L does not have a statement label" msgstr "" -#: fortran/parse.c:1081 +#: fortran/parse.c:1141 msgid "arithmetic IF" msgstr "" -#: fortran/parse.c:1087 +#: fortran/parse.c:1147 msgid "attribute declaration" msgstr "" -#: fortran/parse.c:1117 +#: fortran/parse.c:1180 msgid "data declaration" msgstr "" -#: fortran/parse.c:1126 +#: fortran/parse.c:1189 msgid "derived type declaration" msgstr "" -#: fortran/parse.c:1208 +#: fortran/parse.c:1274 msgid "block IF" msgstr "" -#: fortran/parse.c:1217 +#: fortran/parse.c:1283 msgid "implied END DO" msgstr "" -#: fortran/parse.c:1293 +#: fortran/parse.c:1359 msgid "assignment" msgstr "" -#: fortran/parse.c:1296 +#: fortran/parse.c:1362 msgid "pointer assignment" msgstr "" -#: fortran/parse.c:1305 +#: fortran/parse.c:1380 msgid "simple IF" msgstr "" -#: fortran/parse.c:1541 +#: fortran/parse.c:1621 #, no-c-format msgid "Unexpected %s statement at %C" msgstr "" -#: fortran/parse.c:1681 +#: fortran/parse.c:1768 #, no-c-format msgid "%s statement at %C cannot follow %s statement at %L" msgstr "" -#: fortran/parse.c:1698 +#: fortran/parse.c:1785 #, no-c-format msgid "Unexpected end of file in '%s'" msgstr "" -#: fortran/parse.c:1730 +#: fortran/parse.c:1817 #, no-c-format msgid "Derived-type '%s' with SEQUENCE must not have a CONTAINS section at %C" msgstr "" -#: fortran/parse.c:1733 +#: fortran/parse.c:1820 #, no-c-format msgid "Derived-type '%s' with BIND(C) must not have a CONTAINS section at %C" msgstr "" -#: fortran/parse.c:1753 +#: fortran/parse.c:1840 #, no-c-format msgid "Components in TYPE at %C must precede CONTAINS" msgstr "" -#: fortran/parse.c:1758 +#: fortran/parse.c:1845 #, no-c-format msgid "Fortran 2003: Type-bound procedure at %C" msgstr "" -#: fortran/parse.c:1767 +#: fortran/parse.c:1854 #, no-c-format msgid "Fortran 2003: GENERIC binding at %C" msgstr "" -#: fortran/parse.c:1777 +#: fortran/parse.c:1864 #, no-c-format msgid "Fortran 2003: FINAL procedure declaration at %C" msgstr "" -#: fortran/parse.c:1789 +#: fortran/parse.c:1876 #, no-c-format msgid "Fortran 2008: Derived type definition at %C with empty CONTAINS section" msgstr "" -#: fortran/parse.c:1800 fortran/parse.c:1907 +#: fortran/parse.c:1887 fortran/parse.c:1994 #, no-c-format msgid "PRIVATE statement in TYPE at %C must be inside a MODULE" msgstr "" -#: fortran/parse.c:1808 +#: fortran/parse.c:1895 #, no-c-format msgid "PRIVATE statement at %C must precede procedure bindings" msgstr "" -#: fortran/parse.c:1816 fortran/parse.c:1923 +#: fortran/parse.c:1903 fortran/parse.c:2010 #, no-c-format msgid "Duplicate PRIVATE statement at %C" msgstr "" -#: fortran/parse.c:1826 +#: fortran/parse.c:1913 #, no-c-format msgid "SEQUENCE statement at %C must precede CONTAINS" msgstr "" -#: fortran/parse.c:1831 +#: fortran/parse.c:1918 #, no-c-format msgid "Already inside a CONTAINS block at %C" msgstr "" -#: fortran/parse.c:1887 +#: fortran/parse.c:1974 #, no-c-format msgid "FINAL declaration at %C must be inside CONTAINS" msgstr "" -#: fortran/parse.c:1896 +#: fortran/parse.c:1983 #, no-c-format msgid "Fortran 2003: Derived type definition at %C without components" msgstr "" -#: fortran/parse.c:1915 +#: fortran/parse.c:2002 #, no-c-format msgid "PRIVATE statement at %C must precede structure components" msgstr "" -#: fortran/parse.c:1936 +#: fortran/parse.c:2023 #, no-c-format msgid "SEQUENCE statement at %C must precede structure components" msgstr "" -#: fortran/parse.c:1943 +#: fortran/parse.c:2030 #, no-c-format msgid "SEQUENCE attribute at %C already specified in TYPE statement" msgstr "" -#: fortran/parse.c:1948 +#: fortran/parse.c:2035 #, no-c-format msgid "Duplicate SEQUENCE statement at %C" msgstr "" -#: fortran/parse.c:1959 +#: fortran/parse.c:2046 #, no-c-format msgid "Fortran 2003: CONTAINS block in derived type definition at %C" msgstr "" -#: fortran/parse.c:2047 +#: fortran/parse.c:2134 #, no-c-format msgid "ENUM declaration at %C has no ENUMERATORS" msgstr "" -#: fortran/parse.c:2133 +#: fortran/parse.c:2220 #, no-c-format msgid "Unexpected %s statement in INTERFACE block at %C" msgstr "" -#: fortran/parse.c:2159 +#: fortran/parse.c:2246 #, no-c-format msgid "SUBROUTINE at %C does not belong in a generic function interface" msgstr "" -#: fortran/parse.c:2163 +#: fortran/parse.c:2250 #, no-c-format msgid "FUNCTION at %C does not belong in a generic subroutine interface" msgstr "" -#: fortran/parse.c:2173 +#: fortran/parse.c:2260 #, no-c-format msgid "" "Name '%s' of ABSTRACT INTERFACE at %C cannot be the same as an intrinsic type" msgstr "" -#: fortran/parse.c:2204 +#: fortran/parse.c:2291 #, no-c-format msgid "Unexpected %s statement at %C in INTERFACE body" msgstr "" -#: fortran/parse.c:2222 +#: fortran/parse.c:2309 #, no-c-format msgid "" "INTERFACE procedure '%s' at %L has the same name as the enclosing procedure" msgstr "" -#: fortran/parse.c:2408 +#: fortran/parse.c:2430 +#, no-c-format +msgid "%s statement is not allowed inside of BLOCK at %C" +msgstr "" + +#: fortran/parse.c:2516 #, no-c-format msgid "%s statement must appear in a MODULE" msgstr "" -#: fortran/parse.c:2415 +#: fortran/parse.c:2523 #, no-c-format msgid "%s statement at %C follows another accessibility specification" msgstr "" -#: fortran/parse.c:2465 +#: fortran/parse.c:2573 #, no-c-format msgid "Bad kind expression for function '%s' at %L" msgstr "" -#: fortran/parse.c:2469 +#: fortran/parse.c:2577 #, no-c-format msgid "The type for function '%s' at %L is not accessible" msgstr "" -#: fortran/parse.c:2527 +#: fortran/parse.c:2635 #, no-c-format msgid "ELSEWHERE statement at %C follows previous unmasked ELSEWHERE" msgstr "" -#: fortran/parse.c:2548 +#: fortran/parse.c:2656 #, no-c-format msgid "Unexpected %s statement in WHERE block at %C" msgstr "" -#: fortran/parse.c:2607 +#: fortran/parse.c:2715 #, no-c-format msgid "Unexpected %s statement in FORALL block at %C" msgstr "" -#: fortran/parse.c:2658 +#: fortran/parse.c:2766 #, no-c-format msgid "ELSE IF statement at %C cannot follow ELSE statement at %L" msgstr "" -#: fortran/parse.c:2676 +#: fortran/parse.c:2784 #, no-c-format msgid "Duplicate ELSE statements at %L and %C" msgstr "" -#: fortran/parse.c:2737 +#: fortran/parse.c:2845 #, no-c-format msgid "Expected a CASE or END SELECT statement following SELECT CASE at %C" msgstr "" -#: fortran/parse.c:2795 +#: fortran/parse.c:2928 +#, no-c-format +msgid "" +"Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at %" +"C" +msgstr "" + +#: fortran/parse.c:2990 #, no-c-format msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L" msgstr "" -#: fortran/parse.c:2828 +#: fortran/parse.c:3023 #, no-c-format msgid "End of nonblock DO statement at %C is within another block" msgstr "" -#: fortran/parse.c:2837 +#: fortran/parse.c:3032 #, no-c-format msgid "End of nonblock DO statement at %C is interwoven with another DO loop" msgstr "" -#: fortran/parse.c:2886 +#: fortran/parse.c:3086 +#, no-c-format +msgid "Fortran 2008: BLOCK construct at %C" +msgstr "" + +#: fortran/parse.c:3144 #, no-c-format msgid "Statement label in ENDDO at %C doesn't match DO label" msgstr "" -#: fortran/parse.c:2902 +#: fortran/parse.c:3160 #, no-c-format msgid "Named block DO at %L requires matching ENDDO name" msgstr "" -#: fortran/parse.c:3161 +#: fortran/parse.c:3419 #, no-c-format msgid "Name after !$omp critical and !$omp end critical does not match at %C" msgstr "" -#: fortran/parse.c:3217 +#: fortran/parse.c:3475 #, no-c-format msgid "%s statement at %C cannot terminate a non-block DO loop" msgstr "" -#: fortran/parse.c:3404 +#: fortran/parse.c:3665 #, no-c-format msgid "Contained procedure '%s' at %C is already ambiguous" msgstr "" -#: fortran/parse.c:3454 +#: fortran/parse.c:3715 #, no-c-format msgid "Unexpected %s statement in CONTAINS section at %C" msgstr "" -#: fortran/parse.c:3478 +#: fortran/parse.c:3739 #, no-c-format msgid "" "Fortran 2008: CONTAINS statement without FUNCTION or SUBROUTINE statement at " "%C" msgstr "" -#: fortran/parse.c:3549 +#: fortran/parse.c:3816 #, no-c-format msgid "CONTAINS statement at %C is already in a contained program unit" msgstr "" -#: fortran/parse.c:3598 +#: fortran/parse.c:3865 #, no-c-format msgid "Global name '%s' at %L is already being used as a %s at %L" msgstr "" -#: fortran/parse.c:3619 +#: fortran/parse.c:3886 #, no-c-format msgid "Blank BLOCK DATA at %C conflicts with prior BLOCK DATA at %L" msgstr "" -#: fortran/parse.c:3645 +#: fortran/parse.c:3912 #, no-c-format msgid "Unexpected %s statement in BLOCK DATA at %C" msgstr "" -#: fortran/parse.c:3688 +#: fortran/parse.c:3955 #, no-c-format msgid "Unexpected %s statement in MODULE at %C" msgstr "" @@ -8426,291 +8909,291 @@ msgstr "" #. If we see a duplicate main program, shut down. If the second #. instance is an implied main program, i.e. data decls or executable #. statements, we're in for lots of errors. -#: fortran/parse.c:3936 +#: fortran/parse.c:4272 #, no-c-format msgid "Two main PROGRAMs at %L and %C" msgstr "" -#: fortran/primary.c:90 +#: fortran/primary.c:93 #, no-c-format msgid "Missing kind-parameter at %C" msgstr "" -#: fortran/primary.c:214 +#: fortran/primary.c:217 #, no-c-format msgid "Integer kind %d at %C not available" msgstr "" -#: fortran/primary.c:222 +#: fortran/primary.c:225 #, no-c-format msgid "" "Integer too big for its kind at %C. This check can be disabled with the " "option -fno-range-check" msgstr "" -#: fortran/primary.c:251 +#: fortran/primary.c:254 #, no-c-format msgid "Extension: Hollerith constant at %C" msgstr "" -#: fortran/primary.c:263 +#: fortran/primary.c:266 #, no-c-format msgid "Invalid Hollerith constant: %L must contain at least one character" msgstr "" -#: fortran/primary.c:269 +#: fortran/primary.c:272 #, no-c-format msgid "Invalid Hollerith constant: Integer kind at %L should be default" msgstr "" -#: fortran/primary.c:286 +#: fortran/primary.c:289 #, no-c-format msgid "Invalid Hollerith constant at %L contains a wide character" msgstr "" -#: fortran/primary.c:367 +#: fortran/primary.c:370 #, no-c-format msgid "Extension: Hexadecimal constant at %C uses non-standard syntax" msgstr "" -#: fortran/primary.c:377 +#: fortran/primary.c:380 #, no-c-format msgid "Empty set of digits in BOZ constant at %C" msgstr "" -#: fortran/primary.c:383 +#: fortran/primary.c:386 #, no-c-format msgid "Illegal character in BOZ constant at %C" msgstr "" -#: fortran/primary.c:406 +#: fortran/primary.c:409 #, no-c-format msgid "Extension: BOZ constant at %C uses non-standard postfix syntax" msgstr "" -#: fortran/primary.c:437 +#: fortran/primary.c:440 #, no-c-format msgid "Integer too big for integer kind %i at %C" msgstr "" -#: fortran/primary.c:443 +#: fortran/primary.c:446 #, no-c-format msgid "Fortran 2003: BOZ used outside a DATA statement at %C" msgstr "" -#: fortran/primary.c:543 +#: fortran/primary.c:546 #, no-c-format msgid "Missing exponent in real number at %C" msgstr "" -#: fortran/primary.c:599 +#: fortran/primary.c:602 #, no-c-format msgid "Real number at %C has a 'd' exponent and an explicit kind" msgstr "" -#: fortran/primary.c:612 +#: fortran/primary.c:615 #, no-c-format msgid "Invalid real kind %d at %C" msgstr "" -#: fortran/primary.c:626 +#: fortran/primary.c:629 #, no-c-format msgid "Real constant overflows its kind at %C" msgstr "" -#: fortran/primary.c:631 +#: fortran/primary.c:634 #, no-c-format msgid "Real constant underflows its kind at %C" msgstr "" -#: fortran/primary.c:723 +#: fortran/primary.c:726 #, no-c-format msgid "Syntax error in SUBSTRING specification at %C" msgstr "" -#: fortran/primary.c:935 +#: fortran/primary.c:938 #, no-c-format msgid "Invalid kind %d for CHARACTER constant at %C" msgstr "" -#: fortran/primary.c:956 +#: fortran/primary.c:959 #, no-c-format msgid "Unterminated character constant beginning at %C" msgstr "" -#: fortran/primary.c:997 +#: fortran/primary.c:1000 #, no-c-format msgid "" "Character '%s' in string at %C is not representable in character kind %d" msgstr "" -#: fortran/primary.c:1080 +#: fortran/primary.c:1083 #, no-c-format msgid "Bad kind for logical constant at %C" msgstr "" -#: fortran/primary.c:1119 +#: fortran/primary.c:1122 #, no-c-format msgid "Expected PARAMETER symbol in complex constant at %C" msgstr "" -#: fortran/primary.c:1125 +#: fortran/primary.c:1128 #, no-c-format msgid "Numeric PARAMETER required in complex constant at %C" msgstr "" -#: fortran/primary.c:1131 +#: fortran/primary.c:1134 #, no-c-format msgid "Scalar PARAMETER required in complex constant at %C" msgstr "" -#: fortran/primary.c:1135 +#: fortran/primary.c:1138 #, no-c-format msgid "Fortran 2003: PARAMETER symbol in complex constant at %C" msgstr "" -#: fortran/primary.c:1165 +#: fortran/primary.c:1168 #, no-c-format msgid "Error converting PARAMETER constant in complex constant at %C" msgstr "" -#: fortran/primary.c:1294 +#: fortran/primary.c:1297 #, no-c-format msgid "Syntax error in COMPLEX constant at %C" msgstr "" -#: fortran/primary.c:1483 +#: fortran/primary.c:1486 #, no-c-format msgid "Keyword '%s' at %C has already appeared in the current argument list" msgstr "" -#: fortran/primary.c:1547 +#: fortran/primary.c:1550 #, no-c-format msgid "Extension: argument list function at %C" msgstr "" -#: fortran/primary.c:1614 +#: fortran/primary.c:1617 #, no-c-format msgid "Expected alternate return label at %C" msgstr "" -#: fortran/primary.c:1632 +#: fortran/primary.c:1635 #, no-c-format msgid "Missing keyword name in actual argument list at %C" msgstr "" -#: fortran/primary.c:1677 +#: fortran/primary.c:1680 #, no-c-format msgid "Syntax error in argument list at %C" msgstr "" -#: fortran/primary.c:1775 +#: fortran/primary.c:1785 #, no-c-format msgid "Expected structure component name at %C" msgstr "" -#: fortran/primary.c:1812 +#: fortran/primary.c:1829 #, no-c-format msgid "Expected argument list at %C" msgstr "" -#: fortran/primary.c:2118 +#: fortran/primary.c:2179 #, no-c-format msgid "" "Fortran 2003: Structure constructor with missing optional arguments at %C" msgstr "" -#: fortran/primary.c:2126 +#: fortran/primary.c:2187 #, no-c-format msgid "" "No initializer for component '%s' given in the structure constructor at %C!" msgstr "" -#: fortran/primary.c:2182 +#: fortran/primary.c:2243 #, no-c-format msgid "Can't construct ABSTRACT type '%s' at %C" msgstr "" -#: fortran/primary.c:2210 +#: fortran/primary.c:2271 #, no-c-format msgid "Fortran 2003: Structure constructor with named arguments at %C" msgstr "" -#: fortran/primary.c:2225 +#: fortran/primary.c:2286 #, no-c-format msgid "Component initializer without name after component named %s at %C!" msgstr "" -#: fortran/primary.c:2228 +#: fortran/primary.c:2289 #, no-c-format msgid "Too many components in structure constructor at %C!" msgstr "" -#: fortran/primary.c:2261 +#: fortran/primary.c:2322 #, no-c-format msgid "Component '%s' is initialized twice in the structure constructor at %C!" msgstr "" -#: fortran/primary.c:2317 +#: fortran/primary.c:2378 #, no-c-format msgid "" "component '%s' at %L has already been set by a parent derived type " "constructor" msgstr "" -#: fortran/primary.c:2340 +#: fortran/primary.c:2401 #, no-c-format msgid "Syntax error in structure constructor at %C" msgstr "" -#: fortran/primary.c:2456 +#: fortran/primary.c:2517 #, no-c-format msgid "" "'%s' at %C is the name of a recursive function and so refers to the result " "variable. Use an explicit RESULT variable for direct recursion (12.5.2.1)" msgstr "" -#: fortran/primary.c:2577 +#: fortran/primary.c:2638 #, no-c-format msgid "Unexpected use of subroutine name '%s' at %C" msgstr "" -#: fortran/primary.c:2608 +#: fortran/primary.c:2669 #, no-c-format msgid "Statement function '%s' requires argument list at %C" msgstr "" -#: fortran/primary.c:2611 +#: fortran/primary.c:2672 #, no-c-format msgid "Function '%s' requires an argument list at %C" msgstr "" -#: fortran/primary.c:2658 +#: fortran/primary.c:2719 #, no-c-format msgid "Missing argument to '%s' at %C" msgstr "" -#: fortran/primary.c:2799 +#: fortran/primary.c:2860 #, no-c-format msgid "Missing argument list in function '%s' at %C" msgstr "" -#: fortran/primary.c:2827 +#: fortran/primary.c:2888 #, no-c-format msgid "Symbol at %C is not appropriate for an expression" msgstr "" -#: fortran/primary.c:2895 +#: fortran/primary.c:2956 #, no-c-format msgid "Assigning to PROTECTED variable at %C" msgstr "" -#: fortran/primary.c:2929 +#: fortran/primary.c:2990 #, no-c-format msgid "Named constant at %C in an EQUIVALENCE" msgstr "" -#: fortran/primary.c:2965 +#: fortran/primary.c:3026 #, no-c-format msgid "'%s' at %C is not a variable" msgstr "" @@ -8746,7 +9229,7 @@ msgstr "" msgid "Dummy procedure at %L not allowed in ELEMENTAL procedure" msgstr "" -#: fortran/resolve.c:201 fortran/resolve.c:1334 +#: fortran/resolve.c:201 fortran/resolve.c:1412 #, no-c-format msgid "" "Unable to find a specific INTRINSIC procedure for the reference '%s' at %L" @@ -8801,218 +9284,248 @@ msgstr "" msgid "Result '%s' of contained function '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:377 +#: fortran/resolve.c:386 +msgid "module procedure" +msgstr "" + +#: fortran/resolve.c:387 +msgid "internal function" +msgstr "" + +#: fortran/resolve.c:384 #, no-c-format -msgid "" -"Character-valued internal function '%s' at %L must not be assumed length" +msgid "Character-valued %s '%s' at %L must not be assumed length" msgstr "" -#: fortran/resolve.c:548 +#: fortran/resolve.c:559 #, no-c-format msgid "Function %s at %L has entries with mismatched array specifications" msgstr "" -#: fortran/resolve.c:565 +#: fortran/resolve.c:576 #, no-c-format msgid "" "Extension: Function %s at %L with entries returning variables of different " "string lengths" msgstr "" -#: fortran/resolve.c:592 +#: fortran/resolve.c:603 #, no-c-format msgid "FUNCTION result %s can't be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:596 +#: fortran/resolve.c:607 #, no-c-format msgid "ENTRY result %s can't be an array in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:603 +#: fortran/resolve.c:614 #, no-c-format msgid "FUNCTION result %s can't be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:607 +#: fortran/resolve.c:618 #, no-c-format msgid "ENTRY result %s can't be a POINTER in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:645 +#: fortran/resolve.c:656 #, no-c-format msgid "FUNCTION result %s can't be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:650 +#: fortran/resolve.c:661 #, no-c-format msgid "ENTRY result %s can't be of type %s in FUNCTION %s at %L" msgstr "" -#: fortran/resolve.c:708 +#: fortran/resolve.c:719 #, no-c-format msgid "" "Variable '%s' at %L is in COMMON but only in BLOCK DATA initialization is " "allowed" msgstr "" -#: fortran/resolve.c:712 +#: fortran/resolve.c:723 #, no-c-format msgid "" "Initialized variable '%s' at %L is in a blank COMMON but initialization is " "only allowed in named common blocks" msgstr "" -#: fortran/resolve.c:723 +#: fortran/resolve.c:734 #, no-c-format msgid "" "Derived type variable '%s' in COMMON at %L has neither the SEQUENCE nor the " "BIND(C) attribute" msgstr "" -#: fortran/resolve.c:727 +#: fortran/resolve.c:738 #, no-c-format msgid "" "Derived type variable '%s' in COMMON at %L has an ultimate component that is " "allocatable" msgstr "" -#: fortran/resolve.c:731 +#: fortran/resolve.c:742 #, no-c-format msgid "" "Derived type variable '%s' in COMMON at %L may not have default initializer" msgstr "" -#: fortran/resolve.c:761 +#: fortran/resolve.c:772 #, no-c-format msgid "COMMON block '%s' at %L is used as PARAMETER at %L" msgstr "" -#: fortran/resolve.c:765 +#: fortran/resolve.c:776 #, no-c-format msgid "COMMON block '%s' at %L is also an intrinsic procedure" msgstr "" -#: fortran/resolve.c:769 +#: fortran/resolve.c:780 #, no-c-format msgid "Fortran 2003: COMMON block '%s' at %L that is also a function result" msgstr "" -#: fortran/resolve.c:774 +#: fortran/resolve.c:785 #, no-c-format msgid "Fortran 2003: COMMON block '%s' at %L that is also a global procedure" msgstr "" -#: fortran/resolve.c:836 +#: fortran/resolve.c:847 #, no-c-format msgid "Components of structure constructor '%s' at %L are PRIVATE" msgstr "" -#: fortran/resolve.c:858 +#: fortran/resolve.c:869 #, no-c-format msgid "" "The rank of the element in the derived type constructor at %L does not match " "that of the component (%d/%d)" msgstr "" -#: fortran/resolve.c:871 +#: fortran/resolve.c:882 #, no-c-format msgid "" "The element in the derived type constructor at %L, for pointer component '%" "s', is %s but should be %s" msgstr "" -#: fortran/resolve.c:885 +#: fortran/resolve.c:899 #, 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 "" -#: fortran/resolve.c:899 +#: fortran/resolve.c:913 #, no-c-format msgid "" "The element in the derived type constructor at %L, for pointer component '%" "s' should be a POINTER or a TARGET" msgstr "" -#: fortran/resolve.c:1020 +#: fortran/resolve.c:1034 #, no-c-format msgid "" "The upper bound in the last dimension must appear in the reference to the " "assumed size array '%s' at %L" msgstr "" -#: fortran/resolve.c:1082 +#: fortran/resolve.c:1096 #, no-c-format msgid "'%s' at %L is ambiguous" msgstr "" -#: fortran/resolve.c:1086 +#: fortran/resolve.c:1100 #, no-c-format msgid "GENERIC procedure '%s' is not allowed as an actual argument at %L" msgstr "" -#: fortran/resolve.c:1197 +#: fortran/resolve.c:1199 +#, no-c-format +msgid "Type specified for intrinsic function '%s' at %L is ignored" +msgstr "" + +#: fortran/resolve.c:1212 +#, no-c-format +msgid "Intrinsic subroutine '%s' at %L shall not have a type specifier" +msgstr "" + +#: fortran/resolve.c:1223 +#, no-c-format +msgid "'%s' declared INTRINSIC at %L does not exist" +msgstr "" + +#: fortran/resolve.c:1234 +#, no-c-format +msgid "" +"The intrinsic '%s' declared INTRINSIC at %L is not available in the current " +"standard settings but %s. Use an appropriate -std=* option or enable -fall-" +"intrinsics in order to use it." +msgstr "" + +#: fortran/resolve.c:1270 #, no-c-format msgid "" "Non-RECURSIVE procedure '%s' at %L is possibly calling itself recursively. " "Declare it RECURSIVE or use -frecursive" msgstr "" -#: fortran/resolve.c:1231 fortran/resolve.c:6214 fortran/resolve.c:6954 +#: fortran/resolve.c:1304 fortran/resolve.c:6991 fortran/resolve.c:7778 #, no-c-format msgid "Label %d referenced at %L is never defined" msgstr "" -#: fortran/resolve.c:1283 +#: fortran/resolve.c:1361 #, no-c-format msgid "Statement function '%s' at %L is not allowed as an actual argument" msgstr "" -#: fortran/resolve.c:1291 +#: fortran/resolve.c:1369 #, no-c-format msgid "Intrinsic '%s' at %L is not allowed as an actual argument" msgstr "" -#: fortran/resolve.c:1298 +#: fortran/resolve.c:1376 #, no-c-format msgid "Internal procedure '%s' is not allowed as an actual argument at %L" msgstr "" -#: fortran/resolve.c:1304 +#: fortran/resolve.c:1382 #, no-c-format msgid "" "ELEMENTAL non-INTRINSIC procedure '%s' is not allowed as an actual argument " "at %L" msgstr "" -#: fortran/resolve.c:1356 +#: fortran/resolve.c:1434 #, no-c-format msgid "Symbol '%s' at %L is ambiguous" msgstr "" -#: fortran/resolve.c:1407 +#: fortran/resolve.c:1485 #, no-c-format msgid "By-value argument at %L is not of numeric type" msgstr "" -#: fortran/resolve.c:1414 +#: fortran/resolve.c:1492 #, no-c-format msgid "By-value argument at %L cannot be an array or an array section" msgstr "" -#: fortran/resolve.c:1428 +#: fortran/resolve.c:1506 #, no-c-format msgid "By-value argument at %L is not allowed in this context" msgstr "" -#: fortran/resolve.c:1440 +#: fortran/resolve.c:1518 #, no-c-format msgid "Passing internal procedure at %L by location not allowed" msgstr "" -#: fortran/resolve.c:1565 +#: fortran/resolve.c:1643 #, no-c-format msgid "" "'%s' at %L is an array and OPTIONAL; IF IT IS MISSING, it cannot be the " @@ -9020,600 +9533,625 @@ msgid "" "argument with the same rank (12.4.1.5)" msgstr "" -#: fortran/resolve.c:1587 +#: fortran/resolve.c:1666 msgid "elemental procedure" msgstr "" -#: fortran/resolve.c:1604 +#: fortran/resolve.c:1682 #, no-c-format msgid "" "Actual argument at %L for INTENT(%s) dummy '%s' of ELEMENTAL subroutine '%s' " "is a scalar, but another actual argument is an array" msgstr "" -#: fortran/resolve.c:1773 +#: fortran/resolve.c:1828 +#, no-c-format +msgid "" +"The reference to function '%s' at %L either needs an explicit INTERFACE or " +"the rank is incorrect" +msgstr "" + +#: fortran/resolve.c:1928 #, no-c-format msgid "There is no specific function for the generic '%s' at %L" msgstr "" -#: fortran/resolve.c:1782 +#: fortran/resolve.c:1937 #, no-c-format msgid "" "Generic function '%s' at %L is not consistent with a specific intrinsic " "interface" msgstr "" -#: fortran/resolve.c:1820 +#: fortran/resolve.c:1975 #, no-c-format msgid "" "Function '%s' at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.c:1866 +#: fortran/resolve.c:2024 #, no-c-format msgid "Unable to resolve the specific function '%s' at %L" msgstr "" -#: fortran/resolve.c:1922 fortran/resolve.c:10672 +#: fortran/resolve.c:2080 fortran/resolve.c:11813 #, no-c-format msgid "Function '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:2131 +#: fortran/resolve.c:2289 #, no-c-format msgid "Argument to '%s' at %L is not a variable" msgstr "" -#: fortran/resolve.c:2179 +#: fortran/resolve.c:2337 #, no-c-format msgid "More actual than formal arguments in '%s' call at %L" msgstr "" -#: fortran/resolve.c:2188 +#: fortran/resolve.c:2346 #, no-c-format msgid "" "Parameter '%s' to '%s' at %L must be either a TARGET or an associated pointer" msgstr "" -#: fortran/resolve.c:2211 +#: fortran/resolve.c:2369 #, no-c-format msgid "" "Allocatable variable '%s' used as a parameter to '%s' at %L must not be an " "array of zero size" msgstr "" -#: fortran/resolve.c:2228 +#: fortran/resolve.c:2386 #, no-c-format msgid "" "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' " "because it is not C interoperable" msgstr "" -#: fortran/resolve.c:2238 +#: fortran/resolve.c:2396 #, no-c-format msgid "" "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' " "because it is not C interoperable" msgstr "" -#: fortran/resolve.c:2261 fortran/resolve.c:2298 +#: fortran/resolve.c:2419 fortran/resolve.c:2456 #, no-c-format msgid "CHARACTER argument '%s' to '%s' at %L must have a length of 1" msgstr "" #. Case 1c, section 15.1.2.5, J3/04-007: an associated #. scalar pointer. -#: fortran/resolve.c:2274 +#: fortran/resolve.c:2432 #, no-c-format msgid "Argument '%s' to '%s' at %L must be an associated scalar POINTER" msgstr "" -#: fortran/resolve.c:2290 +#: fortran/resolve.c:2448 #, no-c-format msgid "Parameter '%s' to '%s' at %L must be a scalar" msgstr "" #. TODO: Update this error message to allow for procedure #. pointers once they are implemented. -#: fortran/resolve.c:2312 +#: fortran/resolve.c:2470 #, no-c-format msgid "Parameter '%s' to '%s' at %L must be a procedure" msgstr "" -#: fortran/resolve.c:2320 +#: fortran/resolve.c:2478 #, no-c-format msgid "Parameter '%s' to '%s' at %L must be BIND(C)" msgstr "" -#: fortran/resolve.c:2367 +#: fortran/resolve.c:2525 #, no-c-format msgid "'%s' at %L is not a function" msgstr "" -#: fortran/resolve.c:2373 +#: fortran/resolve.c:2531 #, no-c-format msgid "ABSTRACT INTERFACE '%s' must not be referenced at %L" msgstr "" #. Internal procedures are taken care of in resolve_contained_fntype. -#: fortran/resolve.c:2419 +#: fortran/resolve.c:2577 #, no-c-format msgid "" "Function '%s' is declared CHARACTER(*) and cannot be used at %L since it is " "not a dummy argument" msgstr "" -#: fortran/resolve.c:2472 +#: fortran/resolve.c:2630 #, no-c-format msgid "" "User defined non-ELEMENTAL function '%s' at %L not allowed in WORKSHARE " "construct" msgstr "" -#: fortran/resolve.c:2522 +#: fortran/resolve.c:2680 #, no-c-format msgid "reference to non-PURE function '%s' at %L inside a FORALL %s" msgstr "" -#: fortran/resolve.c:2529 +#: fortran/resolve.c:2687 #, no-c-format msgid "" "Function reference to '%s' at %L is to a non-PURE procedure within a PURE " "procedure" msgstr "" -#: fortran/resolve.c:2545 +#: fortran/resolve.c:2703 #, no-c-format msgid "" "ENTRY '%s' at %L cannot be called recursively, as function '%s' is not " "RECURSIVE" msgstr "" -#: fortran/resolve.c:2549 +#: fortran/resolve.c:2707 #, no-c-format msgid "" "Function '%s' at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.c:2597 +#: fortran/resolve.c:2755 #, no-c-format msgid "Subroutine call to '%s' in FORALL block at %L is not PURE" msgstr "" -#: fortran/resolve.c:2600 +#: fortran/resolve.c:2758 #, no-c-format msgid "Subroutine call to '%s' at %L is not PURE" msgstr "" -#: fortran/resolve.c:2663 +#: fortran/resolve.c:2821 #, no-c-format msgid "There is no specific subroutine for the generic '%s' at %L" msgstr "" -#: fortran/resolve.c:2672 +#: fortran/resolve.c:2830 #, no-c-format msgid "" "Generic subroutine '%s' at %L is not consistent with an intrinsic subroutine " "interface" msgstr "" -#: fortran/resolve.c:2780 +#: fortran/resolve.c:2938 #, no-c-format msgid "Missing SHAPE parameter for call to %s at %L" msgstr "" -#: fortran/resolve.c:2788 +#: fortran/resolve.c:2946 #, no-c-format msgid "SHAPE parameter for call to %s at %L must be a rank 1 INTEGER array" msgstr "" -#: fortran/resolve.c:2855 +#: fortran/resolve.c:3013 #, no-c-format msgid "" "Subroutine '%s' at %L is INTRINSIC but is not compatible with an intrinsic" msgstr "" -#: fortran/resolve.c:2899 +#: fortran/resolve.c:3057 #, no-c-format msgid "Unable to resolve the specific subroutine '%s' at %L" msgstr "" -#: fortran/resolve.c:2959 +#: fortran/resolve.c:3117 #, no-c-format msgid "'%s' at %L has a type, which is not consistent with the CALL at %L" msgstr "" -#: fortran/resolve.c:2988 +#: fortran/resolve.c:3146 #, no-c-format msgid "" "ENTRY '%s' at %L cannot be called recursively, as subroutine '%s' is not " "RECURSIVE" msgstr "" -#: fortran/resolve.c:2992 +#: fortran/resolve.c:3150 #, no-c-format msgid "" "SUBROUTINE '%s' at %L cannot be called recursively, as it is not RECURSIVE" msgstr "" -#: fortran/resolve.c:3070 +#: fortran/resolve.c:3228 #, no-c-format msgid "Shapes for operands at %L and %L are not conformable" msgstr "" -#: fortran/resolve.c:3121 +#: fortran/resolve.c:3279 #, c-format msgid "Invalid context for NULL() pointer at %%L" msgstr "" -#: fortran/resolve.c:3137 +#: fortran/resolve.c:3295 #, c-format msgid "Operand of unary numeric operator '%s' at %%L is %s" msgstr "" -#: fortran/resolve.c:3153 +#: fortran/resolve.c:3311 #, c-format msgid "Operands of binary numeric operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3168 +#: fortran/resolve.c:3326 #, c-format msgid "Operands of string concatenation operator at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3187 +#: fortran/resolve.c:3345 #, c-format msgid "Operands of logical operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3201 +#: fortran/resolve.c:3359 #, c-format msgid "Operand of .not. operator at %%L is %s" msgstr "" -#: fortran/resolve.c:3215 +#: fortran/resolve.c:3373 msgid "COMPLEX quantities cannot be compared at %L" msgstr "" -#: fortran/resolve.c:3244 +#: fortran/resolve.c:3402 #, c-format msgid "Logicals at %%L must be compared with %s instead of %s" msgstr "" -#: fortran/resolve.c:3250 +#: fortran/resolve.c:3408 #, c-format msgid "Operands of comparison operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3258 +#: fortran/resolve.c:3416 #, c-format msgid "Unknown operator '%s' at %%L" msgstr "" -#: fortran/resolve.c:3260 +#: fortran/resolve.c:3418 #, c-format msgid "Operand of user operator '%s' at %%L is %s" msgstr "" -#: fortran/resolve.c:3263 +#: fortran/resolve.c:3421 #, c-format msgid "Operands of user operator '%s' at %%L are %s/%s" msgstr "" -#: fortran/resolve.c:3349 +#: fortran/resolve.c:3507 #, c-format msgid "Inconsistent ranks for operator at %%L and %%L" msgstr "" -#: fortran/resolve.c:3546 +#: fortran/resolve.c:3710 #, no-c-format msgid "Array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:3554 +#: fortran/resolve.c:3718 #, no-c-format msgid "Array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:3573 +#: fortran/resolve.c:3737 #, no-c-format msgid "Illegal stride of zero at %L" msgstr "" -#: fortran/resolve.c:3590 +#: fortran/resolve.c:3754 #, no-c-format msgid "" "Lower array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:3598 +#: fortran/resolve.c:3762 #, no-c-format msgid "" "Lower array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:3614 +#: fortran/resolve.c:3778 #, no-c-format msgid "" "Upper array reference at %L is out of bounds (%ld < %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:3623 +#: fortran/resolve.c:3787 #, no-c-format msgid "" "Upper array reference at %L is out of bounds (%ld > %ld) in dimension %d" msgstr "" -#: fortran/resolve.c:3662 +#: fortran/resolve.c:3826 #, no-c-format msgid "Rightmost upper bound of assumed size array section not specified at %L" msgstr "" -#: fortran/resolve.c:3672 +#: fortran/resolve.c:3836 #, no-c-format msgid "Rank mismatch in array reference at %L (%d/%d)" msgstr "" -#: fortran/resolve.c:3700 +#: fortran/resolve.c:3864 #, no-c-format msgid "Array index at %L must be scalar" msgstr "" -#: fortran/resolve.c:3706 +#: fortran/resolve.c:3870 #, no-c-format msgid "Array index at %L must be of INTEGER type, found %s" msgstr "" -#: fortran/resolve.c:3712 +#: fortran/resolve.c:3876 #, no-c-format msgid "Extension: REAL array index at %L" msgstr "" -#: fortran/resolve.c:3742 +#: fortran/resolve.c:3906 #, no-c-format msgid "Argument dim at %L must be scalar" msgstr "" -#: fortran/resolve.c:3749 +#: fortran/resolve.c:3913 #, no-c-format msgid "Argument dim at %L must be of INTEGER type" msgstr "" -#: fortran/resolve.c:3870 +#: fortran/resolve.c:4037 #, no-c-format msgid "Array index at %L is an array of rank %d" msgstr "" -#: fortran/resolve.c:3907 +#: fortran/resolve.c:4076 #, no-c-format msgid "Substring start index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:3914 +#: fortran/resolve.c:4083 #, no-c-format msgid "Substring start index at %L must be scalar" msgstr "" -#: fortran/resolve.c:3923 +#: fortran/resolve.c:4092 #, no-c-format msgid "Substring start index at %L is less than one" msgstr "" -#: fortran/resolve.c:3936 +#: fortran/resolve.c:4105 #, no-c-format msgid "Substring end index at %L must be of type INTEGER" msgstr "" -#: fortran/resolve.c:3943 +#: fortran/resolve.c:4112 #, no-c-format msgid "Substring end index at %L must be scalar" msgstr "" -#: fortran/resolve.c:3953 +#: fortran/resolve.c:4122 #, no-c-format msgid "Substring end index at %L exceeds the string length" msgstr "" -#: fortran/resolve.c:4091 +#: fortran/resolve.c:4132 +#, no-c-format +msgid "Substring end index at %L is too large" +msgstr "" + +#: fortran/resolve.c:4266 #, no-c-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the POINTER attribute at %L" msgstr "" -#: fortran/resolve.c:4098 +#: fortran/resolve.c:4273 #, no-c-format msgid "" "Component to the right of a part reference with nonzero rank must not have " "the ALLOCATABLE attribute at %L" msgstr "" -#: fortran/resolve.c:4117 +#: fortran/resolve.c:4292 #, no-c-format msgid "" "Two or more part references with nonzero rank must not be specified at %L" msgstr "" -#: fortran/resolve.c:4300 +#: fortran/resolve.c:4475 #, no-c-format msgid "" "Variable '%s', used in a specification expression, is referenced at %L " "before the ENTRY statement in which it is a parameter" msgstr "" -#: fortran/resolve.c:4305 +#: fortran/resolve.c:4480 #, no-c-format msgid "" "Variable '%s' is used at %L before the ENTRY statement in which it is a " "parameter" msgstr "" -#: fortran/resolve.c:4589 +#: fortran/resolve.c:4767 fortran/resolve.c:4839 #, no-c-format msgid "Passed-object at %L must be scalar" msgstr "" -#: fortran/resolve.c:4622 +#: fortran/resolve.c:4868 #, no-c-format msgid "" "Base object for type-bound procedure call at %L is of ABSTRACT type '%s'" msgstr "" #. Nothing matching found! -#: fortran/resolve.c:4723 +#: fortran/resolve.c:4970 #, no-c-format msgid "" "Found no matching specific binding for the call to the GENERIC '%s' at %L" msgstr "" -#: fortran/resolve.c:4743 +#. To resolve class member calls, we borrow this bit +#. of code to select the specific procedures. +#: fortran/resolve.c:4990 fortran/resolve.c:5043 #, no-c-format msgid "'%s' at %L should be a SUBROUTINE" msgstr "" -#: fortran/resolve.c:4782 +#: fortran/resolve.c:5035 #, no-c-format msgid "'%s' at %L should be a FUNCTION" msgstr "" -#: fortran/resolve.c:4980 +#: fortran/resolve.c:5119 +#, no-c-format +msgid "no typebound available procedure named '%s' at %L" +msgstr "" + +#: fortran/resolve.c:5568 #, no-c-format msgid "%s at %L must be a scalar" msgstr "" -#: fortran/resolve.c:4990 +#: fortran/resolve.c:5578 #, no-c-format msgid "Deleted feature: %s at %L must be integer" msgstr "" -#: fortran/resolve.c:4994 fortran/resolve.c:5001 +#: fortran/resolve.c:5582 fortran/resolve.c:5589 #, no-c-format msgid "%s at %L must be INTEGER" msgstr "" -#: fortran/resolve.c:5021 +#: fortran/resolve.c:5609 #, no-c-format msgid "Cannot assign to loop variable in PURE procedure at %L" msgstr "" -#: fortran/resolve.c:5045 +#: fortran/resolve.c:5633 #, no-c-format msgid "Step expression in DO loop at %L cannot be zero" msgstr "" -#: fortran/resolve.c:5080 +#: fortran/resolve.c:5668 #, no-c-format msgid "DO loop at %L will be executed zero times" msgstr "" -#: fortran/resolve.c:5141 +#: fortran/resolve.c:5729 #, no-c-format msgid "FORALL index-name at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.c:5146 +#: fortran/resolve.c:5734 #, no-c-format msgid "FORALL start expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.c:5153 +#: fortran/resolve.c:5741 #, no-c-format msgid "FORALL end expression at %L must be a scalar INTEGER" msgstr "" -#: fortran/resolve.c:5161 +#: fortran/resolve.c:5749 #, no-c-format msgid "FORALL stride expression at %L must be a scalar %s" msgstr "" -#: fortran/resolve.c:5166 +#: fortran/resolve.c:5754 #, no-c-format msgid "FORALL stride expression at %L cannot be zero" msgstr "" -#: fortran/resolve.c:5182 +#: fortran/resolve.c:5770 #, no-c-format msgid "FORALL index '%s' may not appear in triplet specification at %L" msgstr "" -#: fortran/resolve.c:5262 fortran/resolve.c:5396 +#: fortran/resolve.c:5870 fortran/resolve.c:6033 #, no-c-format msgid "Allocate-object at %L must be ALLOCATABLE or a POINTER" msgstr "" -#: fortran/resolve.c:5269 +#: fortran/resolve.c:5876 #, no-c-format msgid "Cannot deallocate INTENT(IN) variable '%s' at %L" msgstr "" -#: fortran/resolve.c:5404 +#: fortran/resolve.c:6041 +#, no-c-format +msgid "" +"Allocating %s of ABSTRACT base type at %L requires a type-spec or SOURCE=" +msgstr "" + +#: fortran/resolve.c:6048 #, no-c-format msgid "Cannot allocate INTENT(IN) variable '%s' at %L" msgstr "" -#: fortran/resolve.c:5428 +#: fortran/resolve.c:6060 #, no-c-format msgid "Array specification required in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:5458 +#: fortran/resolve.c:6090 #, no-c-format msgid "Bad array specification in ALLOCATE statement at %L" msgstr "" -#: fortran/resolve.c:5478 +#: fortran/resolve.c:6110 #, no-c-format msgid "" "'%s' must not appear in the array specification at %L in the same ALLOCATE " "statement where it is itself allocated" msgstr "" -#: fortran/resolve.c:5503 +#: fortran/resolve.c:6135 #, no-c-format msgid "Stat-variable '%s' at %L cannot be INTENT(IN)" msgstr "" -#: fortran/resolve.c:5507 +#: fortran/resolve.c:6139 #, no-c-format msgid "Illegal stat-variable at %L for a PURE procedure" msgstr "" -#: fortran/resolve.c:5513 +#: fortran/resolve.c:6146 #, no-c-format msgid "Stat-variable at %L must be a scalar INTEGER variable" msgstr "" -#: fortran/resolve.c:5518 +#: fortran/resolve.c:6151 #, no-c-format msgid "Stat-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.c:5526 +#: fortran/resolve.c:6159 #, no-c-format msgid "ERRMSG at %L is useless without a STAT tag" msgstr "" -#: fortran/resolve.c:5530 +#: fortran/resolve.c:6163 #, no-c-format msgid "Errmsg-variable '%s' at %L cannot be INTENT(IN)" msgstr "" -#: fortran/resolve.c:5534 +#: fortran/resolve.c:6167 #, no-c-format msgid "Illegal errmsg-variable at %L for a PURE procedure" msgstr "" -#: fortran/resolve.c:5541 +#: fortran/resolve.c:6175 #, no-c-format msgid "Errmsg-variable at %L must be a scalar CHARACTER variable" msgstr "" -#: fortran/resolve.c:5546 +#: fortran/resolve.c:6180 #, no-c-format msgid "Errmsg-variable at %L shall not be %sd within the same %s statement" msgstr "" -#: fortran/resolve.c:5564 +#: fortran/resolve.c:6198 #, no-c-format msgid "Allocate-object at %L also appears at %L" msgstr "" @@ -9622,99 +10160,109 @@ msgstr "" #. element in the list. Either way, we must #. issue an error and get the next case from P. #. FIXME: Sort P and Q by line number. -#: fortran/resolve.c:5731 +#: fortran/resolve.c:6365 #, no-c-format msgid "CASE label at %L overlaps with CASE label at %L" msgstr "" -#: fortran/resolve.c:5782 +#: fortran/resolve.c:6416 #, no-c-format msgid "Expression in CASE statement at %L must be of type %s" msgstr "" -#: fortran/resolve.c:5793 +#: fortran/resolve.c:6427 #, no-c-format msgid "Expression in CASE statement at %L must be of kind %d" msgstr "" -#: fortran/resolve.c:5805 +#: fortran/resolve.c:6439 #, no-c-format msgid "Expression in CASE statement at %L must be scalar" msgstr "" -#: fortran/resolve.c:5851 +#: fortran/resolve.c:6485 #, no-c-format msgid "" "Selection expression in computed GOTO statement at %L must be a scalar " "integer expression" msgstr "" -#: fortran/resolve.c:5869 +#: fortran/resolve.c:6503 #, no-c-format msgid "Argument of SELECT statement at %L cannot be %s" msgstr "" -#: fortran/resolve.c:5878 +#: fortran/resolve.c:6512 #, no-c-format msgid "Argument of SELECT statement at %L must be a scalar expression" msgstr "" -#: fortran/resolve.c:5943 +#: fortran/resolve.c:6577 fortran/resolve.c:6797 #, no-c-format msgid "" "The DEFAULT CASE at %L cannot be followed by a second DEFAULT CASE at %L" msgstr "" -#: fortran/resolve.c:5969 +#: fortran/resolve.c:6603 #, no-c-format msgid "Logical range in CASE statement at %L is not allowed" msgstr "" -#: fortran/resolve.c:5981 +#: fortran/resolve.c:6615 #, no-c-format msgid "constant logical value in CASE statement is repeated at %L" msgstr "" -#: fortran/resolve.c:5995 +#: fortran/resolve.c:6629 #, no-c-format msgid "Range specification at %L can never be matched" msgstr "" -#: fortran/resolve.c:6098 +#: fortran/resolve.c:6732 #, no-c-format msgid "Logical SELECT CASE block at %L has more that two cases" msgstr "" -#: fortran/resolve.c:6136 +#: fortran/resolve.c:6778 +#, no-c-format +msgid "Derived type '%s' at %L must be extensible" +msgstr "" + +#: fortran/resolve.c:6787 +#, no-c-format +msgid "Derived type '%s' at %L must be an extension of '%s'" +msgstr "" + +#: fortran/resolve.c:6913 #, no-c-format msgid "Data transfer element at %L cannot have POINTER components" msgstr "" -#: fortran/resolve.c:6143 +#: fortran/resolve.c:6920 #, no-c-format msgid "Data transfer element at %L cannot have ALLOCATABLE components" msgstr "" -#: fortran/resolve.c:6150 +#: fortran/resolve.c:6927 #, no-c-format msgid "Data transfer element at %L cannot have PRIVATE components" msgstr "" -#: fortran/resolve.c:6159 +#: fortran/resolve.c:6936 #, no-c-format msgid "" "Data transfer element at %L cannot be a full reference to an assumed-size " "array" msgstr "" -#: fortran/resolve.c:6221 +#: fortran/resolve.c:6998 #, no-c-format msgid "" "Statement at %L is not a valid branch target statement for the branch " "statement at %L" msgstr "" -#: fortran/resolve.c:6230 +#: fortran/resolve.c:7007 #, no-c-format msgid "Branch at %L may result in an infinite loop" msgstr "" @@ -9722,113 +10270,113 @@ msgstr "" #. The label is not in an enclosing block, so illegal. This was #. allowed in Fortran 66, so we allow it as extension. No #. further checks are necessary in this case. -#: fortran/resolve.c:6258 +#: fortran/resolve.c:7035 #, no-c-format msgid "Label at %L is not in the same block as the GOTO statement at %L" msgstr "" -#: fortran/resolve.c:6333 +#: fortran/resolve.c:7110 #, no-c-format msgid "WHERE mask at %L has inconsistent shape" msgstr "" -#: fortran/resolve.c:6349 +#: fortran/resolve.c:7126 #, no-c-format msgid "WHERE assignment target at %L has inconsistent shape" msgstr "" -#: fortran/resolve.c:6357 fortran/resolve.c:6444 +#: fortran/resolve.c:7134 fortran/resolve.c:7221 #, no-c-format msgid "Non-ELEMENTAL user-defined assignment in WHERE at %L" msgstr "" -#: fortran/resolve.c:6367 fortran/resolve.c:6454 +#: fortran/resolve.c:7144 fortran/resolve.c:7231 #, no-c-format msgid "Unsupported statement inside WHERE at %L" msgstr "" -#: fortran/resolve.c:6398 +#: fortran/resolve.c:7175 #, no-c-format msgid "Assignment to a FORALL index variable at %L" msgstr "" -#: fortran/resolve.c:6407 +#: fortran/resolve.c:7184 #, no-c-format msgid "" "The FORALL with index '%s' is not used on the left side of the assignment at " "%L and so might cause multiple assignment to this object" msgstr "" -#: fortran/resolve.c:6576 +#: fortran/resolve.c:7353 #, no-c-format msgid "An outer FORALL construct already has an index with this name %L" msgstr "" -#: fortran/resolve.c:6643 +#: fortran/resolve.c:7432 #, no-c-format msgid "WHERE/ELSEWHERE clause at %L requires a LOGICAL array" msgstr "" -#: fortran/resolve.c:6705 -#, no-c-format -msgid "Subroutine '%s' called instead of assignment at %L must be PURE" -msgstr "" - -#: fortran/resolve.c:6778 +#: fortran/resolve.c:7587 #, no-c-format msgid "CHARACTER expression will be truncated in assignment (%d/%d) at %L" msgstr "" -#: fortran/resolve.c:6803 +#: fortran/resolve.c:7612 #, no-c-format msgid "Cannot assign to variable '%s' in PURE procedure at %L" msgstr "" -#: fortran/resolve.c:6815 +#: fortran/resolve.c:7624 #, no-c-format msgid "" "The impure variable at %L is assigned to a derived type variable with a " "POINTER component in a PURE procedure (12.6)" msgstr "" -#: fortran/resolve.c:6922 +#: fortran/resolve.c:7635 +#, no-c-format +msgid "Variable must not be polymorphic in assignment at %L" +msgstr "" + +#: fortran/resolve.c:7741 #, no-c-format msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable" msgstr "" -#: fortran/resolve.c:6925 +#: fortran/resolve.c:7744 #, no-c-format msgid "Variable '%s' has not been assigned a target label at %L" msgstr "" -#: fortran/resolve.c:6936 +#: fortran/resolve.c:7755 #, no-c-format msgid "" "Alternate RETURN statement at %L requires a SCALAR-INTEGER return specifier" msgstr "" -#: fortran/resolve.c:6962 +#: fortran/resolve.c:7786 #, no-c-format msgid "ASSIGN statement at %L requires a scalar default INTEGER variable" msgstr "" -#: fortran/resolve.c:6977 +#: fortran/resolve.c:7801 #, no-c-format msgid "Arithmetic IF statement at %L requires a numeric expression" msgstr "" -#: fortran/resolve.c:7027 +#: fortran/resolve.c:7864 #, no-c-format msgid "" "Exit condition of DO WHILE loop at %L must be a scalar LOGICAL expression" msgstr "" -#: fortran/resolve.c:7109 +#: fortran/resolve.c:7946 #, no-c-format msgid "FORALL mask clause at %L requires a LOGICAL expression" msgstr "" -#: fortran/resolve.c:7181 fortran/resolve.c:7237 +#: fortran/resolve.c:8018 fortran/resolve.c:8074 #, no-c-format msgid "" "Binding label '%s' for common block '%s' at %L collides with the global " @@ -9836,14 +10384,14 @@ msgid "" msgstr "" #. Common block names match but binding labels do not. -#: fortran/resolve.c:7202 +#: fortran/resolve.c:8039 #, no-c-format msgid "" "Binding label '%s' for common block '%s' at %L does not match the binding " "label '%s' for common block '%s' at %L" msgstr "" -#: fortran/resolve.c:7249 +#: fortran/resolve.c:8086 #, no-c-format msgid "" "Binding label '%s' for common block '%s' at %L collides with global entity '%" @@ -9851,255 +10399,270 @@ msgid "" msgstr "" #. Make sure global procedures don't collide with anything. -#: fortran/resolve.c:7301 +#: fortran/resolve.c:8138 #, no-c-format msgid "Binding label '%s' at %L collides with the global entity '%s' at %L" msgstr "" #. Make sure procedures in interface bodies don't collide. -#: fortran/resolve.c:7314 +#: fortran/resolve.c:8151 #, no-c-format msgid "" "Binding label '%s' in interface body at %L collides with the global entity '%" "s' at %L" msgstr "" -#: fortran/resolve.c:7327 +#: fortran/resolve.c:8164 #, no-c-format msgid "Binding label '%s' at %L collides with global entity '%s' at %L" msgstr "" -#: fortran/resolve.c:7404 +#: fortran/resolve.c:8241 #, no-c-format msgid "CHARACTER variable has zero length at %L" msgstr "" -#: fortran/resolve.c:7697 +#: fortran/resolve.c:8252 +#, no-c-format +msgid "String length at %L is too large" +msgstr "" + +#: fortran/resolve.c:8553 #, no-c-format msgid "Allocatable array '%s' at %L must have a deferred shape" msgstr "" -#: fortran/resolve.c:7700 +#: fortran/resolve.c:8557 #, no-c-format msgid "Scalar object '%s' at %L may not be ALLOCATABLE" msgstr "" -#: fortran/resolve.c:7707 +#: fortran/resolve.c:8565 #, no-c-format msgid "Array pointer '%s' at %L must have a deferred shape" msgstr "" -#: fortran/resolve.c:7718 +#: fortran/resolve.c:8576 #, no-c-format msgid "Array '%s' at %L cannot have a deferred shape" msgstr "" -#: fortran/resolve.c:7746 +#: fortran/resolve.c:8604 #, no-c-format msgid "" "The type '%s' cannot be host associated at %L because it is blocked by an " "incompatible object of the same name declared at %L" msgstr "" -#: fortran/resolve.c:7769 +#: fortran/resolve.c:8627 #, no-c-format msgid "" "Object '%s' at %L must have the SAVE attribute for default initialization of " "a component" msgstr "" +#: fortran/resolve.c:8638 +#, no-c-format +msgid "Type '%s' of CLASS variable '%s' at %L is not extensible" +msgstr "" + +#: fortran/resolve.c:8648 +#, no-c-format +msgid "CLASS variable '%s' at %L must be dummy, allocatable or pointer" +msgstr "" + #. The shape of a main program or module array needs to be #. constant. -#: fortran/resolve.c:7816 +#: fortran/resolve.c:8695 #, no-c-format msgid "The module or main program array '%s' at %L must have constant shape" msgstr "" -#: fortran/resolve.c:7829 +#: fortran/resolve.c:8708 #, no-c-format msgid "" "Entity with assumed character length at %L must be a dummy argument or a " "PARAMETER" msgstr "" -#: fortran/resolve.c:7848 +#: fortran/resolve.c:8727 #, no-c-format msgid "'%s' at %L must have constant character length in this context" msgstr "" -#: fortran/resolve.c:7884 +#: fortran/resolve.c:8763 #, no-c-format msgid "Allocatable '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:7887 +#: fortran/resolve.c:8766 #, no-c-format msgid "External '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:7891 +#: fortran/resolve.c:8770 #, no-c-format msgid "Dummy '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:7894 +#: fortran/resolve.c:8773 #, no-c-format msgid "Intrinsic '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:7897 +#: fortran/resolve.c:8776 #, no-c-format msgid "Function result '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:7900 +#: fortran/resolve.c:8779 #, no-c-format msgid "Automatic array '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:7923 +#: fortran/resolve.c:8802 #, no-c-format msgid "Although not referenced, '%s' at %L has ambiguous interfaces" msgstr "" -#: fortran/resolve.c:7942 +#: fortran/resolve.c:8821 #, no-c-format msgid "" "Character-valued statement function '%s' at %L must have constant length" msgstr "" -#: fortran/resolve.c:7950 +#: fortran/resolve.c:8829 #, no-c-format msgid "" "Automatic character length function '%s' at %L must have an explicit " "interface" msgstr "" -#: fortran/resolve.c:7975 +#: fortran/resolve.c:8854 #, no-c-format msgid "" "Fortran 2003: '%s' is of a PRIVATE type and cannot be a dummy argument of '%" "s', which is PUBLIC at %L" msgstr "" -#: fortran/resolve.c:7998 fortran/resolve.c:8023 +#: fortran/resolve.c:8877 fortran/resolve.c:8902 #, no-c-format msgid "" "Fortran 2003: Procedure '%s' in PUBLIC interface '%s' at %L takes dummy " "arguments of '%s' which is PRIVATE" msgstr "" -#: fortran/resolve.c:8041 +#: fortran/resolve.c:8920 #, no-c-format msgid "Function '%s' at %L cannot have an initializer" msgstr "" -#: fortran/resolve.c:8050 +#: fortran/resolve.c:8929 #, no-c-format msgid "External object '%s' at %L may not have an initializer" msgstr "" -#: fortran/resolve.c:8058 +#: fortran/resolve.c:8937 #, no-c-format msgid "ELEMENTAL function '%s' at %L must have a scalar result" msgstr "" -#: fortran/resolve.c:8079 +#: fortran/resolve.c:8958 #, no-c-format msgid "CHARACTER(*) function '%s' at %L cannot be array-valued" msgstr "" -#: fortran/resolve.c:8083 +#: fortran/resolve.c:8962 #, no-c-format msgid "CHARACTER(*) function '%s' at %L cannot be pointer-valued" msgstr "" -#: fortran/resolve.c:8087 +#: fortran/resolve.c:8966 #, no-c-format msgid "CHARACTER(*) function '%s' at %L cannot be pure" msgstr "" -#: fortran/resolve.c:8091 +#: fortran/resolve.c:8970 #, no-c-format msgid "CHARACTER(*) function '%s' at %L cannot be recursive" msgstr "" -#: fortran/resolve.c:8100 +#: fortran/resolve.c:8979 #, no-c-format -msgid "CHARACTER(*) function '%s' at %L is obsolescent in fortran 95" +msgid "Obsolescent feature: CHARACTER(*) function '%s' at %L" msgstr "" -#: fortran/resolve.c:8155 +#: fortran/resolve.c:9034 #, no-c-format msgid "PROCEDURE attribute conflicts with SAVE attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:8161 +#: fortran/resolve.c:9040 #, no-c-format msgid "PROCEDURE attribute conflicts with INTENT attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:8167 +#: fortran/resolve.c:9046 #, no-c-format msgid "PROCEDURE attribute conflicts with RESULT attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:8175 +#: fortran/resolve.c:9054 #, no-c-format msgid "EXTERNAL attribute conflicts with FUNCTION attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:8181 +#: fortran/resolve.c:9060 #, no-c-format msgid "Procedure pointer result '%s' at %L is missing the pointer attribute" msgstr "" -#: fortran/resolve.c:8227 +#: fortran/resolve.c:9106 #, no-c-format msgid "FINAL procedure '%s' at %L is not a SUBROUTINE" msgstr "" -#: fortran/resolve.c:8235 +#: fortran/resolve.c:9114 #, no-c-format msgid "FINAL procedure at %L must have exactly one argument" msgstr "" -#: fortran/resolve.c:8244 +#: fortran/resolve.c:9123 #, no-c-format msgid "Argument of FINAL procedure at %L must be of type '%s'" msgstr "" -#: fortran/resolve.c:8252 +#: fortran/resolve.c:9131 #, no-c-format msgid "Argument of FINAL procedure at %L must not be a POINTER" msgstr "" -#: fortran/resolve.c:8258 +#: fortran/resolve.c:9137 #, no-c-format msgid "Argument of FINAL procedure at %L must not be ALLOCATABLE" msgstr "" -#: fortran/resolve.c:8264 +#: fortran/resolve.c:9143 #, no-c-format msgid "Argument of FINAL procedure at %L must not be OPTIONAL" msgstr "" -#: fortran/resolve.c:8272 +#: fortran/resolve.c:9151 #, no-c-format msgid "Argument of FINAL procedure at %L must not be INTENT(OUT)" msgstr "" -#: fortran/resolve.c:8280 +#: fortran/resolve.c:9159 #, no-c-format msgid "Non-scalar FINAL procedure at %L should have assumed shape argument" msgstr "" -#: fortran/resolve.c:8299 +#: fortran/resolve.c:9178 #, no-c-format msgid "FINAL procedure '%s' declared at %L has the same rank (%d) as '%s'" msgstr "" -#: fortran/resolve.c:8332 +#: fortran/resolve.c:9211 #, no-c-format msgid "" "Only array FINAL procedures declared for derived type '%s' defined at %L, " @@ -10107,819 +10670,854 @@ msgid "" msgstr "" #. TODO: Remove this error when finalization is finished. -#: fortran/resolve.c:8337 +#: fortran/resolve.c:9216 #, no-c-format msgid "Finalization at %L is not yet implemented" msgstr "" -#: fortran/resolve.c:8363 +#: fortran/resolve.c:9242 #, no-c-format msgid "Can't overwrite GENERIC '%s' at %L" msgstr "" -#: fortran/resolve.c:8375 +#: fortran/resolve.c:9254 #, no-c-format msgid "'%s' at %L overrides a procedure binding declared NON_OVERRIDABLE" msgstr "" -#: fortran/resolve.c:8383 +#: fortran/resolve.c:9262 #, no-c-format msgid "'%s' at %L must not be DEFERRED as it overrides a non-DEFERRED binding" msgstr "" -#: fortran/resolve.c:8391 +#: fortran/resolve.c:9270 #, no-c-format msgid "'%s' at %L overrides a PURE procedure and must also be PURE" msgstr "" -#: fortran/resolve.c:8400 +#: fortran/resolve.c:9279 #, no-c-format msgid "'%s' at %L overrides an ELEMENTAL procedure and must also be ELEMENTAL" msgstr "" -#: fortran/resolve.c:8406 +#: fortran/resolve.c:9285 #, no-c-format msgid "" "'%s' at %L overrides a non-ELEMENTAL procedure and must not be ELEMENTAL, " "either" msgstr "" -#: fortran/resolve.c:8415 +#: fortran/resolve.c:9294 #, no-c-format msgid "'%s' at %L overrides a SUBROUTINE and must also be a SUBROUTINE" msgstr "" -#: fortran/resolve.c:8426 +#: fortran/resolve.c:9305 #, no-c-format msgid "'%s' at %L overrides a FUNCTION and must also be a FUNCTION" msgstr "" -#: fortran/resolve.c:8437 +#: fortran/resolve.c:9316 #, no-c-format msgid "" "'%s' at %L and the overridden FUNCTION should have matching result types" msgstr "" -#: fortran/resolve.c:8448 +#: fortran/resolve.c:9327 #, no-c-format msgid "'%s' at %L overrides a PUBLIC procedure and must not be PRIVATE" msgstr "" -#: fortran/resolve.c:8477 +#: fortran/resolve.c:9356 #, no-c-format msgid "" "Dummy argument '%s' of '%s' at %L should be named '%s' as to match the " "corresponding argument of the overridden procedure" msgstr "" -#: fortran/resolve.c:8490 +#: fortran/resolve.c:9369 #, no-c-format msgid "" "Types mismatch for dummy argument '%s' of '%s' %L in in respect to the " "overridden procedure" msgstr "" -#: fortran/resolve.c:8500 +#: fortran/resolve.c:9379 #, no-c-format msgid "" "'%s' at %L must have the same number of formal arguments as the overridden " "procedure" msgstr "" -#: fortran/resolve.c:8509 +#: fortran/resolve.c:9388 #, no-c-format msgid "'%s' at %L overrides a NOPASS binding and must also be NOPASS" msgstr "" -#: fortran/resolve.c:8520 +#: fortran/resolve.c:9399 #, no-c-format msgid "'%s' at %L overrides a binding with PASS and must also be PASS" msgstr "" -#: fortran/resolve.c:8527 +#: fortran/resolve.c:9406 #, no-c-format msgid "" "Passed-object dummy argument of '%s' at %L must be at the same position as " "the passed-object dummy argument of the overridden procedure" msgstr "" -#: fortran/resolve.c:8558 +#: fortran/resolve.c:9440 #, no-c-format msgid "'%s' and '%s' can't be mixed FUNCTION/SUBROUTINE for GENERIC '%s' at %L" msgstr "" -#: fortran/resolve.c:8567 +#: fortran/resolve.c:9449 #, no-c-format msgid "'%s' and '%s' for GENERIC '%s' at %L are ambiguous" msgstr "" -#: fortran/resolve.c:8636 +#: fortran/resolve.c:9508 #, no-c-format msgid "Undefined specific binding '%s' as target of GENERIC '%s' at %L" msgstr "" -#: fortran/resolve.c:8648 +#: fortran/resolve.c:9520 #, no-c-format msgid "GENERIC '%s' at %L must target a specific binding, '%s' is GENERIC, too" msgstr "" -#: fortran/resolve.c:8678 +#: fortran/resolve.c:9550 #, no-c-format msgid "GENERIC '%s' at %L can't overwrite specific binding with the same name" msgstr "" -#: fortran/resolve.c:8742 +#: fortran/resolve.c:9606 +#, no-c-format +msgid "Type-bound operator at %L can't be NOPASS" +msgstr "" + +#: fortran/resolve.c:9769 #, no-c-format msgid "" "'%s' must be a module procedure or an external procedure with an explicit " "interface at %L" msgstr "" -#: fortran/resolve.c:8779 +#: fortran/resolve.c:9806 #, no-c-format msgid "Procedure '%s' with PASS(%s) at %L has no argument '%s'" msgstr "" -#: fortran/resolve.c:8793 +#: fortran/resolve.c:9820 #, no-c-format msgid "Procedure '%s' with PASS at %L must have at least one argument" msgstr "" -#: fortran/resolve.c:8805 +#: fortran/resolve.c:9831 fortran/resolve.c:10199 #, no-c-format -msgid "" -"Argument '%s' of '%s' with PASS(%s) at %L must be of the derived-type '%s'" +msgid "Non-polymorphic passed-object dummy argument of '%s' at %L" msgstr "" -#: fortran/resolve.c:8811 +#: fortran/resolve.c:9839 #, no-c-format msgid "" -"Polymorphic entities are not yet implemented, non-polymorphic passed-object " -"dummy argument of '%s' at %L accepted" +"Argument '%s' of '%s' with PASS(%s) at %L must be of the derived-type '%s'" msgstr "" -#: fortran/resolve.c:8836 +#: fortran/resolve.c:9867 #, no-c-format msgid "Procedure '%s' at %L has the same name as a component of '%s'" msgstr "" -#: fortran/resolve.c:8845 +#: fortran/resolve.c:9876 #, no-c-format msgid "" "Procedure '%s' at %L has the same name as an inherited component of '%s'" msgstr "" -#: fortran/resolve.c:8916 +#: fortran/resolve.c:9963 #, no-c-format msgid "" "Derived-type '%s' declared at %L must be ABSTRACT because '%s' is DEFERRED " "and not overridden" msgstr "" -#: fortran/resolve.c:8974 +#: fortran/resolve.c:10024 #, no-c-format msgid "Non-extensible derived-type '%s' at %L must not be ABSTRACT" msgstr "" -#: fortran/resolve.c:8984 +#: fortran/resolve.c:10034 #, no-c-format msgid "" "Interface '%s', used by procedure pointer component '%s' at %L, is declared " "in a later PROCEDURE statement" msgstr "" -#: fortran/resolve.c:9041 +#: fortran/resolve.c:10095 #, no-c-format msgid "" "Interface '%s' of procedure pointer component '%s' at %L must be explicit" msgstr "" -#: fortran/resolve.c:9063 +#: fortran/resolve.c:10133 +#, no-c-format +msgid "" +"Procedure pointer component '%s' with PASS(%s) at %L has no argument '%s'" +msgstr "" + +#: fortran/resolve.c:10147 +#, no-c-format +msgid "" +"Procedure pointer component '%s' with PASS at %L must have at least one " +"argument" +msgstr "" + +#: fortran/resolve.c:10163 +#, no-c-format +msgid "" +"Argument '%s' of '%s' with PASS(%s) at %L must be of the derived type '%s'" +msgstr "" + +#: fortran/resolve.c:10173 +#, no-c-format +msgid "Argument '%s' of '%s' with PASS(%s) at %L must be scalar" +msgstr "" + +#: fortran/resolve.c:10182 +#, no-c-format +msgid "" +"Argument '%s' of '%s' with PASS(%s) at %L may not have the POINTER attribute" +msgstr "" + +#: fortran/resolve.c:10191 +#, no-c-format +msgid "Argument '%s' of '%s' with PASS(%s) at %L may not be ALLOCATABLE" +msgstr "" + +#: fortran/resolve.c:10214 #, no-c-format msgid "" "Component '%s' of '%s' at %L has the same name as an inherited type-bound " "procedure" msgstr "" -#: fortran/resolve.c:9075 +#: fortran/resolve.c:10226 #, no-c-format msgid "" "Character length of component '%s' needs to be a constant specification " "expression at %L" msgstr "" -#: fortran/resolve.c:9091 +#: fortran/resolve.c:10241 #, no-c-format msgid "" "Fortran 2003: the component '%s' is a PRIVATE type and cannot be a component " "of '%s', which is PUBLIC at %L" msgstr "" -#: fortran/resolve.c:9102 +#: fortran/resolve.c:10251 #, no-c-format msgid "" "Component %s of SEQUENCE type declared at %L does not have the SEQUENCE " "attribute" msgstr "" -#: fortran/resolve.c:9113 +#: fortran/resolve.c:10262 #, no-c-format msgid "" "The pointer component '%s' of '%s' at %L is a type that has not been declared" msgstr "" -#: fortran/resolve.c:9141 +#: fortran/resolve.c:10273 +#, no-c-format +msgid "Component '%s' with CLASS at %L must be allocatable or pointer" +msgstr "" + +#: fortran/resolve.c:10301 #, no-c-format msgid "Component '%s' of '%s' at %L must have constant array bounds" msgstr "" -#: fortran/resolve.c:9186 +#: fortran/resolve.c:10346 #, no-c-format msgid "" "NAMELIST object '%s' was declared PRIVATE and cannot be member of PUBLIC " "namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:9196 +#: fortran/resolve.c:10356 #, no-c-format msgid "" "NAMELIST object '%s' has use-associated PRIVATE components and cannot be " "member of namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:9209 +#: fortran/resolve.c:10369 #, no-c-format msgid "" "NAMELIST object '%s' has PRIVATE components and cannot be a member of PUBLIC " "namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:9221 +#: fortran/resolve.c:10381 #, no-c-format msgid "" "NAMELIST array object '%s' must not have assumed shape in namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:9230 +#: fortran/resolve.c:10390 #, no-c-format msgid "" "NAMELIST array object '%s' must have constant shape in namelist '%s' at %L" msgstr "" -#: fortran/resolve.c:9242 +#: fortran/resolve.c:10402 #, no-c-format msgid "" "NAMELIST object '%s' in namelist '%s' at %L cannot have ALLOCATABLE " "components" msgstr "" -#: fortran/resolve.c:9250 +#: fortran/resolve.c:10410 #, no-c-format msgid "" "NAMELIST object '%s' in namelist '%s' at %L cannot have POINTER components" msgstr "" -#: fortran/resolve.c:9276 +#: fortran/resolve.c:10436 #, no-c-format msgid "PROCEDURE attribute conflicts with NAMELIST attribute in '%s' at %L" msgstr "" -#: fortran/resolve.c:9295 +#: fortran/resolve.c:10455 #, no-c-format msgid "Parameter array '%s' at %L cannot be automatic or of deferred shape" msgstr "" -#: fortran/resolve.c:9307 +#: fortran/resolve.c:10467 #, no-c-format msgid "" "Implicitly typed PARAMETER '%s' at %L doesn't match a later IMPLICIT type" msgstr "" -#: fortran/resolve.c:9318 +#: fortran/resolve.c:10478 #, no-c-format msgid "Incompatible derived type in PARAMETER at %L" msgstr "" -#: fortran/resolve.c:9380 +#: fortran/resolve.c:10541 +#, no-c-format +msgid "PROCEDURE '%s' at %L may not be used as its own interface" +msgstr "" + +#: fortran/resolve.c:10547 #, no-c-format msgid "" "Interface '%s', used by procedure '%s' at %L, is declared in a later " "PROCEDURE statement" msgstr "" -#: fortran/resolve.c:9437 +#: fortran/resolve.c:10600 #, no-c-format msgid "Interface '%s' of procedure '%s' at %L must be explicit" msgstr "" -#: fortran/resolve.c:9471 -#, no-c-format -msgid "Type specified for intrinsic function '%s' at %L is ignored" -msgstr "" - -#: fortran/resolve.c:9478 -#, no-c-format -msgid "Intrinsic subroutine '%s' at %L shall not have a type specifier" -msgstr "" - -#: fortran/resolve.c:9485 -#, no-c-format -msgid "'%s' declared INTRINSIC at %L does not exist" -msgstr "" - -#: fortran/resolve.c:9494 -#, no-c-format -msgid "" -"The intrinsic '%s' declared INTRINSIC at %L is not available in the current " -"standard settings but %s. Use an appropriate -std=* option or enable -fall-" -"intrinsics in order to use it." -msgstr "" - -#: fortran/resolve.c:9541 +#: fortran/resolve.c:10667 #, no-c-format msgid "Assumed size array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.c:9544 +#: fortran/resolve.c:10670 #, no-c-format msgid "Assumed shape array at %L must be a dummy argument" msgstr "" -#: fortran/resolve.c:9556 +#: fortran/resolve.c:10682 #, no-c-format msgid "Symbol at %L is not a DUMMY variable" msgstr "" -#: fortran/resolve.c:9562 +#: fortran/resolve.c:10688 #, no-c-format msgid "" "'%s' at %L cannot have the VALUE attribute because it is not a dummy argument" msgstr "" -#: fortran/resolve.c:9572 +#: fortran/resolve.c:10698 #, no-c-format msgid "" "Character dummy variable '%s' at %L with VALUE attribute must have constant " "length" msgstr "" -#: fortran/resolve.c:9581 +#: fortran/resolve.c:10707 #, no-c-format msgid "" "C interoperable character dummy variable '%s' at %L with VALUE attribute " "must have length one" msgstr "" -#: fortran/resolve.c:9607 +#: fortran/resolve.c:10733 #, no-c-format msgid "" "Variable '%s' at %L cannot be BIND(C) because it is neither a COMMON block " "nor declared at the module level scope" msgstr "" -#: fortran/resolve.c:9660 +#: fortran/resolve.c:10786 #, no-c-format msgid "The derived type '%s' at %L is of type '%s', which has not been defined" msgstr "" -#: fortran/resolve.c:9701 +#: fortran/resolve.c:10827 #, no-c-format msgid "Fortran 2003: PUBLIC %s '%s' at %L of PRIVATE derived type '%s'" msgstr "" -#: fortran/resolve.c:9720 +#: fortran/resolve.c:10846 #, no-c-format msgid "" "The INTENT(OUT) dummy argument '%s' at %L is ASSUMED SIZE and so cannot have " "a default initializer" msgstr "" -#: fortran/resolve.c:9779 +#: fortran/resolve.c:10920 #, no-c-format msgid "Threadprivate at %L isn't SAVEd" msgstr "" -#: fortran/resolve.c:9867 +#: fortran/resolve.c:10968 +#, no-c-format +msgid "non-constant DATA value at %L" +msgstr "" + +#: fortran/resolve.c:11011 #, no-c-format msgid "BLOCK DATA element '%s' at %L must be in COMMON" msgstr "" -#: fortran/resolve.c:9873 +#: fortran/resolve.c:11017 #, no-c-format msgid "DATA array '%s' at %L must be specified in a previous declaration" msgstr "" -#: fortran/resolve.c:9889 +#: fortran/resolve.c:11033 #, no-c-format msgid "DATA element '%s' at %L is a pointer and so must be a full array" msgstr "" -#: fortran/resolve.c:9935 +#: fortran/resolve.c:11079 #, no-c-format msgid "Nonconstant array section at %L in DATA statement" msgstr "" -#: fortran/resolve.c:9948 +#: fortran/resolve.c:11092 #, no-c-format msgid "DATA statement at %L has more variables than values" msgstr "" -#: fortran/resolve.c:10042 +#: fortran/resolve.c:11186 #, no-c-format msgid "iterator start at %L does not simplify" msgstr "" -#: fortran/resolve.c:10049 +#: fortran/resolve.c:11193 #, no-c-format msgid "iterator end at %L does not simplify" msgstr "" -#: fortran/resolve.c:10056 +#: fortran/resolve.c:11200 #, no-c-format msgid "iterator step at %L does not simplify" msgstr "" -#: fortran/resolve.c:10182 +#: fortran/resolve.c:11326 #, no-c-format msgid "DATA statement at %L has more values than variables" msgstr "" -#: fortran/resolve.c:10273 +#: fortran/resolve.c:11417 #, no-c-format msgid "Label %d at %L defined but not used" msgstr "" -#: fortran/resolve.c:10278 +#: fortran/resolve.c:11422 #, no-c-format msgid "Label %d at %L defined but cannot be used" msgstr "" -#: fortran/resolve.c:10363 +#: fortran/resolve.c:11506 #, no-c-format msgid "" "Derived type variable '%s' at %L must have SEQUENCE attribute to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:10372 +#: fortran/resolve.c:11515 #, no-c-format msgid "" "Derived type variable '%s' at %L cannot have ALLOCATABLE components to be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:10380 +#: fortran/resolve.c:11523 #, no-c-format msgid "" "Derived type variable '%s' at %L with default initialization cannot be in " "EQUIVALENCE with a variable in COMMON" msgstr "" -#: fortran/resolve.c:10397 +#: fortran/resolve.c:11539 #, no-c-format msgid "" "Derived type variable '%s' at %L with pointer component(s) cannot be an " "EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:10502 +#: fortran/resolve.c:11643 #, no-c-format msgid "Syntax error in EQUIVALENCE statement at %L" msgstr "" -#: fortran/resolve.c:10517 +#: fortran/resolve.c:11658 #, no-c-format msgid "" "Either all or none of the objects in the EQUIVALENCE set at %L shall have " "the PROTECTED attribute" msgstr "" -#: fortran/resolve.c:10529 +#: fortran/resolve.c:11670 #, no-c-format msgid "" "Common block member '%s' at %L cannot be an EQUIVALENCE object in the pure " "procedure '%s'" msgstr "" -#: fortran/resolve.c:10538 +#: fortran/resolve.c:11679 #, no-c-format msgid "Named constant '%s' at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:10617 +#: fortran/resolve.c:11758 #, no-c-format msgid "" "Array '%s' at %L with non-constant bounds cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:10628 +#: fortran/resolve.c:11769 #, no-c-format msgid "Structure component '%s' at %L cannot be an EQUIVALENCE object" msgstr "" -#: fortran/resolve.c:10639 +#: fortran/resolve.c:11780 #, no-c-format msgid "Substring at %L has length zero" msgstr "" -#: fortran/resolve.c:10683 +#: fortran/resolve.c:11824 #, no-c-format msgid "Fortran 2003: PUBLIC function '%s' at %L of PRIVATE type '%s'" msgstr "" -#: fortran/resolve.c:10696 +#: fortran/resolve.c:11837 #, no-c-format msgid "ENTRY '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/resolve.c:10722 +#: fortran/resolve.c:11854 #, no-c-format msgid "User operator procedure '%s' at %L must be a FUNCTION" msgstr "" -#: fortran/resolve.c:10729 +#: fortran/resolve.c:11864 #, no-c-format msgid "User operator procedure '%s' at %L cannot be assumed character length" msgstr "" -#: fortran/resolve.c:10735 +#: fortran/resolve.c:11872 #, no-c-format msgid "User operator procedure '%s' at %L must have at least one argument" msgstr "" -#: fortran/resolve.c:10745 +#: fortran/resolve.c:11886 #, no-c-format msgid "First argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.c:10757 +#: fortran/resolve.c:11904 #, no-c-format msgid "Second argument of operator interface at %L cannot be optional" msgstr "" -#: fortran/resolve.c:10761 +#: fortran/resolve.c:11911 #, no-c-format msgid "Operator interface at %L must have, at most, two arguments" msgstr "" -#: fortran/resolve.c:10815 +#: fortran/resolve.c:11983 #, no-c-format msgid "Contained procedure '%s' at %L of a PURE procedure must also be PURE" msgstr "" -#: fortran/scanner.c:727 +#: fortran/scanner.c:760 #, no-c-format msgid "" "!$OMP at %C starts a commented line as it neither is followed by a space nor " "is a continuation line" msgstr "" -#: fortran/scanner.c:1030 fortran/scanner.c:1154 +#: fortran/scanner.c:1078 fortran/scanner.c:1221 #, no-c-format msgid "Limit of %d continuations exceeded in statement at %C" msgstr "" -#: fortran/scanner.c:1078 +#: fortran/scanner.c:1090 fortran/scanner.c:1177 +#, no-c-format +msgid "Line truncated at %L" +msgstr "" + +#: fortran/scanner.c:1137 #, no-c-format msgid "Missing '&' in continued character constant at %C" msgstr "" -#: fortran/scanner.c:1304 +#: fortran/scanner.c:1371 #, no-c-format msgid "Nonconforming tab character at %C" msgstr "" -#: fortran/scanner.c:1392 fortran/scanner.c:1395 +#: fortran/scanner.c:1459 fortran/scanner.c:1462 #, no-c-format msgid "'&' not allowed by itself in line %d" msgstr "" -#: fortran/scanner.c:1442 +#: fortran/scanner.c:1509 #, no-c-format msgid "Nonconforming tab character in column %d of line %d" msgstr "" -#: fortran/scanner.c:1650 +#: fortran/scanner.c:1717 #, no-c-format msgid "%s:%d: file %s left but not entered" msgstr "" -#: fortran/scanner.c:1684 +#: fortran/scanner.c:1751 #, no-c-format msgid "%s:%d: Illegal preprocessor directive" msgstr "" -#: fortran/scanner.c:1802 +#: fortran/scanner.c:1869 #, no-c-format msgid "Can't open file '%s'" msgstr "" -#: fortran/simplify.c:82 +#: fortran/simplify.c:86 #, no-c-format msgid "Result of %s overflows its kind at %L" msgstr "" -#: fortran/simplify.c:87 +#: fortran/simplify.c:91 #, no-c-format msgid "Result of %s underflows its kind at %L" msgstr "" -#: fortran/simplify.c:92 +#: fortran/simplify.c:96 #, no-c-format msgid "Result of %s is NaN at %L" msgstr "" -#: fortran/simplify.c:96 +#: fortran/simplify.c:100 #, no-c-format msgid "Result of %s gives range error for its kind at %L" msgstr "" -#: fortran/simplify.c:119 +#: fortran/simplify.c:123 #, no-c-format msgid "KIND parameter of %s at %L must be an initialization expression" msgstr "" -#: fortran/simplify.c:127 +#: fortran/simplify.c:131 #, no-c-format msgid "Invalid KIND parameter of %s at %L" msgstr "" -#: fortran/simplify.c:276 +#: fortran/simplify.c:680 #, no-c-format msgid "Argument of %s function at %L is negative" msgstr "" -#: fortran/simplify.c:283 +#: fortran/simplify.c:687 #, no-c-format msgid "Argument of %s function at %L outside of range [0,127]" msgstr "" -#: fortran/simplify.c:301 +#: fortran/simplify.c:705 #, no-c-format msgid "" "Argument of %s function at %L is too large for the collating sequence of " "kind %d" msgstr "" -#: fortran/simplify.c:337 +#: fortran/simplify.c:744 #, no-c-format msgid "Argument of ACOS at %L must be between -1 and 1" msgstr "" -#: fortran/simplify.c:359 +#: fortran/simplify.c:780 #, no-c-format msgid "Argument of ACOSH at %L must not be less than 1" msgstr "" -#: fortran/simplify.c:576 +#: fortran/simplify.c:1049 #, no-c-format msgid "Argument of ASIN at %L must be between -1 and 1" msgstr "" -#: fortran/simplify.c:632 +#: fortran/simplify.c:1146 #, no-c-format msgid "Argument of ATANH at %L must be inside the range -1 to 1" msgstr "" -#: fortran/simplify.c:655 +#: fortran/simplify.c:1180 #, no-c-format msgid "" "If first argument of ATAN2 %L is zero, then the second argument must not be " "zero" msgstr "" -#: fortran/simplify.c:1462 +#: fortran/simplify.c:2221 #, no-c-format msgid "Argument of IACHAR at %L must be of length one" msgstr "" -#: fortran/simplify.c:1469 +#: fortran/simplify.c:2228 #, no-c-format msgid "Argument of IACHAR function at %L outside of range 0..127" msgstr "" -#: fortran/simplify.c:1508 +#: fortran/simplify.c:2267 #, no-c-format msgid "Invalid second argument of IBCLR at %L" msgstr "" -#: fortran/simplify.c:1516 +#: fortran/simplify.c:2275 #, no-c-format msgid "Second argument of IBCLR exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:1550 +#: fortran/simplify.c:2309 #, no-c-format msgid "Invalid second argument of IBITS at %L" msgstr "" -#: fortran/simplify.c:1556 +#: fortran/simplify.c:2315 #, no-c-format msgid "Invalid third argument of IBITS at %L" msgstr "" -#: fortran/simplify.c:1566 +#: fortran/simplify.c:2325 #, no-c-format msgid "Sum of second and third arguments of IBITS exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:1613 +#: fortran/simplify.c:2372 #, no-c-format msgid "Invalid second argument of IBSET at %L" msgstr "" -#: fortran/simplify.c:1621 +#: fortran/simplify.c:2380 #, no-c-format msgid "Second argument of IBSET exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:1651 +#: fortran/simplify.c:2410 #, no-c-format msgid "Argument of ICHAR at %L must be of length one" msgstr "" -#: fortran/simplify.c:1854 +#: fortran/simplify.c:2613 #, no-c-format msgid "Argument of INT at %L is not a valid type" msgstr "" -#: fortran/simplify.c:1885 +#: fortran/simplify.c:2644 #, no-c-format msgid "Argument of %s at %L is not a valid type" msgstr "" -#: fortran/simplify.c:1982 +#: fortran/simplify.c:2789 #, no-c-format msgid "Invalid second argument of ISHFT at %L" msgstr "" -#: fortran/simplify.c:1997 +#: fortran/simplify.c:2804 #, no-c-format msgid "Magnitude of second argument of ISHFT exceeds bit size at %L" msgstr "" -#: fortran/simplify.c:2061 +#: fortran/simplify.c:2868 #, no-c-format msgid "Invalid second argument of ISHFTC at %L" msgstr "" -#: fortran/simplify.c:2075 +#: fortran/simplify.c:2882 #, no-c-format msgid "Invalid third argument of ISHFTC at %L" msgstr "" -#: fortran/simplify.c:2081 +#: fortran/simplify.c:2888 #, no-c-format msgid "" "Magnitude of third argument of ISHFTC exceeds BIT_SIZE of first argument at %" "L" msgstr "" -#: fortran/simplify.c:2097 +#: fortran/simplify.c:2904 #, no-c-format msgid "Magnitude of second argument of ISHFTC exceeds third argument at %L" msgstr "" -#: fortran/simplify.c:2100 +#: fortran/simplify.c:2907 #, no-c-format msgid "" "Magnitude of second argument of ISHFTC exceeds BIT_SIZE of first argument at " "%L" msgstr "" -#: fortran/simplify.c:2171 +#: fortran/simplify.c:2978 #, no-c-format msgid "Argument of KIND at %L is a DERIVED type" msgstr "" -#: fortran/simplify.c:2383 +#: fortran/simplify.c:3190 #, no-c-format msgid "DIM argument at %L is out of bounds" msgstr "" -#: fortran/simplify.c:2555 +#: fortran/simplify.c:3376 #, no-c-format msgid "Argument of LOG at %L cannot be less than or equal to zero" msgstr "" -#: fortran/simplify.c:2568 +#: fortran/simplify.c:3389 #, no-c-format msgid "Complex argument of LOG at %L cannot be zero" msgstr "" -#: fortran/simplify.c:2609 +#: fortran/simplify.c:3436 #, no-c-format msgid "Argument of LOG10 at %L cannot be less than or equal to zero" msgstr "" #. Result is processor-dependent. -#: fortran/simplify.c:2902 +#: fortran/simplify.c:3807 #, no-c-format msgid "Second argument MOD at %L is zero" msgstr "" #. Result is processor-dependent. -#: fortran/simplify.c:2913 +#: fortran/simplify.c:3818 #, no-c-format msgid "Second argument of MOD at %L is zero" msgstr "" @@ -10927,95 +11525,49 @@ msgstr "" #. Result is processor-dependent. This processor just opts #. to not handle it at all. #. Result is processor-dependent. -#: fortran/simplify.c:2955 fortran/simplify.c:2967 +#: fortran/simplify.c:3860 fortran/simplify.c:3872 #, no-c-format msgid "Second argument of MODULO at %L is zero" msgstr "" -#: fortran/simplify.c:3013 +#: fortran/simplify.c:3918 #, no-c-format msgid "Second argument of NEAREST at %L shall not be zero" msgstr "" -#: fortran/simplify.c:3049 +#: fortran/simplify.c:3954 #, no-c-format msgid "Result of NEAREST is NaN at %L" msgstr "" -#: fortran/simplify.c:3330 +#: fortran/simplify.c:4332 #, no-c-format msgid "Argument NCOPIES of REPEAT intrinsic is negative at %L" msgstr "" -#: fortran/simplify.c:3385 +#: fortran/simplify.c:4387 #, no-c-format msgid "Argument NCOPIES of REPEAT intrinsic is too large at %L" msgstr "" -#: fortran/simplify.c:3496 -#, no-c-format -msgid "Integer too large in shape specification at %L" -msgstr "" - -#: fortran/simplify.c:3504 -#, no-c-format -msgid "Too many dimensions in shape specification for RESHAPE at %L" -msgstr "" - -#: fortran/simplify.c:3512 -#, no-c-format -msgid "Shape specification at %L cannot be negative" -msgstr "" - -#: fortran/simplify.c:3524 -#, no-c-format -msgid "Shape specification at %L cannot be the null array" -msgstr "" - -#: fortran/simplify.c:3545 -#, no-c-format -msgid "" -"ORDER parameter of RESHAPE at %L is not the same size as SHAPE parameter" -msgstr "" - -#: fortran/simplify.c:3552 -#, no-c-format -msgid "Error in ORDER parameter of RESHAPE at %L" -msgstr "" - -#: fortran/simplify.c:3560 -#, no-c-format -msgid "ORDER parameter of RESHAPE at %L is out of range" -msgstr "" - -#: fortran/simplify.c:3570 -#, no-c-format -msgid "Invalid permutation in ORDER parameter at %L" -msgstr "" - -#: fortran/simplify.c:3629 -#, no-c-format -msgid "PAD parameter required for short SOURCE parameter at %L" -msgstr "" - -#: fortran/simplify.c:3748 +#: fortran/simplify.c:4659 #, no-c-format msgid "Result of SCALE overflows its kind at %L" msgstr "" -#: fortran/simplify.c:4382 +#: fortran/simplify.c:5423 #, no-c-format msgid "Argument of SQRT at %L has a negative value" msgstr "" -#: fortran/simplify.c:4537 +#: fortran/simplify.c:5623 #, no-c-format msgid "" "Intrinsic TRANSFER at %L has partly undefined result: source size %ld < " "result size %ld" msgstr "" -#: fortran/simplify.c:4903 +#: fortran/simplify.c:6078 #, no-c-format msgid "" "Character '%s' in string at %L cannot be converted into character kind %d" @@ -11047,7 +11599,7 @@ msgid "Symbol '%s' at %L has no IMPLICIT type" msgstr "" #. BIND(C) variables should not be implicitly declared. -#: fortran/symbol.c:281 +#: fortran/symbol.c:278 #, no-c-format msgid "" "Implicitly declared BIND(C) variable '%s' at %L may not be C interoperable" @@ -11055,270 +11607,282 @@ msgstr "" #. Dummy args to a BIND(C) routine may not be interoperable if #. they are implicitly typed. -#: fortran/symbol.c:295 +#: fortran/symbol.c:292 #, no-c-format msgid "" "Implicitly declared variable '%s' at %L may not be C interoperable but it is " "a dummy argument to the BIND(C) procedure '%s' at %L" msgstr "" -#: fortran/symbol.c:336 +#: fortran/symbol.c:333 #, no-c-format msgid "Function result '%s' at %L has no IMPLICIT type" msgstr "" -#: fortran/symbol.c:415 +#: fortran/symbol.c:412 #, no-c-format msgid "%s attribute not allowed in BLOCK DATA program unit at %L" msgstr "" -#: fortran/symbol.c:470 +#: fortran/symbol.c:467 #, no-c-format msgid "Fortran 2003: Procedure pointer at %C" msgstr "" -#: fortran/symbol.c:620 +#: fortran/symbol.c:617 #, no-c-format msgid "%s attribute applied to %s %s at %L" msgstr "" -#: fortran/symbol.c:627 +#: fortran/symbol.c:624 #, no-c-format msgid "BIND(C) applied to %s %s at %L" msgstr "" -#: fortran/symbol.c:728 fortran/symbol.c:1381 +#: fortran/symbol.c:725 fortran/symbol.c:1387 #, no-c-format msgid "%s attribute conflicts with %s attribute at %L" msgstr "" -#: fortran/symbol.c:731 +#: fortran/symbol.c:728 #, no-c-format msgid "%s attribute conflicts with %s attribute in '%s' at %L" msgstr "" -#: fortran/symbol.c:739 +#: fortran/symbol.c:736 #, no-c-format msgid "Fortran 2003: %s attribute with %s attribute at %L" msgstr "" -#: fortran/symbol.c:745 +#: fortran/symbol.c:742 #, no-c-format msgid "Fortran 2003: %s attribute with %s attribute in '%s' at %L" msgstr "" -#: fortran/symbol.c:789 +#: fortran/symbol.c:786 #, no-c-format msgid "Cannot change attributes of USE-associated symbol at %L" msgstr "" -#: fortran/symbol.c:792 +#: fortran/symbol.c:789 #, no-c-format msgid "Cannot change attributes of USE-associated symbol %s at %L" msgstr "" -#: fortran/symbol.c:808 +#: fortran/symbol.c:805 #, no-c-format msgid "Duplicate %s attribute specified at %L" msgstr "" -#: fortran/symbol.c:841 +#: fortran/symbol.c:847 #, no-c-format msgid "ALLOCATABLE specified outside of INTERFACE body at %L" msgstr "" -#: fortran/symbol.c:867 +#: fortran/symbol.c:873 #, no-c-format msgid "DIMENSION specified for '%s' outside its INTERFACE body at %L" msgstr "" -#: fortran/symbol.c:985 +#: fortran/symbol.c:991 #, no-c-format msgid "Cray Pointee at %L appears in multiple pointer() statements" msgstr "" -#: fortran/symbol.c:1004 +#: fortran/symbol.c:1010 #, no-c-format msgid "Duplicate PROTECTED attribute specified at %L" msgstr "" -#: fortran/symbol.c:1037 +#: fortran/symbol.c:1043 #, no-c-format msgid "SAVE attribute at %L cannot be specified in a PURE procedure" msgstr "" -#: fortran/symbol.c:1045 +#: fortran/symbol.c:1051 #, no-c-format msgid "Duplicate SAVE attribute specified at %L" msgstr "" -#: fortran/symbol.c:1066 +#: fortran/symbol.c:1072 #, no-c-format msgid "Duplicate VALUE attribute specified at %L" msgstr "" -#: fortran/symbol.c:1086 +#: fortran/symbol.c:1092 #, no-c-format msgid "Duplicate VOLATILE attribute specified at %L" msgstr "" -#: fortran/symbol.c:1377 +#: fortran/symbol.c:1383 #, no-c-format msgid "%s attribute of '%s' conflicts with %s attribute at %L" msgstr "" -#: fortran/symbol.c:1411 +#: fortran/symbol.c:1417 #, no-c-format msgid "%s procedure at %L is already declared as %s procedure" msgstr "" -#: fortran/symbol.c:1446 +#: fortran/symbol.c:1452 #, no-c-format msgid "INTENT (%s) conflicts with INTENT(%s) at %L" msgstr "" -#: fortran/symbol.c:1470 +#: fortran/symbol.c:1476 #, no-c-format msgid "ACCESS specification at %L was already specified" msgstr "" -#: fortran/symbol.c:1487 +#: fortran/symbol.c:1493 #, no-c-format msgid "Duplicate BIND attribute specified at %L" msgstr "" -#: fortran/symbol.c:1494 +#: fortran/symbol.c:1500 #, no-c-format msgid "Fortran 2003: BIND(C) at %L" msgstr "" -#: fortran/symbol.c:1511 +#: fortran/symbol.c:1517 #, no-c-format msgid "Duplicate EXTENDS attribute specified at %L" msgstr "" -#: fortran/symbol.c:1515 +#: fortran/symbol.c:1521 #, no-c-format msgid "Fortran 2003: EXTENDS at %L" msgstr "" -#: fortran/symbol.c:1537 +#: fortran/symbol.c:1543 #, no-c-format msgid "Symbol '%s' at %L already has an explicit interface" msgstr "" -#: fortran/symbol.c:1544 +#: fortran/symbol.c:1550 #, no-c-format msgid "'%s' at %L has attributes specified outside its INTERFACE body" msgstr "" -#: fortran/symbol.c:1585 +#: fortran/symbol.c:1583 +#, no-c-format +msgid "Symbol '%s' at %L already has basic type of %s" +msgstr "" + +#: fortran/symbol.c:1590 #, no-c-format msgid "Procedure '%s' at %L may not have basic type of %s" msgstr "" -#: fortran/symbol.c:1597 +#: fortran/symbol.c:1602 #, no-c-format msgid "Symbol '%s' at %L cannot have a type" msgstr "" -#: fortran/symbol.c:1756 +#: fortran/symbol.c:1765 #, no-c-format msgid "Component '%s' at %C already declared at %L" msgstr "" -#: fortran/symbol.c:1767 +#: fortran/symbol.c:1776 #, no-c-format msgid "Component '%s' at %C already in the parent type at %L" msgstr "" -#: fortran/symbol.c:1843 +#: fortran/symbol.c:1852 #, no-c-format msgid "Symbol '%s' at %C is ambiguous" msgstr "" -#: fortran/symbol.c:1875 +#: fortran/symbol.c:1884 #, no-c-format msgid "Derived type '%s' at %C is being used before it is defined" msgstr "" -#: fortran/symbol.c:1916 +#: fortran/symbol.c:1925 #, no-c-format msgid "'%s' at %C is not a member of the '%s' structure" msgstr "" -#: fortran/symbol.c:1924 +#: fortran/symbol.c:1933 #, no-c-format msgid "Component '%s' at %C is a PRIVATE component of '%s'" msgstr "" -#: fortran/symbol.c:1934 +#: fortran/symbol.c:1943 #, no-c-format msgid "All components of '%s' are PRIVATE in structure constructor at %C" msgstr "" -#: fortran/symbol.c:2063 +#: fortran/symbol.c:2072 #, no-c-format msgid "Duplicate statement label %d at %L and %L" msgstr "" -#: fortran/symbol.c:2073 +#: fortran/symbol.c:2082 #, no-c-format msgid "Label %d at %C already referenced as branch target" msgstr "" -#: fortran/symbol.c:2082 +#: fortran/symbol.c:2091 #, no-c-format msgid "Label %d at %C already referenced as a format label" msgstr "" -#: fortran/symbol.c:2124 +#: fortran/symbol.c:2133 #, no-c-format msgid "Label %d at %C previously used as a FORMAT label" msgstr "" -#: fortran/symbol.c:2132 +#: fortran/symbol.c:2141 #, no-c-format msgid "Label %d at %C previously used as branch target" msgstr "" -#: fortran/symbol.c:2444 +#: fortran/symbol.c:2456 #, no-c-format msgid "Name '%s' at %C is an ambiguous reference to '%s' from module '%s'" msgstr "" -#: fortran/symbol.c:2447 +#: fortran/symbol.c:2459 #, no-c-format msgid "" "Name '%s' at %C is an ambiguous reference to '%s' from current program unit" msgstr "" #. Symbol is from another namespace. -#: fortran/symbol.c:2591 +#: fortran/symbol.c:2618 #, no-c-format msgid "Symbol '%s' at %C has already been host associated" msgstr "" -#: fortran/symbol.c:3398 +#: fortran/symbol.c:3452 #, no-c-format msgid "" "Derived type '%s' declared at %L must have the BIND attribute to be C " "interoperable" msgstr "" -#: fortran/symbol.c:3409 +#: fortran/symbol.c:3463 #, no-c-format msgid "Derived type '%s' at %L is empty" msgstr "" -#: fortran/symbol.c:3426 +#: fortran/symbol.c:3480 #, no-c-format msgid "" "Component '%s' at %L cannot have the POINTER attribute because it is a " "member of the BIND(C) derived type '%s' at %L" msgstr "" -#: fortran/symbol.c:3438 +#: fortran/symbol.c:3490 +#, no-c-format +msgid "" +"Procedure pointer component '%s' at %L cannot be a member of the BIND(C) " +"derived type '%s' at %L" +msgstr "" + +#: fortran/symbol.c:3501 #, no-c-format msgid "" "Component '%s' at %L cannot have the ALLOCATABLE attribute because it is a " @@ -11327,7 +11891,7 @@ msgstr "" #. If the derived type is bind(c), all fields must be #. interop. -#: fortran/symbol.c:3476 +#: fortran/symbol.c:3539 #, no-c-format msgid "" "Component '%s' in derived type '%s' at %L may not be C interoperable, even " @@ -11337,136 +11901,136 @@ msgstr "" #. If derived type is param to bind(c) routine, or to one #. of the iso_c_binding procs, it must be interoperable, so #. all fields must interop too. -#: fortran/symbol.c:3485 +#: fortran/symbol.c:3548 #, no-c-format msgid "Component '%s' in derived type '%s' at %L may not be C interoperable" msgstr "" -#: fortran/symbol.c:3499 +#: fortran/symbol.c:3562 #, no-c-format msgid "" "Derived type '%s' at %L cannot be declared with both PRIVATE and BIND(C) " "attributes" msgstr "" -#: fortran/symbol.c:3507 +#: fortran/symbol.c:3570 #, no-c-format msgid "" "Derived type '%s' at %L cannot have the SEQUENCE attribute because it is BIND" "(C)" msgstr "" -#: fortran/symbol.c:4379 +#: fortran/symbol.c:4500 #, no-c-format msgid "Symbol '%s' is used before it is typed at %L" msgstr "" -#: fortran/symbol.c:4385 +#: fortran/symbol.c:4506 #, no-c-format msgid "Extension: Symbol '%s' is used before it is typed at %L" msgstr "" -#: fortran/symbol.c:4457 +#: fortran/symbol.c:4639 fortran/symbol.c:4713 #, no-c-format -msgid "'%s' of '%s' is PRIVATE at %C" +msgid "'%s' of '%s' is PRIVATE at %L" msgstr "" -#: fortran/target-memory.c:615 +#: fortran/target-memory.c:659 #, no-c-format msgid "Overlapping unequal initializers in EQUIVALENCE at %L" msgstr "" -#: fortran/target-memory.c:702 +#: fortran/target-memory.c:746 #, no-c-format msgid "BOZ constant at %L is too large (%ld vs %ld bits)" msgstr "" -#: fortran/trans-array.c:641 fortran/trans-array.c:4464 -#: fortran/trans-array.c:5453 fortran/trans-intrinsic.c:3722 +#: fortran/trans-array.c:705 fortran/trans-array.c:4557 +#: fortran/trans-array.c:5592 fortran/trans-intrinsic.c:4296 #, no-c-format msgid "Creating array temporary at %L" msgstr "" #. Problems occur when we get something like #. integer :: a(lots) = (/(i, i=1, lots)/) -#: fortran/trans-array.c:4033 +#: fortran/trans-array.c:4124 #, no-c-format msgid "" "The number of elements in the array constructor at %L requires an increase " "of the allowed %d upper limit. See -fmax-array-constructor option" msgstr "" -#: fortran/trans-array.c:5450 +#: fortran/trans-array.c:5589 #, no-c-format msgid "Creating array temporary at %L for argument '%s'" msgstr "" -#: fortran/trans-common.c:399 +#: fortran/trans-common.c:400 #, no-c-format msgid "Named COMMON block '%s' at %L shall be of the same size" msgstr "" -#: fortran/trans-common.c:838 +#: fortran/trans-common.c:840 #, no-c-format msgid "Bad array reference at %L" msgstr "" -#: fortran/trans-common.c:846 +#: fortran/trans-common.c:848 #, no-c-format msgid "Illegal reference type at %L as EQUIVALENCE object" msgstr "" -#: fortran/trans-common.c:886 +#: fortran/trans-common.c:888 #, no-c-format msgid "Inconsistent equivalence rules involving '%s' at %L and '%s' at %L" msgstr "" #. Aligning this field would misalign a previous field. -#: fortran/trans-common.c:1019 +#: fortran/trans-common.c:1021 #, no-c-format msgid "" "The equivalence set for variable '%s' declared at %L violates alignment " "requirements" msgstr "" -#: fortran/trans-common.c:1086 +#: fortran/trans-common.c:1088 #, no-c-format msgid "Equivalence for '%s' does not match ordering of COMMON '%s' at %L" msgstr "" -#: fortran/trans-common.c:1101 +#: fortran/trans-common.c:1103 #, no-c-format msgid "" "The equivalence set for '%s' cause an invalid extension to COMMON '%s' at %L" msgstr "" -#: fortran/trans-common.c:1116 +#: fortran/trans-common.c:1118 #, no-c-format msgid "" "Padding of %d bytes required before '%s' in COMMON '%s' at %L; reorder " "elements or use -fno-align-commons" msgstr "" -#: fortran/trans-common.c:1121 +#: fortran/trans-common.c:1123 #, no-c-format msgid "" "Padding of %d bytes required before '%s' in COMMON at %L; reorder elements " "or use -fno-align-commons" msgstr "" -#: fortran/trans-common.c:1144 +#: fortran/trans-common.c:1146 #, no-c-format msgid "COMMON '%s' at %L does not exist" msgstr "" -#: fortran/trans-common.c:1152 +#: fortran/trans-common.c:1154 #, no-c-format msgid "" "COMMON '%s' at %L requires %d bytes of padding at start; reorder elements or " "use -fno-align-commons" msgstr "" -#: fortran/trans-common.c:1156 +#: fortran/trans-common.c:1158 #, no-c-format msgid "" "COMMON at %L requires %d bytes of padding at start; reorder elements or use -" @@ -11478,66 +12042,76 @@ msgstr "" msgid "Assigning value other than 0 or 1 to LOGICAL has undefined result at %L" msgstr "" -#: fortran/trans-decl.c:2957 fortran/trans-decl.c:4113 +#: fortran/trans-decl.c:3083 fortran/trans-decl.c:4375 #, no-c-format msgid "Return value of function '%s' at %L not set" msgstr "" -#: fortran/trans-decl.c:3616 +#: fortran/trans-decl.c:3750 #, no-c-format msgid "Dummy argument '%s' at %L was declared INTENT(OUT) but was not set" msgstr "" -#: fortran/trans-decl.c:3620 +#: fortran/trans-decl.c:3754 #, no-c-format msgid "Unused dummy argument '%s' at %L" msgstr "" -#: fortran/trans-decl.c:3626 +#: fortran/trans-decl.c:3760 #, no-c-format msgid "Unused variable '%s' declared at %L" msgstr "" -#: fortran/trans-decl.c:3672 +#: fortran/trans-decl.c:3808 #, no-c-format msgid "Unused parameter '%s' declared at %L" msgstr "" -#: fortran/trans-decl.c:3686 +#: fortran/trans-decl.c:3822 #, no-c-format msgid "Return value '%s' of function '%s' declared at %L not set" msgstr "" -#: fortran/trans-decl.c:3790 +#: fortran/trans-decl.c:3930 #, c-format msgid "" "Actual string length does not match the declared one for dummy argument '%" "s' (%ld/%ld)" msgstr "" -#: fortran/trans-decl.c:3796 +#: fortran/trans-decl.c:3938 #, c-format msgid "" "Actual string length is shorter than the declared one for dummy argument '%" "s' (%ld/%ld)" msgstr "" -#: fortran/trans-expr.c:2361 +#: fortran/trans-expr.c:1618 +msgid "internal error: bad vindex in dynamic dispatch" +msgstr "" + +#: fortran/trans-expr.c:2532 #, no-c-format msgid "Unknown argument list function at %L" msgstr "" -#: fortran/trans-intrinsic.c:883 +#: fortran/trans-intrinsic.c:888 #, no-c-format msgid "'dim' argument of %s intrinsic at %L is not a valid dimension index" msgstr "" -#: fortran/trans-io.c:2002 +#. TODO: Implement EXTENDS_TYPE_OF. +#: fortran/trans-intrinsic.c:4747 +#, no-c-format +msgid "Intrinsic EXTENDS_TYPE_OF at %L not yet implemented" +msgstr "" + +#: fortran/trans-io.c:2017 #, no-c-format msgid "Derived type '%s' at %L has PRIVATE components" msgstr "" -#: fortran/trans-stmt.c:499 +#: fortran/trans-stmt.c:484 #, no-c-format msgid "An alternate return at %L without a * dummy argument" msgstr "" @@ -11554,33 +12128,33 @@ msgstr "" msgid "Incorrect function return value" msgstr "" -#: fortran/trans.c:516 fortran/trans.c:936 +#: fortran/trans.c:521 fortran/trans.c:951 msgid "Attempt to allocate a negative amount of memory." msgstr "" -#: fortran/trans.c:534 +#: fortran/trans.c:541 msgid "Memory allocation failed" msgstr "" -#: fortran/trans.c:616 +#: fortran/trans.c:624 msgid "" "Attempt to allocate negative amount of memory. Possible integer overflow" msgstr "" -#: fortran/trans.c:647 fortran/trans.c:953 +#: fortran/trans.c:658 fortran/trans.c:970 msgid "Out of memory" msgstr "" -#: fortran/trans.c:738 +#: fortran/trans.c:750 #, c-format msgid "Attempting to allocate already allocated array '%s'" msgstr "" -#: fortran/trans.c:744 +#: fortran/trans.c:756 msgid "Attempting to allocate already allocatedarray" msgstr "" -#: fortran/trans.c:853 +#: fortran/trans.c:867 #, c-format msgid "Attempt to DEALLOCATE unallocated '%s'" msgstr "" @@ -11726,136 +12300,115 @@ msgstr "" msgid "%s: Failed to close output file %s\n" msgstr "" -#: java/jvspec.c:409 +#: java/jvspec.c:410 #, c-format msgid "can't specify '-D' without '--main'\n" msgstr "" -#: java/jvspec.c:412 +#: java/jvspec.c:413 #, c-format msgid "'%s' is not a valid class name" msgstr "" -#: java/jvspec.c:418 +#: java/jvspec.c:419 #, c-format msgid "--resource requires -o" msgstr "" -#: java/jvspec.c:432 +#: java/jvspec.c:433 #, c-format msgid "cannot specify both -C and -o" msgstr "" -#: java/jvspec.c:444 +#: java/jvspec.c:445 #, c-format msgid "cannot create temporary file" msgstr "" -#: java/jvspec.c:466 +#: java/jvspec.c:467 #, c-format msgid "using both @FILE with multiple files not implemented" msgstr "" -#: java/jvspec.c:588 +#: java/jvspec.c:589 #, c-format msgid "cannot specify 'main' class when not linking" msgstr "" -#: config/sparc/linux64.h:165 config/sparc/linux64.h:176 -#: config/sparc/netbsd-elf.h:125 config/sparc/netbsd-elf.h:144 -#: config/sparc/sol2-bi.h:240 config/sparc/sol2-bi.h:250 -msgid "may not use both -m32 and -m64" -msgstr "" - -#: config/mips/mips.h:1183 config/arc/arc.h:61 -msgid "may not use both -EB and -EL" -msgstr "" - -#: config/mips/r3900.h:34 -msgid "-mhard-float not supported" -msgstr "" - -#: config/mips/r3900.h:36 -msgid "-msingle-float and -msoft-float cannot both be specified" -msgstr "" - -#: config/i386/mingw-w64.h:65 config/i386/mingw32.h:85 config/i386/cygwin.h:91 +#: config/i386/mingw-w64.h:61 config/i386/mingw32.h:81 config/i386/cygwin.h:91 msgid "shared and mdll are not compatible" msgstr "" -#: gcc.c:820 -msgid "GCC does not support -C or -CC without -E" -msgstr "" - -#: gcc.c:848 java/jvspec.c:80 ada/gcc-interface/lang-specs.h:33 -msgid "-pg and -fomit-frame-pointer are incompatible" -msgstr "" - -#: gcc.c:1033 -msgid "-E or -x required when input is from standard input" -msgstr "" - -#: config/darwin.h:274 +#: config/darwin.h:306 msgid "-current_version only allowed with -dynamiclib" msgstr "" -#: config/darwin.h:276 +#: config/darwin.h:308 msgid "-install_name only allowed with -dynamiclib" msgstr "" -#: config/darwin.h:281 +#: config/darwin.h:313 msgid "-bundle not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:282 +#: config/darwin.h:314 msgid "-bundle_loader not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:283 +#: config/darwin.h:315 msgid "-client_name not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:288 +#: config/darwin.h:320 msgid "-force_flat_namespace not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:290 +#: config/darwin.h:322 msgid "-keep_private_externs not allowed with -dynamiclib" msgstr "" -#: config/darwin.h:291 +#: config/darwin.h:323 msgid "-private_bundle not allowed with -dynamiclib" msgstr "" -#: ada/gcc-interface/lang-specs.h:34 -msgid "-c or -S required for Ada" +#: fortran/lang-specs.h:55 fortran/lang-specs.h:69 +msgid "gfortran does not support -E without -cpp" msgstr "" -#: config/sparc/sol2-bi.h:212 config/sparc/sol2-bi.h:217 -#: config/sparc/sol2-gld-bi.h:40 config/sparc/sol2-gld-bi.h:45 -msgid "does not support multilib" +#: config/sh/sh.h:463 +msgid "SH2a does not support little-endian" msgstr "" -#: config/rs6000/linux64.h:354 config/rs6000/linux64.h:356 -#: config/rs6000/sysv4.h:908 config/rs6000/sysv4.h:910 config/linux.h:111 -#: config/linux.h:113 config/alpha/linux-elf.h:33 config/alpha/linux-elf.h:35 -msgid "-mglibc and -muclibc used together" +#: config/rs6000/darwin.h:95 +msgid " conflicting code gen style switches are used" msgstr "" -#: config/bfin/elf.h:54 -msgid "no processor type specified for linking" +#: ada/gcc-interface/lang-specs.h:33 gcc.c:887 java/jvspec.c:81 +msgid "-pg and -fomit-frame-pointer are incompatible" msgstr "" -#: config/vxworks.h:71 -msgid "-Xbind-now and -Xbind-lazy are incompatible" +#: ada/gcc-interface/lang-specs.h:34 +msgid "-c or -S required for Ada" +msgstr "" + +#: config/vax/vax.h:50 config/vax/vax.h:51 +msgid "profiling not supported with -mg\n" +msgstr "" + +#: gcc.c:859 +msgid "GCC does not support -C or -CC without -E" +msgstr "" + +#: gcc.c:1080 +msgid "-E or -x required when input is from standard input" msgstr "" #: config/i386/cygwin.h:28 msgid "mno-cygwin and mno-win32 are not compatible" msgstr "" -#: fortran/lang-specs.h:55 fortran/lang-specs.h:69 -msgid "gfortran does not support -E without -cpp" +#: config/bfin/elf.h:54 +msgid "no processor type specified for linking" msgstr "" #: config/i386/nwld.h:34 @@ -11874,28 +12427,49 @@ msgstr "" msgid "-femit-class-file should used along with -fsyntax-only" msgstr "" -#: config/sh/sh.h:461 -msgid "SH2a does not support little-endian" +#: config/s390/tpf.h:119 +msgid "static is not supported on TPF-OS" +msgstr "" + +#: config/rs6000/linux64.h:354 config/rs6000/linux64.h:356 +#: config/alpha/linux-elf.h:33 config/alpha/linux-elf.h:35 +#: config/rs6000/sysv4.h:906 config/rs6000/sysv4.h:908 config/linux.h:111 +#: config/linux.h:113 +msgid "-mglibc and -muclibc used together" msgstr "" -#: config/arm/arm.h:148 +#: config/mips/mips.h:1230 config/arc/arc.h:61 +msgid "may not use both -EB and -EL" +msgstr "" + +#: config/arm/arm.h:154 msgid "-msoft-float and -mhard_float may not be used together" msgstr "" -#: config/arm/arm.h:150 +#: config/arm/arm.h:156 msgid "-mbig-endian and -mlittle-endian may not be used together" msgstr "" -#: config/cris/cris.h:207 -msgid "Do not specify both -march=... and -mcpu=..." +#: config/vxworks.h:71 +msgid "-Xbind-now and -Xbind-lazy are incompatible" msgstr "" -#: config/vax/netbsd-elf.h:47 -msgid "the -shared option is not currently supported for VAX ELF" +#: config/mips/r3900.h:34 +msgid "-mhard-float not supported" msgstr "" -#: config/vax/vax.h:50 config/vax/vax.h:51 -msgid "profiling not supported with -mg\n" +#: config/mips/r3900.h:36 +msgid "-msingle-float and -msoft-float cannot both be specified" +msgstr "" + +#: config/cris/cris.h:207 +msgid "Do not specify both -march=... and -mcpu=..." +msgstr "" + +#: config/sparc/linux64.h:165 config/sparc/linux64.h:176 +#: config/sparc/netbsd-elf.h:125 config/sparc/netbsd-elf.h:144 +#: config/sparc/sol2-bi.h:240 config/sparc/sol2-bi.h:250 +msgid "may not use both -m32 and -m64" msgstr "" #: config/mcore/mcore.h:54 @@ -11910,12 +12484,13 @@ msgstr "" msgid "cannot use mshared and static together" msgstr "" -#: config/s390/tpf.h:119 -msgid "static is not supported on TPF-OS" +#: config/sparc/sol2-bi.h:212 config/sparc/sol2-bi.h:217 +#: config/sparc/sol2-gld-bi.h:40 config/sparc/sol2-gld-bi.h:45 +msgid "does not support multilib" msgstr "" -#: config/rs6000/darwin.h:95 -msgid " conflicting code gen style switches are used" +#: config/vax/netbsd-elf.h:51 +msgid "the -shared option is not currently supported for VAX ELF" msgstr "" #: java/lang.opt:69 @@ -12013,14 +12588,18 @@ msgid "Call a library routine to do integer divisions" msgstr "" #: java/lang.opt:197 -msgid "Generated should be loaded by bootstrap loader" +msgid "Generate code for built-in atomic operations" msgstr "" #: java/lang.opt:201 -msgid "Set the source language version" +msgid "Generated should be loaded by bootstrap loader" msgstr "" #: java/lang.opt:205 +msgid "Set the source language version" +msgstr "" + +#: java/lang.opt:209 msgid "Set the target VM version" msgstr "" @@ -12301,10 +12880,6 @@ msgstr "" msgid "Append a second underscore if the name already contains an underscore" msgstr "" -#: fortran/lang.opt:353 c.opt:749 -msgid "Use the narrowest integer type possible for enumeration types" -msgstr "" - #: fortran/lang.opt:357 msgid "Apply negative sign to zero values" msgstr "" @@ -12704,7 +13279,7 @@ msgid "" msgstr "" #: config/s390/s390.opt:87 config/ia64/ia64.opt:115 config/sparc/sparc.opt:95 -#: config/i386/i386.opt:229 config/rs6000/rs6000.opt:234 config/spu/spu.opt:84 +#: config/i386/i386.opt:229 config/rs6000/rs6000.opt:274 config/spu/spu.opt:84 msgid "Schedule code for given CPU" msgstr "" @@ -12894,7 +13469,19 @@ msgstr "" msgid "Don't generate checks for control speculation in selective scheduling" msgstr "" -#: config/m32c/m32c.opt:24 config/bfin/bfin.opt:23 +#: config/ia64/ia64.opt:183 +msgid "Enable fused multiply/add and multiply/subtract instructions" +msgstr "" + +#: config/ia64/vms_symvec_libgcc_s.opt:3 +msgid "! It would be better to auto-generate this file." +msgstr "" + +#: config/ia64/vms_symvec_libgcc_s.opt:7 +msgid "SYMBOL_VECTOR=(__divdi3=PROCEDURE)" +msgstr "" + +#: config/m32c/m32c.opt:24 config/bfin/bfin.opt:23 config/mep/mep.opt:138 msgid "Use simulator runtime" msgstr "" @@ -12990,7 +13577,7 @@ msgstr "" msgid "Optimize tail call instructions in assembler and linker" msgstr "" -#: config/sparc/sparc.opt:91 config/rs6000/rs6000.opt:230 +#: config/sparc/sparc.opt:91 config/rs6000/rs6000.opt:270 msgid "Use features of and schedule code for given CPU" msgstr "" @@ -13218,6 +13805,10 @@ msgstr "" msgid "Support more than 8192 GOT entries on ColdFire" msgstr "" +#: config/m68k/m68k.opt:188 +msgid "Support TLS segment larger than 64K" +msgstr "" + #: config/m68k/ieee.opt:24 config/i386/i386.opt:137 msgid "Use IEEE math for fp comparisons" msgstr "" @@ -13387,111 +13978,114 @@ msgstr "" msgid "Generate cld instruction in the function prologue." msgstr "" -#: config/i386/i386.opt:252 -msgid "" -"Enable automatic generation of fused floating point multiply-add instructions" -msgstr "" - -#: config/i386/i386.opt:260 +#: config/i386/i386.opt:251 msgid "Generate 32bit i386 code" msgstr "" -#: config/i386/i386.opt:264 +#: config/i386/i386.opt:255 msgid "Generate 64bit x86-64 code" msgstr "" -#: config/i386/i386.opt:268 +#: config/i386/i386.opt:259 msgid "Support MMX built-in functions" msgstr "" -#: config/i386/i386.opt:272 +#: config/i386/i386.opt:263 msgid "Support 3DNow! built-in functions" msgstr "" -#: config/i386/i386.opt:276 +#: config/i386/i386.opt:267 msgid "Support Athlon 3Dnow! built-in functions" msgstr "" -#: config/i386/i386.opt:280 +#: config/i386/i386.opt:271 msgid "Support MMX and SSE built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:284 +#: config/i386/i386.opt:275 msgid "Support MMX, SSE and SSE2 built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:288 +#: config/i386/i386.opt:279 msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:292 +#: config/i386/i386.opt:283 msgid "" "Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:296 +#: config/i386/i386.opt:287 msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1 built-in functions and code " "generation" msgstr "" -#: config/i386/i386.opt:300 config/i386/i386.opt:304 +#: config/i386/i386.opt:291 config/i386/i386.opt:295 msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions " "and code generation" msgstr "" -#: config/i386/i386.opt:308 +#: config/i386/i386.opt:299 msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:312 +#: config/i386/i386.opt:303 msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in " "functions and code generation" msgstr "" -#: config/i386/i386.opt:316 +#: config/i386/i386.opt:307 msgid "" "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in " "functions and code generation" msgstr "" -#: config/i386/i386.opt:320 +#: config/i386/i386.opt:311 msgid "" "Support MMX, SSE, SSE2, SSE3 and SSE4A built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:324 -msgid "Support SSE5 built-in functions and code generation" +#: config/i386/i386.opt:315 +msgid "Support FMA4 built-in functions and code generation " msgstr "" -#: config/i386/i386.opt:328 +#: config/i386/i386.opt:319 msgid "" "Support code generation of Advanced Bit Manipulation (ABM) instructions." msgstr "" -#: config/i386/i386.opt:332 +#: config/i386/i386.opt:323 msgid "Support code generation of popcnt instruction." msgstr "" -#: config/i386/i386.opt:336 +#: config/i386/i386.opt:327 msgid "Support code generation of cmpxchg16b instruction." msgstr "" -#: config/i386/i386.opt:340 +#: config/i386/i386.opt:331 msgid "Support code generation of sahf instruction in 64bit x86-64 code." msgstr "" -#: config/i386/i386.opt:344 +#: config/i386/i386.opt:335 +msgid "Support code generation of movbe instruction." +msgstr "" + +#: config/i386/i386.opt:339 +msgid "Support code generation of crc32 instruction." +msgstr "" + +#: config/i386/i386.opt:343 msgid "Support AES built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:348 +#: config/i386/i386.opt:347 msgid "Support PCLMUL built-in functions and code generation" msgstr "" -#: config/i386/i386.opt:352 +#: config/i386/i386.opt:351 msgid "Encode SSE instructions with VEX prefix" msgstr "" @@ -13523,11 +14117,15 @@ msgstr "" msgid "Create GUI application" msgstr "" +#: config/i386/cygming.opt:51 +msgid "Use the GNU extension to the PE format for aligned common data" +msgstr "" + #: config/i386/mingw-w64.opt:23 msgid "Use unicode startup and define UNICODE macro" msgstr "" -#: config/rs6000/aix.opt:24 config/rs6000/rs6000.opt:155 +#: config/rs6000/aix.opt:24 config/rs6000/rs6000.opt:195 msgid "Conform more closely to IBM XLC semantics" msgstr "" @@ -13632,166 +14230,170 @@ msgid "Do not use hardware floating point" msgstr "" #: config/rs6000/rs6000.opt:116 -msgid "Do not generate load/store with update instructions" +msgid "Use PowerPC V2.06 popcntd instruction" msgstr "" #: config/rs6000/rs6000.opt:120 -msgid "Generate load/store with update instructions" +msgid "Use vector/scalar (VSX) instructions" msgstr "" -#: config/rs6000/rs6000.opt:124 -msgid "Avoid generation of indexed load/store instructions when possible" +#: config/rs6000/rs6000.opt:160 +msgid "Do not generate load/store with update instructions" +msgstr "" + +#: config/rs6000/rs6000.opt:164 +msgid "Generate load/store with update instructions" msgstr "" -#: config/rs6000/rs6000.opt:128 -msgid "Do not generate fused multiply/add instructions" +#: config/rs6000/rs6000.opt:168 +msgid "Avoid generation of indexed load/store instructions when possible" msgstr "" -#: config/rs6000/rs6000.opt:132 +#: config/rs6000/rs6000.opt:172 msgid "Generate fused multiply/add instructions" msgstr "" -#: config/rs6000/rs6000.opt:136 +#: config/rs6000/rs6000.opt:176 msgid "Mark __tls_get_addr calls with argument info" msgstr "" -#: config/rs6000/rs6000.opt:140 +#: config/rs6000/rs6000.opt:183 msgid "Schedule the start and end of the procedure" msgstr "" -#: config/rs6000/rs6000.opt:147 +#: config/rs6000/rs6000.opt:187 msgid "Return all structures in memory (AIX default)" msgstr "" -#: config/rs6000/rs6000.opt:151 +#: config/rs6000/rs6000.opt:191 msgid "Return small structures in registers (SVR4 default)" msgstr "" -#: config/rs6000/rs6000.opt:159 +#: config/rs6000/rs6000.opt:199 msgid "Generate software reciprocal sqrt for better throughput" msgstr "" -#: config/rs6000/rs6000.opt:163 +#: config/rs6000/rs6000.opt:203 msgid "Do not place floating point constants in TOC" msgstr "" -#: config/rs6000/rs6000.opt:167 +#: config/rs6000/rs6000.opt:207 msgid "Place floating point constants in TOC" msgstr "" -#: config/rs6000/rs6000.opt:171 +#: config/rs6000/rs6000.opt:211 msgid "Do not place symbol+offset constants in TOC" msgstr "" -#: config/rs6000/rs6000.opt:175 +#: config/rs6000/rs6000.opt:215 msgid "Place symbol+offset constants in TOC" msgstr "" -#: config/rs6000/rs6000.opt:186 +#: config/rs6000/rs6000.opt:226 msgid "Use only one TOC entry per procedure" msgstr "" -#: config/rs6000/rs6000.opt:190 +#: config/rs6000/rs6000.opt:230 msgid "Put everything in the regular TOC" msgstr "" -#: config/rs6000/rs6000.opt:194 +#: config/rs6000/rs6000.opt:234 msgid "Generate VRSAVE instructions when generating AltiVec code" msgstr "" -#: config/rs6000/rs6000.opt:198 +#: config/rs6000/rs6000.opt:238 msgid "Deprecated option. Use -mvrsave/-mno-vrsave instead" msgstr "" -#: config/rs6000/rs6000.opt:202 +#: config/rs6000/rs6000.opt:242 msgid "Generate isel instructions" msgstr "" -#: config/rs6000/rs6000.opt:206 +#: config/rs6000/rs6000.opt:246 msgid "Deprecated option. Use -misel/-mno-isel instead" msgstr "" -#: config/rs6000/rs6000.opt:210 +#: config/rs6000/rs6000.opt:250 msgid "Generate SPE SIMD instructions on E500" msgstr "" -#: config/rs6000/rs6000.opt:214 +#: config/rs6000/rs6000.opt:254 msgid "Generate PPC750CL paired-single instructions" msgstr "" -#: config/rs6000/rs6000.opt:218 +#: config/rs6000/rs6000.opt:258 msgid "Deprecated option. Use -mspe/-mno-spe instead" msgstr "" -#: config/rs6000/rs6000.opt:222 +#: config/rs6000/rs6000.opt:262 msgid "Enable debug output" msgstr "" -#: config/rs6000/rs6000.opt:226 +#: config/rs6000/rs6000.opt:266 msgid "Specify ABI to use" msgstr "" -#: config/rs6000/rs6000.opt:238 +#: config/rs6000/rs6000.opt:278 msgid "Select full, part, or no traceback table" msgstr "" -#: config/rs6000/rs6000.opt:242 +#: config/rs6000/rs6000.opt:282 msgid "Avoid all range limits on call instructions" msgstr "" -#: config/rs6000/rs6000.opt:246 +#: config/rs6000/rs6000.opt:286 msgid "Generate Cell microcode" msgstr "" -#: config/rs6000/rs6000.opt:250 +#: config/rs6000/rs6000.opt:290 msgid "Warn when a Cell microcoded instruction is emitted" msgstr "" -#: config/rs6000/rs6000.opt:254 +#: config/rs6000/rs6000.opt:294 msgid "Warn about deprecated 'vector long ...' AltiVec type usage" msgstr "" -#: config/rs6000/rs6000.opt:258 +#: config/rs6000/rs6000.opt:298 msgid "Select GPR floating point method" msgstr "" -#: config/rs6000/rs6000.opt:262 +#: config/rs6000/rs6000.opt:302 msgid "Specify size of long double (64 or 128 bits)" msgstr "" -#: config/rs6000/rs6000.opt:266 +#: config/rs6000/rs6000.opt:306 msgid "Determine which dependences between insns are considered costly" msgstr "" -#: config/rs6000/rs6000.opt:270 +#: config/rs6000/rs6000.opt:310 msgid "Specify which post scheduling nop insertion scheme to apply" msgstr "" -#: config/rs6000/rs6000.opt:274 +#: config/rs6000/rs6000.opt:314 msgid "Specify alignment of structure fields default/natural" msgstr "" -#: config/rs6000/rs6000.opt:278 +#: config/rs6000/rs6000.opt:318 msgid "Specify scheduling priority for dispatch slot restricted insns" msgstr "" -#: config/rs6000/rs6000.opt:282 +#: config/rs6000/rs6000.opt:322 msgid "Single-precision floating point unit" msgstr "" -#: config/rs6000/rs6000.opt:286 +#: config/rs6000/rs6000.opt:326 msgid "Double-precision floating point unit" msgstr "" -#: config/rs6000/rs6000.opt:290 +#: config/rs6000/rs6000.opt:330 msgid "Floating point unit does not support divide & sqrt" msgstr "" -#: config/rs6000/rs6000.opt:294 +#: config/rs6000/rs6000.opt:334 msgid "Specify FP (sp, dp, sp-lite, dp-lite) (implies -mxilinx-fpu)" msgstr "" -#: config/rs6000/rs6000.opt:298 +#: config/rs6000/rs6000.opt:338 msgid "Specify Xilinx FPU." msgstr "" @@ -14030,7 +14632,7 @@ msgid "Generate SH2 code" msgstr "" #: config/sh/sh.opt:52 -msgid "Generate SH2a code" +msgid "Generate default double-precision SH2a-FPU code" msgstr "" #: config/sh/sh.opt:56 @@ -14038,11 +14640,11 @@ msgid "Generate SH2a FPU-less code" msgstr "" #: config/sh/sh.opt:60 -msgid "Generate default single-precision SH2a code" +msgid "Generate default single-precision SH2a-FPU code" msgstr "" #: config/sh/sh.opt:64 -msgid "Generate only single-precision SH2a code" +msgid "Generate only single-precision SH2a-FPU code" msgstr "" #: config/sh/sh.opt:68 @@ -14204,107 +14806,107 @@ msgid "Enable cbranchdi4 pattern" msgstr "" #: config/sh/sh.opt:229 -msgid "Expand cbranchdi4 pattern early into separate comparisons and branches." +msgid "Emit cmpeqdi_t pattern even when -mcbranchdi is in effect." msgstr "" #: config/sh/sh.opt:233 -msgid "" -"Emit cmpeqdi_t pattern even when -mcbranchdi and -mexpand-cbranchdi are in " -"effect." -msgstr "" - -#: config/sh/sh.opt:237 msgid "Enable SH5 cut2 workaround" msgstr "" -#: config/sh/sh.opt:241 +#: config/sh/sh.opt:237 msgid "Align doubles at 64-bit boundaries" msgstr "" -#: config/sh/sh.opt:245 +#: config/sh/sh.opt:241 msgid "" "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, " "inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table" msgstr "" -#: config/sh/sh.opt:249 +#: config/sh/sh.opt:245 msgid "Specify name for 32 bit signed division function" msgstr "" -#: config/sh/sh.opt:260 +#: 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 "" + +#: config/sh/sh.opt:257 msgid "" "Enable the use of the fused floating point multiply-accumulate operation" msgstr "" -#: config/sh/sh.opt:264 +#: config/sh/sh.opt:261 msgid "Cost to assume for gettr insn" msgstr "" -#: config/sh/sh.opt:268 config/sh/sh.opt:318 +#: config/sh/sh.opt:265 config/sh/sh.opt:315 msgid "Follow Renesas (formerly Hitachi) / SuperH calling conventions" msgstr "" -#: config/sh/sh.opt:272 +#: config/sh/sh.opt:269 msgid "Increase the IEEE compliance for floating-point code" msgstr "" -#: config/sh/sh.opt:276 +#: config/sh/sh.opt:273 msgid "Enable the use of the indexed addressing mode for SHmedia32/SHcompact" msgstr "" -#: config/sh/sh.opt:280 +#: config/sh/sh.opt:277 msgid "" "inline code to invalidate instruction cache entries after setting up nested " "function trampolines" msgstr "" -#: config/sh/sh.opt:284 +#: config/sh/sh.opt:281 msgid "Assume symbols might be invalid" msgstr "" -#: config/sh/sh.opt:288 +#: config/sh/sh.opt:285 msgid "Annotate assembler instructions with estimated addresses" msgstr "" -#: config/sh/sh.opt:292 +#: config/sh/sh.opt:289 msgid "Generate code in little endian mode" msgstr "" -#: config/sh/sh.opt:296 +#: config/sh/sh.opt:293 msgid "Mark MAC register as call-clobbered" msgstr "" -#: config/sh/sh.opt:302 +#: config/sh/sh.opt:299 msgid "Make structs a multiple of 4 bytes (warning: ABI altered)" msgstr "" -#: config/sh/sh.opt:306 +#: config/sh/sh.opt:303 msgid "Emit function-calls using global offset table when generating PIC" msgstr "" -#: config/sh/sh.opt:310 +#: config/sh/sh.opt:307 msgid "Assume pt* instructions won't trap" msgstr "" -#: config/sh/sh.opt:314 +#: config/sh/sh.opt:311 msgid "Shorten address references during linking" msgstr "" -#: config/sh/sh.opt:322 -msgid "Deprecated. Use -Os instead" +#: config/sh/sh.opt:319 +msgid "Deprecated. Use -Os instead" msgstr "" -#: config/sh/sh.opt:326 +#: config/sh/sh.opt:323 msgid "Cost to assume for a multiply insn" msgstr "" -#: config/sh/sh.opt:330 +#: config/sh/sh.opt:327 msgid "" "Don't generate privileged-mode only code; implies -mno-inline-ic_invalidate " "if the inline code would not work in user mode." msgstr "" -#: config/sh/sh.opt:336 +#: config/sh/sh.opt:333 msgid "Pretend a branch-around-a-move is a conditional move." msgstr "" @@ -14364,84 +14966,88 @@ msgstr "" msgid "Specify if floating point hardware should be used" msgstr "" -#: config/arm/arm.opt:90 -msgid "Specify the name of the target floating point hardware/format" +#: config/arm/arm.opt:83 +msgid "Specify the __fp16 floating-point format" msgstr "" #: config/arm/arm.opt:94 -msgid "Alias for -mfloat-abi=hard" +msgid "Specify the name of the target floating point hardware/format" msgstr "" #: config/arm/arm.opt:98 -msgid "Assume target CPU is configured as little endian" +msgid "Alias for -mfloat-abi=hard" msgstr "" #: config/arm/arm.opt:102 -msgid "Generate call insns as indirect calls, if necessary" +msgid "Assume target CPU is configured as little endian" msgstr "" #: config/arm/arm.opt:106 -msgid "Specify the register to be used for PIC addressing" +msgid "Generate call insns as indirect calls, if necessary" msgstr "" #: config/arm/arm.opt:110 -msgid "Store function names in object code" +msgid "Specify the register to be used for PIC addressing" msgstr "" #: config/arm/arm.opt:114 -msgid "Permit scheduling of a function's prologue sequence" +msgid "Store function names in object code" msgstr "" #: config/arm/arm.opt:118 -msgid "Do not load the PIC register in function prologues" +msgid "Permit scheduling of a function's prologue sequence" msgstr "" #: config/arm/arm.opt:122 -msgid "Alias for -mfloat-abi=soft" +msgid "Do not load the PIC register in function prologues" msgstr "" #: config/arm/arm.opt:126 -msgid "Specify the minimum bit alignment of structures" +msgid "Alias for -mfloat-abi=soft" msgstr "" #: config/arm/arm.opt:130 -msgid "Compile for the Thumb not the ARM" +msgid "Specify the minimum bit alignment of structures" msgstr "" #: config/arm/arm.opt:134 -msgid "Support calls between Thumb and ARM instruction sets" +msgid "Compile for the Thumb not the ARM" msgstr "" #: config/arm/arm.opt:138 -msgid "Specify how to access the thread pointer" +msgid "Support calls between Thumb and ARM instruction sets" msgstr "" #: config/arm/arm.opt:142 -msgid "Thumb: Generate (non-leaf) stack frames even if not needed" +msgid "Specify how to access the thread pointer" msgstr "" #: config/arm/arm.opt:146 -msgid "Thumb: Generate (leaf) stack frames even if not needed" +msgid "Thumb: Generate (non-leaf) stack frames even if not needed" msgstr "" #: config/arm/arm.opt:150 -msgid "Tune code for the given processor" +msgid "Thumb: Generate (leaf) stack frames even if not needed" msgstr "" #: config/arm/arm.opt:154 -msgid "Assume big endian bytes, little endian words" +msgid "Tune code for the given processor" msgstr "" #: config/arm/arm.opt:158 +msgid "Assume big endian bytes, little endian words" +msgstr "" + +#: config/arm/arm.opt:162 msgid "" "Use Neon quad-word (rather than double-word) registers for vectorization" msgstr "" -#: config/arm/arm.opt:162 +#: config/arm/arm.opt:166 msgid "Only generate absolute relocations on word sized values." msgstr "" -#: config/arm/arm.opt:166 +#: config/arm/arm.opt:170 msgid "" "Avoid overlapping destination and address registers on LDRD instructions" msgstr "" @@ -14535,18 +15141,14 @@ msgid "Use rjmp/rcall (limited range) on >8K devices" msgstr "" #: config/avr/avr.opt:52 -msgid "Output instruction sizes to the asm file" -msgstr "" - -#: config/avr/avr.opt:56 msgid "Change only the low 8 bits of the stack pointer" msgstr "" -#: config/avr/avr.opt:60 +#: config/avr/avr.opt:56 msgid "Relax branches" msgstr "" -#: config/avr/avr.opt:64 +#: config/avr/avr.opt:60 msgid "" "Make the linker relaxation machine assume that a program counter wrap-around " "occures." @@ -14737,11 +15339,11 @@ msgstr "" msgid "Use MIPS-DSP REV 2 instructions" msgstr "" -#: config/mips/mips.opt:89 +#: config/mips/mips.opt:89 config/mep/mep.opt:80 msgid "Use big-endian byte order" msgstr "" -#: config/mips/mips.opt:93 +#: config/mips/mips.opt:93 config/mep/mep.opt:84 msgid "Use little-endian byte order" msgstr "" @@ -14900,45 +15502,53 @@ msgid "Specify when r10k cache barriers should be inserted" msgstr "" #: config/mips/mips.opt:249 +msgid "Try to allow the linker to turn PIC calls into direct calls" +msgstr "" + +#: config/mips/mips.opt:253 msgid "" "When generating -mabicalls code, make the code suitable for use in shared " "libraries" msgstr "" -#: config/mips/mips.opt:253 +#: config/mips/mips.opt:257 msgid "" "Restrict the use of hardware floating-point instructions to 32-bit operations" msgstr "" -#: config/mips/mips.opt:257 +#: config/mips/mips.opt:261 msgid "Use SmartMIPS instructions" msgstr "" -#: config/mips/mips.opt:261 +#: config/mips/mips.opt:265 msgid "Prevent the use of all hardware floating-point instructions" msgstr "" -#: config/mips/mips.opt:265 +#: config/mips/mips.opt:269 msgid "Optimize lui/addiu address loads" msgstr "" -#: config/mips/mips.opt:269 +#: config/mips/mips.opt:273 msgid "Assume all symbols have 32-bit values" msgstr "" -#: config/mips/mips.opt:273 +#: config/mips/mips.opt:277 +msgid "Use synci instruction to invalidate i-cache" +msgstr "" + +#: config/mips/mips.opt:281 msgid "Optimize the output for PROCESSOR" msgstr "" -#: config/mips/mips.opt:277 config/iq2000/iq2000.opt:44 +#: config/mips/mips.opt:285 config/iq2000/iq2000.opt:44 msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgstr "" -#: config/mips/mips.opt:281 +#: config/mips/mips.opt:289 msgid "Perform VR4130-specific alignment optimizations" msgstr "" -#: config/mips/mips.opt:285 +#: config/mips/mips.opt:293 msgid "Lift restrictions on GOT size" msgstr "" @@ -15463,11 +16073,131 @@ msgid "Support SCORE 3d ISA" msgstr "" #: config/linux.opt:24 -msgid "Use uClibc instead of GNU libc" +msgid "Use GNU libc instead of uClibc" msgstr "" #: config/linux.opt:28 -msgid "Use GNU libc instead of uClibc" +msgid "Use uClibc instead of GNU libc" +msgstr "" + +#: config/mep/mep.opt:21 +msgid "Enable absolute difference instructions" +msgstr "" + +#: config/mep/mep.opt:25 +msgid "Enable all optional instructions" +msgstr "" + +#: config/mep/mep.opt:29 +msgid "Enable average instructions" +msgstr "" + +#: config/mep/mep.opt:33 +msgid "Variables this size and smaller go in the based section. (default 0)" +msgstr "" + +#: config/mep/mep.opt:37 +msgid "Enable bit manipulation instructions" +msgstr "" + +#: config/mep/mep.opt:41 +msgid "Section to put all const variables in (tiny, near, far) (no default)" +msgstr "" + +#: config/mep/mep.opt:45 +msgid "Enable clip instructions" +msgstr "" + +#: config/mep/mep.opt:49 +msgid "Configuration name" +msgstr "" + +#: config/mep/mep.opt:53 +msgid "Enable MeP Coprocessor" +msgstr "" + +#: config/mep/mep.opt:57 +msgid "Enable MeP Coprocessor with 32-bit registers" +msgstr "" + +#: config/mep/mep.opt:61 +msgid "Enable MeP Coprocessor with 64-bit registers" +msgstr "" + +#: config/mep/mep.opt:65 +msgid "Enable IVC2 scheduling" +msgstr "" + +#: config/mep/mep.opt:69 +msgid "Const variables default to the near section" +msgstr "" + +#: config/mep/mep.opt:76 +msgid "Enable 32-bit divide instructions" +msgstr "" + +#: config/mep/mep.opt:88 +msgid "__io vars are volatile by default" +msgstr "" + +#: config/mep/mep.opt:92 +msgid "All variables default to the far section" +msgstr "" + +#: config/mep/mep.opt:96 +msgid "Enable leading zero instructions" +msgstr "" + +#: config/mep/mep.opt:103 +msgid "All variables default to the near section" +msgstr "" + +#: config/mep/mep.opt:107 +msgid "Enable min/max instructions" +msgstr "" + +#: config/mep/mep.opt:111 +msgid "Enable 32-bit multiply instructions" +msgstr "" + +#: config/mep/mep.opt:115 +msgid "Disable all optional instructions" +msgstr "" + +#: config/mep/mep.opt:122 +msgid "Allow gcc to use the repeat/erepeat instructions" +msgstr "" + +#: config/mep/mep.opt:126 +msgid "All variables default to the tiny section" +msgstr "" + +#: config/mep/mep.opt:130 +msgid "Enable saturation instructions" +msgstr "" + +#: config/mep/mep.opt:134 +msgid "Use sdram version of runtime" +msgstr "" + +#: config/mep/mep.opt:142 +msgid "Use simulator runtime without vectors" +msgstr "" + +#: config/mep/mep.opt:146 +msgid "All functions default to the far section" +msgstr "" + +#: config/mep/mep.opt:150 +msgid "Variables this size and smaller go in the tiny section. (default 4)" +msgstr "" + +#: config/vms/vms.opt:21 +msgid "Malloc data into P2 space" +msgstr "" + +#: config/vms/vms.opt:25 +msgid "Set name of main routine for the debugger" msgstr "" #: c.opt:42 @@ -15498,7 +16228,7 @@ msgstr "" msgid "Print the name of header files as they are used" msgstr "" -#: c.opt:69 c.opt:894 +#: c.opt:69 c.opt:906 msgid "Add <dir> to the end of the main include path" msgstr "" @@ -15713,653 +16443,689 @@ msgid "Warn about PCH files that are found but not used" msgstr "" #: c.opt:289 +msgid "Warn when a jump misses a variable initialization" +msgstr "" + +#: c.opt:293 msgid "" "Warn when a logical operator is suspiciously always evaluating to true or " "false" msgstr "" -#: c.opt:293 +#: c.opt:297 msgid "Do not warn about using \"long long\" when -pedantic" msgstr "" -#: c.opt:297 +#: c.opt:301 msgid "Warn about suspicious declarations of \"main\"" msgstr "" -#: c.opt:301 +#: c.opt:305 msgid "Warn about possibly missing braces around initializers" msgstr "" -#: c.opt:305 +#: c.opt:309 msgid "Warn about global functions without previous declarations" msgstr "" -#: c.opt:309 +#: c.opt:313 msgid "Warn about missing fields in struct initializers" msgstr "" -#: c.opt:313 +#: c.opt:317 msgid "Warn about functions which might be candidates for format attributes" msgstr "" -#: c.opt:317 +#: c.opt:321 msgid "Warn about user-specified include directories that do not exist" msgstr "" -#: c.opt:321 +#: c.opt:325 msgid "" "Warn about function parameters declared without a type specifier in K&R-" "style functions" msgstr "" -#: c.opt:325 +#: c.opt:329 msgid "Warn about global functions without prototypes" msgstr "" -#: c.opt:329 +#: c.opt:333 msgid "Warn about use of multi-character character constants" msgstr "" -#: c.opt:333 +#: c.opt:337 msgid "Warn about \"extern\" declarations not at file scope" msgstr "" -#: c.opt:337 +#: c.opt:341 msgid "" "Warn when non-templatized friend functions are declared within a template" msgstr "" -#: c.opt:341 +#: c.opt:345 msgid "Warn about non-virtual destructors" msgstr "" -#: c.opt:345 +#: c.opt:349 msgid "" "Warn about NULL being passed to argument slots marked as requiring non-NULL" msgstr "" -#: c.opt:349 +#: c.opt:353 msgid "Warn about non-normalised Unicode strings" msgstr "" -#: c.opt:353 +#: c.opt:357 msgid "Warn if a C-style cast is used in a program" msgstr "" -#: c.opt:357 +#: c.opt:361 msgid "Warn for obsolescent usage in a declaration" msgstr "" -#: c.opt:361 +#: c.opt:365 msgid "Warn if an old-style parameter definition is used" msgstr "" -#: c.opt:365 +#: c.opt:369 msgid "" "Warn if a string is longer than the maximum portable length specified by the " "standard" msgstr "" -#: c.opt:369 +#: c.opt:373 msgid "Warn about overloaded virtual function names" msgstr "" -#: c.opt:373 +#: c.opt:377 msgid "Warn about overriding initializers without side effects" msgstr "" -#: c.opt:377 +#: c.opt:381 msgid "Warn about packed bit-fields whose offset changed in GCC 4.4" msgstr "" -#: c.opt:381 +#: c.opt:385 msgid "Warn about possibly missing parentheses" msgstr "" -#: c.opt:385 +#: c.opt:389 msgid "Warn when converting the type of pointers to member functions" msgstr "" -#: c.opt:389 +#: c.opt:393 msgid "Warn about function pointer arithmetic" msgstr "" -#: c.opt:393 +#: c.opt:397 msgid "Warn when a pointer is cast to an integer of a different size" msgstr "" -#: c.opt:397 +#: c.opt:401 msgid "Warn about misuses of pragmas" msgstr "" -#: c.opt:401 +#: c.opt:405 msgid "Warn if inherited methods are unimplemented" msgstr "" -#: c.opt:405 +#: c.opt:409 msgid "Warn about multiple declarations of the same object" msgstr "" -#: c.opt:409 +#: c.opt:413 msgid "Warn when the compiler reorders code" msgstr "" -#: c.opt:413 +#: c.opt:417 msgid "" "Warn whenever a function's return type defaults to \"int\" (C), or about " "inconsistent return types (C++)" msgstr "" -#: c.opt:417 +#: c.opt:421 msgid "Warn if a selector has multiple methods" msgstr "" -#: c.opt:421 +#: c.opt:425 msgid "Warn about possible violations of sequence point rules" msgstr "" -#: c.opt:425 +#: c.opt:429 msgid "Warn about signed-unsigned comparisons" msgstr "" -#: c.opt:429 +#: c.opt:433 msgid "Warn when overload promotes from unsigned to signed" msgstr "" -#: c.opt:433 +#: c.opt:437 msgid "Warn about uncasted NULL used as sentinel" msgstr "" -#: c.opt:437 +#: c.opt:441 msgid "Warn about unprototyped function declarations" msgstr "" -#: c.opt:441 +#: c.opt:445 msgid "Warn if type signatures of candidate methods do not match exactly" msgstr "" -#: c.opt:445 +#: c.opt:449 msgid "" "Warn when __sync_fetch_and_nand and __sync_nand_and_fetch built-in functions " "are used" msgstr "" -#: c.opt:449 +#: c.opt:453 msgid "Deprecated. This switch has no effect" msgstr "" -#: c.opt:457 +#: c.opt:461 msgid "Warn about features not present in traditional C" msgstr "" -#: c.opt:461 +#: c.opt:465 msgid "" "Warn of prototypes causing type conversions different from what would happen " "in the absence of prototype" msgstr "" -#: c.opt:465 +#: c.opt:469 msgid "" "Warn if trigraphs are encountered that might affect the meaning of the " "program" msgstr "" -#: c.opt:469 +#: c.opt:473 msgid "Warn about @selector()s without previously declared methods" msgstr "" -#: c.opt:473 +#: c.opt:477 msgid "Warn if an undefined macro is used in an #if directive" msgstr "" -#: c.opt:477 +#: c.opt:481 msgid "Warn about unrecognized pragmas" msgstr "" -#: c.opt:481 +#: c.opt:485 msgid "Warn about unsuffixed float constants" msgstr "" -#: c.opt:485 +#: c.opt:489 msgid "Warn about macros defined in the main file that are not used" msgstr "" -#: c.opt:489 +#: c.opt:493 +msgid "" +"Warn if a caller of a function, marked with attribute warn_unused_result, " +"does not use its return value" +msgstr "" + +#: c.opt:497 msgid "Do not warn about using variadic macros when -pedantic" msgstr "" -#: c.opt:493 +#: c.opt:501 msgid "Warn if a variable length array is used" msgstr "" -#: c.opt:497 +#: c.opt:505 msgid "Warn when a register variable is declared volatile" msgstr "" -#: c.opt:501 +#: c.opt:509 msgid "" "In C++, nonzero means warn about deprecated conversion from string literals " "to `char *'. In C, similar warning, except that the conversion is of course " "not deprecated by the ISO C standard." msgstr "" -#: c.opt:505 +#: c.opt:513 msgid "Warn when a pointer differs in signedness in an assignment" msgstr "" -#: c.opt:509 +#: c.opt:517 msgid "A synonym for -std=c89 (for C) or -std=c++98 (for C++)" msgstr "" -#: c.opt:517 +#: c.opt:525 msgid "Enforce class member access control semantics" msgstr "" -#: c.opt:524 +#: c.opt:532 msgid "Change when template instances are emitted" msgstr "" -#: c.opt:528 +#: c.opt:536 msgid "Recognize the \"asm\" keyword" msgstr "" -#: c.opt:532 +#: c.opt:540 msgid "Recognize built-in functions" msgstr "" -#: c.opt:539 +#: c.opt:547 msgid "Check the return value of new" msgstr "" -#: c.opt:543 +#: c.opt:551 msgid "Allow the arguments of the '?' operator to have different types" msgstr "" -#: c.opt:547 +#: c.opt:555 msgid "Reduce the size of object files" msgstr "" -#: c.opt:551 +#: c.opt:559 msgid "Use class <name> for constant strings" msgstr "" -#: c.opt:555 +#: c.opt:563 +msgid "" +"disable deduction of std::initializer_list for a template type parameter " +"from a brace-enclosed initializer-list" +msgstr "" + +#: c.opt:567 msgid "Inline member functions by default" msgstr "" -#: c.opt:559 +#: c.opt:571 msgid "Preprocess directives only." msgstr "" -#: c.opt:563 +#: c.opt:575 msgid "Permit '$' as an identifier character" msgstr "" -#: c.opt:570 +#: c.opt:582 msgid "Generate code to check exception specifications" msgstr "" -#: c.opt:577 +#: c.opt:589 msgid "Convert all strings and character constants to character set <cset>" msgstr "" -#: c.opt:581 +#: c.opt:593 msgid "Permit universal character names (\\u and \\U) in identifiers" msgstr "" -#: c.opt:585 +#: c.opt:597 msgid "Specify the default character set for source files" msgstr "" -#: c.opt:593 +#: c.opt:605 msgid "Scope of for-init-statement variables is local to the loop" msgstr "" -#: c.opt:597 +#: c.opt:609 msgid "Do not assume that standard C libraries and \"main\" exist" msgstr "" -#: c.opt:601 +#: c.opt:613 msgid "Recognize GNU-defined keywords" msgstr "" -#: c.opt:605 +#: c.opt:617 msgid "Generate code for GNU runtime environment" msgstr "" -#: c.opt:609 +#: c.opt:621 msgid "Use traditional GNU semantics for inline functions" msgstr "" -#: c.opt:622 +#: c.opt:634 msgid "Assume normal C execution environment" msgstr "" -#: c.opt:626 +#: c.opt:638 msgid "Enable support for huge objects" msgstr "" -#: c.opt:630 +#: c.opt:642 msgid "Export functions even if they can be inlined" msgstr "" -#: c.opt:634 +#: c.opt:646 msgid "Emit implicit instantiations of inline templates" msgstr "" -#: c.opt:638 +#: c.opt:650 msgid "Emit implicit instantiations of templates" msgstr "" -#: c.opt:642 +#: c.opt:654 msgid "Inject friend functions into enclosing namespace" msgstr "" -#: c.opt:649 +#: c.opt:661 msgid "" "Allow implicit conversions between vectors with differing numbers of " "subparts and/or differing element types." msgstr "" -#: c.opt:653 +#: c.opt:665 msgid "Don't warn about uses of Microsoft extensions" msgstr "" -#: c.opt:663 +#: c.opt:675 msgid "Generate code for NeXT (Apple Mac OS X) runtime environment" msgstr "" -#: c.opt:667 +#: c.opt:679 msgid "Assume that receivers of Objective-C messages may be nil" msgstr "" -#: c.opt:679 +#: c.opt:691 msgid "" "Generate special Objective-C methods to initialize/destroy non-POD C++ " "ivars, if needed" msgstr "" -#: c.opt:683 +#: c.opt:695 msgid "Allow fast jumps to the message dispatcher" msgstr "" -#: c.opt:689 +#: c.opt:701 msgid "Enable Objective-C exception and synchronization syntax" msgstr "" -#: c.opt:693 +#: c.opt:705 msgid "Enable garbage collection (GC) in Objective-C/Objective-C++ programs" msgstr "" -#: c.opt:698 +#: c.opt:710 msgid "Enable Objective-C setjmp exception handling runtime" msgstr "" -#: c.opt:702 +#: c.opt:714 msgid "Enable OpenMP (implies -frecursive in Fortran)" msgstr "" -#: c.opt:706 +#: c.opt:718 msgid "Recognize C++ keywords like \"compl\" and \"xor\"" msgstr "" -#: c.opt:710 +#: c.opt:722 msgid "Enable optional diagnostics" msgstr "" -#: c.opt:717 +#: c.opt:729 msgid "Look for and use PCH files even when preprocessing" msgstr "" -#: c.opt:721 +#: c.opt:733 msgid "Downgrade conformance errors to warnings" msgstr "" -#: c.opt:725 +#: c.opt:737 msgid "Treat the input file as already preprocessed" msgstr "" -#: c.opt:729 +#: c.opt:741 msgid "" "-fno-pretty-templates Do not pretty-print template specializations as the " "template signature followed by the arguments" msgstr "" -#: c.opt:733 +#: c.opt:745 msgid "" "Used in Fix-and-Continue mode to indicate that object files may be swapped " "in at runtime" msgstr "" -#: c.opt:737 +#: c.opt:749 msgid "Enable automatic template instantiation" msgstr "" -#: c.opt:741 +#: c.opt:753 msgid "Generate run time type descriptor information" msgstr "" -#: c.opt:745 +#: c.opt:757 msgid "Use the same size for double as for float" msgstr "" -#: c.opt:753 +#: c.opt:761 +msgid "Use the narrowest integer type possible for enumeration types" +msgstr "" + +#: c.opt:765 msgid "Force the underlying type for \"wchar_t\" to be \"unsigned short\"" msgstr "" -#: c.opt:757 +#: c.opt:769 msgid "When \"signed\" or \"unsigned\" is not given make the bitfield signed" msgstr "" -#: c.opt:761 +#: c.opt:773 msgid "Make \"char\" signed by default" msgstr "" -#: c.opt:768 +#: c.opt:780 msgid "Display statistics accumulated during compilation" msgstr "" -#: c.opt:775 +#: c.opt:787 msgid "Distance between tab stops for column reporting" msgstr "" -#: c.opt:779 +#: c.opt:791 msgid "Specify maximum template instantiation depth" msgstr "" -#: c.opt:786 +#: c.opt:798 msgid "Do not generate thread-safe code for initializing local statics" msgstr "" -#: c.opt:790 +#: c.opt:802 msgid "When \"signed\" or \"unsigned\" is not given make the bitfield unsigned" msgstr "" -#: c.opt:794 +#: c.opt:806 msgid "Make \"char\" unsigned by default" msgstr "" -#: c.opt:798 +#: c.opt:810 msgid "Use __cxa_atexit to register destructors" msgstr "" -#: c.opt:802 +#: c.opt:814 msgid "Use __cxa_get_exception_ptr in exception handling" msgstr "" -#: c.opt:806 +#: c.opt:818 msgid "Marks all inlined methods as having hidden visibility" msgstr "" -#: c.opt:810 +#: c.opt:822 msgid "Changes visibility to match Microsoft Visual Studio by default" msgstr "" -#: c.opt:814 +#: c.opt:826 msgid "Discard unused virtual functions" msgstr "" -#: c.opt:818 +#: c.opt:830 msgid "Implement vtables using thunks" msgstr "" -#: c.opt:822 +#: c.opt:834 msgid "Emit common-like symbols as weak symbols" msgstr "" -#: c.opt:826 +#: c.opt:838 msgid "" "Convert all wide strings and character constants to character set <cset>" msgstr "" -#: c.opt:830 +#: c.opt:842 msgid "Generate a #line directive pointing at the current working directory" msgstr "" -#: c.opt:834 +#: c.opt:846 msgid "Emit cross referencing information" msgstr "" -#: c.opt:838 +#: c.opt:850 msgid "" "Generate lazy class lookup (via objc_getClass()) for use in Zero-Link mode" msgstr "" -#: c.opt:842 +#: c.opt:854 msgid "Dump declarations to a .decl file" msgstr "" -#: c.opt:846 +#: c.opt:858 msgid "Aggressive reduced debug info for structs" msgstr "" -#: c.opt:850 +#: c.opt:862 msgid "Conservative reduced debug info for structs" msgstr "" -#: c.opt:854 +#: c.opt:866 msgid "Detailed reduced debug info for structs" msgstr "" -#: c.opt:858 c.opt:890 +#: c.opt:870 c.opt:902 msgid "Add <dir> to the end of the system include path" msgstr "" -#: c.opt:862 +#: c.opt:874 msgid "Accept definition of macros in <file>" msgstr "" -#: c.opt:866 +#: c.opt:878 msgid "-imultilib <dir> Set <dir> to be the multilib include subdirectory" msgstr "" -#: c.opt:870 +#: c.opt:882 msgid "Include the contents of <file> before other files" msgstr "" -#: c.opt:874 +#: c.opt:886 msgid "Specify <path> as a prefix for next two options" msgstr "" -#: c.opt:878 +#: c.opt:890 msgid "Set <dir> to be the system root directory" msgstr "" -#: c.opt:882 +#: c.opt:894 msgid "Add <dir> to the start of the system include path" msgstr "" -#: c.opt:886 +#: c.opt:898 msgid "Add <dir> to the end of the quote include path" msgstr "" -#: c.opt:904 +#: c.opt:916 msgid "" "Do not search standard system include directories (those specified with -" "isystem will still be used)" msgstr "" -#: c.opt:908 +#: c.opt:920 msgid "Do not search standard system include directories for C++" msgstr "" -#: c.opt:924 +#: c.opt:936 msgid "Generate C header of platform-specific features" msgstr "" -#: c.opt:928 +#: c.opt:940 msgid "Print a checksum of the executable for PCH validity checking, and stop" msgstr "" -#: c.opt:932 +#: c.opt:944 msgid "Remap file names when including files" msgstr "" -#: c.opt:936 +#: c.opt:948 msgid "Conform to the ISO 1998 C++ standard" msgstr "" -#: c.opt:940 +#: c.opt:952 msgid "" "Conform to the ISO 1998 C++ standard, with extensions that are likely to" msgstr "" -#: c.opt:947 c.opt:982 +#: c.opt:959 c.opt:994 msgid "Conform to the ISO 1990 C standard" msgstr "" -#: c.opt:951 c.opt:990 +#: c.opt:963 c.opt:1002 msgid "Conform to the ISO 1999 C standard" msgstr "" -#: c.opt:955 +#: c.opt:967 msgid "Deprecated in favor of -std=c99" msgstr "" -#: c.opt:959 +#: c.opt:971 msgid "Conform to the ISO 1998 C++ standard with GNU extensions" msgstr "" -#: c.opt:963 +#: c.opt:975 msgid "Conform to the ISO 1998 C++ standard, with GNU extensions and" msgstr "" -#: c.opt:970 +#: c.opt:982 msgid "Conform to the ISO 1990 C standard with GNU extensions" msgstr "" -#: c.opt:974 +#: c.opt:986 msgid "Conform to the ISO 1999 C standard with GNU extensions" msgstr "" -#: c.opt:978 +#: c.opt:990 msgid "Deprecated in favor of -std=gnu99" msgstr "" -#: c.opt:986 +#: c.opt:998 msgid "Conform to the ISO 1990 C standard as amended in 1994" msgstr "" -#: c.opt:994 +#: c.opt:1006 msgid "Deprecated in favor of -std=iso9899:1999" msgstr "" -#: c.opt:998 +#: c.opt:1010 msgid "Enable traditional preprocessing" msgstr "" -#: c.opt:1002 +#: c.opt:1014 msgid "Support ISO C trigraphs" msgstr "" -#: c.opt:1006 +#: c.opt:1018 msgid "Do not predefine system-specific and GCC-specific macros" msgstr "" -#: c.opt:1010 +#: c.opt:1022 msgid "Enable verbose output" msgstr "" +#: lto/lang.opt:29 +msgid "Run the link-time optimizer in local transformation (LTRANS) mode." +msgstr "" + +#: lto/lang.opt:33 +msgid "Specify a file to which a list of files output by LTRANS is written." +msgstr "" + +#: lto/lang.opt:37 +msgid "Run the link-time optimizer in whole program analysis (WPA) mode." +msgstr "" + +#: lto/lang.opt:41 +msgid "The resolution file" +msgstr "" + #: common.opt:28 msgid "Display this information" msgstr "" @@ -16650,1010 +17416,1122 @@ msgid "Do not put uninitialized globals in the common section" msgstr "" #: common.opt:385 -msgid "Do not perform optimizations increasing noticeably stack usage" +msgid "" +"-fcompare-debug[=<opts>] Compile with and without e.g. -gtoggle, and compare " +"the final-insns dump" msgstr "" #: common.opt:389 -msgid "Perform a register copy-propagation optimization pass" +msgid "Run only the second compilation of -fcompare-debug" msgstr "" #: common.opt:393 -msgid "Perform cross-jumping optimization" +msgid "Do not perform optimizations increasing noticeably stack usage" msgstr "" #: common.opt:397 +msgid "Perform a register copy-propagation optimization pass" +msgstr "" + +#: common.opt:401 +msgid "Perform cross-jumping optimization" +msgstr "" + +#: common.opt:405 msgid "When running CSE, follow jumps to their targets" msgstr "" -#: common.opt:401 common.opt:514 common.opt:727 common.opt:956 common.opt:1108 -#: common.opt:1167 common.opt:1183 common.opt:1243 +#: common.opt:409 common.opt:538 common.opt:759 common.opt:1001 +#: common.opt:1122 common.opt:1181 common.opt:1240 common.opt:1256 +#: common.opt:1328 msgid "Does nothing. Preserved for backward compatibility." msgstr "" -#: common.opt:405 +#: common.opt:413 msgid "Omit range reduction step when performing complex division" msgstr "" -#: common.opt:409 +#: common.opt:417 msgid "Complex multiplication and division follow Fortran rules" msgstr "" -#: common.opt:413 +#: common.opt:421 msgid "Place data items into their own section" msgstr "" -#: common.opt:417 +#: common.opt:425 msgid "List all available debugging counters with their limits and counts." msgstr "" -#: common.opt:421 +#: common.opt:429 msgid "" "-fdbg-cnt=<counter>:<limit>[,<counter>:<limit>,...] Set the debug counter " "limit. " msgstr "" -#: common.opt:425 +#: common.opt:433 msgid "Map one directory name to another in debug information" msgstr "" -#: common.opt:431 +#: common.opt:439 msgid "Defer popping functions args from stack until later" msgstr "" -#: common.opt:435 +#: common.opt:443 msgid "Attempt to fill delay slots of branch instructions" msgstr "" -#: common.opt:439 +#: common.opt:447 msgid "Delete useless null pointer checks" msgstr "" -#: common.opt:443 +#: common.opt:451 msgid "" "How often to emit source location at the beginning of line-wrapped " "diagnostics" msgstr "" -#: common.opt:447 +#: common.opt:455 msgid "" "Amend appropriate diagnostic messages with the command line option that " "controls them" msgstr "" -#: common.opt:451 +#: common.opt:459 msgid "Dump various compiler internals to a file" msgstr "" -#: common.opt:455 +#: common.opt:463 +msgid "Dump to filename the insns at the end of translation" +msgstr "" + +#: common.opt:467 msgid "Suppress output of addresses in debugging dumps" msgstr "" -#: common.opt:459 +#: common.opt:471 msgid "" "Suppress output of instruction numbers, line number notes and addresses in " "debugging dumps" msgstr "" -#: common.opt:463 +#: common.opt:475 +msgid "Suppress output of previous and next insn numbers in debugging dumps" +msgstr "" + +#: common.opt:479 msgid "Enable CFI tables via GAS assembler directives." msgstr "" -#: common.opt:467 +#: common.opt:483 msgid "Perform early inlining" msgstr "" -#: common.opt:471 +#: common.opt:487 msgid "Perform DWARF2 duplicate elimination" msgstr "" -#: common.opt:475 common.opt:479 +#: common.opt:491 +msgid "Perform interprocedural reduction of aggregates" +msgstr "" + +#: common.opt:495 common.opt:499 msgid "Perform unused type elimination in debug info" msgstr "" -#: common.opt:483 +#: common.opt:503 msgid "Do not suppress C++ class debug information." msgstr "" -#: common.opt:487 +#: common.opt:507 +msgid "Generate debug information to support Identical Code Folding (ICF)" +msgstr "" + +#: common.opt:511 msgid "Enable exception handling" msgstr "" -#: common.opt:491 +#: common.opt:515 msgid "Perform a number of minor, expensive optimizations" msgstr "" -#: common.opt:495 +#: common.opt:519 msgid "Specify handling of excess floating-point precision" msgstr "" -#: common.opt:502 +#: common.opt:526 msgid "Assume no NaNs or infinities are generated" msgstr "" -#: common.opt:506 +#: common.opt:530 msgid "Mark <register> as being unavailable to the compiler" msgstr "" -#: common.opt:510 +#: common.opt:534 msgid "Don't allocate floats and doubles in extended-precision registers" msgstr "" -#: common.opt:518 +#: common.opt:542 msgid "Perform a forward propagation pass on RTL" msgstr "" -#: common.opt:525 +#: common.opt:549 msgid "Allow function addresses to be held in registers" msgstr "" -#: common.opt:529 +#: common.opt:553 msgid "Place each function into its own section" msgstr "" -#: common.opt:533 +#: common.opt:557 msgid "Perform global common subexpression elimination" msgstr "" -#: common.opt:537 +#: common.opt:561 msgid "" "Perform enhanced load motion during global common subexpression elimination" msgstr "" -#: common.opt:541 +#: common.opt:565 msgid "Perform store motion after global common subexpression elimination" msgstr "" -#: common.opt:545 +#: common.opt:569 msgid "" "Perform redundant load after store elimination in global common subexpression" msgstr "" -#: common.opt:550 +#: common.opt:574 msgid "" "Perform global common subexpression elimination after register allocation" msgstr "" -#: common.opt:556 +#: common.opt:580 msgid "Enable in and out of Graphite representation" msgstr "" -#: common.opt:560 +#: common.opt:584 +msgid "Enable Graphite Identity transformation" +msgstr "" + +#: common.opt:588 +msgid "Mark all loops as parallel" +msgstr "" + +#: common.opt:592 msgid "Enable Loop Strip Mining transformation" msgstr "" -#: common.opt:564 +#: common.opt:596 msgid "Enable Loop Interchange transformation" msgstr "" -#: common.opt:568 +#: common.opt:600 msgid "Enable Loop Blocking transformation" msgstr "" -#: common.opt:573 -msgid "Enable Graphite Identity transformation" -msgstr "" - -#: common.opt:577 +#: common.opt:604 msgid "Enable guessing of branch probabilities" msgstr "" -#: common.opt:585 +#: common.opt:612 msgid "Process #ident directives" msgstr "" -#: common.opt:589 +#: common.opt:616 msgid "Perform conversion of conditional jumps to branchless equivalents" msgstr "" -#: common.opt:593 +#: common.opt:620 msgid "Perform conversion of conditional jumps to conditional execution" msgstr "" -#: common.opt:601 +#: common.opt:628 msgid "Do not generate .size directives" msgstr "" -#: common.opt:605 +#: common.opt:632 msgid "Perform indirect inlining" msgstr "" -#: common.opt:614 +#: common.opt:641 msgid "Pay attention to the \"inline\" keyword" msgstr "" -#: common.opt:618 +#: common.opt:645 msgid "" "Integrate simple functions into their callers when code size is known to not " "growth" msgstr "" -#: common.opt:622 +#: common.opt:649 msgid "Integrate simple functions into their callers" msgstr "" -#: common.opt:626 +#: common.opt:653 msgid "Integrate functions called once into their callers" msgstr "" -#: common.opt:633 +#: common.opt:660 msgid "Limit the size of inlined functions to <number>" msgstr "" -#: common.opt:637 +#: common.opt:664 msgid "Instrument function entry and exit with profiling calls" msgstr "" -#: common.opt:641 +#: common.opt:668 msgid "" "-finstrument-functions-exclude-function-list=name,... Do not instrument " "listed functions" msgstr "" -#: common.opt:645 +#: common.opt:672 msgid "" "-finstrument-functions-exclude-file-list=filename,... Do not instrument " "functions listed in files" msgstr "" -#: common.opt:649 +#: common.opt:676 msgid "Perform Interprocedural constant propagation" msgstr "" -#: common.opt:653 +#: common.opt:680 msgid "Perform cloning to make Interprocedural constant propagation stronger" msgstr "" -#: common.opt:657 +#: common.opt:684 msgid "Discover pure and const functions" msgstr "" -#: common.opt:661 +#: common.opt:688 msgid "Perform interprocedural points-to analysis" msgstr "" -#: common.opt:665 +#: common.opt:692 msgid "Discover readonly and non addressable static variables" msgstr "" -#: common.opt:669 +#: common.opt:696 msgid "Type based escape and alias analysis" msgstr "" -#: common.opt:673 +#: common.opt:700 msgid "Perform matrix layout flattening and transposing based" msgstr "" -#: common.opt:678 +#: common.opt:705 msgid "Perform structure layout optimizations based" msgstr "" -#: common.opt:683 +#: common.opt:710 msgid "-fira-algorithm=[CB|priority] Set the used IRA algorithm" msgstr "" -#: common.opt:687 +#: common.opt:714 msgid "-fira-region=[one|all|mixed] Set regions for IRA" msgstr "" -#: common.opt:691 +#: common.opt:718 msgid "Do optimistic coalescing." msgstr "" -#: common.opt:695 +#: common.opt:722 +msgid "Use IRA based register pressure calculation" +msgstr "" + +#: common.opt:727 msgid "Share slots for saving different hard registers." msgstr "" -#: common.opt:699 +#: common.opt:731 msgid "Share stack slots for spilled pseudo-registers." msgstr "" -#: common.opt:703 +#: common.opt:735 msgid "-fira-verbose=<number> Control IRA's level of diagnostic messages." msgstr "" -#: common.opt:707 +#: common.opt:739 msgid "Optimize induction variables on trees" msgstr "" -#: common.opt:711 +#: common.opt:743 msgid "Use jump tables for sufficiently large switch statements" msgstr "" -#: common.opt:715 +#: common.opt:747 msgid "Generate code for functions even if they are fully inlined" msgstr "" -#: common.opt:719 +#: common.opt:751 msgid "Emit static const variables even if they are not used" msgstr "" -#: common.opt:723 +#: common.opt:755 msgid "Give external symbols a leading underscore" msgstr "" -#: common.opt:731 +#: common.opt:763 +msgid "Enable link-time optimization." +msgstr "" + +#: common.opt:768 +msgid "" +"-flto-compression-level=<number> Use zlib compression level <number> for IL" +msgstr "" + +#: common.opt:772 +msgid "Report various link-time optimization statistics" +msgstr "" + +#: common.opt:776 msgid "Set errno after built-in math functions" msgstr "" -#: common.opt:735 +#: common.opt:780 msgid "Report on permanent memory allocation" msgstr "" -#: common.opt:742 +#: common.opt:787 msgid "Attempt to merge identical constants and constant variables" msgstr "" -#: common.opt:746 +#: common.opt:791 msgid "Attempt to merge identical constants across compilation units" msgstr "" -#: common.opt:750 +#: common.opt:795 msgid "Attempt to merge identical debug strings across compilation units" msgstr "" -#: common.opt:754 +#: common.opt:799 msgid "" "Limit diagnostics to <number> characters per line. 0 suppresses line-" "wrapping" msgstr "" -#: common.opt:758 +#: common.opt:803 msgid "Perform SMS based modulo scheduling before the first scheduling pass" msgstr "" -#: common.opt:762 +#: common.opt:807 msgid "Perform SMS based modulo scheduling with register moves allowed" msgstr "" -#: common.opt:766 +#: common.opt:811 msgid "Move loop invariant computations out of loops" msgstr "" -#: common.opt:770 +#: common.opt:815 msgid "Add mudflap bounds-checking instrumentation for single-threaded program" msgstr "" -#: common.opt:774 +#: common.opt:819 msgid "Add mudflap bounds-checking instrumentation for multi-threaded program" msgstr "" -#: common.opt:778 +#: common.opt:823 msgid "Ignore read operations when inserting mudflap instrumentation" msgstr "" -#: common.opt:782 +#: common.opt:827 msgid "Use the RTL dead code elimination pass" msgstr "" -#: common.opt:786 +#: common.opt:831 msgid "Use the RTL dead store elimination pass" msgstr "" -#: common.opt:790 +#: common.opt:835 msgid "" "Enable/Disable the traditional scheduling in loops that already passed " "modulo scheduling" msgstr "" -#: common.opt:794 +#: common.opt:839 msgid "Support synchronous non-call exceptions" msgstr "" -#: common.opt:798 +#: common.opt:843 msgid "When possible do not generate stack frames" msgstr "" -#: common.opt:802 +#: common.opt:847 msgid "Do the full register move optimization pass" msgstr "" -#: common.opt:806 +#: common.opt:851 msgid "Optimize sibling and tail recursive calls" msgstr "" -#: common.opt:810 common.opt:814 +#: common.opt:855 common.opt:859 msgid "Report on memory allocation before interprocedural optimization" msgstr "" -#: common.opt:818 +#: common.opt:863 msgid "Pack structure members together without holes" msgstr "" -#: common.opt:822 +#: common.opt:867 msgid "Set initial maximum structure member alignment" msgstr "" -#: common.opt:826 +#: common.opt:871 msgid "Return small aggregates in memory, not registers" msgstr "" -#: common.opt:830 +#: common.opt:875 msgid "Perform loop peeling" msgstr "" -#: common.opt:834 +#: common.opt:879 msgid "Enable machine specific peephole optimizations" msgstr "" -#: common.opt:838 +#: common.opt:883 msgid "Enable an RTL peephole pass before sched2" msgstr "" -#: common.opt:842 +#: common.opt:887 msgid "Generate position-independent code if possible (large mode)" msgstr "" -#: common.opt:846 +#: common.opt:891 msgid "" "Generate position-independent code for executables if possible (large mode)" msgstr "" -#: common.opt:850 +#: common.opt:895 msgid "Generate position-independent code if possible (small mode)" msgstr "" -#: common.opt:854 +#: common.opt:899 msgid "" "Generate position-independent code for executables if possible (small mode)" msgstr "" -#: common.opt:858 +#: common.opt:903 msgid "Specify a plugin to load" msgstr "" -#: common.opt:862 +#: common.opt:907 msgid "" "-fplugin-arg-<name>-<key>[=<value>] Specify argument <key>=<value> for " "plugin <name>" msgstr "" -#: common.opt:866 +#: common.opt:911 msgid "Run predictive commoning optimization." msgstr "" -#: common.opt:870 +#: common.opt:915 msgid "Generate prefetch instructions, if available, for arrays in loops" msgstr "" -#: common.opt:874 +#: common.opt:919 msgid "Enable basic program profiling code" msgstr "" -#: common.opt:878 +#: common.opt:923 msgid "Insert arc-based program profiling code" msgstr "" -#: common.opt:882 +#: common.opt:927 msgid "Set the top-level directory for storing the profile data." msgstr "" -#: common.opt:887 +#: common.opt:932 msgid "Enable correction of flow inconsistent profile data input" msgstr "" -#: common.opt:891 +#: common.opt:936 msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations" msgstr "" -#: common.opt:895 +#: common.opt:940 msgid "" "Enable common options for generating profile info for profile feedback " "directed optimizations, and set -fprofile-dir=" msgstr "" -#: common.opt:899 +#: common.opt:944 msgid "" "Enable common options for performing profile feedback directed optimizations" msgstr "" -#: common.opt:903 +#: common.opt:948 msgid "" "Enable common options for performing profile feedback directed " "optimizations, and set -fprofile-dir=" msgstr "" -#: common.opt:907 +#: common.opt:952 msgid "Insert code to profile values of expressions" msgstr "" -#: common.opt:914 +#: common.opt:959 msgid "Make compile reproducible using <string>" msgstr "" -#: common.opt:924 +#: common.opt:969 msgid "Record gcc command line switches in the object file." msgstr "" -#: common.opt:928 +#: common.opt:973 msgid "Return small aggregates in registers" msgstr "" -#: common.opt:932 +#: common.opt:977 msgid "Enables a register move optimization" msgstr "" -#: common.opt:936 +#: common.opt:981 msgid "Perform a register renaming optimization pass" msgstr "" -#: common.opt:940 +#: common.opt:985 msgid "Reorder basic blocks to improve code placement" msgstr "" -#: common.opt:944 +#: common.opt:989 msgid "Reorder basic blocks and partition into hot and cold sections" msgstr "" -#: common.opt:948 +#: common.opt:993 msgid "Reorder functions to improve code placement" msgstr "" -#: common.opt:952 +#: common.opt:997 msgid "Add a common subexpression elimination pass after loop optimizations" msgstr "" -#: common.opt:960 +#: common.opt:1005 msgid "Disable optimizations that assume default FP rounding behavior" msgstr "" -#: common.opt:964 +#: common.opt:1009 msgid "Enable scheduling across basic blocks" msgstr "" -#: common.opt:968 +#: common.opt:1013 +msgid "Enable register pressure sensitive insn scheduling" +msgstr "" + +#: common.opt:1017 msgid "Allow speculative motion of non-loads" msgstr "" -#: common.opt:972 +#: common.opt:1021 msgid "Allow speculative motion of some loads" msgstr "" -#: common.opt:976 +#: common.opt:1025 msgid "Allow speculative motion of more loads" msgstr "" -#: common.opt:980 +#: common.opt:1029 msgid "Set the verbosity level of the scheduler" msgstr "" -#: common.opt:984 +#: common.opt:1033 msgid "If scheduling post reload, do superblock scheduling" msgstr "" -#: common.opt:988 +#: common.opt:1037 msgid "If scheduling post reload, do trace scheduling" msgstr "" -#: common.opt:992 +#: common.opt:1041 msgid "Reschedule instructions before register allocation" msgstr "" -#: common.opt:996 +#: common.opt:1045 msgid "Reschedule instructions after register allocation" msgstr "" -#: common.opt:1003 +#: common.opt:1052 msgid "Schedule instructions using selective scheduling algorithm" msgstr "" -#: common.opt:1007 +#: common.opt:1056 msgid "Run selective scheduling after reload" msgstr "" -#: common.opt:1011 +#: common.opt:1060 msgid "Perform software pipelining of inner loops during selective scheduling" msgstr "" -#: common.opt:1015 +#: common.opt:1064 msgid "Perform software pipelining of outer loops during selective scheduling" msgstr "" -#: common.opt:1019 +#: common.opt:1068 msgid "Reschedule pipelined regions without pipelining" msgstr "" -#: common.opt:1025 +#: common.opt:1074 msgid "Allow premature scheduling of queued insns" msgstr "" -#: common.opt:1029 +#: common.opt:1078 msgid "Set number of queued insns that can be prematurely scheduled" msgstr "" -#: common.opt:1037 common.opt:1041 +#: common.opt:1086 common.opt:1090 msgid "" "Set dependence distance checking in premature scheduling of queued insns" msgstr "" -#: common.opt:1045 -msgid "Access data in the same section from shared anchor points" +#: common.opt:1094 +msgid "Enable the group heuristic in the scheduler" +msgstr "" + +#: common.opt:1098 +msgid "Enable the critical path heuristic in the scheduler" +msgstr "" + +#: common.opt:1102 +msgid "Enable the speculative instruction heuristic in the scheduler" +msgstr "" + +#: common.opt:1106 +msgid "Enable the rank heuristic in the scheduler" +msgstr "" + +#: common.opt:1110 +msgid "Enable the last instruction heuristic in the scheduler" +msgstr "" + +#: common.opt:1114 +msgid "Enable the dependent count heuristic in the scheduler" msgstr "" -#: common.opt:1049 -msgid "Eliminate redundant sign extensions using LCM." +#: common.opt:1118 +msgid "Access data in the same section from shared anchor points" msgstr "" -#: common.opt:1053 -msgid "Show column numbers in diagnostics, when available. Default off" +#: common.opt:1126 +msgid "Show column numbers in diagnostics, when available. Default on" msgstr "" -#: common.opt:1057 +#: common.opt:1130 msgid "Disable optimizations observable by IEEE signaling NaNs" msgstr "" -#: common.opt:1061 +#: common.opt:1134 msgid "" "Disable floating point optimizations that ignore the IEEE signedness of zero" msgstr "" -#: common.opt:1065 +#: common.opt:1138 msgid "Convert floating point constants to single precision constants" msgstr "" -#: common.opt:1069 +#: common.opt:1142 msgid "Split lifetimes of induction variables when loops are unrolled" msgstr "" -#: common.opt:1073 +#: common.opt:1146 msgid "Split wide types into independent registers" msgstr "" -#: common.opt:1077 +#: common.opt:1150 msgid "Apply variable expansion when loops are unrolled" msgstr "" -#: common.opt:1081 +#: common.opt:1154 msgid "Insert stack checking code into the program" msgstr "" -#: common.opt:1085 +#: common.opt:1158 msgid "" "Insert stack checking code into the program. Same as -fstack-check=specific" msgstr "" -#: common.opt:1092 +#: common.opt:1165 msgid "Trap if the stack goes past <register>" msgstr "" -#: common.opt:1096 +#: common.opt:1169 msgid "Trap if the stack goes past symbol <name>" msgstr "" -#: common.opt:1100 +#: common.opt:1173 msgid "Use propolice as a stack protection method" msgstr "" -#: common.opt:1104 +#: common.opt:1177 msgid "Use a stack protection method for every function" msgstr "" -#: common.opt:1116 +#: common.opt:1189 msgid "Assume strict aliasing rules apply" msgstr "" -#: common.opt:1120 +#: common.opt:1193 msgid "Treat signed overflow as undefined" msgstr "" -#: common.opt:1124 +#: common.opt:1197 msgid "Check for syntax errors, then stop" msgstr "" -#: common.opt:1128 +#: common.opt:1201 msgid "Create data files needed by \"gcov\"" msgstr "" -#: common.opt:1132 +#: common.opt:1205 msgid "Perform jump threading optimizations" msgstr "" -#: common.opt:1136 +#: common.opt:1209 msgid "Report the time taken by each compiler pass" msgstr "" -#: common.opt:1140 +#: common.opt:1213 msgid "Set the default thread-local storage code generation model" msgstr "" -#: common.opt:1144 +#: common.opt:1217 msgid "Reorder top level functions, variables, and asms" msgstr "" -#: common.opt:1148 +#: common.opt:1221 msgid "Perform superblock formation via tail duplication" msgstr "" -#: common.opt:1155 +#: common.opt:1228 msgid "Assume floating-point operations can trap" msgstr "" -#: common.opt:1159 +#: common.opt:1232 msgid "Trap for signed overflow in addition, subtraction and multiplication" msgstr "" -#: common.opt:1163 +#: common.opt:1236 msgid "Enable SSA-CCP optimization on trees" msgstr "" -#: common.opt:1171 +#: common.opt:1244 msgid "Enable loop header copying on trees" msgstr "" -#: common.opt:1175 +#: common.opt:1248 msgid "Replace SSA temporaries with better names in copies" msgstr "" -#: common.opt:1179 +#: common.opt:1252 msgid "Enable copy propagation on trees" msgstr "" -#: common.opt:1187 +#: common.opt:1260 msgid "Transform condition stores into unconditional ones" msgstr "" -#: common.opt:1191 +#: common.opt:1264 msgid "Perform conversions of switch initializations." msgstr "" -#: common.opt:1195 +#: common.opt:1268 msgid "Enable SSA dead code elimination optimization on trees" msgstr "" -#: common.opt:1199 +#: common.opt:1272 msgid "Enable dominator optimizations" msgstr "" -#: common.opt:1203 +#: common.opt:1276 msgid "Enable dead store elimination" msgstr "" -#: common.opt:1207 +#: common.opt:1280 +msgid "Enable forward propagation on trees" +msgstr "" + +#: common.opt:1284 msgid "Enable Full Redundancy Elimination (FRE) on trees" msgstr "" -#: common.opt:1211 +#: common.opt:1288 msgid "Enable loop distribution on trees" msgstr "" -#: common.opt:1215 +#: common.opt:1292 msgid "Enable loop invariant motion on trees" msgstr "" -#: common.opt:1219 +#: common.opt:1296 msgid "Enable linear loop transforms on trees" msgstr "" -#: common.opt:1223 +#: common.opt:1300 msgid "Create canonical induction variables in loops" msgstr "" -#: common.opt:1227 +#: common.opt:1304 msgid "Enable loop optimizations on tree level" msgstr "" -#: common.opt:1231 +#: common.opt:1308 msgid "Enable automatic parallelization of loops" msgstr "" -#: common.opt:1235 +#: common.opt:1312 +msgid "Enable hoisting loads from conditional pointers." +msgstr "" + +#: common.opt:1316 msgid "Enable SSA-PRE optimization on trees" msgstr "" -#: common.opt:1239 +#: common.opt:1320 +msgid "Perform function-local points-to analysis on trees." +msgstr "" + +#: common.opt:1324 msgid "Enable reassociation on tree level" msgstr "" -#: common.opt:1247 +#: common.opt:1332 msgid "Enable SSA code sinking on trees" msgstr "" -#: common.opt:1251 +#: common.opt:1336 msgid "Perform scalar replacement of aggregates" msgstr "" -#: common.opt:1255 +#: common.opt:1340 msgid "Replace temporary expressions in the SSA->normal pass" msgstr "" -#: common.opt:1259 +#: common.opt:1344 msgid "Perform live range splitting during the SSA->normal pass" msgstr "" -#: common.opt:1263 +#: common.opt:1348 msgid "Perform Value Range Propagation on trees" msgstr "" -#: common.opt:1267 +#: common.opt:1352 msgid "Compile whole compilation unit at a time" msgstr "" -#: common.opt:1271 +#: common.opt:1356 msgid "Perform loop unrolling when iteration count is known" msgstr "" -#: common.opt:1275 +#: common.opt:1360 msgid "Perform loop unrolling for all loops" msgstr "" -#: common.opt:1282 +#: common.opt:1367 msgid "Allow loop optimizations to assume that the loops behave in normal way" msgstr "" -#: common.opt:1286 +#: common.opt:1371 msgid "Allow optimization for floating-point arithmetic which may change the" msgstr "" -#: common.opt:1291 +#: common.opt:1376 msgid "Same as -fassociative-math for expressions which include division." msgstr "" -#: common.opt:1299 +#: common.opt:1384 msgid "Allow math optimizations that may violate IEEE or ISO standards" msgstr "" -#: common.opt:1303 +#: common.opt:1388 msgid "Perform loop unswitching" msgstr "" -#: common.opt:1307 +#: common.opt:1392 msgid "Just generate unwind tables for exception handling" msgstr "" -#: common.opt:1311 +#: common.opt:1396 msgid "Perform variable tracking" msgstr "" -#: common.opt:1315 +#: common.opt:1400 +msgid "Perform variable tracking by annotating assignments" +msgstr "" + +#: common.opt:1404 +msgid "Toggle -fvar-tracking-assignments" +msgstr "" + +#: common.opt:1408 msgid "Perform variable tracking and also tag variables that are uninitialized" msgstr "" -#: common.opt:1319 +#: common.opt:1412 msgid "Enable loop vectorization on trees" msgstr "" -#: common.opt:1323 +#: common.opt:1416 +msgid "Enable basic block vectorization (SLP) on trees" +msgstr "" + +#: common.opt:1420 msgid "Enable use of cost model in vectorization" msgstr "" -#: common.opt:1327 +#: common.opt:1424 msgid "Enable loop versioning when doing loop vectorization on trees" msgstr "" -#: common.opt:1331 +#: common.opt:1428 msgid "Set the verbosity level of the vectorizer" msgstr "" -#: common.opt:1335 +#: common.opt:1432 msgid "Enable copy propagation of scalar-evolution information." msgstr "" -#: common.opt:1345 +#: common.opt:1442 msgid "Add extra commentary to assembler output" msgstr "" -#: common.opt:1349 +#: common.opt:1446 msgid "Set the default symbol visibility" msgstr "" -#: common.opt:1354 +#: common.opt:1451 msgid "Use expression value profiles in optimizations" msgstr "" -#: common.opt:1358 +#: common.opt:1455 msgid "Construct webs and split unrelated uses of single variable" msgstr "" -#: common.opt:1362 +#: common.opt:1459 +msgid "Enable partitioned link-time optimization." +msgstr "" + +#: common.opt:1463 msgid "Enable conditional dead code elimination for builtin calls" msgstr "" -#: common.opt:1366 +#: common.opt:1467 msgid "Perform whole program optimizations" msgstr "" -#: common.opt:1370 +#: common.opt:1471 msgid "Assume signed arithmetic overflow wraps around" msgstr "" -#: common.opt:1374 +#: common.opt:1475 msgid "Put zero initialized data in the bss section" msgstr "" -#: common.opt:1378 +#: common.opt:1479 msgid "Generate debug information in default format" msgstr "" -#: common.opt:1382 +#: common.opt:1483 msgid "Generate debug information in COFF format" msgstr "" -#: common.opt:1386 -msgid "Generate debug information in DWARF v2 format" +#: common.opt:1487 +msgid "Generate debug information in DWARF v2 (or later) format" msgstr "" -#: common.opt:1390 +#: common.opt:1491 msgid "Generate debug information in default extended format" msgstr "" -#: common.opt:1394 +#: common.opt:1495 msgid "Generate debug information in STABS format" msgstr "" -#: common.opt:1398 +#: common.opt:1499 msgid "Generate debug information in extended STABS format" msgstr "" -#: common.opt:1402 +#: common.opt:1503 +msgid "Emit DWARF additions beyond selected version" +msgstr "" + +#: common.opt:1507 +msgid "Don't emit DWARF additions beyond selected version" +msgstr "" + +#: common.opt:1511 +msgid "Toggle debug information generation" +msgstr "" + +#: common.opt:1515 msgid "Generate debug information in VMS format" msgstr "" -#: common.opt:1406 +#: common.opt:1519 msgid "Generate debug information in XCOFF format" msgstr "" -#: common.opt:1410 +#: common.opt:1523 msgid "Generate debug information in extended XCOFF format" msgstr "" -#: common.opt:1414 +#: common.opt:1527 msgid "Place output into <file>" msgstr "" -#: common.opt:1418 +#: common.opt:1531 msgid "Enable function profiling" msgstr "" -#: common.opt:1422 +#: common.opt:1535 msgid "Issue warnings needed for strict compliance to the standard" msgstr "" -#: common.opt:1426 +#: common.opt:1539 msgid "Like -pedantic but issue them as errors" msgstr "" -#: common.opt:1430 +#: common.opt:1543 msgid "Do not display functions compiled or elapsed time" msgstr "" -#: common.opt:1434 +#: common.opt:1547 msgid "Display the compiler's version" msgstr "" -#: common.opt:1438 +#: common.opt:1551 msgid "Suppress warnings" msgstr "" -#: common.opt:1442 +#: common.opt:1555 msgid "Create a shared library" msgstr "" -#: common.opt:1446 +#: common.opt:1559 msgid "Create a position independent executable" msgstr "" -#: attribs.c:283 +#: attribs.c:293 #, gcc-internal-format msgid "%qE attribute directive ignored" msgstr "" -#: attribs.c:291 +#: attribs.c:301 #, gcc-internal-format msgid "wrong number of arguments specified for %qE attribute" msgstr "" -#: attribs.c:309 +#: attribs.c:319 #, gcc-internal-format msgid "%qE attribute does not apply to types" msgstr "" -#: attribs.c:360 +#: attribs.c:370 #, gcc-internal-format msgid "%qE attribute only applies to function types" msgstr "" -#: attribs.c:370 +#: attribs.c:380 #, gcc-internal-format msgid "type attributes ignored after type is already defined" msgstr "" @@ -17669,146 +18547,143 @@ msgid "" "branch target register load optimization is not intended to be run twice" msgstr "" -#: builtins.c:489 +#: builtins.c:499 #, gcc-internal-format msgid "offset outside bounds of constant string" msgstr "" -#: builtins.c:1052 +#: builtins.c:1063 #, gcc-internal-format msgid "second argument to %<__builtin_prefetch%> must be a constant" msgstr "" -#: builtins.c:1059 +#: builtins.c:1070 #, gcc-internal-format msgid "invalid second argument to %<__builtin_prefetch%>; using zero" msgstr "" -#: builtins.c:1067 +#: builtins.c:1078 #, gcc-internal-format msgid "third argument to %<__builtin_prefetch%> must be a constant" msgstr "" -#: builtins.c:1074 +#: builtins.c:1085 #, gcc-internal-format msgid "invalid third argument to %<__builtin_prefetch%>; using zero" msgstr "" -#: builtins.c:4678 +#: builtins.c:4314 #, gcc-internal-format msgid "argument of %<__builtin_args_info%> must be constant" msgstr "" -#: builtins.c:4684 +#: builtins.c:4320 #, gcc-internal-format msgid "argument of %<__builtin_args_info%> out of range" msgstr "" -#: builtins.c:4690 +#: builtins.c:4326 #, gcc-internal-format msgid "missing argument in %<__builtin_args_info%>" msgstr "" -#: builtins.c:4826 gimplify.c:2376 +#: builtins.c:4463 gimplify.c:2321 #, gcc-internal-format msgid "too few arguments to function %<va_start%>" msgstr "" -#: builtins.c:4984 +#: builtins.c:4625 #, gcc-internal-format msgid "first argument to %<va_arg%> not of type %<va_list%>" msgstr "" -#. Unfortunately, this is merely undefined, rather than a constraint -#. violation, so we cannot make this an error. If this call is never -#. executed, the program is still strictly conforming. -#: builtins.c:4999 +#: builtins.c:4641 #, gcc-internal-format msgid "%qT is promoted to %qT when passed through %<...%>" msgstr "" -#: builtins.c:5004 +#: builtins.c:4646 #, gcc-internal-format msgid "(so you should pass %qT not %qT to %<va_arg%>)" msgstr "" #. We can, however, treat "undefined" any way we please. #. Call abort to encourage the user to fix the program. -#: builtins.c:5011 c-typeck.c:2513 +#: builtins.c:4653 c-typeck.c:2580 #, gcc-internal-format msgid "if this code is reached, the program will abort" msgstr "" -#: builtins.c:5135 +#: builtins.c:4780 #, gcc-internal-format msgid "invalid argument to %<__builtin_frame_address%>" msgstr "" -#: builtins.c:5137 +#: builtins.c:4782 #, gcc-internal-format msgid "invalid argument to %<__builtin_return_address%>" msgstr "" -#: builtins.c:5150 +#: builtins.c:4795 #, gcc-internal-format msgid "unsupported argument to %<__builtin_frame_address%>" msgstr "" -#: builtins.c:5152 +#: builtins.c:4797 #, gcc-internal-format msgid "unsupported argument to %<__builtin_return_address%>" msgstr "" -#: builtins.c:5698 +#: builtins.c:5333 #, gcc-internal-format msgid "both arguments to %<__builtin___clear_cache%> must be pointers" msgstr "" -#: builtins.c:6060 builtins.c:6075 +#: builtins.c:5709 builtins.c:5723 #, gcc-internal-format msgid "%qD changed semantics in GCC 4.4" msgstr "" #. All valid uses of __builtin_va_arg_pack () are removed during #. inlining. -#: builtins.c:6461 expr.c:8053 +#: builtins.c:6113 expr.c:9162 msgid "%Kinvalid use of %<__builtin_va_arg_pack ()%>" msgstr "" #. All valid uses of __builtin_va_arg_pack_len () are removed during #. inlining. -#: builtins.c:6467 +#: builtins.c:6119 msgid "%Kinvalid use of %<__builtin_va_arg_pack_len ()%>" msgstr "" -#: builtins.c:6763 +#: builtins.c:6347 #, gcc-internal-format msgid "%<__builtin_longjmp%> second argument must be 1" msgstr "" -#: builtins.c:7399 +#: builtins.c:6982 #, gcc-internal-format msgid "target format does not support infinity" msgstr "" -#: builtins.c:11812 +#: builtins.c:11740 #, gcc-internal-format msgid "%<va_start%> used in function with fixed args" msgstr "" -#: builtins.c:11820 +#: builtins.c:11748 #, gcc-internal-format msgid "wrong number of arguments to function %<va_start%>" msgstr "" #. Evidently an out of date version of <stdarg.h>; can't validate #. va_start's second argument, but can still work as intended. -#: builtins.c:11833 +#: builtins.c:11761 #, gcc-internal-format msgid "%<__builtin_next_arg%> called without an argument" msgstr "" -#: builtins.c:11838 +#: builtins.c:11766 #, gcc-internal-format msgid "wrong number of arguments to function %<__builtin_next_arg%>" msgstr "" @@ -17818,948 +18693,948 @@ msgstr "" #. argument. We just warn and set the arg to be the last #. argument so that we will get wrong-code because of #. it. -#: builtins.c:11868 +#: builtins.c:11796 #, gcc-internal-format msgid "second parameter of %<va_start%> not last named argument" msgstr "" -#: builtins.c:11878 +#: builtins.c:11806 #, gcc-internal-format msgid "" "undefined behaviour when second parameter of %<va_start%> is declared with %" "<register%> storage" msgstr "" -#: builtins.c:11993 +#: builtins.c:11922 msgid "%Kfirst argument of %D must be a pointer, second integer constant" msgstr "" -#: builtins.c:12006 +#: builtins.c:11935 msgid "%Klast argument of %D is not integer constant between 0 and 3" msgstr "" -#: builtins.c:12051 builtins.c:12216 builtins.c:12275 +#: builtins.c:11980 builtins.c:12131 builtins.c:12190 msgid "%Kcall to %D will always overflow destination buffer" msgstr "" -#: builtins.c:12206 +#: builtins.c:12121 msgid "%Kcall to %D might overflow destination buffer" msgstr "" -#: builtins.c:12296 +#: builtins.c:12211 msgid "%Kattempt to free a non-heap object %qD" msgstr "" -#: builtins.c:12299 +#: builtins.c:12214 msgid "%Kattempt to free a non-heap object" msgstr "" -#: c-common.c:1157 +#: c-common.c:990 #, gcc-internal-format msgid "%qD is not defined outside of function scope" msgstr "" -#: c-common.c:1207 +#: c-common.c:1040 #, gcc-internal-format msgid "" "string length %qd is greater than the length %qd ISO C%d compilers are " "required to support" msgstr "" -#: c-common.c:1655 c-common.c:1667 +#: c-common.c:1533 c-common.c:1545 #, gcc-internal-format msgid "overflow in constant expression" msgstr "" -#: c-common.c:1689 +#: c-common.c:1568 #, gcc-internal-format msgid "integer overflow in expression" msgstr "" -#: c-common.c:1693 +#: c-common.c:1573 #, gcc-internal-format msgid "floating point overflow in expression" msgstr "" -#: c-common.c:1697 +#: c-common.c:1577 #, gcc-internal-format msgid "fixed-point overflow in expression" msgstr "" -#: c-common.c:1701 +#: c-common.c:1581 #, gcc-internal-format msgid "vector overflow in expression" msgstr "" -#: c-common.c:1706 +#: c-common.c:1587 #, gcc-internal-format msgid "complex integer overflow in expression" msgstr "" -#: c-common.c:1708 +#: c-common.c:1590 #, gcc-internal-format msgid "complex floating point overflow in expression" msgstr "" -#: c-common.c:1747 +#: c-common.c:1633 #, gcc-internal-format msgid "logical %<or%> applied to non-boolean constant" msgstr "" -#: c-common.c:1750 +#: c-common.c:1636 #, gcc-internal-format msgid "logical %<and%> applied to non-boolean constant" msgstr "" -#: c-common.c:1786 +#: c-common.c:1681 +#, gcc-internal-format +msgid "logical %<or%> of collectively exhaustive tests is always true" +msgstr "" + +#: c-common.c:1685 +#, gcc-internal-format +msgid "logical %<and%> of mutually exclusive tests is always false" +msgstr "" + +#: c-common.c:1720 #, gcc-internal-format msgid "type-punning to incomplete type might break strict-aliasing rules" msgstr "" -#: c-common.c:1801 +#: c-common.c:1735 #, gcc-internal-format msgid "dereferencing type-punned pointer will break strict-aliasing rules" msgstr "" -#: c-common.c:1808 c-common.c:1826 +#: c-common.c:1742 c-common.c:1760 #, gcc-internal-format msgid "dereferencing type-punned pointer might break strict-aliasing rules" msgstr "" -#: c-common.c:1857 +#: c-common.c:1791 #, gcc-internal-format msgid "first argument of %q+D should be %<int%>" msgstr "" -#: c-common.c:1866 +#: c-common.c:1800 #, gcc-internal-format msgid "second argument of %q+D should be %<char **%>" msgstr "" -#: c-common.c:1875 +#: c-common.c:1809 #, gcc-internal-format msgid "third argument of %q+D should probably be %<char **%>" msgstr "" -#: c-common.c:1885 +#: c-common.c:1819 #, gcc-internal-format msgid "%q+D takes only zero or two arguments" msgstr "" -#: c-common.c:1934 +#: c-common.c:1868 #, gcc-internal-format msgid "" "use -flax-vector-conversions to permit conversions between vectors with " "differing element types or numbers of subparts" msgstr "" -#: c-common.c:2089 +#: c-common.c:2023 #, gcc-internal-format msgid "conversion to %qT from boolean expression" msgstr "" -#: c-common.c:2111 +#: c-common.c:2045 #, gcc-internal-format msgid "negative integer implicitly converted to unsigned type" msgstr "" -#: c-common.c:2113 +#: c-common.c:2047 #, gcc-internal-format msgid "conversion of unsigned constant value to negative integer" msgstr "" -#: c-common.c:2140 +#: c-common.c:2074 #, gcc-internal-format msgid "conversion to %qT alters %qT constant value" msgstr "" -#: c-common.c:2232 +#: c-common.c:2166 #, gcc-internal-format msgid "conversion to %qT from %qT may change the sign of the result" msgstr "" -#: c-common.c:2264 +#: c-common.c:2198 #, gcc-internal-format msgid "conversion to %qT from %qT may alter its value" msgstr "" -#: c-common.c:2292 +#: c-common.c:2226 #, gcc-internal-format msgid "large integer implicitly truncated to unsigned type" msgstr "" -#: c-common.c:2298 c-common.c:2305 c-common.c:2313 +#: c-common.c:2232 c-common.c:2239 c-common.c:2247 #, gcc-internal-format msgid "overflow in implicit constant conversion" msgstr "" -#: c-common.c:2484 +#: c-common.c:2420 #, gcc-internal-format msgid "operation on %qE may be undefined" msgstr "" -#: c-common.c:2792 +#: c-common.c:2728 #, gcc-internal-format msgid "case label does not reduce to an integer constant" msgstr "" -#: c-common.c:2832 +#: c-common.c:2768 #, gcc-internal-format msgid "case label value is less than minimum value for type" msgstr "" -#: c-common.c:2840 +#: c-common.c:2776 #, gcc-internal-format msgid "case label value exceeds maximum value for type" msgstr "" -#: c-common.c:2848 +#: c-common.c:2784 #, gcc-internal-format msgid "lower value in case label range less than minimum value for type" msgstr "" -#: c-common.c:2857 +#: c-common.c:2793 #, gcc-internal-format msgid "upper value in case label range exceeds maximum value for type" msgstr "" -#: c-common.c:2931 +#: c-common.c:2867 #, 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 "" -#: c-common.c:3417 +#: c-common.c:3354 #, gcc-internal-format msgid "invalid operands to binary %s (have %qT and %qT)" msgstr "" -#: c-common.c:3653 +#: c-common.c:3590 #, gcc-internal-format msgid "comparison is always false due to limited range of data type" msgstr "" -#: c-common.c:3655 +#: c-common.c:3592 #, gcc-internal-format msgid "comparison is always true due to limited range of data type" msgstr "" -#: c-common.c:3734 +#: c-common.c:3671 #, gcc-internal-format msgid "comparison of unsigned expression >= 0 is always true" msgstr "" -#: c-common.c:3744 +#: c-common.c:3681 #, gcc-internal-format msgid "comparison of unsigned expression < 0 is always false" msgstr "" -#: c-common.c:3785 +#: c-common.c:3723 #, gcc-internal-format msgid "pointer of type %<void *%> used in arithmetic" msgstr "" -#: c-common.c:3791 +#: c-common.c:3729 #, gcc-internal-format msgid "pointer to a function used in arithmetic" msgstr "" -#: c-common.c:3797 +#: c-common.c:3735 #, gcc-internal-format msgid "pointer to member function used in arithmetic" msgstr "" -#: c-common.c:3978 +#: c-common.c:3941 #, gcc-internal-format msgid "the address of %qD will always evaluate as %<true%>" msgstr "" -#: c-common.c:4066 cp/semantics.c:593 cp/typeck.c:6676 +#: c-common.c:4042 cp/semantics.c:594 cp/typeck.c:6810 #, gcc-internal-format msgid "suggest parentheses around assignment used as truth value" msgstr "" -#: c-common.c:4143 c-decl.c:3001 c-typeck.c:9934 +#: c-common.c:4124 c-decl.c:3581 c-typeck.c:10029 #, gcc-internal-format msgid "invalid use of %<restrict%>" msgstr "" -#: c-common.c:4360 +#: c-common.c:4338 #, gcc-internal-format msgid "invalid application of %<sizeof%> to a function type" msgstr "" -#: c-common.c:4373 +#: c-common.c:4351 #, gcc-internal-format msgid "invalid application of %qs to a void type" msgstr "" -#: c-common.c:4381 +#: c-common.c:4359 #, gcc-internal-format msgid "invalid application of %qs to incomplete type %qT " msgstr "" -#: c-common.c:4422 +#: c-common.c:4401 #, gcc-internal-format msgid "%<__alignof%> applied to a bit-field" msgstr "" -#: c-common.c:5149 +#: c-common.c:5110 #, gcc-internal-format msgid "cannot disable built-in function %qs" msgstr "" -#: c-common.c:5340 +#: c-common.c:5302 #, gcc-internal-format msgid "pointers are not permitted as case values" msgstr "" -#: c-common.c:5347 +#: c-common.c:5309 #, gcc-internal-format msgid "range expressions in switch statements are non-standard" msgstr "" -#: c-common.c:5373 +#: c-common.c:5335 #, gcc-internal-format msgid "empty range specified" msgstr "" -#: c-common.c:5433 +#: c-common.c:5395 #, gcc-internal-format msgid "duplicate (or overlapping) case value" msgstr "" -#: c-common.c:5434 +#: c-common.c:5397 #, gcc-internal-format -msgid "%Jthis is the first entry overlapping that value" +msgid "this is the first entry overlapping that value" msgstr "" -#: c-common.c:5438 +#: c-common.c:5401 #, gcc-internal-format msgid "duplicate case value" msgstr "" -#: c-common.c:5439 +#: c-common.c:5402 #, gcc-internal-format -msgid "%Jpreviously used here" +msgid "previously used here" msgstr "" -#: c-common.c:5443 +#: c-common.c:5406 #, gcc-internal-format msgid "multiple default labels in one switch" msgstr "" -#: c-common.c:5444 +#: c-common.c:5408 #, gcc-internal-format -msgid "%Jthis is the first default label" +msgid "this is the first default label" msgstr "" -#: c-common.c:5495 +#: c-common.c:5460 #, gcc-internal-format -msgid "%Jcase value %qs not in enumerated type" +msgid "case value %qs not in enumerated type" msgstr "" -#: c-common.c:5499 +#: c-common.c:5465 #, gcc-internal-format -msgid "%Jcase value %qs not in enumerated type %qT" +msgid "case value %qs not in enumerated type %qT" msgstr "" -#: c-common.c:5558 +#: c-common.c:5524 #, gcc-internal-format -msgid "%Hswitch missing default case" +msgid "switch missing default case" msgstr "" -#: c-common.c:5629 +#: c-common.c:5596 #, gcc-internal-format -msgid "%Henumeration value %qE not handled in switch" +msgid "enumeration value %qE not handled in switch" msgstr "" -#: c-common.c:5664 +#: c-common.c:5622 #, gcc-internal-format msgid "taking the address of a label is non-standard" msgstr "" -#: c-common.c:5837 +#: c-common.c:5795 #, gcc-internal-format msgid "%qE attribute ignored for field of type %qT" msgstr "" -#: c-common.c:5848 c-common.c:5867 c-common.c:5885 c-common.c:5912 -#: c-common.c:5939 c-common.c:5965 c-common.c:5984 c-common.c:6008 -#: c-common.c:6031 c-common.c:6054 c-common.c:6075 c-common.c:6096 -#: c-common.c:6120 c-common.c:6146 c-common.c:6183 c-common.c:6210 -#: c-common.c:6253 c-common.c:6337 c-common.c:6367 c-common.c:6387 -#: c-common.c:6722 c-common.c:6738 c-common.c:6786 c-common.c:6809 -#: c-common.c:6873 c-common.c:7001 c-common.c:7067 c-common.c:7111 -#: c-common.c:7157 c-common.c:7235 c-common.c:7259 c-common.c:7545 -#: c-common.c:7568 c-common.c:7607 c-common.c:7696 c-common.c:7836 tree.c:4066 -#: tree.c:4078 tree.c:4088 config/darwin.c:1437 config/arm/arm.c:3299 -#: config/arm/arm.c:3327 config/avr/avr.c:4807 config/h8300/h8300.c:5283 -#: config/h8300/h8300.c:5307 config/i386/i386.c:4286 config/i386/i386.c:26894 -#: config/ia64/ia64.c:621 config/m68hc11/m68hc11.c:1110 -#: config/rs6000/rs6000.c:20744 config/spu/spu.c:3784 -#: ada/gcc-interface/utils.c:5036 ada/gcc-interface/utils.c:5209 -#: ada/gcc-interface/utils.c:5228 +#: c-common.c:5806 c-common.c:5825 c-common.c:5843 c-common.c:5870 +#: c-common.c:5897 c-common.c:5923 c-common.c:5942 c-common.c:5959 +#: c-common.c:5983 c-common.c:6006 c-common.c:6029 c-common.c:6050 +#: c-common.c:6071 c-common.c:6095 c-common.c:6121 c-common.c:6158 +#: c-common.c:6185 c-common.c:6228 c-common.c:6312 c-common.c:6342 +#: c-common.c:6362 c-common.c:6699 c-common.c:6715 c-common.c:6763 +#: c-common.c:6786 c-common.c:6850 c-common.c:6978 c-common.c:7046 +#: c-common.c:7090 c-common.c:7138 c-common.c:7216 c-common.c:7240 +#: c-common.c:7526 c-common.c:7549 c-common.c:7588 c-common.c:7677 +#: c-common.c:7817 tree.c:5305 tree.c:5317 tree.c:5327 config/darwin.c:1437 +#: config/arm/arm.c:4504 config/arm/arm.c:4532 config/arm/arm.c:4549 +#: config/avr/avr.c:4658 config/h8300/h8300.c:5362 config/h8300/h8300.c:5386 +#: config/i386/i386.c:4403 config/i386/i386.c:26515 config/ia64/ia64.c:631 +#: config/m68hc11/m68hc11.c:1142 config/rs6000/rs6000.c:23362 +#: config/spu/spu.c:3809 #, gcc-internal-format msgid "%qE attribute ignored" msgstr "" -#: c-common.c:5930 c-common.c:5956 +#: c-common.c:5888 c-common.c:5914 #, gcc-internal-format msgid "%qE attribute conflicts with attribute %s" msgstr "" -#: c-common.c:6177 +#: c-common.c:6152 #, gcc-internal-format msgid "%qE attribute have effect only on public objects" msgstr "" -#: c-common.c:6274 +#: c-common.c:6249 #, gcc-internal-format msgid "destructor priorities are not supported" msgstr "" -#: c-common.c:6276 +#: c-common.c:6251 #, gcc-internal-format msgid "constructor priorities are not supported" msgstr "" -#: c-common.c:6293 +#: c-common.c:6268 #, gcc-internal-format msgid "destructor priorities from 0 to %d are reserved for the implementation" msgstr "" -#: c-common.c:6298 +#: c-common.c:6273 #, gcc-internal-format msgid "constructor priorities from 0 to %d are reserved for the implementation" msgstr "" -#: c-common.c:6306 +#: c-common.c:6281 #, gcc-internal-format msgid "destructor priorities must be integers from 0 to %d inclusive" msgstr "" -#: c-common.c:6309 +#: c-common.c:6284 #, gcc-internal-format msgid "constructor priorities must be integers from 0 to %d inclusive" msgstr "" -#: c-common.c:6431 +#: c-common.c:6406 #, gcc-internal-format msgid "unknown machine mode %qE" msgstr "" -#: c-common.c:6460 +#: c-common.c:6435 #, gcc-internal-format msgid "specifying vector types with __attribute__ ((mode)) is deprecated" msgstr "" -#: c-common.c:6463 +#: c-common.c:6438 #, gcc-internal-format msgid "use __attribute__ ((vector_size)) instead" msgstr "" -#: c-common.c:6472 +#: c-common.c:6447 #, gcc-internal-format msgid "unable to emulate %qs" msgstr "" -#: c-common.c:6482 +#: c-common.c:6457 #, gcc-internal-format msgid "invalid pointer mode %qs" msgstr "" -#: c-common.c:6499 +#: c-common.c:6474 #, gcc-internal-format msgid "signness of type and machine mode %qs don't match" msgstr "" -#: c-common.c:6510 +#: c-common.c:6485 #, gcc-internal-format msgid "no data type for mode %qs" msgstr "" -#: c-common.c:6520 +#: c-common.c:6495 #, gcc-internal-format msgid "cannot use mode %qs for enumeral types" msgstr "" -#: c-common.c:6547 +#: c-common.c:6522 #, gcc-internal-format msgid "mode %qs applied to inappropriate type" msgstr "" -#: c-common.c:6578 +#: c-common.c:6554 #, gcc-internal-format -msgid "%Jsection attribute cannot be specified for local variables" +msgid "section attribute cannot be specified for local variables" msgstr "" -#: c-common.c:6589 config/bfin/bfin.c:5371 config/bfin/bfin.c:5422 +#: c-common.c:6565 config/bfin/bfin.c:5647 config/bfin/bfin.c:5698 +#: config/bfin/bfin.c:5725 config/bfin/bfin.c:5738 #, gcc-internal-format msgid "section of %q+D conflicts with previous declaration" msgstr "" -#: c-common.c:6597 +#: c-common.c:6573 #, gcc-internal-format msgid "section of %q+D cannot be overridden" msgstr "" -#: c-common.c:6605 +#: c-common.c:6581 #, gcc-internal-format msgid "section attribute not allowed for %q+D" msgstr "" -#: c-common.c:6611 +#: c-common.c:6588 #, gcc-internal-format -msgid "%Jsection attributes are not supported for this target" +msgid "section attributes are not supported for this target" msgstr "" -#: c-common.c:6643 +#: c-common.c:6620 #, gcc-internal-format msgid "requested alignment is not a constant" msgstr "" -#: c-common.c:6648 +#: c-common.c:6625 #, gcc-internal-format msgid "requested alignment is not a power of 2" msgstr "" -#: c-common.c:6653 +#: c-common.c:6630 #, gcc-internal-format msgid "requested alignment is too large" msgstr "" -#: c-common.c:6679 +#: c-common.c:6656 #, gcc-internal-format msgid "alignment may not be specified for %q+D" msgstr "" -#: c-common.c:6686 +#: c-common.c:6663 #, gcc-internal-format msgid "" "alignment for %q+D was previously specified as %d and may not be decreased" msgstr "" -#: c-common.c:6690 +#: c-common.c:6667 #, gcc-internal-format msgid "alignment for %q+D must be at least %d" msgstr "" -#: c-common.c:6715 +#: c-common.c:6692 #, gcc-internal-format msgid "inline function %q+D cannot be declared weak" msgstr "" -#: c-common.c:6749 +#: c-common.c:6726 #, gcc-internal-format msgid "%q+D defined both normally and as an alias" msgstr "" -#: c-common.c:6765 +#: c-common.c:6742 #, gcc-internal-format msgid "alias argument not a string" msgstr "" -#: c-common.c:6830 +#: c-common.c:6808 #, gcc-internal-format -msgid "%Jweakref attribute must appear before alias attribute" +msgid "weakref attribute must appear before alias attribute" msgstr "" -#: c-common.c:6860 +#: c-common.c:6837 #, gcc-internal-format msgid "%qE attribute ignored on non-class types" msgstr "" -#: c-common.c:6866 +#: c-common.c:6843 #, gcc-internal-format msgid "%qE attribute ignored because %qT is already defined" msgstr "" -#: c-common.c:6879 +#: c-common.c:6856 #, gcc-internal-format msgid "visibility argument not a string" msgstr "" -#: c-common.c:6891 +#: c-common.c:6868 #, gcc-internal-format msgid "%qE attribute ignored on types" msgstr "" -#: c-common.c:6907 +#: c-common.c:6884 #, gcc-internal-format msgid "" "visibility argument must be one of \"default\", \"hidden\", \"protected\" or " "\"internal\"" msgstr "" -#: c-common.c:6918 +#: c-common.c:6895 #, gcc-internal-format msgid "%qD redeclared with different visibility" msgstr "" -#: c-common.c:6921 c-common.c:6925 +#: c-common.c:6898 c-common.c:6902 #, gcc-internal-format msgid "%qD was declared %qs which implies default visibility" msgstr "" -#: c-common.c:7009 +#: c-common.c:6986 #, gcc-internal-format msgid "tls_model argument not a string" msgstr "" -#: c-common.c:7022 +#: c-common.c:6999 #, gcc-internal-format msgid "" "tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-" "dynamic\" or \"global-dynamic\"" msgstr "" -#: c-common.c:7041 c-common.c:7131 +#: c-common.c:7019 c-common.c:7111 config/m32c/m32c.c:2832 #, gcc-internal-format -msgid "%J%qE attribute applies only to functions" +msgid "%qE attribute applies only to functions" msgstr "" -#: c-common.c:7046 c-common.c:7136 +#: c-common.c:7025 c-common.c:7117 #, gcc-internal-format -msgid "%Jcan%'t set %qE attribute after definition" +msgid "can%'t set %qE attribute after definition" msgstr "" -#: c-common.c:7092 +#: c-common.c:7071 #, gcc-internal-format msgid "alloc_size parameter outside range" msgstr "" -#: c-common.c:7193 +#: c-common.c:7174 #, gcc-internal-format msgid "deprecated message is not a string" msgstr "" -#: c-common.c:7233 +#: c-common.c:7214 #, gcc-internal-format msgid "%qE attribute ignored for %qE" msgstr "" -#: c-common.c:7293 +#: c-common.c:7274 #, gcc-internal-format msgid "invalid vector type for attribute %qE" msgstr "" -#: c-common.c:7299 +#: c-common.c:7280 ada/gcc-interface/utils.c:5457 +#: ada/gcc-interface/utils.c:5551 #, gcc-internal-format msgid "vector size not an integral multiple of component size" msgstr "" -#: c-common.c:7305 +#: c-common.c:7286 ada/gcc-interface/utils.c:5463 +#: ada/gcc-interface/utils.c:5557 #, gcc-internal-format msgid "zero vector size" msgstr "" -#: c-common.c:7313 +#: c-common.c:7294 ada/gcc-interface/utils.c:5471 +#: ada/gcc-interface/utils.c:5564 #, gcc-internal-format msgid "number of components of the vector not a power of two" msgstr "" -#: c-common.c:7341 ada/gcc-interface/utils.c:5087 +#: c-common.c:7322 ada/gcc-interface/utils.c:5211 #, gcc-internal-format msgid "nonnull attribute without arguments on a non-prototype" msgstr "" -#: c-common.c:7356 ada/gcc-interface/utils.c:5102 +#: c-common.c:7337 ada/gcc-interface/utils.c:5226 #, gcc-internal-format msgid "nonnull argument has invalid operand number (argument %lu)" msgstr "" -#: c-common.c:7375 ada/gcc-interface/utils.c:5121 +#: c-common.c:7356 ada/gcc-interface/utils.c:5245 #, gcc-internal-format msgid "" "nonnull argument with out-of-range operand number (argument %lu, operand %lu)" msgstr "" -#: c-common.c:7383 ada/gcc-interface/utils.c:5129 +#: c-common.c:7364 ada/gcc-interface/utils.c:5253 #, gcc-internal-format msgid "" "nonnull argument references non-pointer operand (argument %lu, operand %lu)" msgstr "" -#: c-common.c:7459 +#: c-common.c:7440 #, gcc-internal-format msgid "not enough variable arguments to fit a sentinel" msgstr "" -#: c-common.c:7473 +#: c-common.c:7454 #, gcc-internal-format msgid "missing sentinel in function call" msgstr "" -#: c-common.c:7514 +#: c-common.c:7495 #, gcc-internal-format msgid "null argument where non-null required (argument %lu)" msgstr "" -#: c-common.c:7579 +#: c-common.c:7560 #, gcc-internal-format msgid "cleanup argument not an identifier" msgstr "" -#: c-common.c:7586 +#: c-common.c:7567 #, gcc-internal-format msgid "cleanup argument not a function" msgstr "" -#: c-common.c:7625 ada/gcc-interface/utils.c:5151 +#: c-common.c:7606 #, gcc-internal-format msgid "%qE attribute requires prototypes with named arguments" msgstr "" -#: c-common.c:7636 ada/gcc-interface/utils.c:5162 +#: c-common.c:7617 #, gcc-internal-format msgid "%qE attribute only applies to variadic functions" msgstr "" -#: c-common.c:7648 ada/gcc-interface/utils.c:5173 +#: c-common.c:7629 ada/gcc-interface/utils.c:5299 #, gcc-internal-format msgid "requested position is not an integer constant" msgstr "" -#: c-common.c:7656 ada/gcc-interface/utils.c:5180 +#: c-common.c:7637 ada/gcc-interface/utils.c:5306 #, gcc-internal-format msgid "requested position is less than zero" msgstr "" -#: c-common.c:7780 +#: c-common.c:7761 #, gcc-internal-format msgid "Bad option %s to optimize attribute." msgstr "" -#: c-common.c:7783 +#: c-common.c:7764 #, gcc-internal-format msgid "Bad option %s to pragma attribute" msgstr "" -#: c-common.c:7976 +#: c-common.c:7957 #, gcc-internal-format msgid "not enough arguments to function %qE" msgstr "" -#: c-common.c:7981 c-typeck.c:2664 +#: c-common.c:7962 c-typeck.c:2732 #, gcc-internal-format msgid "too many arguments to function %qE" msgstr "" -#: c-common.c:8011 c-common.c:8057 +#: c-common.c:7992 c-common.c:8038 #, gcc-internal-format msgid "non-floating-point argument in call to function %qE" msgstr "" -#: c-common.c:8034 +#: c-common.c:8015 #, gcc-internal-format msgid "non-floating-point arguments in call to function %qE" msgstr "" -#: c-common.c:8050 +#: c-common.c:8031 #, gcc-internal-format msgid "non-const integer argument %u in call to function %qE" msgstr "" -#: c-common.c:8343 -#, gcc-internal-format -msgid "" -"%Hignoring return value of %qD, declared with attribute warn_unused_result" -msgstr "" - -#: c-common.c:8347 -#, gcc-internal-format -msgid "" -"%Hignoring return value of function declared with attribute " -"warn_unused_result" -msgstr "" - -#: c-common.c:8401 +#: c-common.c:8320 #, gcc-internal-format msgid "cannot apply %<offsetof%> to static data member %qD" msgstr "" -#: c-common.c:8406 +#: c-common.c:8325 #, gcc-internal-format msgid "cannot apply %<offsetof%> when %<operator[]%> is overloaded" msgstr "" -#: c-common.c:8427 cp/typeck.c:4708 +#: c-common.c:8346 cp/typeck.c:4778 #, gcc-internal-format msgid "attempt to take address of bit-field structure member %qD" msgstr "" -#: c-common.c:8480 +#: c-common.c:8400 #, gcc-internal-format msgid "lvalue required as left operand of assignment" msgstr "" -#: c-common.c:8483 +#: c-common.c:8403 #, gcc-internal-format msgid "lvalue required as increment operand" msgstr "" -#: c-common.c:8486 +#: c-common.c:8406 #, gcc-internal-format msgid "lvalue required as decrement operand" msgstr "" -#: c-common.c:8489 +#: c-common.c:8409 #, gcc-internal-format msgid "lvalue required as unary %<&%> operand" msgstr "" -#: c-common.c:8492 +#: c-common.c:8412 #, gcc-internal-format msgid "lvalue required in asm statement" msgstr "" -#: c-common.c:8621 +#: c-common.c:8542 #, gcc-internal-format msgid "size of array is too large" msgstr "" -#: c-common.c:8657 c-common.c:8708 c-typeck.c:2883 +#: c-common.c:8578 c-common.c:8629 c-typeck.c:2954 #, gcc-internal-format msgid "too few arguments to function %qE" msgstr "" -#: c-common.c:8674 c-typeck.c:4972 +#: c-common.c:8595 c-typeck.c:5165 config/mep/mep.c:6340 #, gcc-internal-format msgid "incompatible type for argument %d of %qE" msgstr "" -#: c-common.c:8869 +#: c-common.c:8792 #, gcc-internal-format msgid "array subscript has type %<char%>" msgstr "" -#: c-common.c:8904 +#: c-common.c:8827 #, gcc-internal-format msgid "suggest parentheses around %<+%> inside %<<<%>" msgstr "" -#: c-common.c:8907 +#: c-common.c:8830 #, gcc-internal-format msgid "suggest parentheses around %<-%> inside %<<<%>" msgstr "" -#: c-common.c:8913 +#: c-common.c:8836 #, gcc-internal-format msgid "suggest parentheses around %<+%> inside %<>>%>" msgstr "" -#: c-common.c:8916 +#: c-common.c:8839 #, gcc-internal-format msgid "suggest parentheses around %<-%> inside %<>>%>" msgstr "" -#: c-common.c:8922 +#: c-common.c:8845 #, gcc-internal-format msgid "suggest parentheses around %<&&%> within %<||%>" msgstr "" -#: c-common.c:8931 +#: c-common.c:8854 #, gcc-internal-format msgid "suggest parentheses around arithmetic in operand of %<|%>" msgstr "" -#: c-common.c:8936 +#: c-common.c:8859 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<|%>" msgstr "" -#: c-common.c:8940 +#: c-common.c:8863 #, gcc-internal-format msgid "" "suggest parentheses around operand of %<!%> or change %<|%> to %<||%> or %<!%" "> to %<~%>" msgstr "" -#: c-common.c:8950 +#: c-common.c:8873 #, gcc-internal-format msgid "suggest parentheses around arithmetic in operand of %<^%>" msgstr "" -#: c-common.c:8955 +#: c-common.c:8878 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<^%>" msgstr "" -#: c-common.c:8961 +#: c-common.c:8884 #, gcc-internal-format msgid "suggest parentheses around %<+%> in operand of %<&%>" msgstr "" -#: c-common.c:8964 +#: c-common.c:8887 #, gcc-internal-format msgid "suggest parentheses around %<-%> in operand of %<&%>" msgstr "" -#: c-common.c:8969 +#: c-common.c:8892 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<&%>" msgstr "" -#: c-common.c:8973 +#: c-common.c:8896 #, gcc-internal-format msgid "" "suggest parentheses around operand of %<!%> or change %<&%> to %<&&%> or %<!%" "> to %<~%>" msgstr "" -#: c-common.c:8981 +#: c-common.c:8904 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<==%>" msgstr "" -#: c-common.c:8987 +#: c-common.c:8910 #, gcc-internal-format msgid "suggest parentheses around comparison in operand of %<!=%>" msgstr "" -#: c-common.c:8998 +#: c-common.c:8921 #, gcc-internal-format msgid "comparisons like %<X<=Y<=Z%> do not have their mathematical meaning" msgstr "" -#: c-common.c:9013 +#: c-common.c:8936 #, gcc-internal-format msgid "label %q+D defined but not used" msgstr "" -#: c-common.c:9015 +#: c-common.c:8938 #, gcc-internal-format msgid "label %q+D declared but not defined" msgstr "" -#: c-common.c:9035 +#: c-common.c:8958 #, gcc-internal-format msgid "division by zero" msgstr "" -#: c-common.c:9067 +#: c-common.c:8990 #, gcc-internal-format msgid "comparison between types %qT and %qT" msgstr "" -#: c-common.c:9118 +#: c-common.c:9041 #, gcc-internal-format msgid "comparison between signed and unsigned integer expressions" msgstr "" -#: c-common.c:9169 +#: c-common.c:9092 #, gcc-internal-format msgid "promoted ~unsigned is always non-zero" msgstr "" -#: c-common.c:9172 +#: c-common.c:9095 #, gcc-internal-format msgid "comparison of promoted ~unsigned with constant" msgstr "" -#: c-common.c:9182 +#: c-common.c:9105 #, gcc-internal-format msgid "comparison of promoted ~unsigned with unsigned" msgstr "" @@ -18769,132 +19644,137 @@ msgstr "" #. an unprototyped function, it is compile-time undefined; #. making it a constraint in that case was rejected in #. DR#252. -#: c-convert.c:98 c-typeck.c:1788 c-typeck.c:4591 cp/typeck.c:1619 -#: cp/typeck.c:5974 cp/typeck.c:6584 fortran/convert.c:88 +#: c-convert.c:102 c-typeck.c:1834 c-typeck.c:4778 cp/typeck.c:1632 +#: cp/typeck.c:6094 cp/typeck.c:6715 fortran/convert.c:88 #, gcc-internal-format msgid "void value not ignored as it ought to be" msgstr "" -#: c-convert.c:152 fortran/convert.c:121 java/typeck.c:151 +#: c-convert.c:156 fortran/convert.c:121 java/typeck.c:151 #, gcc-internal-format msgid "conversion to non-scalar type requested" msgstr "" -#: c-decl.c:578 +#: c-decl.c:696 #, gcc-internal-format msgid "array %q+D assumed to have one element" msgstr "" -#: c-decl.c:619 +#: c-decl.c:737 #, gcc-internal-format msgid "%qD is static but used in inline function %qD which is not static" msgstr "" -#: c-decl.c:624 +#: c-decl.c:742 #, gcc-internal-format msgid "%q+D is static but declared in inline function %qD which is not static" msgstr "" -#: c-decl.c:769 +#: c-decl.c:954 #, gcc-internal-format msgid "GCC supports only %u nested scopes" msgstr "" -#: c-decl.c:855 cp/decl.c:356 +#: c-decl.c:1102 cp/decl.c:356 #, gcc-internal-format msgid "label %q+D used but not defined" msgstr "" -#: c-decl.c:896 +#: c-decl.c:1147 #, gcc-internal-format msgid "nested function %q+D declared but never defined" msgstr "" -#: c-decl.c:908 +#: c-decl.c:1159 #, gcc-internal-format msgid "inline function %q+D declared but never defined" msgstr "" -#: c-decl.c:923 cp/decl.c:601 +#: c-decl.c:1174 cp/decl.c:601 #, gcc-internal-format msgid "unused variable %q+D" msgstr "" -#: c-decl.c:927 +#: c-decl.c:1178 #, gcc-internal-format msgid "type of array %q+D completed incompatibly with implicit initialization" msgstr "" -#: c-decl.c:1177 +#: c-decl.c:1462 c-decl.c:5571 c-decl.c:6349 c-decl.c:6950 +#, gcc-internal-format +msgid "originally defined here" +msgstr "" + +#: c-decl.c:1533 #, gcc-internal-format msgid "" "a parameter list with an ellipsis can%'t match an empty parameter name list " "declaration" msgstr "" -#: c-decl.c:1184 +#: c-decl.c:1540 #, gcc-internal-format msgid "" "an argument type that has a default promotion can%'t match an empty " "parameter name list declaration" msgstr "" -#: c-decl.c:1225 +#: c-decl.c:1581 #, gcc-internal-format msgid "" "prototype for %q+D declares more arguments than previous old-style definition" msgstr "" -#: c-decl.c:1231 +#: c-decl.c:1587 #, gcc-internal-format msgid "" "prototype for %q+D declares fewer arguments than previous old-style " "definition" msgstr "" -#: c-decl.c:1240 +#: c-decl.c:1596 #, gcc-internal-format msgid "prototype for %q+D declares argument %d with incompatible type" msgstr "" #. If we get here, no errors were found, but do issue a warning #. for this poor-style construct. -#: c-decl.c:1253 +#: c-decl.c:1609 #, gcc-internal-format msgid "prototype for %q+D follows non-prototype definition" msgstr "" -#: c-decl.c:1268 +#: c-decl.c:1624 #, gcc-internal-format msgid "previous definition of %q+D was here" msgstr "" -#: c-decl.c:1270 +#: c-decl.c:1626 #, gcc-internal-format msgid "previous implicit declaration of %q+D was here" msgstr "" -#: c-decl.c:1272 +#: c-decl.c:1628 #, gcc-internal-format msgid "previous declaration of %q+D was here" msgstr "" -#: c-decl.c:1312 +#: c-decl.c:1668 #, gcc-internal-format msgid "%q+D redeclared as different kind of symbol" msgstr "" -#: c-decl.c:1316 +#: c-decl.c:1672 #, gcc-internal-format msgid "built-in function %q+D declared as non-function" msgstr "" -#: c-decl.c:1319 c-decl.c:1439 c-decl.c:2113 +#: c-decl.c:1675 c-decl.c:1795 c-decl.c:2483 #, gcc-internal-format msgid "declaration of %q+D shadows a built-in function" msgstr "" -#: c-decl.c:1328 +#: c-decl.c:1684 #, gcc-internal-format msgid "redeclaration of enumerator %q+D" msgstr "" @@ -18902,269 +19782,298 @@ msgstr "" #. If types don't match for a built-in, throw away the #. built-in. No point in calling locate_old_decl here, it #. won't print anything. -#: c-decl.c:1349 +#: c-decl.c:1705 #, gcc-internal-format msgid "conflicting types for built-in function %q+D" msgstr "" -#: c-decl.c:1374 c-decl.c:1387 c-decl.c:1396 +#: c-decl.c:1730 c-decl.c:1743 c-decl.c:1752 #, gcc-internal-format msgid "conflicting types for %q+D" msgstr "" -#: c-decl.c:1394 +#: c-decl.c:1750 #, gcc-internal-format msgid "conflicting type qualifiers for %q+D" msgstr "" #. Allow OLDDECL to continue in use. -#: c-decl.c:1414 +#: c-decl.c:1770 #, gcc-internal-format msgid "redefinition of typedef %q+D" msgstr "" -#: c-decl.c:1465 c-decl.c:1567 +#: c-decl.c:1821 c-decl.c:1924 #, gcc-internal-format msgid "redefinition of %q+D" msgstr "" -#: c-decl.c:1500 c-decl.c:1605 +#: c-decl.c:1856 c-decl.c:1962 #, gcc-internal-format msgid "static declaration of %q+D follows non-static declaration" msgstr "" -#: c-decl.c:1510 c-decl.c:1518 c-decl.c:1595 c-decl.c:1602 +#: c-decl.c:1866 c-decl.c:1874 c-decl.c:1952 c-decl.c:1959 #, gcc-internal-format msgid "non-static declaration of %q+D follows static declaration" msgstr "" -#: c-decl.c:1534 +#: c-decl.c:1890 #, gcc-internal-format msgid "%<gnu_inline%> attribute present on %q+D" msgstr "" -#: c-decl.c:1536 +#: c-decl.c:1893 #, gcc-internal-format -msgid "%Jbut not here" +msgid "but not here" msgstr "" -#: c-decl.c:1554 +#: c-decl.c:1911 #, gcc-internal-format msgid "thread-local declaration of %q+D follows non-thread-local declaration" msgstr "" -#: c-decl.c:1557 +#: c-decl.c:1914 #, gcc-internal-format msgid "non-thread-local declaration of %q+D follows thread-local declaration" msgstr "" -#: c-decl.c:1587 +#: c-decl.c:1944 #, gcc-internal-format msgid "extern declaration of %q+D follows declaration with no linkage" msgstr "" -#: c-decl.c:1623 +#: c-decl.c:1980 #, gcc-internal-format msgid "declaration of %q+D with no linkage follows extern declaration" msgstr "" -#: c-decl.c:1629 +#: c-decl.c:1986 #, gcc-internal-format msgid "redeclaration of %q+D with no linkage" msgstr "" -#: c-decl.c:1643 +#: c-decl.c:2012 #, gcc-internal-format msgid "" "redeclaration of %q+D with different visibility (old visibility preserved)" msgstr "" -#: c-decl.c:1654 +#: c-decl.c:2023 #, gcc-internal-format msgid "inline declaration of %qD follows declaration with attribute noinline" msgstr "" -#: c-decl.c:1661 +#: c-decl.c:2030 #, gcc-internal-format msgid "declaration of %q+D with attribute noinline follows inline declaration " msgstr "" -#: c-decl.c:1679 +#: c-decl.c:2048 #, gcc-internal-format msgid "redefinition of parameter %q+D" msgstr "" -#: c-decl.c:1706 +#: c-decl.c:2075 #, gcc-internal-format msgid "redundant redeclaration of %q+D" msgstr "" -#: c-decl.c:2100 +#: c-decl.c:2470 #, gcc-internal-format msgid "declaration of %q+D shadows previous non-variable" msgstr "" -#: c-decl.c:2105 +#: c-decl.c:2475 #, gcc-internal-format msgid "declaration of %q+D shadows a parameter" msgstr "" -#: c-decl.c:2108 +#: c-decl.c:2478 #, gcc-internal-format msgid "declaration of %q+D shadows a global declaration" msgstr "" -#: c-decl.c:2118 +#: c-decl.c:2488 #, gcc-internal-format msgid "declaration of %q+D shadows a previous local" msgstr "" -#: c-decl.c:2121 cp/name-lookup.c:1048 cp/name-lookup.c:1079 +#: c-decl.c:2492 cp/name-lookup.c:1045 cp/name-lookup.c:1078 #: cp/name-lookup.c:1087 #, gcc-internal-format -msgid "%Jshadowed declaration is here" +msgid "shadowed declaration is here" msgstr "" -#: c-decl.c:2254 +#: c-decl.c:2619 #, gcc-internal-format msgid "nested extern declaration of %qD" msgstr "" -#: c-decl.c:2422 c-decl.c:2425 +#: c-decl.c:2787 c-decl.c:2790 #, gcc-internal-format msgid "implicit declaration of function %qE" msgstr "" -#: c-decl.c:2488 +#: c-decl.c:2853 #, gcc-internal-format msgid "incompatible implicit declaration of built-in function %qD" msgstr "" -#: c-decl.c:2497 +#: c-decl.c:2862 #, gcc-internal-format msgid "incompatible implicit declaration of function %qD" msgstr "" -#: c-decl.c:2551 +#: c-decl.c:2915 #, gcc-internal-format -msgid "%H%qE undeclared here (not in a function)" +msgid "%qE undeclared here (not in a function)" msgstr "" -#: c-decl.c:2556 +#: c-decl.c:2920 #, gcc-internal-format -msgid "%H%qE undeclared (first use in this function)" +msgid "%qE undeclared (first use in this function)" msgstr "" -#: c-decl.c:2560 +#: c-decl.c:2924 #, gcc-internal-format -msgid "%H(Each undeclared identifier is reported only once" +msgid "(Each undeclared identifier is reported only once" msgstr "" -#: c-decl.c:2561 +#: c-decl.c:2925 #, gcc-internal-format -msgid "%Hfor each function it appears in.)" +msgid "for each function it appears in.)" msgstr "" -#: c-decl.c:2600 cp/decl.c:2404 +#: c-decl.c:2974 cp/decl.c:2439 #, gcc-internal-format msgid "label %qE referenced outside of any function" msgstr "" -#: c-decl.c:2642 +#: c-decl.c:3010 #, gcc-internal-format -msgid "duplicate label declaration %qE" +msgid "jump into scope of identifier with variably modified type" msgstr "" -#: c-decl.c:2678 +#: c-decl.c:3013 #, gcc-internal-format -msgid "%Hduplicate label %qD" +msgid "jump skips variable initialization" msgstr "" -#: c-decl.c:2688 +#: c-decl.c:3014 c-decl.c:3070 c-decl.c:3155 #, gcc-internal-format -msgid "%Jjump into statement expression" +msgid "label %qD defined here" msgstr "" -#: c-decl.c:2690 +#: c-decl.c:3015 c-decl.c:3279 #, gcc-internal-format -msgid "%Jjump into scope of identifier with variably modified type" +msgid "%qD declared here" msgstr "" -#: c-decl.c:2705 +#: c-decl.c:3069 c-decl.c:3154 +#, gcc-internal-format +msgid "jump into statement expression" +msgstr "" + +#: c-decl.c:3091 +#, gcc-internal-format +msgid "duplicate label declaration %qE" +msgstr "" + +#: c-decl.c:3185 cp/decl.c:2748 +#, gcc-internal-format +msgid "duplicate label %qD" +msgstr "" + +#: c-decl.c:3216 #, gcc-internal-format msgid "" -"%Htraditional C lacks a separate namespace for labels, identifier %qE " -"conflicts" +"traditional C lacks a separate namespace for labels, identifier %qE conflicts" msgstr "" -#: c-decl.c:2780 +#: c-decl.c:3277 #, gcc-internal-format -msgid "%H%qE defined as wrong kind of tag" +msgid "switch jumps over variable initialization" msgstr "" -#: c-decl.c:3011 +#: c-decl.c:3278 c-decl.c:3289 +#, gcc-internal-format +msgid "switch starts here" +msgstr "" + +#: c-decl.c:3288 +#, gcc-internal-format +msgid "switch jumps into statement expression" +msgstr "" + +#: c-decl.c:3359 +#, gcc-internal-format +msgid "%qE defined as wrong kind of tag" +msgstr "" + +#: c-decl.c:3591 #, gcc-internal-format msgid "unnamed struct/union that defines no instances" msgstr "" -#: c-decl.c:3020 +#: c-decl.c:3600 #, gcc-internal-format msgid "empty declaration with storage class specifier does not redeclare tag" msgstr "" -#: c-decl.c:3032 +#: c-decl.c:3612 #, gcc-internal-format msgid "empty declaration with type qualifier does not redeclare tag" msgstr "" -#: c-decl.c:3054 c-decl.c:3061 +#: c-decl.c:3634 c-decl.c:3641 #, gcc-internal-format msgid "useless type name in empty declaration" msgstr "" -#: c-decl.c:3069 +#: c-decl.c:3649 #, gcc-internal-format msgid "%<inline%> in empty declaration" msgstr "" -#: c-decl.c:3075 +#: c-decl.c:3655 #, gcc-internal-format msgid "%<auto%> in file-scope empty declaration" msgstr "" -#: c-decl.c:3081 +#: c-decl.c:3661 #, gcc-internal-format msgid "%<register%> in file-scope empty declaration" msgstr "" -#: c-decl.c:3087 +#: c-decl.c:3667 #, gcc-internal-format msgid "useless storage class specifier in empty declaration" msgstr "" -#: c-decl.c:3093 +#: c-decl.c:3673 #, gcc-internal-format msgid "useless %<__thread%> in empty declaration" msgstr "" -#: c-decl.c:3101 +#: c-decl.c:3681 #, gcc-internal-format msgid "useless type qualifier in empty declaration" msgstr "" -#: c-decl.c:3108 c-parser.c:1176 +#: c-decl.c:3688 c-parser.c:1181 #, gcc-internal-format msgid "empty declaration" msgstr "" -#: c-decl.c:3175 +#: c-decl.c:3758 #, gcc-internal-format msgid "" "ISO C90 does not support %<static%> or type qualifiers in parameter array " "declarators" msgstr "" -#: c-decl.c:3179 +#: c-decl.c:3762 #, gcc-internal-format msgid "ISO C90 does not support %<[*]%> array declarators" msgstr "" @@ -19172,263 +20081,273 @@ msgstr "" #. C99 6.7.5.2p4 #. A function definition isn't function prototype scope C99 6.2.1p4. #. C99 6.7.5.2p4 -#: c-decl.c:3186 c-decl.c:5294 +#: c-decl.c:3769 c-decl.c:5945 #, gcc-internal-format msgid "%<[*]%> not allowed in other than function prototype scope" msgstr "" -#: c-decl.c:3298 +#: c-decl.c:3882 #, gcc-internal-format msgid "%q+D is usually a function" msgstr "" -#: c-decl.c:3307 cp/decl2.c:781 +#: c-decl.c:3891 cp/decl2.c:782 #, gcc-internal-format msgid "typedef %qD is initialized (use __typeof__ instead)" msgstr "" -#: c-decl.c:3312 +#: c-decl.c:3896 #, gcc-internal-format msgid "function %qD is initialized like a variable" msgstr "" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. -#: c-decl.c:3318 +#: c-decl.c:3902 #, gcc-internal-format msgid "parameter %qD is initialized" msgstr "" -#: c-decl.c:3343 +#: c-decl.c:3927 #, gcc-internal-format msgid "variable %qD has initializer but incomplete type" msgstr "" -#: c-decl.c:3432 c-decl.c:6429 cp/decl.c:4104 cp/decl.c:11493 +#: c-decl.c:4016 cp/decl.c:4152 cp/decl.c:11602 #, gcc-internal-format msgid "inline function %q+D given attribute noinline" msgstr "" -#: c-decl.c:3536 +#: c-decl.c:4113 #, gcc-internal-format msgid "initializer fails to determine size of %q+D" msgstr "" -#: c-decl.c:3541 +#: c-decl.c:4118 #, gcc-internal-format msgid "array size missing in %q+D" msgstr "" -#: c-decl.c:3553 +#: c-decl.c:4130 #, gcc-internal-format msgid "zero or negative size array %q+D" msgstr "" -#: c-decl.c:3608 varasm.c:2117 +#: c-decl.c:4185 varasm.c:2124 #, gcc-internal-format msgid "storage size of %q+D isn%'t known" msgstr "" -#: c-decl.c:3619 +#: c-decl.c:4196 #, gcc-internal-format msgid "storage size of %q+D isn%'t constant" msgstr "" -#: c-decl.c:3666 +#: c-decl.c:4243 #, gcc-internal-format msgid "ignoring asm-specifier for non-static local variable %q+D" msgstr "" -#: c-decl.c:3694 fortran/f95-lang.c:620 +#: c-decl.c:4271 #, gcc-internal-format msgid "cannot put object with volatile field into register" msgstr "" -#: c-decl.c:3823 +#: c-decl.c:4361 +#, gcc-internal-format +msgid "uninitialized const %qD is invalid in C++" +msgstr "" + +#: c-decl.c:4407 #, gcc-internal-format msgid "ISO C forbids forward parameter declarations" msgstr "" -#: c-decl.c:3951 +#: c-decl.c:4493 +#, gcc-internal-format +msgid "defining a type in a compound literal is invalid in C++" +msgstr "" + +#: c-decl.c:4546 #, gcc-internal-format msgid "bit-field %qs width not an integer constant" msgstr "" -#: c-decl.c:3959 +#: c-decl.c:4554 #, gcc-internal-format msgid "negative width in bit-field %qs" msgstr "" -#: c-decl.c:3964 +#: c-decl.c:4559 #, gcc-internal-format msgid "zero width for bit-field %qs" msgstr "" -#: c-decl.c:3974 +#: c-decl.c:4569 #, gcc-internal-format msgid "bit-field %qs has invalid type" msgstr "" -#: c-decl.c:3984 +#: c-decl.c:4579 #, gcc-internal-format msgid "type of bit-field %qs is a GCC extension" msgstr "" -#: c-decl.c:3990 +#: c-decl.c:4585 #, gcc-internal-format msgid "width of %qs exceeds its type" msgstr "" -#: c-decl.c:4003 +#: c-decl.c:4598 #, gcc-internal-format msgid "%qs is narrower than values of its type" msgstr "" -#: c-decl.c:4022 +#: c-decl.c:4617 #, gcc-internal-format msgid "ISO C90 forbids array %qE whose size can%'t be evaluated" msgstr "" -#: c-decl.c:4026 +#: c-decl.c:4621 #, gcc-internal-format msgid "ISO C90 forbids array whose size can%'t be evaluated" msgstr "" -#: c-decl.c:4033 +#: c-decl.c:4628 #, gcc-internal-format msgid "ISO C90 forbids variable length array %qE" msgstr "" -#: c-decl.c:4036 +#: c-decl.c:4631 #, gcc-internal-format msgid "ISO C90 forbids variable length array" msgstr "" -#: c-decl.c:4045 +#: c-decl.c:4640 #, gcc-internal-format msgid "the size of array %qE can%'t be evaluated" msgstr "" -#: c-decl.c:4049 +#: c-decl.c:4644 #, gcc-internal-format msgid "the size of array can %'t be evaluated" msgstr "" -#: c-decl.c:4055 +#: c-decl.c:4650 #, gcc-internal-format msgid "variable length array %qE is used" msgstr "" -#: c-decl.c:4059 cp/decl.c:7265 +#: c-decl.c:4654 cp/decl.c:7284 #, gcc-internal-format msgid "variable length array is used" msgstr "" -#: c-decl.c:4230 c-decl.c:4559 c-decl.c:4569 +#: c-decl.c:4831 c-decl.c:5167 c-decl.c:5177 #, gcc-internal-format msgid "variably modified %qE at file scope" msgstr "" -#: c-decl.c:4232 +#: c-decl.c:4833 #, gcc-internal-format msgid "variably modified field at file scope" msgstr "" -#: c-decl.c:4252 +#: c-decl.c:4853 #, gcc-internal-format msgid "type defaults to %<int%> in declaration of %qE" msgstr "" -#: c-decl.c:4256 +#: c-decl.c:4857 #, gcc-internal-format msgid "type defaults to %<int%> in type name" msgstr "" -#: c-decl.c:4285 +#: c-decl.c:4886 #, gcc-internal-format msgid "duplicate %<const%>" msgstr "" -#: c-decl.c:4287 +#: c-decl.c:4888 #, gcc-internal-format msgid "duplicate %<restrict%>" msgstr "" -#: c-decl.c:4289 +#: c-decl.c:4890 #, gcc-internal-format msgid "duplicate %<volatile%>" msgstr "" -#: c-decl.c:4309 +#: c-decl.c:4910 #, gcc-internal-format msgid "function definition declared %<auto%>" msgstr "" -#: c-decl.c:4311 +#: c-decl.c:4912 #, gcc-internal-format msgid "function definition declared %<register%>" msgstr "" -#: c-decl.c:4313 +#: c-decl.c:4914 #, gcc-internal-format msgid "function definition declared %<typedef%>" msgstr "" -#: c-decl.c:4315 +#: c-decl.c:4916 #, gcc-internal-format msgid "function definition declared %<__thread%>" msgstr "" -#: c-decl.c:4332 +#: c-decl.c:4933 #, gcc-internal-format msgid "storage class specified for structure field %qE" msgstr "" -#: c-decl.c:4335 +#: c-decl.c:4936 #, gcc-internal-format msgid "storage class specified for structure field" msgstr "" -#: c-decl.c:4339 +#: c-decl.c:4940 #, gcc-internal-format msgid "storage class specified for parameter %qE" msgstr "" -#: c-decl.c:4341 +#: c-decl.c:4943 #, gcc-internal-format msgid "storage class specified for unnamed parameter" msgstr "" -#: c-decl.c:4344 cp/decl.c:8165 +#: c-decl.c:4946 cp/decl.c:8204 #, gcc-internal-format msgid "storage class specified for typename" msgstr "" -#: c-decl.c:4361 +#: c-decl.c:4963 #, gcc-internal-format msgid "%qE initialized and declared %<extern%>" msgstr "" -#: c-decl.c:4364 +#: c-decl.c:4967 #, gcc-internal-format msgid "%qE has both %<extern%> and initializer" msgstr "" -#: c-decl.c:4369 +#: c-decl.c:4972 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<auto%>" msgstr "" -#: c-decl.c:4372 +#: c-decl.c:4976 #, gcc-internal-format msgid "file-scope declaration of %qE specifies %<register%>" msgstr "" -#: c-decl.c:4377 +#: c-decl.c:4981 #, gcc-internal-format msgid "nested function %qE declared %<extern%>" msgstr "" -#: c-decl.c:4380 +#: c-decl.c:4984 #, gcc-internal-format msgid "function-scope %qE implicitly auto and declared %<__thread%>" msgstr "" @@ -19436,528 +20355,544 @@ msgstr "" #. Only the innermost declarator (making a parameter be of #. array type which is converted to pointer type) #. may have static or type qualifiers. -#: c-decl.c:4427 c-decl.c:4743 +#: c-decl.c:5031 c-decl.c:5352 #, gcc-internal-format msgid "static or type qualifiers in non-parameter array declarator" msgstr "" -#: c-decl.c:4475 +#: c-decl.c:5079 #, gcc-internal-format msgid "declaration of %qE as array of voids" msgstr "" -#: c-decl.c:4477 +#: c-decl.c:5081 #, gcc-internal-format msgid "declaration of type name as array of voids" msgstr "" -#: c-decl.c:4484 +#: c-decl.c:5088 #, gcc-internal-format msgid "declaration of %qE as array of functions" msgstr "" -#: c-decl.c:4486 +#: c-decl.c:5091 #, gcc-internal-format msgid "declaration of type name as array of functions" msgstr "" -#: c-decl.c:4492 +#: c-decl.c:5098 c-decl.c:6736 #, gcc-internal-format msgid "invalid use of structure with flexible array member" msgstr "" -#: c-decl.c:4518 +#: c-decl.c:5124 #, gcc-internal-format msgid "size of array %qE has non-integer type" msgstr "" -#: c-decl.c:4520 +#: c-decl.c:5128 #, gcc-internal-format msgid "size of unnamed array has non-integer type" msgstr "" -#: c-decl.c:4530 +#: c-decl.c:5138 #, gcc-internal-format msgid "ISO C forbids zero-size array %qE" msgstr "" -#: c-decl.c:4533 +#: c-decl.c:5141 #, gcc-internal-format msgid "ISO C forbids zero-size array" msgstr "" -#: c-decl.c:4542 +#: c-decl.c:5150 #, gcc-internal-format msgid "size of array %qE is negative" msgstr "" -#: c-decl.c:4544 +#: c-decl.c:5152 #, gcc-internal-format msgid "size of unnamed array is negative" msgstr "" -#: c-decl.c:4620 c-decl.c:4913 +#: c-decl.c:5228 c-decl.c:5530 #, gcc-internal-format msgid "size of array %qE is too large" msgstr "" -#: c-decl.c:4622 c-decl.c:4915 +#: c-decl.c:5231 c-decl.c:5532 #, gcc-internal-format msgid "size of unnamed array is too large" msgstr "" -#: c-decl.c:4659 +#: c-decl.c:5268 #, gcc-internal-format msgid "ISO C90 does not support flexible array members" msgstr "" #. C99 6.7.5.2p4 -#: c-decl.c:4680 +#: c-decl.c:5289 #, gcc-internal-format msgid "%<[*]%> not in a declaration" msgstr "" -#: c-decl.c:4693 +#: c-decl.c:5302 #, gcc-internal-format msgid "array type has incomplete element type" msgstr "" -#: c-decl.c:4776 +#: c-decl.c:5385 #, gcc-internal-format msgid "%qE declared as function returning a function" msgstr "" -#: c-decl.c:4779 +#: c-decl.c:5388 #, gcc-internal-format msgid "type name declared as function returning a function" msgstr "" -#: c-decl.c:4786 +#: c-decl.c:5395 #, gcc-internal-format msgid "%qE declared as function returning an array" msgstr "" -#: c-decl.c:4788 +#: c-decl.c:5398 #, gcc-internal-format msgid "type name declared as function returning an array" msgstr "" -#: c-decl.c:4811 +#: c-decl.c:5428 #, gcc-internal-format msgid "function definition has qualified void return type" msgstr "" -#: c-decl.c:4814 cp/decl.c:8271 +#: c-decl.c:5431 cp/decl.c:8310 #, gcc-internal-format msgid "type qualifiers ignored on function return type" msgstr "" -#: c-decl.c:4844 c-decl.c:4929 c-decl.c:5019 c-decl.c:5112 +#: c-decl.c:5461 c-decl.c:5546 c-decl.c:5656 c-decl.c:5749 #, gcc-internal-format msgid "ISO C forbids qualified function types" msgstr "" -#: c-decl.c:4937 +#: c-decl.c:5554 #, gcc-internal-format msgid "typedef %q+D declared %<inline%>" msgstr "" -#: c-decl.c:4953 +#: c-decl.c:5590 #, gcc-internal-format msgid "ISO C forbids const or volatile function types" msgstr "" -#: c-decl.c:4964 +#. C99 6.7.2.1p8 +#: c-decl.c:5600 #, gcc-internal-format msgid "a member of a structure or union cannot have a variably modified type" msgstr "" -#: c-decl.c:4980 cp/decl.c:7481 +#: c-decl.c:5617 cp/decl.c:7500 #, gcc-internal-format msgid "variable or field %qE declared void" msgstr "" -#: c-decl.c:5011 +#: c-decl.c:5648 #, gcc-internal-format msgid "attributes in parameter array declarator ignored" msgstr "" -#: c-decl.c:5045 +#: c-decl.c:5682 #, gcc-internal-format msgid "parameter %q+D declared %<inline%>" msgstr "" -#: c-decl.c:5058 +#: c-decl.c:5695 #, gcc-internal-format msgid "field %qE declared as a function" msgstr "" -#: c-decl.c:5065 +#: c-decl.c:5702 #, gcc-internal-format msgid "field %qE has incomplete type" msgstr "" -#: c-decl.c:5067 +#: c-decl.c:5704 #, gcc-internal-format msgid "unnamed field has incomplete type" msgstr "" -#: c-decl.c:5084 c-decl.c:5095 c-decl.c:5098 +#: c-decl.c:5721 c-decl.c:5732 c-decl.c:5735 #, gcc-internal-format msgid "invalid storage class for function %qE" msgstr "" -#: c-decl.c:5118 +#: c-decl.c:5755 #, gcc-internal-format msgid "%<noreturn%> function returns non-void value" msgstr "" -#: c-decl.c:5154 +#: c-decl.c:5791 #, gcc-internal-format msgid "cannot inline function %<main%>" msgstr "" -#: c-decl.c:5183 +#: c-decl.c:5820 #, gcc-internal-format msgid "variable previously declared %<static%> redeclared %<extern%>" msgstr "" -#: c-decl.c:5193 +#: c-decl.c:5830 #, gcc-internal-format msgid "variable %q+D declared %<inline%>" msgstr "" -#: c-decl.c:5228 +#: c-decl.c:5865 #, gcc-internal-format msgid "non-nested function with variably modified type" msgstr "" -#: c-decl.c:5230 +#: c-decl.c:5867 #, gcc-internal-format msgid "object with variably modified type must have no linkage" msgstr "" -#: c-decl.c:5299 c-decl.c:6523 +#: c-decl.c:5950 c-decl.c:7366 #, gcc-internal-format msgid "function declaration isn%'t a prototype" msgstr "" -#: c-decl.c:5307 +#: c-decl.c:5958 #, gcc-internal-format msgid "parameter names (without types) in function declaration" msgstr "" -#: c-decl.c:5340 +#: c-decl.c:5993 #, gcc-internal-format msgid "parameter %u (%q+D) has incomplete type" msgstr "" -#: c-decl.c:5343 +#: c-decl.c:5997 #, gcc-internal-format -msgid "%Jparameter %u has incomplete type" +msgid "parameter %u has incomplete type" msgstr "" -#: c-decl.c:5352 +#: c-decl.c:6007 #, gcc-internal-format msgid "parameter %u (%q+D) has void type" msgstr "" -#: c-decl.c:5355 +#: c-decl.c:6011 #, gcc-internal-format -msgid "%Jparameter %u has void type" +msgid "parameter %u has void type" msgstr "" -#: c-decl.c:5417 +#: c-decl.c:6081 #, gcc-internal-format msgid "%<void%> as only parameter may not be qualified" msgstr "" -#: c-decl.c:5421 c-decl.c:5455 +#: c-decl.c:6085 c-decl.c:6119 #, gcc-internal-format msgid "%<void%> must be the only parameter" msgstr "" -#: c-decl.c:5449 +#: c-decl.c:6113 #, gcc-internal-format msgid "parameter %q+D has just a forward declaration" msgstr "" #. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:5494 +#: c-decl.c:6158 #, gcc-internal-format msgid "%<%s %E%> declared inside parameter list" msgstr "" #. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:5498 +#: c-decl.c:6162 #, gcc-internal-format msgid "anonymous %s declared inside parameter list" msgstr "" -#: c-decl.c:5503 +#: c-decl.c:6167 #, gcc-internal-format msgid "" "its scope is only this definition or declaration, which is probably not what " "you want" msgstr "" -#: c-decl.c:5642 +#: c-decl.c:6260 +#, gcc-internal-format +msgid "enum type defined here" +msgstr "" + +#: c-decl.c:6266 +#, gcc-internal-format +msgid "struct defined here" +msgstr "" + +#: c-decl.c:6272 +#, gcc-internal-format +msgid "union defined here" +msgstr "" + +#: c-decl.c:6345 #, gcc-internal-format msgid "redefinition of %<union %E%>" msgstr "" -#: c-decl.c:5644 +#: c-decl.c:6347 #, gcc-internal-format msgid "redefinition of %<struct %E%>" msgstr "" -#: c-decl.c:5651 +#: c-decl.c:6356 #, gcc-internal-format msgid "nested redefinition of %<union %E%>" msgstr "" -#: c-decl.c:5653 +#: c-decl.c:6358 #, gcc-internal-format msgid "nested redefinition of %<struct %E%>" msgstr "" -#: c-decl.c:5731 cp/decl.c:3839 +#: c-decl.c:6390 c-decl.c:6968 +#, gcc-internal-format +msgid "defining type in %qs expression is invalid in C++" +msgstr "" + +#: c-decl.c:6457 cp/decl.c:3885 #, gcc-internal-format msgid "declaration does not declare anything" msgstr "" -#: c-decl.c:5734 +#: c-decl.c:6460 #, gcc-internal-format msgid "ISO C doesn%'t support unnamed structs/unions" msgstr "" -#: c-decl.c:5778 c-decl.c:5794 +#: c-decl.c:6523 c-decl.c:6539 #, gcc-internal-format msgid "duplicate member %q+D" msgstr "" -#: c-decl.c:5833 +#: c-decl.c:6642 #, gcc-internal-format msgid "union has no named members" msgstr "" -#: c-decl.c:5835 +#: c-decl.c:6644 #, gcc-internal-format msgid "union has no members" msgstr "" -#: c-decl.c:5840 +#: c-decl.c:6649 #, gcc-internal-format msgid "struct has no named members" msgstr "" -#: c-decl.c:5842 +#: c-decl.c:6651 #, gcc-internal-format msgid "struct has no members" msgstr "" -#: c-decl.c:5906 -#, gcc-internal-format -msgid "%Jflexible array member in union" -msgstr "" - -#: c-decl.c:5911 +#: c-decl.c:6716 #, gcc-internal-format -msgid "%Jflexible array member not at end of struct" +msgid "flexible array member in union" msgstr "" -#: c-decl.c:5916 +#: c-decl.c:6722 #, gcc-internal-format -msgid "%Jflexible array member in otherwise empty struct" +msgid "flexible array member not at end of struct" msgstr "" -#: c-decl.c:5924 +#: c-decl.c:6728 #, gcc-internal-format -msgid "%Jinvalid use of structure with flexible array member" +msgid "flexible array member in otherwise empty struct" msgstr "" -#: c-decl.c:6033 +#: c-decl.c:6845 #, gcc-internal-format msgid "union cannot be made transparent" msgstr "" -#: c-decl.c:6104 +#: c-decl.c:6941 #, gcc-internal-format msgid "nested redefinition of %<enum %E%>" msgstr "" #. This enum is a named one that has been declared already. -#: c-decl.c:6111 +#: c-decl.c:6948 #, gcc-internal-format msgid "redeclaration of %<enum %E%>" msgstr "" -#: c-decl.c:6174 +#: c-decl.c:7023 #, gcc-internal-format msgid "enumeration values exceed range of largest integer" msgstr "" -#: c-decl.c:6191 +#: c-decl.c:7040 #, gcc-internal-format msgid "specified mode too small for enumeral values" msgstr "" -#: c-decl.c:6287 c-decl.c:6302 +#: c-decl.c:7144 c-decl.c:7160 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant" msgstr "" -#: c-decl.c:6297 +#: c-decl.c:7155 #, gcc-internal-format msgid "enumerator value for %qE is not an integer constant expression" msgstr "" -#: c-decl.c:6321 +#: c-decl.c:7179 #, gcc-internal-format msgid "overflow in enumeration values" msgstr "" -#: c-decl.c:6329 +#: c-decl.c:7187 #, gcc-internal-format msgid "ISO C restricts enumerator values to range of %<int%>" msgstr "" -#: c-decl.c:6447 +#: c-decl.c:7272 +#, gcc-internal-format +msgid "inline function %qD given attribute noinline" +msgstr "" + +#: c-decl.c:7290 #, gcc-internal-format msgid "return type is an incomplete type" msgstr "" -#: c-decl.c:6457 +#: c-decl.c:7300 #, gcc-internal-format msgid "return type defaults to %<int%>" msgstr "" -#: c-decl.c:6530 +#: c-decl.c:7374 #, gcc-internal-format -msgid "no previous prototype for %q+D" +msgid "no previous prototype for %qD" msgstr "" -#: c-decl.c:6539 +#: c-decl.c:7383 #, gcc-internal-format -msgid "%q+D was used with no prototype before its definition" +msgid "%qD was used with no prototype before its definition" msgstr "" -#: c-decl.c:6545 cp/decl.c:11634 +#: c-decl.c:7390 #, gcc-internal-format -msgid "no previous declaration for %q+D" +msgid "no previous declaration for %qD" msgstr "" -#: c-decl.c:6555 +#: c-decl.c:7400 #, gcc-internal-format -msgid "%q+D was used with no declaration before its definition" +msgid "%qD was used with no declaration before its definition" msgstr "" -#: c-decl.c:6578 +#: c-decl.c:7423 #, gcc-internal-format -msgid "return type of %q+D is not %<int%>" +msgid "return type of %qD is not %<int%>" msgstr "" -#: c-decl.c:6583 +#: c-decl.c:7429 #, gcc-internal-format -msgid "%q+D is normally a non-static function" +msgid "%qD is normally a non-static function" msgstr "" -#: c-decl.c:6617 +#: c-decl.c:7464 #, gcc-internal-format -msgid "%Jold-style parameter declarations in prototyped function definition" +msgid "old-style parameter declarations in prototyped function definition" msgstr "" -#: c-decl.c:6631 +#: c-decl.c:7478 #, gcc-internal-format -msgid "%Jtraditional C rejects ISO C style function definitions" +msgid "traditional C rejects ISO C style function definitions" msgstr "" -#: c-decl.c:6648 +#: c-decl.c:7494 #, gcc-internal-format -msgid "%Jparameter name omitted" +msgid "parameter name omitted" msgstr "" -#: c-decl.c:6682 +#: c-decl.c:7529 #, gcc-internal-format -msgid "%Jold-style function definition" +msgid "old-style function definition" msgstr "" -#: c-decl.c:6691 +#: c-decl.c:7538 #, gcc-internal-format -msgid "%Jparameter name missing from parameter list" +msgid "parameter name missing from parameter list" msgstr "" -#: c-decl.c:6702 +#: c-decl.c:7550 #, gcc-internal-format -msgid "%q+D declared as a non-parameter" +msgid "%qD declared as a non-parameter" msgstr "" -#: c-decl.c:6707 +#: c-decl.c:7556 #, gcc-internal-format -msgid "multiple parameters named %q+D" +msgid "multiple parameters named %qD" msgstr "" -#: c-decl.c:6715 +#: c-decl.c:7565 #, gcc-internal-format -msgid "parameter %q+D declared with void type" +msgid "parameter %qD declared with void type" msgstr "" -#: c-decl.c:6732 c-decl.c:6734 +#: c-decl.c:7594 c-decl.c:7598 #, gcc-internal-format -msgid "type of %q+D defaults to %<int%>" +msgid "type of %qD defaults to %<int%>" msgstr "" -#: c-decl.c:6753 +#: c-decl.c:7618 #, gcc-internal-format -msgid "parameter %q+D has incomplete type" +msgid "parameter %qD has incomplete type" msgstr "" -#: c-decl.c:6759 +#: c-decl.c:7625 #, gcc-internal-format -msgid "declaration for parameter %q+D but no such parameter" +msgid "declaration for parameter %qD but no such parameter" msgstr "" -#: c-decl.c:6809 +#: c-decl.c:7677 #, gcc-internal-format msgid "number of arguments doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:6813 +#: c-decl.c:7688 #, gcc-internal-format msgid "number of arguments doesn%'t match prototype" msgstr "" -#: c-decl.c:6814 c-decl.c:6866 +#: c-decl.c:7691 c-decl.c:7733 c-decl.c:7747 #, gcc-internal-format -msgid "%Hprototype declaration" +msgid "prototype declaration" msgstr "" -#: c-decl.c:6848 +#: c-decl.c:7725 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:6852 +#: c-decl.c:7730 #, gcc-internal-format msgid "promoted argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:6855 -#, gcc-internal-format -msgid "prototype declaration" -msgstr "" - -#: c-decl.c:6861 +#: c-decl.c:7740 #, gcc-internal-format msgid "argument %qD doesn%'t match built-in prototype" msgstr "" -#: c-decl.c:6865 +#: c-decl.c:7745 #, gcc-internal-format msgid "argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:7074 cp/decl.c:12338 +#: c-decl.c:7929 cp/decl.c:12448 #, gcc-internal-format msgid "no return statement in function returning non-void" msgstr "" @@ -19965,443 +20900,158 @@ msgstr "" #. If we get here, declarations have been used in a for loop without #. the C99 for loop scope. This doesn't make much sense, so don't #. allow it. -#: c-decl.c:7147 +#: c-decl.c:8001 #, gcc-internal-format msgid "%<for%> loop initial declarations are only allowed in C99 mode" msgstr "" -#: c-decl.c:7151 +#: c-decl.c:8006 #, gcc-internal-format msgid "use option -std=c99 or -std=gnu99 to compile your code" msgstr "" -#: c-decl.c:7182 +#: c-decl.c:8040 #, gcc-internal-format -msgid "declaration of static variable %q+D in %<for%> loop initial declaration" +msgid "declaration of static variable %qD in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:7185 +#: c-decl.c:8044 #, gcc-internal-format msgid "" -"declaration of %<extern%> variable %q+D in %<for%> loop initial declaration" +"declaration of %<extern%> variable %qD in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:7190 +#: c-decl.c:8051 #, gcc-internal-format msgid "%<struct %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:7194 +#: c-decl.c:8056 #, gcc-internal-format msgid "%<union %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:7198 +#: c-decl.c:8060 #, gcc-internal-format msgid "%<enum %E%> declared in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:7202 +#: c-decl.c:8064 #, gcc-internal-format -msgid "declaration of non-variable %q+D in %<for%> loop initial declaration" +msgid "declaration of non-variable %qD in %<for%> loop initial declaration" msgstr "" -#: c-decl.c:7487 c-decl.c:7729 c-decl.c:8036 +#: c-decl.c:8334 c-decl.c:8631 c-decl.c:8997 #, gcc-internal-format msgid "duplicate %qE" msgstr "" -#: c-decl.c:7512 c-decl.c:7739 c-decl.c:7926 +#: c-decl.c:8360 c-decl.c:8642 c-decl.c:8874 #, gcc-internal-format msgid "two or more data types in declaration specifiers" msgstr "" -#: c-decl.c:7524 +#: c-decl.c:8372 cp/parser.c:2183 #, gcc-internal-format msgid "%<long long long%> is too long for GCC" msgstr "" -#: c-decl.c:7531 c-decl.c:7829 -#, gcc-internal-format -msgid "both %<long long%> and %<double%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7536 +#: c-decl.c:8385 #, gcc-internal-format msgid "ISO C90 does not support %<long long%>" msgstr "" -#: c-decl.c:7541 c-decl.c:7570 -#, gcc-internal-format -msgid "both %<long%> and %<short%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7544 c-decl.c:7746 -#, gcc-internal-format -msgid "both %<long%> and %<void%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7547 c-decl.c:7768 -#, gcc-internal-format -msgid "both %<long%> and %<_Bool%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7550 c-decl.c:7790 -#, gcc-internal-format -msgid "both %<long%> and %<char%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7553 c-decl.c:7810 -#, gcc-internal-format -msgid "both %<long%> and %<float%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7556 -#, gcc-internal-format -msgid "both %<long%> and %<_Decimal32%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7559 -#, gcc-internal-format -msgid "both %<long%> and %<_Decimal64%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7562 -#, gcc-internal-format -msgid "both %<long%> and %<_Decimal128%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7573 c-decl.c:7749 -#, gcc-internal-format -msgid "both %<short%> and %<void%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7576 c-decl.c:7771 -#, gcc-internal-format -msgid "both %<short%> and %<_Bool%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7579 c-decl.c:7793 -#, gcc-internal-format -msgid "both %<short%> and %<char%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7582 c-decl.c:7813 -#, gcc-internal-format -msgid "both %<short%> and %<float%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7585 c-decl.c:7832 -#, gcc-internal-format -msgid "both %<short%> and %<double%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7588 -#, gcc-internal-format -msgid "both %<short%> and %<_Decimal32%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7591 -#, gcc-internal-format -msgid "both %<short%> and %<_Decimal64%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7594 -#, gcc-internal-format -msgid "both %<short%> and %<_Decimal128%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7602 c-decl.c:7631 -#, gcc-internal-format -msgid "both %<signed%> and %<unsigned%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7605 c-decl.c:7752 -#, gcc-internal-format -msgid "both %<signed%> and %<void%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7608 c-decl.c:7774 -#, gcc-internal-format -msgid "both %<signed%> and %<_Bool%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7611 c-decl.c:7816 -#, gcc-internal-format -msgid "both %<signed%> and %<float%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7614 c-decl.c:7835 -#, gcc-internal-format -msgid "both %<signed%> and %<double%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7617 -#, gcc-internal-format -msgid "both %<signed%> and %<_Decimal32%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7620 -#, gcc-internal-format -msgid "both %<signed%> and %<_Decimal64%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7623 -#, gcc-internal-format -msgid "both %<signed%> and %<_Decimal128%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7634 c-decl.c:7755 -#, gcc-internal-format -msgid "both %<unsigned%> and %<void%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7637 c-decl.c:7777 -#, gcc-internal-format -msgid "both %<unsigned%> and %<_Bool%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7640 c-decl.c:7819 -#, gcc-internal-format -msgid "both %<unsigned%> and %<float%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7643 c-decl.c:7838 -#, gcc-internal-format -msgid "both %<unsigned%> and %<double%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7646 -#, gcc-internal-format -msgid "both %<unsigned%> and %<_Decimal32%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7649 -#, gcc-internal-format -msgid "both %<unsigned%> and %<_Decimal64%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7652 -#, gcc-internal-format -msgid "both %<unsigned%> and %<_Decimal128%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7660 +#: c-decl.c:8543 #, gcc-internal-format msgid "ISO C90 does not support complex types" msgstr "" -#: c-decl.c:7662 c-decl.c:7758 -#, gcc-internal-format -msgid "both %<complex%> and %<void%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7665 c-decl.c:7780 -#, gcc-internal-format -msgid "both %<complex%> and %<_Bool%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7668 -#, gcc-internal-format -msgid "both %<complex%> and %<_Decimal32%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7671 -#, gcc-internal-format -msgid "both %<complex%> and %<_Decimal64%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7674 -#, gcc-internal-format -msgid "both %<complex%> and %<_Decimal128%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7677 -#, gcc-internal-format -msgid "both %<complex%> and %<_Fract%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7680 -#, gcc-internal-format -msgid "both %<complex%> and %<_Accum%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7683 -#, gcc-internal-format -msgid "both %<complex%> and %<_Sat%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7690 +#: c-decl.c:8582 #, gcc-internal-format msgid "ISO C does not support saturating types" msgstr "" -#: c-decl.c:7692 c-decl.c:7761 -#, gcc-internal-format -msgid "both %<_Sat%> and %<void%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7695 c-decl.c:7783 -#, gcc-internal-format -msgid "both %<_Sat%> and %<_Bool%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7698 c-decl.c:7796 -#, gcc-internal-format -msgid "both %<_Sat%> and %<char%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7701 c-decl.c:7803 -#, gcc-internal-format -msgid "both %<_Sat%> and %<int%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7704 c-decl.c:7822 -#, gcc-internal-format -msgid "both %<_Sat%> and %<float%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7707 c-decl.c:7841 -#, gcc-internal-format -msgid "both %<_Sat%> and %<double%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7710 -#, gcc-internal-format -msgid "both %<_Sat%> and %<_Decimal32%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7713 -#, gcc-internal-format -msgid "both %<_Sat%> and %<_Decimal64%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7716 -#, gcc-internal-format -msgid "both %<_Sat%> and %<_Decimal128%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7719 -#, gcc-internal-format -msgid "both %<_Sat%> and %<complex%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7858 -#, gcc-internal-format -msgid "both %<long long%> and %<%s%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7861 -#, gcc-internal-format -msgid "both %<long%> and %<%s%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7864 -#, gcc-internal-format -msgid "both %<short%> and %<%s%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7867 -#, gcc-internal-format -msgid "both %<signed%> and %<%s%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7870 -#, gcc-internal-format -msgid "both %<unsigned%> and %<%s%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7873 c-decl.c:7899 -#, gcc-internal-format -msgid "both %<complex%> and %<%s%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7876 -#, gcc-internal-format -msgid "both %<_Sat%> and %<%s%> in declaration specifiers" -msgstr "" - -#: c-decl.c:7886 -#, gcc-internal-format -msgid "decimal floating point not supported for this target" -msgstr "" - -#: c-decl.c:7888 +#: c-decl.c:8833 #, gcc-internal-format msgid "ISO C does not support decimal floating point" msgstr "" -#: c-decl.c:7907 c-decl.c:8097 c-parser.c:5189 +#: c-decl.c:8855 c-decl.c:9058 c-parser.c:5337 #, gcc-internal-format msgid "fixed-point types not supported for this target" msgstr "" -#: c-decl.c:7909 +#: c-decl.c:8857 #, gcc-internal-format msgid "ISO C does not support fixed-point types" msgstr "" -#: c-decl.c:7943 +#: c-decl.c:8891 +#, gcc-internal-format +msgid "C++ lookup of %qD would return a field, not a type" +msgstr "" + +#: c-decl.c:8904 #, gcc-internal-format msgid "%qE fails to be a typedef or built in type" msgstr "" -#: c-decl.c:7987 +#: c-decl.c:8948 #, gcc-internal-format msgid "%qE is not at beginning of declaration" msgstr "" -#: c-decl.c:8001 +#: c-decl.c:8962 #, gcc-internal-format msgid "%<__thread%> used with %<auto%>" msgstr "" -#: c-decl.c:8003 +#: c-decl.c:8964 #, gcc-internal-format msgid "%<__thread%> used with %<register%>" msgstr "" -#: c-decl.c:8005 +#: c-decl.c:8966 #, gcc-internal-format msgid "%<__thread%> used with %<typedef%>" msgstr "" -#: c-decl.c:8016 +#: c-decl.c:8977 #, gcc-internal-format msgid "%<__thread%> before %<extern%>" msgstr "" -#: c-decl.c:8025 +#: c-decl.c:8986 #, gcc-internal-format msgid "%<__thread%> before %<static%>" msgstr "" -#: c-decl.c:8041 +#: c-decl.c:9002 #, gcc-internal-format msgid "multiple storage classes in declaration specifiers" msgstr "" -#: c-decl.c:8048 +#: c-decl.c:9009 #, gcc-internal-format msgid "%<__thread%> used with %qE" msgstr "" -#: c-decl.c:8095 +#: c-decl.c:9056 #, gcc-internal-format msgid "%<_Sat%> is used without %<_Fract%> or %<_Accum%>" msgstr "" -#: c-decl.c:8109 +#: c-decl.c:9070 #, gcc-internal-format msgid "ISO C does not support plain %<complex%> meaning %<double complex%>" msgstr "" -#: c-decl.c:8154 c-decl.c:8180 +#: c-decl.c:9115 c-decl.c:9141 #, gcc-internal-format msgid "ISO C does not support complex integer types" msgstr "" -#: c-decl.c:8334 toplev.c:847 +#: c-decl.c:9295 toplev.c:862 #, gcc-internal-format msgid "%q+F used but never defined" msgstr "" @@ -20441,293 +21091,293 @@ msgstr "" msgid "format string argument follows the args to be formatted" msgstr "" -#: c-format.c:933 +#: c-format.c:923 #, gcc-internal-format msgid "function might be possible candidate for %qs format attribute" msgstr "" -#: c-format.c:1025 c-format.c:1046 c-format.c:2065 +#: c-format.c:1015 c-format.c:1036 c-format.c:2060 #, gcc-internal-format msgid "missing $ operand number in format" msgstr "" -#: c-format.c:1055 +#: c-format.c:1045 #, gcc-internal-format msgid "%s does not support %%n$ operand number formats" msgstr "" -#: c-format.c:1062 +#: c-format.c:1052 #, gcc-internal-format msgid "operand number out of range in format" msgstr "" -#: c-format.c:1085 +#: c-format.c:1075 #, gcc-internal-format msgid "format argument %d used more than once in %s format" msgstr "" -#: c-format.c:1117 +#: c-format.c:1107 #, gcc-internal-format msgid "$ operand number used after format without operand number" msgstr "" -#: c-format.c:1148 +#: c-format.c:1138 #, gcc-internal-format msgid "format argument %d unused before used argument %d in $-style format" msgstr "" -#: c-format.c:1243 +#: c-format.c:1233 #, gcc-internal-format msgid "format not a string literal, format string not checked" msgstr "" -#: c-format.c:1258 c-format.c:1261 +#: c-format.c:1248 c-format.c:1251 #, gcc-internal-format msgid "format not a string literal and no format arguments" msgstr "" -#: c-format.c:1264 +#: c-format.c:1254 #, gcc-internal-format msgid "format not a string literal, argument types not checked" msgstr "" -#: c-format.c:1277 +#: c-format.c:1267 #, gcc-internal-format msgid "too many arguments for format" msgstr "" -#: c-format.c:1280 +#: c-format.c:1270 #, gcc-internal-format msgid "unused arguments in $-style format" msgstr "" -#: c-format.c:1283 +#: c-format.c:1273 #, gcc-internal-format msgid "zero-length %s format string" msgstr "" -#: c-format.c:1287 +#: c-format.c:1277 #, gcc-internal-format msgid "format is a wide character string" msgstr "" -#: c-format.c:1290 +#: c-format.c:1280 #, gcc-internal-format msgid "unterminated format string" msgstr "" -#: c-format.c:1498 +#: c-format.c:1489 #, gcc-internal-format msgid "embedded %<\\0%> in format" msgstr "" -#: c-format.c:1513 +#: c-format.c:1504 #, gcc-internal-format msgid "spurious trailing %<%%%> in format" msgstr "" -#: c-format.c:1557 c-format.c:1828 +#: c-format.c:1548 c-format.c:1823 #, gcc-internal-format msgid "repeated %s in format" msgstr "" -#: c-format.c:1570 +#: c-format.c:1561 #, gcc-internal-format msgid "missing fill character at end of strfmon format" msgstr "" -#: c-format.c:1614 c-format.c:1716 c-format.c:2012 c-format.c:2077 +#: c-format.c:1605 c-format.c:1708 c-format.c:2007 c-format.c:2072 #, gcc-internal-format msgid "too few arguments for format" msgstr "" -#: c-format.c:1655 +#: c-format.c:1647 #, gcc-internal-format msgid "zero width in %s format" msgstr "" -#: c-format.c:1673 +#: c-format.c:1665 #, gcc-internal-format msgid "empty left precision in %s format" msgstr "" -#: c-format.c:1746 +#: c-format.c:1739 #, gcc-internal-format msgid "empty precision in %s format" msgstr "" -#: c-format.c:1812 +#: c-format.c:1807 #, gcc-internal-format msgid "%s does not support the %qs %s length modifier" msgstr "" -#: c-format.c:1845 +#: c-format.c:1840 #, gcc-internal-format msgid "conversion lacks type at end of format" msgstr "" -#: c-format.c:1856 +#: c-format.c:1851 #, gcc-internal-format msgid "unknown conversion type character %qc in format" msgstr "" -#: c-format.c:1859 +#: c-format.c:1854 #, gcc-internal-format msgid "unknown conversion type character 0x%x in format" msgstr "" -#: c-format.c:1866 +#: c-format.c:1861 #, gcc-internal-format msgid "%s does not support the %<%%%c%> %s format" msgstr "" -#: c-format.c:1882 +#: c-format.c:1877 #, gcc-internal-format msgid "%s used with %<%%%c%> %s format" msgstr "" -#: c-format.c:1891 +#: c-format.c:1886 #, gcc-internal-format msgid "%s does not support %s" msgstr "" -#: c-format.c:1901 +#: c-format.c:1896 #, gcc-internal-format msgid "%s does not support %s with the %<%%%c%> %s format" msgstr "" -#: c-format.c:1937 +#: c-format.c:1932 #, gcc-internal-format msgid "%s ignored with %s and %<%%%c%> %s format" msgstr "" -#: c-format.c:1941 +#: c-format.c:1936 #, gcc-internal-format msgid "%s ignored with %s in %s format" msgstr "" -#: c-format.c:1948 +#: c-format.c:1943 #, gcc-internal-format msgid "use of %s and %s together with %<%%%c%> %s format" msgstr "" -#: c-format.c:1952 +#: c-format.c:1947 #, gcc-internal-format msgid "use of %s and %s together in %s format" msgstr "" -#: c-format.c:1971 +#: c-format.c:1966 #, gcc-internal-format msgid "%<%%%c%> yields only last 2 digits of year in some locales" msgstr "" -#: c-format.c:1974 +#: c-format.c:1969 #, gcc-internal-format msgid "%<%%%c%> yields only last 2 digits of year" msgstr "" #. The end of the format string was reached. -#: c-format.c:1991 +#: c-format.c:1986 #, gcc-internal-format msgid "no closing %<]%> for %<%%[%> format" msgstr "" -#: c-format.c:2005 +#: c-format.c:2000 #, gcc-internal-format msgid "use of %qs length modifier with %qc type character" msgstr "" -#: c-format.c:2027 +#: c-format.c:2022 #, gcc-internal-format msgid "%s does not support the %<%%%s%c%> %s format" msgstr "" -#: c-format.c:2044 +#: c-format.c:2039 #, gcc-internal-format msgid "operand number specified with suppressed assignment" msgstr "" -#: c-format.c:2047 +#: c-format.c:2042 #, gcc-internal-format msgid "operand number specified for format taking no argument" msgstr "" -#: c-format.c:2180 +#: c-format.c:2178 #, gcc-internal-format msgid "writing through null pointer (argument %d)" msgstr "" -#: c-format.c:2188 +#: c-format.c:2186 #, gcc-internal-format msgid "reading through null pointer (argument %d)" msgstr "" -#: c-format.c:2208 +#: c-format.c:2206 #, gcc-internal-format msgid "writing into constant object (argument %d)" msgstr "" -#: c-format.c:2219 +#: c-format.c:2217 #, gcc-internal-format msgid "extra type qualifiers in format argument (argument %d)" msgstr "" -#: c-format.c:2330 +#: c-format.c:2334 #, gcc-internal-format msgid "%s should have type %<%s%s%>, but argument %d has type %qT" msgstr "" -#: c-format.c:2334 +#: c-format.c:2338 #, gcc-internal-format msgid "format %q.*s expects type %<%s%s%>, but argument %d has type %qT" msgstr "" -#: c-format.c:2342 +#: c-format.c:2346 #, gcc-internal-format msgid "%s should have type %<%T%s%>, but argument %d has type %qT" msgstr "" -#: c-format.c:2346 +#: c-format.c:2350 #, gcc-internal-format msgid "format %q.*s expects type %<%T%s%>, but argument %d has type %qT" msgstr "" -#: c-format.c:2405 c-format.c:2411 c-format.c:2562 +#: c-format.c:2409 c-format.c:2415 c-format.c:2566 #, gcc-internal-format msgid "%<__gcc_host_wide_int__%> is not defined as a type" msgstr "" -#: c-format.c:2418 c-format.c:2572 +#: c-format.c:2422 c-format.c:2576 #, gcc-internal-format msgid "%<__gcc_host_wide_int__%> is not defined as %<long%> or %<long long%>" msgstr "" -#: c-format.c:2468 +#: c-format.c:2472 #, gcc-internal-format msgid "%<locus%> is not defined as a type" msgstr "" -#: c-format.c:2521 +#: c-format.c:2525 #, gcc-internal-format msgid "%<location_t%> is not defined as a type" msgstr "" -#: c-format.c:2538 +#: c-format.c:2542 #, gcc-internal-format msgid "%<tree%> is not defined as a type" msgstr "" -#: c-format.c:2543 +#: c-format.c:2547 #, gcc-internal-format msgid "%<tree%> is not defined as a pointer type" msgstr "" -#: c-format.c:2850 +#: c-format.c:2818 #, gcc-internal-format msgid "args to be formatted is not %<...%>" msgstr "" -#: c-format.c:2862 +#: c-format.c:2830 #, gcc-internal-format msgid "strftime formats cannot format arguments" msgstr "" @@ -20739,13 +21389,13 @@ msgstr "" #: c-lex.c:267 #, gcc-internal-format -msgid "%Hignoring #pragma %s %s" +msgid "ignoring #pragma %s %s" msgstr "" #. ... or not. #: c-lex.c:382 #, gcc-internal-format -msgid "%Hstray %<@%> in program" +msgid "stray %<@%> in program" msgstr "" #: c-lex.c:397 @@ -20803,7 +21453,7 @@ msgstr "" msgid "floating constant truncated to zero" msgstr "" -#: c-lex.c:929 +#: c-lex.c:929 cp/parser.c:2978 #, gcc-internal-format msgid "unsupported non-standard concatenation of string literals" msgstr "" @@ -20813,37 +21463,37 @@ msgstr "" msgid "traditional C rejects string constant concatenation" msgstr "" -#: c-omp.c:119 +#: c-omp.c:126 #, gcc-internal-format msgid "invalid expression type for %<#pragma omp atomic%>" msgstr "" -#: c-omp.c:245 +#: c-omp.c:260 cp/semantics.c:4408 #, gcc-internal-format msgid "invalid type for iteration variable %qE" msgstr "" -#: c-omp.c:258 +#: c-omp.c:273 #, gcc-internal-format msgid "%qE is not initialized" msgstr "" -#: c-omp.c:271 +#: c-omp.c:290 cp/semantics.c:4323 #, gcc-internal-format msgid "missing controlling predicate" msgstr "" -#: c-omp.c:349 +#: c-omp.c:368 cp/semantics.c:4080 #, gcc-internal-format msgid "invalid controlling predicate" msgstr "" -#: c-omp.c:356 +#: c-omp.c:375 cp/semantics.c:4329 #, gcc-internal-format msgid "missing increment expression" msgstr "" -#: c-omp.c:423 +#: c-omp.c:444 cp/semantics.c:4185 #, gcc-internal-format msgid "invalid increment expression" msgstr "" @@ -20878,168 +21528,178 @@ msgstr "" msgid "missing makefile target after %qs" msgstr "" -#: c-opts.c:325 +#: c-opts.c:326 #, gcc-internal-format msgid "-I- specified twice" msgstr "" -#: c-opts.c:328 +#: c-opts.c:329 #, gcc-internal-format msgid "obsolete option -I- used, please use -iquote instead" msgstr "" -#: c-opts.c:506 +#: c-opts.c:513 #, gcc-internal-format msgid "argument %qs to %<-Wnormalized%> not recognized" msgstr "" -#: c-opts.c:589 +#: c-opts.c:596 #, gcc-internal-format msgid "switch %qs is no longer supported" msgstr "" -#: c-opts.c:696 +#: c-opts.c:703 #, gcc-internal-format msgid "" "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)" msgstr "" -#: c-opts.c:1035 +#: c-opts.c:1050 collect2.c:1495 fortran/options.c:258 +#, gcc-internal-format +msgid "LTO support has not been enabled in this configuration" +msgstr "" + +#: c-opts.c:1057 fortran/options.c:265 +#, gcc-internal-format +msgid "-flto and -fwhopr are mutually exclusive" +msgstr "" + +#: c-opts.c:1065 #, gcc-internal-format msgid "-fexcess-precision=standard for C++" msgstr "" -#: c-opts.c:1048 +#: c-opts.c:1078 #, gcc-internal-format msgid "-fno-gnu89-inline is only supported in GNU99 or C99 mode" msgstr "" -#: c-opts.c:1127 +#: c-opts.c:1157 #, gcc-internal-format msgid "-Wformat-y2k ignored without -Wformat" msgstr "" -#: c-opts.c:1129 +#: c-opts.c:1159 #, gcc-internal-format msgid "-Wformat-extra-args ignored without -Wformat" msgstr "" -#: c-opts.c:1131 +#: c-opts.c:1161 #, gcc-internal-format msgid "-Wformat-zero-length ignored without -Wformat" msgstr "" -#: c-opts.c:1133 +#: c-opts.c:1163 #, gcc-internal-format msgid "-Wformat-nonliteral ignored without -Wformat" msgstr "" -#: c-opts.c:1135 +#: c-opts.c:1165 #, gcc-internal-format msgid "-Wformat-contains-nul ignored without -Wformat" msgstr "" -#: c-opts.c:1137 +#: c-opts.c:1167 #, gcc-internal-format msgid "-Wformat-security ignored without -Wformat" msgstr "" -#: c-opts.c:1161 +#: c-opts.c:1191 #, gcc-internal-format msgid "opening output file %s: %m" msgstr "" -#: c-opts.c:1166 +#: c-opts.c:1196 #, gcc-internal-format msgid "too many filenames given. Type %s --help for usage" msgstr "" -#: c-opts.c:1246 +#: c-opts.c:1276 #, gcc-internal-format msgid "The C parser does not support -dy, option ignored" msgstr "" -#: c-opts.c:1250 +#: c-opts.c:1280 #, gcc-internal-format msgid "The Objective-C parser does not support -dy, option ignored" msgstr "" -#: c-opts.c:1253 +#: c-opts.c:1283 #, gcc-internal-format msgid "The C++ parser does not support -dy, option ignored" msgstr "" -#: c-opts.c:1257 +#: c-opts.c:1287 #, gcc-internal-format msgid "The Objective-C++ parser does not support -dy, option ignored" msgstr "" -#: c-opts.c:1308 +#: c-opts.c:1338 #, gcc-internal-format msgid "opening dependency file %s: %m" msgstr "" -#: c-opts.c:1318 +#: c-opts.c:1348 #, gcc-internal-format msgid "closing dependency file %s: %m" msgstr "" -#: c-opts.c:1321 +#: c-opts.c:1351 #, gcc-internal-format msgid "when writing output to %s: %m" msgstr "" -#: c-opts.c:1401 +#: c-opts.c:1431 #, gcc-internal-format msgid "to generate dependencies you must specify either -M or -MM" msgstr "" -#: c-opts.c:1424 +#: c-opts.c:1454 #, gcc-internal-format msgid "-MG may only be used with -M or -MM" msgstr "" -#: c-opts.c:1454 +#: c-opts.c:1484 #, gcc-internal-format msgid "-fdirectives-only is incompatible with -Wunused_macros" msgstr "" -#: c-opts.c:1456 +#: c-opts.c:1486 #, gcc-internal-format msgid "-fdirectives-only is incompatible with -traditional" msgstr "" -#: c-opts.c:1594 +#: c-opts.c:1624 #, gcc-internal-format msgid "too late for # directive to set debug directory" msgstr "" -#: c-parser.c:225 +#: c-parser.c:226 #, gcc-internal-format msgid "identifier %qE conflicts with C++ keyword" msgstr "" -#: c-parser.c:974 +#: c-parser.c:979 #, gcc-internal-format msgid "ISO C forbids an empty translation unit" msgstr "" -#: c-parser.c:1060 c-parser.c:6319 +#: c-parser.c:1065 c-parser.c:6430 #, gcc-internal-format msgid "ISO C does not allow extra %<;%> outside of a function" msgstr "" -#: c-parser.c:1164 c-parser.c:6881 +#: c-parser.c:1169 c-parser.c:6992 #, gcc-internal-format msgid "expected declaration specifiers" msgstr "" -#: c-parser.c:1212 +#: c-parser.c:1217 #, gcc-internal-format msgid "data definition has no type or storage class" msgstr "" -#: c-parser.c:1266 +#: c-parser.c:1275 #, gcc-internal-format msgid "expected %<,%> or %<;%>" msgstr "" @@ -21047,188 +21707,188 @@ msgstr "" #. This can appear in many cases looking nothing like a #. function definition, so we don't give a more specific #. error suggesting there was one. -#: c-parser.c:1273 c-parser.c:1289 +#: c-parser.c:1282 c-parser.c:1298 #, gcc-internal-format msgid "expected %<=%>, %<,%>, %<;%>, %<asm%> or %<__attribute__%>" msgstr "" -#: c-parser.c:1281 +#: c-parser.c:1290 #, gcc-internal-format msgid "ISO C forbids nested functions" msgstr "" -#: c-parser.c:1656 c-parser.c:2467 c-parser.c:3117 c-parser.c:3380 -#: c-parser.c:4331 c-parser.c:4970 c-parser.c:5395 c-parser.c:5417 -#: c-parser.c:5524 c-parser.c:5705 c-parser.c:5734 c-parser.c:5961 -#: c-parser.c:5973 c-parser.c:5998 c-parser.c:6132 c-parser.c:6161 -#: c-parser.c:6169 c-parser.c:6197 c-parser.c:6211 c-parser.c:6427 -#: c-parser.c:6526 c-parser.c:7051 c-parser.c:7756 +#: c-parser.c:1675 c-parser.c:2495 c-parser.c:3146 c-parser.c:3415 +#: c-parser.c:4403 c-parser.c:4493 c-parser.c:5111 c-parser.c:5549 +#: c-parser.c:5571 c-parser.c:5678 c-parser.c:5867 c-parser.c:5896 +#: c-parser.c:6072 c-parser.c:6084 c-parser.c:6109 c-parser.c:6243 +#: c-parser.c:6272 c-parser.c:6280 c-parser.c:6308 c-parser.c:6322 +#: c-parser.c:6538 c-parser.c:6637 c-parser.c:7166 c-parser.c:7894 #, gcc-internal-format msgid "expected identifier" msgstr "" -#: c-parser.c:1689 cp/parser.c:11978 +#: c-parser.c:1708 cp/parser.c:12649 #, gcc-internal-format msgid "comma at end of enumerator list" msgstr "" -#: c-parser.c:1695 +#: c-parser.c:1714 #, gcc-internal-format msgid "expected %<,%> or %<}%>" msgstr "" -#: c-parser.c:1711 c-parser.c:1898 c-parser.c:6286 +#: c-parser.c:1730 c-parser.c:1925 c-parser.c:6397 #, gcc-internal-format msgid "expected %<{%>" msgstr "" -#: c-parser.c:1725 +#: c-parser.c:1744 #, gcc-internal-format msgid "ISO C forbids forward references to %<enum%> types" msgstr "" -#: c-parser.c:1831 +#: c-parser.c:1858 #, gcc-internal-format msgid "expected class name" msgstr "" -#: c-parser.c:1850 c-parser.c:6065 +#: c-parser.c:1877 c-parser.c:6176 #, gcc-internal-format msgid "extra semicolon in struct or union specified" msgstr "" -#: c-parser.c:1879 +#: c-parser.c:1906 #, gcc-internal-format msgid "no semicolon at end of struct or union" msgstr "" -#: c-parser.c:1882 +#: c-parser.c:1909 #, gcc-internal-format msgid "expected %<;%>" msgstr "" -#: c-parser.c:1965 c-parser.c:2943 +#: c-parser.c:1992 c-parser.c:2971 #, gcc-internal-format msgid "expected specifier-qualifier-list" msgstr "" -#: c-parser.c:1975 +#: c-parser.c:2002 #, gcc-internal-format msgid "ISO C forbids member declarations with no members" msgstr "" -#: c-parser.c:2051 +#: c-parser.c:2078 #, gcc-internal-format msgid "expected %<,%>, %<;%> or %<}%>" msgstr "" -#: c-parser.c:2058 +#: c-parser.c:2085 #, gcc-internal-format msgid "expected %<:%>, %<,%>, %<;%>, %<}%> or %<__attribute__%>" msgstr "" -#: c-parser.c:2111 +#: c-parser.c:2138 #, gcc-internal-format msgid "%<typeof%> applied to a bit-field" msgstr "" -#: c-parser.c:2335 +#: c-parser.c:2362 #, gcc-internal-format msgid "expected identifier or %<(%>" msgstr "" -#: c-parser.c:2537 +#: c-parser.c:2565 #, gcc-internal-format msgid "ISO C requires a named argument before %<...%>" msgstr "" -#: c-parser.c:2645 +#: c-parser.c:2673 #, gcc-internal-format msgid "expected declaration specifiers or %<...%>" msgstr "" -#: c-parser.c:2696 +#: c-parser.c:2724 #, gcc-internal-format msgid "wide string literal in %<asm%>" msgstr "" -#: c-parser.c:2702 c-parser.c:6936 +#: c-parser.c:2730 c-parser.c:7047 cp/parser.c:22825 #, gcc-internal-format msgid "expected string literal" msgstr "" -#: c-parser.c:3035 +#: c-parser.c:3064 #, gcc-internal-format msgid "ISO C forbids empty initializer braces" msgstr "" -#: c-parser.c:3083 +#: c-parser.c:3112 #, gcc-internal-format msgid "obsolete use of designated initializer with %<:%>" msgstr "" -#: c-parser.c:3215 +#: c-parser.c:3247 #, gcc-internal-format msgid "ISO C forbids specifying range of elements to initialize" msgstr "" -#: c-parser.c:3228 +#: c-parser.c:3260 #, gcc-internal-format msgid "ISO C90 forbids specifying subobject to initialize" msgstr "" -#: c-parser.c:3235 +#: c-parser.c:3267 #, gcc-internal-format msgid "obsolete use of designated initializer without %<=%>" msgstr "" -#: c-parser.c:3242 +#: c-parser.c:3274 #, gcc-internal-format msgid "expected %<=%>" msgstr "" -#: c-parser.c:3395 +#: c-parser.c:3430 #, gcc-internal-format msgid "ISO C forbids label declarations" msgstr "" -#: c-parser.c:3401 c-parser.c:3481 +#: c-parser.c:3436 c-parser.c:3516 #, gcc-internal-format msgid "expected declaration or statement" msgstr "" -#: c-parser.c:3433 c-parser.c:3462 +#: c-parser.c:3468 c-parser.c:3497 #, gcc-internal-format msgid "ISO C90 forbids mixed declarations and code" msgstr "" -#: c-parser.c:3489 +#: c-parser.c:3524 #, gcc-internal-format msgid "expected %<}%> before %<else%>" msgstr "" -#: c-parser.c:3494 +#: c-parser.c:3529 cp/parser.c:7838 #, gcc-internal-format msgid "%<else%> without a previous %<if%>" msgstr "" -#: c-parser.c:3511 +#: c-parser.c:3546 #, gcc-internal-format msgid "label at end of compound statement" msgstr "" -#: c-parser.c:3556 +#: c-parser.c:3591 #, gcc-internal-format msgid "expected %<:%> or %<...%>" msgstr "" -#: c-parser.c:3590 +#: c-parser.c:3624 #, gcc-internal-format msgid "" "a label can only be part of a statement and a declaration is not a statement" msgstr "" -#: c-parser.c:3752 +#: c-parser.c:3788 #, gcc-internal-format msgid "expected identifier or %<*%>" msgstr "" @@ -21237,279 +21897,279 @@ msgstr "" #. c_parser_skip_until_found stops at a closing nesting #. delimiter without consuming it, but here we need to consume #. it to proceed further. -#: c-parser.c:3816 +#: c-parser.c:3852 #, gcc-internal-format msgid "expected statement" msgstr "" -#: c-parser.c:3911 cp/parser.c:7294 +#: c-parser.c:3950 cp/parser.c:7920 #, gcc-internal-format msgid "suggest braces around empty body in an %<if%> statement" msgstr "" -#: c-parser.c:3937 cp/parser.c:7315 +#: c-parser.c:3978 cp/parser.c:7943 #, gcc-internal-format msgid "suggest braces around empty body in an %<else%> statement" msgstr "" -#: c-parser.c:4057 +#: c-parser.c:4109 #, gcc-internal-format msgid "suggest braces around empty body in %<do%> statement" msgstr "" -#: c-parser.c:4210 +#: c-parser.c:4270 #, gcc-internal-format msgid "%E qualifier ignored on asm" msgstr "" -#: c-parser.c:4507 +#: c-parser.c:4621 #, gcc-internal-format msgid "ISO C forbids omitting the middle term of a ?: expression" msgstr "" -#: c-parser.c:4939 +#: c-parser.c:5076 #, gcc-internal-format msgid "traditional C rejects the unary plus operator" msgstr "" -#: c-parser.c:5056 +#: c-parser.c:5200 #, gcc-internal-format msgid "%<sizeof%> applied to a bit-field" msgstr "" -#: c-parser.c:5217 c-parser.c:5561 c-parser.c:5581 +#: c-parser.c:5365 c-parser.c:5715 c-parser.c:5735 #, gcc-internal-format msgid "expected expression" msgstr "" -#: c-parser.c:5243 +#: c-parser.c:5391 #, gcc-internal-format msgid "braced-group within expression allowed only inside a function" msgstr "" -#: c-parser.c:5256 +#: c-parser.c:5404 #, gcc-internal-format msgid "ISO C forbids braced-groups within expressions" msgstr "" -#: c-parser.c:5455 +#: c-parser.c:5609 #, gcc-internal-format msgid "first argument to %<__builtin_choose_expr%> not a constant" msgstr "" -#: c-parser.c:5612 +#: c-parser.c:5770 #, gcc-internal-format msgid "compound literal has variable size" msgstr "" -#: c-parser.c:5620 +#: c-parser.c:5778 #, gcc-internal-format msgid "ISO C90 forbids compound literals" msgstr "" -#: c-parser.c:6282 +#: c-parser.c:6393 #, gcc-internal-format msgid "extra semicolon in method definition specified" msgstr "" -#: c-parser.c:6830 +#: c-parser.c:6941 cp/parser.c:22869 #, gcc-internal-format msgid "%<#pragma omp barrier%> may only be used in compound statements" msgstr "" -#: c-parser.c:6841 +#: c-parser.c:6952 cp/parser.c:22884 #, gcc-internal-format msgid "%<#pragma omp flush%> may only be used in compound statements" msgstr "" -#: c-parser.c:6852 +#: c-parser.c:6963 cp/parser.c:22900 #, gcc-internal-format msgid "%<#pragma omp taskwait%> may only be used in compound statements" msgstr "" -#: c-parser.c:6865 +#: c-parser.c:6976 cp/parser.c:22928 #, gcc-internal-format msgid "" "%<#pragma omp section%> may only be used in %<#pragma omp sections%> " "construct" msgstr "" -#: c-parser.c:6871 +#: c-parser.c:6982 cp/parser.c:22859 #, gcc-internal-format msgid "%<#pragma GCC pch_preprocess%> must be first" msgstr "" -#: c-parser.c:7029 +#: c-parser.c:7141 cp/parser.c:21149 #, gcc-internal-format msgid "too many %qs clauses" msgstr "" -#: c-parser.c:7125 +#: c-parser.c:7243 cp/parser.c:21263 #, gcc-internal-format msgid "collapse argument needs positive constant integer expression" msgstr "" -#: c-parser.c:7190 +#: c-parser.c:7309 #, gcc-internal-format msgid "expected %<none%> or %<shared%>" msgstr "" -#: c-parser.c:7233 +#: c-parser.c:7353 #, gcc-internal-format msgid "expected %<(%>" msgstr "" -#: c-parser.c:7278 c-parser.c:7463 +#: c-parser.c:7400 c-parser.c:7592 #, gcc-internal-format msgid "expected integer expression" msgstr "" -#: c-parser.c:7288 +#: c-parser.c:7412 #, gcc-internal-format msgid "%<num_threads%> value must be positive" msgstr "" -#: c-parser.c:7368 +#: c-parser.c:7495 #, gcc-internal-format msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>" msgstr "" -#: c-parser.c:7454 +#: c-parser.c:7583 cp/parser.c:21551 #, gcc-internal-format msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter" msgstr "" -#: c-parser.c:7458 +#: c-parser.c:7587 cp/parser.c:21554 #, gcc-internal-format msgid "schedule %<auto%> does not take a %<chunk_size%> parameter" msgstr "" -#: c-parser.c:7476 +#: c-parser.c:7605 #, gcc-internal-format msgid "invalid schedule kind" msgstr "" -#: c-parser.c:7594 +#: c-parser.c:7725 #, gcc-internal-format msgid "expected %<#pragma omp%> clause" msgstr "" -#: c-parser.c:7603 +#: c-parser.c:7734 cp/parser.c:21702 #, gcc-internal-format msgid "%qs is not valid for %qs" msgstr "" -#: c-parser.c:7705 +#: c-parser.c:7838 #, gcc-internal-format msgid "invalid operator for %<#pragma omp atomic%>" msgstr "" -#: c-parser.c:7759 c-parser.c:7779 +#: c-parser.c:7897 c-parser.c:7918 #, gcc-internal-format msgid "expected %<(%> or end of line" msgstr "" -#: c-parser.c:7811 +#: c-parser.c:7952 #, gcc-internal-format msgid "for statement expected" msgstr "" -#: c-parser.c:7864 +#: c-parser.c:8005 cp/semantics.c:4313 cp/semantics.c:4383 #, gcc-internal-format msgid "expected iteration declaration or initialization" msgstr "" -#: c-parser.c:7944 +#: c-parser.c:8085 #, gcc-internal-format msgid "not enough perfectly nested loops" msgstr "" -#: c-parser.c:7992 +#: c-parser.c:8138 cp/parser.c:22407 #, gcc-internal-format msgid "collapsed loops not perfectly nested" msgstr "" -#: c-parser.c:8029 cp/pt.c:10584 +#: c-parser.c:8176 cp/parser.c:22251 cp/parser.c:22289 cp/pt.c:11018 #, gcc-internal-format msgid "iteration variable %qD should not be firstprivate" msgstr "" -#: c-parser.c:8179 +#: c-parser.c:8338 #, gcc-internal-format msgid "expected %<#pragma omp section%> or %<}%>" msgstr "" -#: c-parser.c:8449 +#: c-parser.c:8621 #, gcc-internal-format msgid "%qD is not a variable" msgstr "" -#: c-parser.c:8451 cp/semantics.c:3837 +#: c-parser.c:8623 cp/semantics.c:3938 #, gcc-internal-format msgid "%qE declared %<threadprivate%> after first use" msgstr "" -#: c-parser.c:8453 cp/semantics.c:3839 +#: c-parser.c:8625 cp/semantics.c:3940 #, gcc-internal-format msgid "automatic variable %qE cannot be %<threadprivate%>" msgstr "" -#: c-parser.c:8457 cp/semantics.c:3841 +#: c-parser.c:8629 cp/semantics.c:3942 #, gcc-internal-format msgid "%<threadprivate%> %qE has incomplete type" msgstr "" -#: c-pch.c:131 +#: c-pch.c:132 #, gcc-internal-format msgid "can%'t create precompiled header %s: %m" msgstr "" -#: c-pch.c:152 +#: c-pch.c:153 #, gcc-internal-format msgid "can%'t write to %s: %m" msgstr "" -#: c-pch.c:158 +#: c-pch.c:159 #, gcc-internal-format msgid "%qs is not a valid output file" msgstr "" -#: c-pch.c:187 c-pch.c:202 c-pch.c:216 +#: c-pch.c:188 c-pch.c:203 c-pch.c:217 #, gcc-internal-format msgid "can%'t write %s: %m" msgstr "" -#: c-pch.c:192 c-pch.c:209 +#: c-pch.c:193 c-pch.c:210 #, gcc-internal-format msgid "can%'t seek in %s: %m" msgstr "" -#: c-pch.c:200 c-pch.c:242 c-pch.c:283 c-pch.c:334 +#: c-pch.c:201 c-pch.c:243 c-pch.c:284 c-pch.c:335 #, gcc-internal-format msgid "can%'t read %s: %m" msgstr "" -#: c-pch.c:465 +#: c-pch.c:466 #, gcc-internal-format msgid "pch_preprocess pragma should only be used with -fpreprocessed" msgstr "" -#: c-pch.c:466 +#: c-pch.c:467 #, gcc-internal-format msgid "use #include instead" msgstr "" -#: c-pch.c:472 +#: c-pch.c:473 #, gcc-internal-format msgid "%s: couldn%'t open PCH file: %m" msgstr "" -#: c-pch.c:477 +#: c-pch.c:478 #, gcc-internal-format msgid "use -Winvalid-pch for more information" msgstr "" -#: c-pch.c:478 +#: c-pch.c:479 #, gcc-internal-format msgid "%s: PCH file was invalid" msgstr "" @@ -21626,357 +22286,362 @@ msgid "" "applying #pragma weak %q+D after first use results in unspecified behavior" msgstr "" -#: c-pragma.c:479 c-pragma.c:484 +#: c-pragma.c:480 c-pragma.c:485 #, gcc-internal-format msgid "malformed #pragma weak, ignored" msgstr "" -#: c-pragma.c:488 +#: c-pragma.c:489 #, gcc-internal-format msgid "junk at end of %<#pragma weak%>" msgstr "" -#: c-pragma.c:556 c-pragma.c:558 +#: c-pragma.c:557 c-pragma.c:559 #, gcc-internal-format msgid "malformed #pragma redefine_extname, ignored" msgstr "" -#: c-pragma.c:561 +#: c-pragma.c:562 #, gcc-internal-format msgid "junk at end of %<#pragma redefine_extname%>" msgstr "" -#: c-pragma.c:567 -#, gcc-internal-format -msgid "#pragma redefine_extname not supported on this target" -msgstr "" - -#: c-pragma.c:584 c-pragma.c:671 +#: c-pragma.c:577 c-pragma.c:664 #, gcc-internal-format msgid "#pragma redefine_extname ignored due to conflict with previous rename" msgstr "" -#: c-pragma.c:607 +#: c-pragma.c:600 #, gcc-internal-format msgid "" "#pragma redefine_extname ignored due to conflict with previous #pragma " "redefine_extname" msgstr "" -#: c-pragma.c:626 +#: c-pragma.c:619 #, gcc-internal-format msgid "malformed #pragma extern_prefix, ignored" msgstr "" -#: c-pragma.c:629 +#: c-pragma.c:622 #, gcc-internal-format msgid "junk at end of %<#pragma extern_prefix%>" msgstr "" -#: c-pragma.c:636 +#: c-pragma.c:629 #, gcc-internal-format msgid "#pragma extern_prefix not supported on this target" msgstr "" -#: c-pragma.c:662 +#: c-pragma.c:655 #, gcc-internal-format msgid "asm declaration ignored due to conflict with previous rename" msgstr "" -#: c-pragma.c:693 +#: c-pragma.c:686 #, gcc-internal-format msgid "" "#pragma redefine_extname ignored due to conflict with __asm__ declaration" msgstr "" -#: c-pragma.c:755 +#: c-pragma.c:748 #, gcc-internal-format msgid "" "#pragma GCC visibility push() must specify default, internal, hidden or " "protected" msgstr "" -#: c-pragma.c:790 +#: c-pragma.c:783 #, gcc-internal-format msgid "#pragma GCC visibility must be followed by push or pop" msgstr "" -#: c-pragma.c:796 +#: c-pragma.c:789 #, gcc-internal-format msgid "no matching push for %<#pragma GCC visibility pop%>" msgstr "" -#: c-pragma.c:803 c-pragma.c:810 +#: c-pragma.c:796 c-pragma.c:803 #, gcc-internal-format msgid "missing %<(%> after %<#pragma GCC visibility push%> - ignored" msgstr "" -#: c-pragma.c:806 +#: c-pragma.c:799 #, gcc-internal-format msgid "malformed #pragma GCC visibility push" msgstr "" -#: c-pragma.c:814 +#: c-pragma.c:807 #, gcc-internal-format msgid "junk at end of %<#pragma GCC visibility%>" msgstr "" -#: c-pragma.c:830 +#: c-pragma.c:823 #, gcc-internal-format msgid "#pragma GCC diagnostic not allowed inside functions" msgstr "" -#: c-pragma.c:836 +#: c-pragma.c:829 #, gcc-internal-format msgid "missing [error|warning|ignored] after %<#pragma GCC diagnostic%>" msgstr "" -#: c-pragma.c:845 +#: c-pragma.c:838 #, gcc-internal-format msgid "expected [error|warning|ignored] after %<#pragma GCC diagnostic%>" msgstr "" -#: c-pragma.c:849 +#: c-pragma.c:842 #, gcc-internal-format msgid "missing option after %<#pragma GCC diagnostic%> kind" msgstr "" -#: c-pragma.c:863 +#: c-pragma.c:856 #, gcc-internal-format msgid "unknown option after %<#pragma GCC diagnostic%> kind" msgstr "" -#: c-pragma.c:876 +#: c-pragma.c:869 #, gcc-internal-format msgid "#pragma GCC option is not allowed inside functions" msgstr "" -#: c-pragma.c:889 +#: c-pragma.c:882 #, gcc-internal-format msgid "%<#pragma GCC option%> is not a string" msgstr "" -#: c-pragma.c:916 +#: c-pragma.c:909 #, gcc-internal-format msgid "" "%<#pragma GCC target (string [,string]...)%> does not have a final %<)%>." msgstr "" -#: c-pragma.c:922 +#: c-pragma.c:915 #, gcc-internal-format msgid "#pragma GCC target string... is badly formed" msgstr "" -#: c-pragma.c:945 +#: c-pragma.c:938 #, gcc-internal-format msgid "#pragma GCC optimize is not allowed inside functions" msgstr "" -#: c-pragma.c:958 +#: c-pragma.c:951 #, gcc-internal-format msgid "%<#pragma GCC optimize%> is not a string or number" msgstr "" -#: c-pragma.c:984 +#: c-pragma.c:977 #, gcc-internal-format msgid "" "%<#pragma GCC optimize (string [,string]...)%> does not have a final %<)%>." msgstr "" -#: c-pragma.c:990 +#: c-pragma.c:983 #, gcc-internal-format msgid "#pragma GCC optimize string... is badly formed" msgstr "" -#: c-pragma.c:1032 +#: c-pragma.c:1025 #, gcc-internal-format msgid "junk at end of %<#pragma push_options%>" msgstr "" -#: c-pragma.c:1062 +#: c-pragma.c:1055 #, gcc-internal-format msgid "junk at end of %<#pragma pop_options%>" msgstr "" -#: c-pragma.c:1069 +#: c-pragma.c:1062 #, gcc-internal-format msgid "" "%<#pragma GCC pop_options%> without a corresponding %<#pragma GCC " "push_options%>" msgstr "" -#: c-pragma.c:1110 +#: c-pragma.c:1103 #, gcc-internal-format msgid "junk at end of %<#pragma reset_options%>" msgstr "" -#: c-pragma.c:1147 c-pragma.c:1154 +#: c-pragma.c:1140 c-pragma.c:1147 #, gcc-internal-format msgid "expected a string after %<#pragma message%>" msgstr "" -#: c-pragma.c:1149 +#: c-pragma.c:1142 #, gcc-internal-format msgid "malformed %<#pragma message%>, ignored" msgstr "" -#: c-pragma.c:1159 +#: c-pragma.c:1152 #, gcc-internal-format msgid "junk at end of %<#pragma message%>" msgstr "" -#: c-pragma.c:1162 +#: c-pragma.c:1155 #, gcc-internal-format msgid "#pragma message: %s" msgstr "" -#: c-pragma.c:1199 +#: c-pragma.c:1192 #, gcc-internal-format msgid "invalid location for %<pragma %s%>, ignored" msgstr "" -#: c-pragma.c:1206 c-pragma.c:1220 +#: c-pragma.c:1199 c-pragma.c:1213 #, gcc-internal-format msgid "malformed %<#pragma %s%>, ignored" msgstr "" -#: c-pragma.c:1226 +#: c-pragma.c:1219 #, gcc-internal-format msgid "junk at end of %<#pragma %s%>" msgstr "" -#: c-pragma.c:1244 +#: c-pragma.c:1237 #, gcc-internal-format msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported for C++" msgstr "" -#: c-pragma.c:1253 +#: c-pragma.c:1246 #, gcc-internal-format msgid "%<#pragma STDC FLOAT_CONST_DECIMAL64%> is not supported on this target" msgstr "" -#: c-pragma.c:1259 +#: c-pragma.c:1252 #, gcc-internal-format msgid "ISO C does not support %<#pragma STDC FLOAT_CONST_DECIMAL64%>" msgstr "" -#: c-typeck.c:217 +#: c-typeck.c:215 #, gcc-internal-format msgid "%qD has an incomplete type" msgstr "" -#: c-typeck.c:238 cp/call.c:2920 +#: c-typeck.c:236 cp/call.c:3092 #, gcc-internal-format msgid "invalid use of void expression" msgstr "" -#: c-typeck.c:246 +#: c-typeck.c:244 #, gcc-internal-format msgid "invalid use of flexible array member" msgstr "" -#: c-typeck.c:252 +#: c-typeck.c:250 #, gcc-internal-format msgid "invalid use of array with unspecified bounds" msgstr "" -#: c-typeck.c:260 +#: c-typeck.c:258 #, gcc-internal-format msgid "invalid use of undefined type %<%s %E%>" msgstr "" #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. -#: c-typeck.c:264 +#: c-typeck.c:262 #, gcc-internal-format msgid "invalid use of incomplete typedef %qD" msgstr "" -#: c-typeck.c:530 c-typeck.c:555 +#: c-typeck.c:528 c-typeck.c:553 #, gcc-internal-format msgid "function types not truly compatible in ISO C" msgstr "" -#: c-typeck.c:683 +#: c-typeck.c:681 #, gcc-internal-format msgid "can%'t mix operands of decimal float and vector types" msgstr "" -#: c-typeck.c:688 +#: c-typeck.c:686 #, gcc-internal-format msgid "can%'t mix operands of decimal float and complex types" msgstr "" -#: c-typeck.c:693 +#: c-typeck.c:691 #, gcc-internal-format msgid "can%'t mix operands of decimal float and other float types" msgstr "" -#: c-typeck.c:1099 +#: c-typeck.c:1128 #, gcc-internal-format msgid "types are not quite compatible" msgstr "" -#: c-typeck.c:1422 +#: c-typeck.c:1132 +#, gcc-internal-format +msgid "pointer target types incompatible in C++" +msgstr "" + +#: c-typeck.c:1462 #, gcc-internal-format msgid "function return types not compatible due to %<volatile%>" msgstr "" -#: c-typeck.c:1581 c-typeck.c:3059 +#: c-typeck.c:1624 c-typeck.c:3132 #, gcc-internal-format msgid "arithmetic on pointer to an incomplete type" msgstr "" -#: c-typeck.c:1926 +#: c-typeck.c:1977 #, gcc-internal-format msgid "%qT has no member named %qE" msgstr "" -#: c-typeck.c:1978 +#: c-typeck.c:2031 #, gcc-internal-format msgid "request for member %qE in something not a structure or union" msgstr "" -#: c-typeck.c:2027 +#: c-typeck.c:2080 #, gcc-internal-format msgid "dereferencing pointer to incomplete type" msgstr "" -#: c-typeck.c:2031 +#: c-typeck.c:2084 #, gcc-internal-format msgid "dereferencing %<void *%> pointer" msgstr "" -#: c-typeck.c:2050 +#: c-typeck.c:2103 #, gcc-internal-format msgid "invalid type argument of %qs (have %qT)" msgstr "" -#: c-typeck.c:2081 cp/typeck.c:2697 +#: c-typeck.c:2134 cp/typeck.c:2715 #, gcc-internal-format msgid "subscripted value is neither array nor pointer" msgstr "" -#: c-typeck.c:2092 cp/typeck.c:2612 cp/typeck.c:2702 +#: c-typeck.c:2145 cp/typeck.c:2630 cp/typeck.c:2720 #, gcc-internal-format msgid "array subscript is not an integer" msgstr "" -#: c-typeck.c:2098 +#: c-typeck.c:2151 #, gcc-internal-format msgid "subscripted value is pointer to function" msgstr "" -#: c-typeck.c:2146 +#: c-typeck.c:2199 #, gcc-internal-format msgid "ISO C forbids subscripting %<register%> array" msgstr "" -#: c-typeck.c:2149 +#: c-typeck.c:2202 #, gcc-internal-format msgid "ISO C90 forbids subscripting non-lvalue array" msgstr "" -#: c-typeck.c:2474 +#: c-typeck.c:2310 +#, gcc-internal-format +msgid "enum constant defined here" +msgstr "" + +#: c-typeck.c:2541 #, gcc-internal-format msgid "called object %qE is not a function" msgstr "" @@ -21984,362 +22649,370 @@ msgstr "" #. This situation leads to run-time undefined behavior. We can't, #. therefore, simply error unless we can prove that all possible #. executions of the program must execute the code. -#: c-typeck.c:2510 +#: c-typeck.c:2577 #, gcc-internal-format msgid "function called through a non-compatible type" msgstr "" -#: c-typeck.c:2524 c-typeck.c:2577 +#: c-typeck.c:2591 c-typeck.c:2645 #, gcc-internal-format msgid "function with qualified void return type called" msgstr "" -#: c-typeck.c:2699 +#: c-typeck.c:2767 #, gcc-internal-format msgid "type of formal parameter %d is incomplete" msgstr "" -#: c-typeck.c:2714 +#: c-typeck.c:2782 #, gcc-internal-format msgid "" "passing argument %d of %qE as integer rather than floating due to prototype" msgstr "" -#: c-typeck.c:2719 +#: c-typeck.c:2787 #, gcc-internal-format msgid "" "passing argument %d of %qE as integer rather than complex due to prototype" msgstr "" -#: c-typeck.c:2724 +#: c-typeck.c:2792 #, gcc-internal-format msgid "" "passing argument %d of %qE as complex rather than floating due to prototype" msgstr "" -#: c-typeck.c:2729 +#: c-typeck.c:2797 #, gcc-internal-format msgid "" "passing argument %d of %qE as floating rather than integer due to prototype" msgstr "" -#: c-typeck.c:2734 +#: c-typeck.c:2802 #, gcc-internal-format msgid "" "passing argument %d of %qE as complex rather than integer due to prototype" msgstr "" -#: c-typeck.c:2739 +#: c-typeck.c:2807 #, gcc-internal-format msgid "" "passing argument %d of %qE as floating rather than complex due to prototype" msgstr "" -#: c-typeck.c:2752 +#: c-typeck.c:2820 #, gcc-internal-format msgid "" "passing argument %d of %qE as %<float%> rather than %<double%> due to " "prototype" msgstr "" -#: c-typeck.c:2777 +#: c-typeck.c:2845 #, gcc-internal-format msgid "passing argument %d of %qE as %qT rather than %qT due to prototype" msgstr "" -#: c-typeck.c:2798 +#: c-typeck.c:2867 #, gcc-internal-format msgid "passing argument %d of %qE with different width due to prototype" msgstr "" -#: c-typeck.c:2821 +#: c-typeck.c:2891 #, gcc-internal-format msgid "passing argument %d of %qE as unsigned due to prototype" msgstr "" -#: c-typeck.c:2825 +#: c-typeck.c:2896 #, gcc-internal-format msgid "passing argument %d of %qE as signed due to prototype" msgstr "" -#: c-typeck.c:2962 c-typeck.c:2966 +#: c-typeck.c:3034 c-typeck.c:3039 #, gcc-internal-format msgid "comparison with string literal results in unspecified behavior" msgstr "" -#: c-typeck.c:2980 +#: c-typeck.c:3053 #, gcc-internal-format msgid "comparison between %qT and %qT" msgstr "" -#: c-typeck.c:3000 +#: c-typeck.c:3073 #, gcc-internal-format msgid "pointer of type %<void *%> used in subtraction" msgstr "" -#: c-typeck.c:3003 +#: c-typeck.c:3076 #, gcc-internal-format msgid "pointer to a function used in subtraction" msgstr "" -#: c-typeck.c:3130 +#: c-typeck.c:3204 #, gcc-internal-format msgid "wrong type argument to unary plus" msgstr "" -#: c-typeck.c:3143 +#: c-typeck.c:3217 #, gcc-internal-format msgid "wrong type argument to unary minus" msgstr "" -#: c-typeck.c:3163 +#: c-typeck.c:3237 #, gcc-internal-format msgid "ISO C does not support %<~%> for complex conjugation" msgstr "" -#: c-typeck.c:3169 +#: c-typeck.c:3243 #, gcc-internal-format msgid "wrong type argument to bit-complement" msgstr "" -#: c-typeck.c:3177 +#: c-typeck.c:3251 #, gcc-internal-format msgid "wrong type argument to abs" msgstr "" -#: c-typeck.c:3189 +#: c-typeck.c:3263 #, gcc-internal-format msgid "wrong type argument to conjugation" msgstr "" -#: c-typeck.c:3202 +#: c-typeck.c:3276 #, gcc-internal-format msgid "wrong type argument to unary exclamation mark" msgstr "" -#: c-typeck.c:3269 +#: c-typeck.c:3340 +#, gcc-internal-format +msgid "increment of enumeration value is invalid in C++" +msgstr "" + +#: c-typeck.c:3343 +#, gcc-internal-format +msgid "decrement of enumeration value is invalid in C++" +msgstr "" + +#: c-typeck.c:3356 #, gcc-internal-format msgid "ISO C does not support %<++%> and %<--%> on complex types" msgstr "" -#: c-typeck.c:3288 c-typeck.c:3320 +#: c-typeck.c:3375 c-typeck.c:3407 #, gcc-internal-format msgid "wrong type argument to increment" msgstr "" -#: c-typeck.c:3290 c-typeck.c:3323 +#: c-typeck.c:3377 c-typeck.c:3410 #, gcc-internal-format msgid "wrong type argument to decrement" msgstr "" -#: c-typeck.c:3310 +#: c-typeck.c:3397 #, gcc-internal-format msgid "increment of pointer to unknown structure" msgstr "" -#: c-typeck.c:3313 +#: c-typeck.c:3400 #, gcc-internal-format msgid "decrement of pointer to unknown structure" msgstr "" -#: c-typeck.c:3390 +#: c-typeck.c:3477 #, gcc-internal-format msgid "taking address of expression of type %<void%>" msgstr "" -#: c-typeck.c:3557 +#: c-typeck.c:3646 #, gcc-internal-format msgid "assignment of read-only member %qD" msgstr "" -#: c-typeck.c:3558 +#: c-typeck.c:3647 #, gcc-internal-format msgid "increment of read-only member %qD" msgstr "" -#: c-typeck.c:3559 +#: c-typeck.c:3648 #, gcc-internal-format msgid "decrement of read-only member %qD" msgstr "" -#: c-typeck.c:3560 +#: c-typeck.c:3649 #, gcc-internal-format msgid "read-only member %qD used as %<asm%> output" msgstr "" -#: c-typeck.c:3564 +#: c-typeck.c:3653 #, gcc-internal-format msgid "assignment of read-only variable %qD" msgstr "" -#: c-typeck.c:3565 +#: c-typeck.c:3654 #, gcc-internal-format msgid "increment of read-only variable %qD" msgstr "" -#: c-typeck.c:3566 +#: c-typeck.c:3655 #, gcc-internal-format msgid "decrement of read-only variable %qD" msgstr "" -#: c-typeck.c:3567 +#: c-typeck.c:3656 #, gcc-internal-format msgid "read-only variable %qD used as %<asm%> output" msgstr "" -#: c-typeck.c:3570 c-typeck.c:3586 +#: c-typeck.c:3659 c-typeck.c:3675 #, gcc-internal-format msgid "assignment of read-only location %qE" msgstr "" -#: c-typeck.c:3571 c-typeck.c:3589 +#: c-typeck.c:3660 c-typeck.c:3678 #, gcc-internal-format msgid "increment of read-only location %qE" msgstr "" -#: c-typeck.c:3572 c-typeck.c:3592 +#: c-typeck.c:3661 c-typeck.c:3681 #, gcc-internal-format msgid "decrement of read-only location %qE" msgstr "" -#: c-typeck.c:3573 +#: c-typeck.c:3662 #, gcc-internal-format msgid "read-only location %qE used as %<asm%> output" msgstr "" -#: c-typeck.c:3632 +#: c-typeck.c:3721 #, gcc-internal-format msgid "cannot take address of bit-field %qD" msgstr "" -#: c-typeck.c:3660 +#: c-typeck.c:3749 #, gcc-internal-format msgid "global register variable %qD used in nested function" msgstr "" -#: c-typeck.c:3663 +#: c-typeck.c:3752 #, gcc-internal-format msgid "register variable %qD used in nested function" msgstr "" -#: c-typeck.c:3668 +#: c-typeck.c:3757 #, gcc-internal-format msgid "address of global register variable %qD requested" msgstr "" -#: c-typeck.c:3670 +#: c-typeck.c:3759 #, gcc-internal-format msgid "address of register variable %qD requested" msgstr "" -#: c-typeck.c:3735 +#: c-typeck.c:3826 #, gcc-internal-format msgid "non-lvalue array in conditional expression" msgstr "" -#: c-typeck.c:3824 -#, gcc-internal-format -msgid "signed and unsigned type in conditional expression" -msgstr "" - -#: c-typeck.c:3846 +#: c-typeck.c:3954 #, gcc-internal-format msgid "ISO C forbids conditional expr with only one void side" msgstr "" -#: c-typeck.c:3861 c-typeck.c:3870 +#: c-typeck.c:3969 c-typeck.c:3978 #, gcc-internal-format msgid "ISO C forbids conditional expr between %<void *%> and function pointer" msgstr "" -#: c-typeck.c:3879 +#: c-typeck.c:3987 #, gcc-internal-format msgid "pointer type mismatch in conditional expression" msgstr "" -#: c-typeck.c:3887 c-typeck.c:3898 +#: c-typeck.c:3995 c-typeck.c:4006 #, gcc-internal-format msgid "pointer/integer type mismatch in conditional expression" msgstr "" -#: c-typeck.c:3912 +#: c-typeck.c:4020 #, gcc-internal-format msgid "type mismatch in conditional expression" msgstr "" -#: c-typeck.c:4005 +#: c-typeck.c:4116 #, gcc-internal-format msgid "left-hand operand of comma expression has no effect" msgstr "" -#: c-typeck.c:4057 +#: c-typeck.c:4181 #, gcc-internal-format -msgid "cast specifies array type" +msgid "cast adds new qualifiers to function type" msgstr "" -#: c-typeck.c:4063 +#: c-typeck.c:4187 #, gcc-internal-format -msgid "cast specifies function type" +msgid "cast discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:4079 +#: c-typeck.c:4257 #, gcc-internal-format -msgid "ISO C forbids casting nonscalar to the same type" +msgid "cast specifies array type" msgstr "" -#: c-typeck.c:4096 +#: c-typeck.c:4263 #, gcc-internal-format -msgid "ISO C forbids casts to union type" +msgid "cast specifies function type" msgstr "" -#: c-typeck.c:4103 +#: c-typeck.c:4279 #, gcc-internal-format -msgid "cast to union type from type not present in union" +msgid "ISO C forbids casting nonscalar to the same type" msgstr "" -#: c-typeck.c:4149 +#: c-typeck.c:4295 #, gcc-internal-format -msgid "cast adds new qualifiers to function type" +msgid "ISO C forbids casts to union type" msgstr "" -#. There are qualifiers present in IN_OTYPE that are not -#. present in IN_TYPE. -#: c-typeck.c:4154 +#: c-typeck.c:4302 #, gcc-internal-format -msgid "cast discards qualifiers from pointer target type" +msgid "cast to union type from type not present in union" msgstr "" -#: c-typeck.c:4170 +#: c-typeck.c:4337 #, gcc-internal-format msgid "cast increases required alignment of target type" msgstr "" -#: c-typeck.c:4181 +#: c-typeck.c:4348 #, gcc-internal-format msgid "cast from pointer to integer of different size" msgstr "" -#: c-typeck.c:4185 +#: c-typeck.c:4353 #, gcc-internal-format msgid "cast from function call of type %qT to non-matching type %qT" msgstr "" -#: c-typeck.c:4193 +#: c-typeck.c:4362 #, gcc-internal-format msgid "cast to pointer from integer of different size" msgstr "" -#: c-typeck.c:4207 +#: c-typeck.c:4376 #, gcc-internal-format msgid "ISO C forbids conversion of function pointer to object pointer type" msgstr "" -#: c-typeck.c:4216 +#: c-typeck.c:4385 #, gcc-internal-format msgid "ISO C forbids conversion of object pointer to function pointer type" msgstr "" -#: c-typeck.c:4407 c-typeck.c:4572 +#: c-typeck.c:4467 +#, gcc-internal-format +msgid "defining a type in a cast is invalid in C++" +msgstr "" + +#: c-typeck.c:4592 c-typeck.c:4759 #, gcc-internal-format msgid "enum conversion in assignment is invalid in C++" msgstr "" @@ -22347,493 +23020,456 @@ msgstr "" #. This macro is used to emit diagnostics to ensure that all format #. strings are complete sentences, visible to gettext and checked at #. compile time. -#: c-typeck.c:4510 c-typeck.c:4975 +#: c-typeck.c:4697 c-typeck.c:5168 #, gcc-internal-format msgid "expected %qT but argument is of type %qT" msgstr "" -#: c-typeck.c:4570 +#: c-typeck.c:4757 #, gcc-internal-format msgid "enum conversion when passing argument %d of %qE is invalid in C++" msgstr "" -#: c-typeck.c:4576 +#: c-typeck.c:4763 #, gcc-internal-format msgid "enum conversion in return is invalid in C++" msgstr "" -#: c-typeck.c:4605 +#: c-typeck.c:4792 #, gcc-internal-format msgid "cannot pass rvalue to reference parameter" msgstr "" -#: c-typeck.c:4728 c-typeck.c:4897 +#: c-typeck.c:4920 c-typeck.c:5090 #, gcc-internal-format msgid "" "passing argument %d of %qE makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:4731 c-typeck.c:4900 +#: c-typeck.c:4923 c-typeck.c:5093 #, gcc-internal-format msgid "assignment makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:4734 c-typeck.c:4902 +#: c-typeck.c:4926 c-typeck.c:5095 #, gcc-internal-format msgid "initialization makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:4737 c-typeck.c:4904 +#: c-typeck.c:4929 c-typeck.c:5097 #, gcc-internal-format msgid "return makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:4742 c-typeck.c:4862 +#: c-typeck.c:4934 c-typeck.c:5055 #, gcc-internal-format msgid "passing argument %d of %qE discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:4744 c-typeck.c:4864 +#: c-typeck.c:4936 c-typeck.c:5057 #, gcc-internal-format msgid "assignment discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:4746 c-typeck.c:4866 +#: c-typeck.c:4938 c-typeck.c:5059 #, gcc-internal-format msgid "initialization discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:4748 c-typeck.c:4868 +#: c-typeck.c:4940 c-typeck.c:5061 #, gcc-internal-format msgid "return discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:4756 +#: c-typeck.c:4948 #, gcc-internal-format msgid "ISO C prohibits argument conversion to union type" msgstr "" -#: c-typeck.c:4789 +#: c-typeck.c:4982 #, gcc-internal-format msgid "request for implicit conversion from %qT to %qT not permitted in C++" msgstr "" -#: c-typeck.c:4801 +#: c-typeck.c:4994 #, gcc-internal-format msgid "argument %d of %qE might be a candidate for a format attribute" msgstr "" -#: c-typeck.c:4807 +#: c-typeck.c:5000 #, gcc-internal-format msgid "assignment left-hand side might be a candidate for a format attribute" msgstr "" -#: c-typeck.c:4812 +#: c-typeck.c:5005 #, gcc-internal-format msgid "" "initialization left-hand side might be a candidate for a format attribute" msgstr "" -#: c-typeck.c:4817 +#: c-typeck.c:5010 #, gcc-internal-format msgid "return type might be a candidate for a format attribute" msgstr "" -#: c-typeck.c:4841 +#: c-typeck.c:5034 #, gcc-internal-format msgid "" "ISO C forbids passing argument %d of %qE between function pointer and %<void " "*%>" msgstr "" -#: c-typeck.c:4844 +#: c-typeck.c:5037 #, gcc-internal-format msgid "ISO C forbids assignment between function pointer and %<void *%>" msgstr "" -#: c-typeck.c:4846 +#: c-typeck.c:5039 #, gcc-internal-format msgid "ISO C forbids initialization between function pointer and %<void *%>" msgstr "" -#: c-typeck.c:4848 +#: c-typeck.c:5041 #, gcc-internal-format msgid "ISO C forbids return between function pointer and %<void *%>" msgstr "" -#: c-typeck.c:4879 +#: c-typeck.c:5072 #, gcc-internal-format msgid "pointer targets in passing argument %d of %qE differ in signedness" msgstr "" -#: c-typeck.c:4881 +#: c-typeck.c:5074 #, gcc-internal-format msgid "pointer targets in assignment differ in signedness" msgstr "" -#: c-typeck.c:4883 +#: c-typeck.c:5076 #, gcc-internal-format msgid "pointer targets in initialization differ in signedness" msgstr "" -#: c-typeck.c:4885 +#: c-typeck.c:5078 #, gcc-internal-format msgid "pointer targets in return differ in signedness" msgstr "" -#: c-typeck.c:4912 +#: c-typeck.c:5105 #, gcc-internal-format msgid "passing argument %d of %qE from incompatible pointer type" msgstr "" -#: c-typeck.c:4914 +#: c-typeck.c:5107 #, gcc-internal-format msgid "assignment from incompatible pointer type" msgstr "" -#: c-typeck.c:4915 +#: c-typeck.c:5108 #, gcc-internal-format msgid "initialization from incompatible pointer type" msgstr "" -#: c-typeck.c:4917 +#: c-typeck.c:5110 #, gcc-internal-format msgid "return from incompatible pointer type" msgstr "" -#: c-typeck.c:4935 +#: c-typeck.c:5128 #, gcc-internal-format msgid "passing argument %d of %qE makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:4937 +#: c-typeck.c:5130 #, gcc-internal-format msgid "assignment makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:4939 +#: c-typeck.c:5132 #, gcc-internal-format msgid "initialization makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:4941 +#: c-typeck.c:5134 #, gcc-internal-format msgid "return makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:4949 +#: c-typeck.c:5142 #, gcc-internal-format msgid "passing argument %d of %qE makes integer from pointer without a cast" msgstr "" -#: c-typeck.c:4951 +#: c-typeck.c:5144 #, gcc-internal-format msgid "assignment makes integer from pointer without a cast" msgstr "" -#: c-typeck.c:4953 +#: c-typeck.c:5146 #, gcc-internal-format msgid "initialization makes integer from pointer without a cast" msgstr "" -#: c-typeck.c:4955 +#: c-typeck.c:5148 #, gcc-internal-format msgid "return makes integer from pointer without a cast" msgstr "" -#: c-typeck.c:4978 +#: c-typeck.c:5171 #, gcc-internal-format msgid "incompatible types when assigning to type %qT from type %qT" msgstr "" -#: c-typeck.c:4982 +#: c-typeck.c:5176 #, gcc-internal-format msgid "incompatible types when initializing type %qT using type %qT" msgstr "" -#: c-typeck.c:4986 +#: c-typeck.c:5181 #, gcc-internal-format msgid "incompatible types when returning type %qT but %qT was expected" msgstr "" -#: c-typeck.c:5047 +#: c-typeck.c:5245 #, gcc-internal-format msgid "traditional C rejects automatic aggregate initialization" msgstr "" -#: c-typeck.c:5220 c-typeck.c:5236 c-typeck.c:5253 +#: c-typeck.c:5418 c-typeck.c:5434 c-typeck.c:5451 #, gcc-internal-format msgid "(near initialization for %qs)" msgstr "" -#: c-typeck.c:5841 cp/decl.c:5148 +#: c-typeck.c:6054 cp/decl.c:5202 #, gcc-internal-format msgid "opaque vector types cannot be initialized" msgstr "" -#: c-typeck.c:6506 +#: c-typeck.c:6719 #, gcc-internal-format msgid "unknown field %qE specified in initializer" msgstr "" -#: c-typeck.c:7485 +#: c-typeck.c:7698 #, gcc-internal-format msgid "traditional C rejects initialization of unions" msgstr "" -#: c-typeck.c:7804 -#, gcc-internal-format -msgid "jump into statement expression" -msgstr "" - -#: c-typeck.c:7810 -#, gcc-internal-format -msgid "jump into scope of identifier with variably modified type" -msgstr "" - -#: c-typeck.c:7846 +#: c-typeck.c:8037 #, gcc-internal-format msgid "ISO C forbids %<goto *expr;%>" msgstr "" -#: c-typeck.c:7864 cp/typeck.c:6858 +#: c-typeck.c:8059 cp/typeck.c:6998 #, gcc-internal-format msgid "function declared %<noreturn%> has a %<return%> statement" msgstr "" -#: c-typeck.c:7887 +#: c-typeck.c:8082 #, gcc-internal-format msgid "%<return%> with no value, in function returning non-void" msgstr "" -#: c-typeck.c:7897 +#: c-typeck.c:8092 #, gcc-internal-format msgid "%<return%> with a value, in function returning void" msgstr "" -#: c-typeck.c:7899 +#: c-typeck.c:8094 #, gcc-internal-format msgid "ISO C forbids %<return%> with expression, in function returning void" msgstr "" -#: c-typeck.c:7958 +#: c-typeck.c:8155 #, gcc-internal-format msgid "function returns address of local variable" msgstr "" -#: c-typeck.c:8033 cp/semantics.c:951 +#: c-typeck.c:8228 cp/semantics.c:952 #, gcc-internal-format msgid "switch quantity not an integer" msgstr "" -#: c-typeck.c:8045 +#: c-typeck.c:8241 #, gcc-internal-format msgid "%<long%> switch expression not converted to %<int%> in ISO C" msgstr "" -#: c-typeck.c:8081 c-typeck.c:8089 +#: c-typeck.c:8277 c-typeck.c:8285 #, gcc-internal-format msgid "case label is not an integer constant expression" msgstr "" -#: c-typeck.c:8105 -#, gcc-internal-format -msgid "" -"case label in statement expression not containing enclosing switch statement" -msgstr "" - -#: c-typeck.c:8108 -#, gcc-internal-format -msgid "" -"%<default%> label in statement expression not containing enclosing switch " -"statement" -msgstr "" - -#: c-typeck.c:8114 -#, gcc-internal-format -msgid "" -"case label in scope of identifier with variably modified type not containing " -"enclosing switch statement" -msgstr "" - -#: c-typeck.c:8117 -#, gcc-internal-format -msgid "" -"%<default%> label in scope of identifier with variably modified type not " -"containing enclosing switch statement" -msgstr "" - -#: c-typeck.c:8121 +#: c-typeck.c:8291 cp/parser.c:7698 #, gcc-internal-format msgid "case label not within a switch statement" msgstr "" -#: c-typeck.c:8123 +#: c-typeck.c:8293 #, gcc-internal-format msgid "%<default%> label not within a switch statement" msgstr "" -#: c-typeck.c:8200 +#: c-typeck.c:8376 cp/parser.c:7969 #, gcc-internal-format -msgid "%Hsuggest explicit braces to avoid ambiguous %<else%>" +msgid "suggest explicit braces to avoid ambiguous %<else%>" msgstr "" -#: c-typeck.c:8309 cp/cp-gimplify.c:92 +#: c-typeck.c:8485 cp/cp-gimplify.c:92 cp/parser.c:8319 #, gcc-internal-format msgid "break statement not within loop or switch" msgstr "" -#: c-typeck.c:8311 +#: c-typeck.c:8487 cp/parser.c:8340 #, gcc-internal-format msgid "continue statement not within a loop" msgstr "" -#: c-typeck.c:8316 +#: c-typeck.c:8492 cp/parser.c:8330 #, gcc-internal-format msgid "break statement used with OpenMP for loop" msgstr "" -#: c-typeck.c:8342 +#: c-typeck.c:8518 cp/cp-gimplify.c:412 #, gcc-internal-format -msgid "%Hstatement with no effect" +msgid "statement with no effect" msgstr "" -#: c-typeck.c:8366 +#: c-typeck.c:8542 #, gcc-internal-format msgid "expression statement has incomplete type" msgstr "" -#: c-typeck.c:9032 cp/typeck.c:3529 +#: c-typeck.c:9117 cp/typeck.c:3589 #, gcc-internal-format msgid "right shift count is negative" msgstr "" -#: c-typeck.c:9043 cp/typeck.c:3535 +#: c-typeck.c:9128 cp/typeck.c:3596 #, gcc-internal-format msgid "right shift count >= width of type" msgstr "" -#: c-typeck.c:9069 cp/typeck.c:3556 +#: c-typeck.c:9154 cp/typeck.c:3618 #, gcc-internal-format msgid "left shift count is negative" msgstr "" -#: c-typeck.c:9076 cp/typeck.c:3561 +#: c-typeck.c:9161 cp/typeck.c:3624 #, gcc-internal-format msgid "left shift count >= width of type" msgstr "" -#: c-typeck.c:9096 cp/typeck.c:3607 +#: c-typeck.c:9181 cp/typeck.c:3670 #, gcc-internal-format msgid "comparing floating point with == or != is unsafe" msgstr "" -#: c-typeck.c:9120 c-typeck.c:9127 +#: c-typeck.c:9205 c-typeck.c:9212 #, gcc-internal-format msgid "ISO C forbids comparison of %<void *%> with function pointer" msgstr "" -#: c-typeck.c:9134 c-typeck.c:9196 +#: c-typeck.c:9219 c-typeck.c:9281 #, gcc-internal-format msgid "comparison of distinct pointer types lacks a cast" msgstr "" -#: c-typeck.c:9144 c-typeck.c:9153 cp/typeck.c:3630 cp/typeck.c:3642 +#: c-typeck.c:9229 c-typeck.c:9238 cp/typeck.c:3693 cp/typeck.c:3705 #, gcc-internal-format msgid "the address of %qD will never be NULL" msgstr "" -#: c-typeck.c:9160 c-typeck.c:9165 c-typeck.c:9218 c-typeck.c:9223 +#: c-typeck.c:9245 c-typeck.c:9250 c-typeck.c:9303 c-typeck.c:9308 #, gcc-internal-format msgid "comparison between pointer and integer" msgstr "" -#: c-typeck.c:9187 +#: c-typeck.c:9272 #, gcc-internal-format msgid "comparison of complete and incomplete pointers" msgstr "" -#: c-typeck.c:9189 +#: c-typeck.c:9274 #, gcc-internal-format msgid "ISO C forbids ordered comparisons of pointers to functions" msgstr "" -#: c-typeck.c:9204 c-typeck.c:9207 c-typeck.c:9213 +#: c-typeck.c:9289 c-typeck.c:9292 c-typeck.c:9298 #, gcc-internal-format msgid "ordered comparison of pointer with integer zero" msgstr "" -#: c-typeck.c:9539 +#: c-typeck.c:9620 #, gcc-internal-format msgid "used array that cannot be converted to pointer where scalar is required" msgstr "" -#: c-typeck.c:9543 +#: c-typeck.c:9624 #, gcc-internal-format msgid "used struct type value where scalar is required" msgstr "" -#: c-typeck.c:9547 +#: c-typeck.c:9628 #, gcc-internal-format msgid "used union type value where scalar is required" msgstr "" -#: c-typeck.c:9699 cp/semantics.c:3720 +#: c-typeck.c:9785 cp/semantics.c:3821 #, gcc-internal-format msgid "%qE has invalid type for %<reduction%>" msgstr "" -#: c-typeck.c:9733 cp/semantics.c:3733 +#: c-typeck.c:9820 cp/semantics.c:3834 #, gcc-internal-format msgid "%qE has invalid type for %<reduction(%s)%>" msgstr "" -#: c-typeck.c:9749 cp/semantics.c:3743 +#: c-typeck.c:9837 cp/semantics.c:3844 #, gcc-internal-format msgid "%qE must be %<threadprivate%> for %<copyin%>" msgstr "" -#: c-typeck.c:9758 cp/semantics.c:3540 +#: c-typeck.c:9847 cp/semantics.c:3641 #, gcc-internal-format msgid "%qE is not a variable in clause %qs" msgstr "" -#: c-typeck.c:9765 c-typeck.c:9785 c-typeck.c:9805 +#: c-typeck.c:9855 c-typeck.c:9877 c-typeck.c:9899 #, gcc-internal-format msgid "%qE appears more than once in data clauses" msgstr "" -#: c-typeck.c:9779 cp/semantics.c:3563 +#: c-typeck.c:9870 cp/semantics.c:3664 #, gcc-internal-format msgid "%qE is not a variable in clause %<firstprivate%>" msgstr "" -#: c-typeck.c:9799 cp/semantics.c:3585 +#: c-typeck.c:9892 cp/semantics.c:3686 #, gcc-internal-format msgid "%qE is not a variable in clause %<lastprivate%>" msgstr "" -#: c-typeck.c:9859 cp/semantics.c:3784 +#: c-typeck.c:9954 cp/semantics.c:3885 #, gcc-internal-format msgid "%qE is predetermined %qs for %qs" msgstr "" -#: calls.c:2056 +#: c-typeck.c:10043 #, gcc-internal-format -msgid "function call has aggregate value" +msgid "C++ requires promoted type, not enum type, in %<va_arg%>" msgstr "" -#: cfgexpand.c:318 +#: calls.c:2057 #, gcc-internal-format -msgid "Unrecognized GIMPLE statement during RTL expansion" +msgid "function call has aggregate value" msgstr "" -#: cfgexpand.c:2477 +#: cfgexpand.c:3578 #, gcc-internal-format msgid "not protecting local variables: variable length buffer" msgstr "" -#: cfgexpand.c:2480 +#: cfgexpand.c:3581 #, gcc-internal-format msgid "not protecting function: no buffer at least %d bytes long" msgstr "" @@ -22888,7 +23524,7 @@ msgstr "" msgid "verify_flow_info: Basic block %d succ edge is corrupted" msgstr "" -#: cfghooks.c:197 cfgrtl.c:1856 +#: cfghooks.c:197 #, gcc-internal-format msgid "wrong amount of branch edges after unconditional jump %i" msgstr "" @@ -22933,492 +23569,512 @@ msgstr "" msgid "%s does not support split_block" msgstr "" -#: cfghooks.c:482 +#: cfghooks.c:483 #, gcc-internal-format msgid "%s does not support move_block_after" msgstr "" -#: cfghooks.c:495 +#: cfghooks.c:496 #, gcc-internal-format msgid "%s does not support delete_basic_block" msgstr "" -#: cfghooks.c:545 +#: cfghooks.c:546 #, gcc-internal-format msgid "%s does not support split_edge" msgstr "" -#: cfghooks.c:618 +#: cfghooks.c:619 #, gcc-internal-format msgid "%s does not support create_basic_block" msgstr "" -#: cfghooks.c:646 +#: cfghooks.c:647 #, gcc-internal-format msgid "%s does not support can_merge_blocks_p" msgstr "" -#: cfghooks.c:657 +#: cfghooks.c:658 #, gcc-internal-format msgid "%s does not support predict_edge" msgstr "" -#: cfghooks.c:666 +#: cfghooks.c:667 #, gcc-internal-format msgid "%s does not support predicted_by_p" msgstr "" -#: cfghooks.c:680 +#: cfghooks.c:681 #, gcc-internal-format msgid "%s does not support merge_blocks" msgstr "" -#: cfghooks.c:733 +#: cfghooks.c:734 #, gcc-internal-format msgid "%s does not support make_forwarder_block" msgstr "" -#: cfghooks.c:880 +#: cfghooks.c:881 #, gcc-internal-format msgid "%s does not support can_duplicate_block_p" msgstr "" -#: cfghooks.c:902 +#: cfghooks.c:903 #, gcc-internal-format msgid "%s does not support duplicate_block" msgstr "" -#: cfghooks.c:979 +#: cfghooks.c:980 #, gcc-internal-format msgid "%s does not support block_ends_with_call_p" msgstr "" -#: cfghooks.c:990 +#: cfghooks.c:991 #, gcc-internal-format msgid "%s does not support block_ends_with_condjump_p" msgstr "" -#: cfghooks.c:1008 +#: cfghooks.c:1009 #, gcc-internal-format msgid "%s does not support flow_call_edges_add" msgstr "" -#: cfgloop.c:1344 +#: cfgloop.c:1345 #, gcc-internal-format msgid "size of loop %d should be %d, not %d" msgstr "" -#: cfgloop.c:1358 +#: cfgloop.c:1359 #, gcc-internal-format msgid "bb %d do not belong to loop %d" msgstr "" -#: cfgloop.c:1373 +#: cfgloop.c:1374 #, gcc-internal-format msgid "loop %d's header does not have exactly 2 entries" msgstr "" -#: cfgloop.c:1380 +#: cfgloop.c:1381 #, gcc-internal-format msgid "loop %d's latch does not have exactly 1 successor" msgstr "" -#: cfgloop.c:1385 +#: cfgloop.c:1386 #, gcc-internal-format msgid "loop %d's latch does not have header as successor" msgstr "" -#: cfgloop.c:1390 +#: cfgloop.c:1391 #, gcc-internal-format msgid "loop %d's latch does not belong directly to it" msgstr "" -#: cfgloop.c:1396 +#: cfgloop.c:1397 #, gcc-internal-format msgid "loop %d's header does not belong directly to it" msgstr "" -#: cfgloop.c:1402 +#: cfgloop.c:1403 #, gcc-internal-format msgid "loop %d's latch is marked as part of irreducible region" msgstr "" -#: cfgloop.c:1435 +#: cfgloop.c:1436 #, gcc-internal-format msgid "basic block %d should be marked irreducible" msgstr "" -#: cfgloop.c:1441 +#: cfgloop.c:1442 #, gcc-internal-format msgid "basic block %d should not be marked irreducible" msgstr "" -#: cfgloop.c:1449 +#: cfgloop.c:1450 #, gcc-internal-format msgid "edge from %d to %d should be marked irreducible" msgstr "" -#: cfgloop.c:1456 +#: cfgloop.c:1457 #, gcc-internal-format msgid "edge from %d to %d should not be marked irreducible" msgstr "" -#: cfgloop.c:1471 +#: cfgloop.c:1472 #, gcc-internal-format msgid "corrupted head of the exits list of loop %d" msgstr "" -#: cfgloop.c:1489 +#: cfgloop.c:1490 #, gcc-internal-format msgid "corrupted exits list of loop %d" msgstr "" -#: cfgloop.c:1498 +#: cfgloop.c:1499 #, gcc-internal-format msgid "nonempty exits list of loop %d, but exits are not recorded" msgstr "" -#: cfgloop.c:1524 +#: cfgloop.c:1525 #, gcc-internal-format msgid "Exit %d->%d not recorded" msgstr "" -#: cfgloop.c:1542 +#: cfgloop.c:1543 #, gcc-internal-format msgid "Wrong list of exited loops for edge %d->%d" msgstr "" -#: cfgloop.c:1551 +#: cfgloop.c:1552 #, gcc-internal-format msgid "Too many loop exits recorded" msgstr "" -#: cfgloop.c:1562 +#: cfgloop.c:1563 #, gcc-internal-format msgid "%d exits recorded for loop %d (having %d exits)" msgstr "" -#: cfgrtl.c:1750 +#: cfgrtl.c:1830 #, gcc-internal-format msgid "BB_RTL flag not set for block %d" msgstr "" -#: cfgrtl.c:1757 +#: cfgrtl.c:1837 #, gcc-internal-format msgid "insn %d basic block pointer is %d, should be %d" msgstr "" -#: cfgrtl.c:1768 +#: cfgrtl.c:1848 #, gcc-internal-format msgid "insn %d in header of bb %d has non-NULL basic block" msgstr "" -#: cfgrtl.c:1776 +#: cfgrtl.c:1856 #, gcc-internal-format msgid "insn %d in footer of bb %d has non-NULL basic block" msgstr "" -#: cfgrtl.c:1798 +#: cfgrtl.c:1878 #, gcc-internal-format msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" msgstr "" -#: cfgrtl.c:1813 +#: cfgrtl.c:1893 #, gcc-internal-format msgid "fallthru edge crosses section boundary (bb %i)" msgstr "" -#: cfgrtl.c:1838 +#: cfgrtl.c:1917 #, gcc-internal-format msgid "missing REG_EH_REGION note in the end of bb %i" msgstr "" -#: cfgrtl.c:1846 +#: cfgrtl.c:1922 +#, gcc-internal-format +msgid "too many eh edges %i" +msgstr "" + +#: cfgrtl.c:1930 #, gcc-internal-format msgid "too many outgoing branch edges from bb %i" msgstr "" -#: cfgrtl.c:1851 +#: cfgrtl.c:1935 #, gcc-internal-format msgid "fallthru edge after unconditional jump %i" msgstr "" -#: cfgrtl.c:1862 +#: cfgrtl.c:1940 +#, gcc-internal-format +msgid "wrong number of branch edges after unconditional jump %i" +msgstr "" + +#: cfgrtl.c:1947 #, gcc-internal-format msgid "wrong amount of branch edges after conditional jump %i" msgstr "" -#: cfgrtl.c:1868 +#: cfgrtl.c:1953 #, gcc-internal-format msgid "call edges for non-call insn in bb %i" msgstr "" -#: cfgrtl.c:1877 +#: cfgrtl.c:1962 #, gcc-internal-format msgid "abnormal edges for no purpose in bb %i" msgstr "" -#: cfgrtl.c:1889 +#: cfgrtl.c:1974 #, gcc-internal-format msgid "insn %d inside basic block %d but block_for_insn is NULL" msgstr "" -#: cfgrtl.c:1893 +#: cfgrtl.c:1978 #, gcc-internal-format msgid "insn %d inside basic block %d but block_for_insn is %i" msgstr "" -#: cfgrtl.c:1907 cfgrtl.c:1917 +#: cfgrtl.c:1992 cfgrtl.c:2002 #, gcc-internal-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" msgstr "" -#: cfgrtl.c:1930 +#: cfgrtl.c:2015 #, gcc-internal-format msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" msgstr "" -#: cfgrtl.c:1940 +#: cfgrtl.c:2025 #, gcc-internal-format msgid "in basic block %d:" msgstr "" -#: cfgrtl.c:1993 cfgrtl.c:2083 +#: cfgrtl.c:2078 cfgrtl.c:2170 #, gcc-internal-format msgid "insn %d outside of basic blocks has non-NULL bb field" msgstr "" -#: cfgrtl.c:2001 +#: cfgrtl.c:2086 #, gcc-internal-format msgid "end insn %d for block %d not found in the insn stream" msgstr "" -#: cfgrtl.c:2014 +#: cfgrtl.c:2099 #, gcc-internal-format msgid "insn %d is in multiple basic blocks (%d and %d)" msgstr "" -#: cfgrtl.c:2026 +#: cfgrtl.c:2111 #, gcc-internal-format msgid "head insn %d for block %d not found in the insn stream" msgstr "" -#: cfgrtl.c:2046 +#: cfgrtl.c:2130 #, gcc-internal-format msgid "missing barrier after block %i" msgstr "" -#: cfgrtl.c:2059 +#: cfgrtl.c:2146 #, gcc-internal-format msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" msgstr "" -#: cfgrtl.c:2068 +#: cfgrtl.c:2155 #, gcc-internal-format msgid "verify_flow_info: Incorrect fallthru %i->%i" msgstr "" -#: cfgrtl.c:2101 +#: cfgrtl.c:2188 #, gcc-internal-format msgid "basic blocks not laid down consecutively" msgstr "" -#: cfgrtl.c:2140 +#: cfgrtl.c:2225 #, gcc-internal-format msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" msgstr "" -#: cgraph.c:1494 +#: cgraph.c:1601 #, gcc-internal-format msgid "%D renamed after being referenced in assembly" msgstr "" -#: cgraphunit.c:580 +#: cgraphunit.c:581 #, gcc-internal-format msgid "aux field set for edge %s->%s" msgstr "" -#: cgraphunit.c:587 +#: cgraphunit.c:588 #, gcc-internal-format msgid "Execution count is negative" msgstr "" -#: cgraphunit.c:594 +#: cgraphunit.c:593 +#, gcc-internal-format +msgid "Externally visible inline clone" +msgstr "" + +#: cgraphunit.c:598 +#, gcc-internal-format +msgid "Inline clone with address taken" +msgstr "" + +#: cgraphunit.c:603 +#, gcc-internal-format +msgid "Inline clone is needed" +msgstr "" + +#: cgraphunit.c:610 #, gcc-internal-format msgid "caller edge count is negative" msgstr "" -#: cgraphunit.c:599 +#: cgraphunit.c:615 #, gcc-internal-format msgid "caller edge frequency is negative" msgstr "" -#: cgraphunit.c:604 +#: cgraphunit.c:620 #, gcc-internal-format msgid "caller edge frequency is too large" msgstr "" -#: cgraphunit.c:613 +#: cgraphunit.c:629 #, gcc-internal-format msgid "inlined_to pointer is wrong" msgstr "" -#: cgraphunit.c:618 +#: cgraphunit.c:634 #, gcc-internal-format msgid "multiple inline callers" msgstr "" -#: cgraphunit.c:625 +#: cgraphunit.c:641 #, gcc-internal-format msgid "inlined_to pointer set for noninline callers" msgstr "" -#: cgraphunit.c:631 +#: cgraphunit.c:647 #, gcc-internal-format msgid "inlined_to pointer is set but no predecessors found" msgstr "" -#: cgraphunit.c:636 +#: cgraphunit.c:652 #, gcc-internal-format msgid "inlined_to pointer refers to itself" msgstr "" -#: cgraphunit.c:642 +#: cgraphunit.c:658 #, gcc-internal-format msgid "node not found in cgraph_hash" msgstr "" -#: cgraphunit.c:654 +#: cgraphunit.c:670 #, gcc-internal-format msgid "node has wrong clone_of" msgstr "" -#: cgraphunit.c:666 +#: cgraphunit.c:682 #, gcc-internal-format msgid "node has wrong clone list" msgstr "" -#: cgraphunit.c:672 +#: cgraphunit.c:688 #, gcc-internal-format msgid "node is in clone list but it is not clone" msgstr "" -#: cgraphunit.c:677 +#: cgraphunit.c:693 #, gcc-internal-format msgid "node has wrong prev_clone pointer" msgstr "" -#: cgraphunit.c:682 +#: cgraphunit.c:698 #, gcc-internal-format msgid "double linked list of clones corrupted" msgstr "" -#: cgraphunit.c:711 +#: cgraphunit.c:728 #, gcc-internal-format msgid "shared call_stmt:" msgstr "" -#: cgraphunit.c:718 +#: cgraphunit.c:735 #, gcc-internal-format msgid "edge points to wrong declaration:" msgstr "" -#: cgraphunit.c:727 +#: cgraphunit.c:744 #, gcc-internal-format msgid "missing callgraph edge for call stmt:" msgstr "" -#: cgraphunit.c:743 +#: cgraphunit.c:760 #, gcc-internal-format msgid "edge %s->%s has no corresponding call_stmt" msgstr "" -#: cgraphunit.c:755 +#: cgraphunit.c:772 #, gcc-internal-format msgid "verify_cgraph_node failed" msgstr "" -#: cgraphunit.c:848 cgraphunit.c:871 +#: cgraphunit.c:875 cgraphunit.c:894 #, gcc-internal-format -msgid "%J%<externally_visible%> attribute have effect only on public objects" +msgid "%<externally_visible%> attribute have effect only on public objects" msgstr "" -#: cgraphunit.c:1065 +#: cgraphunit.c:1132 #, gcc-internal-format msgid "failed to reclaim unneeded function" msgstr "" -#: cgraphunit.c:1400 +#: cgraphunit.c:1492 #, gcc-internal-format msgid "nodes with unreleased memory found" msgstr "" -#: collect2.c:1210 +#: collect2.c:1588 #, gcc-internal-format msgid "unknown demangling style '%s'" msgstr "" -#: collect2.c:1533 +#: collect2.c:1946 lto/lto.c:1172 #, gcc-internal-format msgid "%s terminated with signal %d [%s]%s" msgstr "" -#: collect2.c:1551 -#, gcc-internal-format -msgid "%s returned %d exit status" -msgstr "" - -#: collect2.c:2262 +#: collect2.c:2748 #, gcc-internal-format msgid "cannot find 'ldd'" msgstr "" -#: convert.c:69 +#: convert.c:79 #, gcc-internal-format msgid "cannot convert to a pointer type" msgstr "" -#: convert.c:370 +#: convert.c:380 #, gcc-internal-format msgid "pointer value used where a floating point value was expected" msgstr "" -#: convert.c:374 +#: convert.c:384 #, gcc-internal-format msgid "aggregate value used where a float was expected" msgstr "" -#: convert.c:399 +#: convert.c:409 #, gcc-internal-format msgid "conversion to incomplete type" msgstr "" -#: convert.c:769 convert.c:845 +#: convert.c:819 convert.c:895 #, gcc-internal-format msgid "can't convert between vector values of different size" msgstr "" -#: convert.c:775 +#: convert.c:825 #, gcc-internal-format msgid "aggregate value used where an integer was expected" msgstr "" -#: convert.c:825 +#: convert.c:875 #, gcc-internal-format msgid "pointer value used where a complex was expected" msgstr "" -#: convert.c:829 +#: convert.c:879 #, gcc-internal-format msgid "aggregate value used where a complex was expected" msgstr "" -#: convert.c:851 +#: convert.c:901 #, gcc-internal-format msgid "can't convert value to a vector" msgstr "" -#: convert.c:890 +#: convert.c:940 #, gcc-internal-format msgid "aggregate value used where a fixed-point was expected" msgstr "" @@ -23483,37 +24139,37 @@ msgstr "" msgid "this can result in poorly optimized code" msgstr "" -#: coverage.c:569 +#: coverage.c:570 #, gcc-internal-format msgid "cannot open %s" msgstr "" -#: coverage.c:604 +#: coverage.c:605 #, gcc-internal-format msgid "error writing %qs" msgstr "" -#: dbgcnt.c:134 +#: dbgcnt.c:135 #, gcc-internal-format msgid "Can not find a valid counter:value pair:" msgstr "" -#: dbgcnt.c:135 +#: dbgcnt.c:136 #, gcc-internal-format msgid "-fdbg-cnt=%s" msgstr "" -#: dbgcnt.c:136 +#: dbgcnt.c:137 #, gcc-internal-format msgid " %s" msgstr "" -#: dbxout.c:3228 +#: dbxout.c:3257 #, gcc-internal-format msgid "common symbol debug info is not structured as symbol+offset" msgstr "" -#: diagnostic.c:724 +#: diagnostic.c:728 #, gcc-internal-format msgid "in %s, at %s:%d" msgstr "" @@ -23528,253 +24184,250 @@ msgstr "" msgid "dominator of %d should be %d, not %d" msgstr "" -#: dwarf2out.c:4543 +#: dwarf2out.c:4011 +#, gcc-internal-format +msgid "" +"Multiple EH personalities are supported only with assemblers supporting .cfi." +"personality directive." +msgstr "" + +#: dwarf2out.c:5389 #, gcc-internal-format msgid "DW_LOC_OP %s not implemented" msgstr "" -#: emit-rtl.c:2457 +#: emit-rtl.c:2437 #, gcc-internal-format msgid "invalid rtl sharing found in the insn" msgstr "" -#: emit-rtl.c:2459 +#: emit-rtl.c:2439 #, gcc-internal-format msgid "shared rtx" msgstr "" -#: emit-rtl.c:2461 +#: emit-rtl.c:2441 #, gcc-internal-format msgid "internal consistency failure" msgstr "" -#: emit-rtl.c:3521 +#: emit-rtl.c:3599 #, gcc-internal-format msgid "ICE: emit_insn used where emit_jump_insn needed:\n" msgstr "" -#: errors.c:132 +#: errors.c:133 #, gcc-internal-format msgid "abort in %s, at %s:%d" msgstr "" -#: except.c:199 +#: except.c:223 #, gcc-internal-format msgid "exception handling disabled, use -fexceptions to enable" msgstr "" -#: except.c:3387 +#: except.c:2026 #, gcc-internal-format msgid "argument of %<__builtin_eh_return_regno%> must be constant" msgstr "" -#: except.c:3520 +#: except.c:2163 #, gcc-internal-format msgid "__builtin_eh_return not supported on this target" msgstr "" -#: except.c:4470 -#, gcc-internal-format -msgid "Try region %i has wrong rh_catch pointer to %i" -msgstr "" - -#: except.c:4480 -#, gcc-internal-format -msgid "Catch region %i has different outer region than try region %i" -msgstr "" - -#: except.c:4486 -#, gcc-internal-format -msgid "Catch region %i has corrupted catchlist" -msgstr "" - -#: except.c:4495 +#: except.c:3334 except.c:3359 #, gcc-internal-format -msgid "Try region %i has wrong last_catch pointer to %i instead of %i" +msgid "region_array is corrupted for region %i" msgstr "" -#: except.c:4507 +#: except.c:3347 except.c:3378 #, gcc-internal-format -msgid "Catch region %i should be followed by try" +msgid "lp_array is corrupted for lp %i" msgstr "" -#: except.c:4545 except.c:4556 +#: except.c:3364 #, gcc-internal-format -msgid "region_array is corrupted for region %i" +msgid "outer block of region %i is wrong" msgstr "" -#: except.c:4561 +#: except.c:3369 #, gcc-internal-format -msgid "outer block of region %i is wrong" +msgid "negative nesting depth of region %i" msgstr "" -#: except.c:4567 +#: except.c:3383 #, gcc-internal-format -msgid "region %i may contain throw and is contained in region that may not" +msgid "region of lp %i is wrong" msgstr "" -#: except.c:4573 +#: except.c:3410 #, gcc-internal-format -msgid "negative nesting depth of region %i" +msgid "tree list ends on depth %i" msgstr "" -#: except.c:4594 +#: except.c:3415 #, gcc-internal-format -msgid "tree list ends on depth %i" +msgid "region_array does not match region_tree" msgstr "" -#: except.c:4599 +#: except.c:3420 #, gcc-internal-format -msgid "array does not match the region tree" +msgid "lp_array does not match region_tree" msgstr "" -#: except.c:4609 +#: except.c:3427 #, gcc-internal-format msgid "verify_eh_tree failed" msgstr "" -#: explow.c:1263 +#: explow.c:1294 #, gcc-internal-format msgid "stack limits not supported on this target" msgstr "" -#: expr.c:8060 +#: expr.c:9169 msgid "%Kcall to %qs declared with attribute error: %s" msgstr "" -#: expr.c:8067 +#: expr.c:9176 msgid "%Kcall to %qs declared with attribute warning: %s" msgstr "" -#: final.c:1432 +#: final.c:1459 #, gcc-internal-format msgid "invalid argument %qs to -fdebug-prefix-map" msgstr "" -#: final.c:1533 +#: final.c:1576 #, gcc-internal-format msgid "the frame size of %wd bytes is larger than %wd bytes" msgstr "" -#: fixed-value.c:104 +#: final.c:4371 toplev.c:1920 #, gcc-internal-format -msgid "large fixed-point constant implicitly truncated to fixed-point type" +msgid "could not open final insn dump file %qs: %s" +msgstr "" + +#: final.c:4425 +#, gcc-internal-format +msgid "could not close final insn dump file %qs: %s" msgstr "" -#: fold-const.c:991 tree-ssa-loop-niter.c:1880 tree-vrp.c:5723 tree-vrp.c:5764 +#: fixed-value.c:104 #, gcc-internal-format -msgid "%H%s" +msgid "large fixed-point constant implicitly truncated to fixed-point type" msgstr "" -#: fold-const.c:1361 +#: fold-const.c:1366 #, gcc-internal-format msgid "assuming signed overflow does not occur when negating a division" msgstr "" -#: fold-const.c:4059 fold-const.c:4070 +#: fold-const.c:4264 fold-const.c:4276 #, gcc-internal-format msgid "comparison is always %d due to width of bit-field" msgstr "" -#: fold-const.c:5404 +#: fold-const.c:5616 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying range test" msgstr "" -#: fold-const.c:5781 fold-const.c:5796 +#: fold-const.c:6011 fold-const.c:6026 #, gcc-internal-format msgid "comparison is always %d" msgstr "" -#: fold-const.c:5925 +#: fold-const.c:6161 #, gcc-internal-format msgid "%<or%> of unmatched not-equal tests is always 1" msgstr "" -#: fold-const.c:5930 +#: fold-const.c:6166 #, gcc-internal-format msgid "%<and%> of mutually exclusive equal-tests is always 0" msgstr "" -#: fold-const.c:8833 +#: fold-const.c:9127 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when reducing constant in comparison" msgstr "" -#: fold-const.c:9200 +#: fold-const.c:9499 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when combining constants around a " "comparison" msgstr "" -#: fold-const.c:13762 +#: fold-const.c:14202 #, gcc-internal-format msgid "fold check: original tree changed by fold" msgstr "" -#: function.c:251 +#: function.c:254 #, gcc-internal-format -msgid "%Jtotal size of local objects too large" +msgid "total size of local objects too large" msgstr "" -#: function.c:916 varasm.c:2145 +#: function.c:919 varasm.c:2152 #, gcc-internal-format msgid "size of variable %q+D is too large" msgstr "" -#: function.c:1624 gimplify.c:4931 +#: function.c:1627 gimplify.c:4924 #, gcc-internal-format msgid "impossible constraint in %<asm%>" msgstr "" -#: function.c:3730 +#: function.c:3750 #, gcc-internal-format msgid "variable %q+D might be clobbered by %<longjmp%> or %<vfork%>" msgstr "" -#: function.c:3751 +#: function.c:3771 #, gcc-internal-format msgid "argument %q+D might be clobbered by %<longjmp%> or %<vfork%>" msgstr "" -#: function.c:4196 +#: function.c:4216 #, gcc-internal-format msgid "function returns an aggregate" msgstr "" -#: function.c:4597 +#: function.c:4618 #, gcc-internal-format msgid "unused parameter %q+D" msgstr "" -#: gcc.c:1318 +#: gcc.c:1366 #, gcc-internal-format msgid "ambiguous abbreviation %s" msgstr "" -#: gcc.c:1345 +#: gcc.c:1393 #, gcc-internal-format msgid "incomplete '%s' option" msgstr "" -#: gcc.c:1356 +#: gcc.c:1404 #, gcc-internal-format msgid "missing argument to '%s' option" msgstr "" -#: gcc.c:1369 +#: gcc.c:1417 #, gcc-internal-format msgid "extraneous argument to '%s' option" msgstr "" -#: gcc.c:4092 +#: gcc.c:4276 #, gcc-internal-format msgid "warning: -pipe ignored because -save-temps specified" msgstr "" -#: gcc.c:4385 +#: gcc.c:4583 #, gcc-internal-format msgid "warning: '-x %s' after last input file has no effect" msgstr "" @@ -23782,125 +24435,165 @@ msgstr "" #. Catch the case where a spec string contains something like #. '%{foo:%*}'. i.e. there is no * in the pattern on the left #. hand side of the :. -#: gcc.c:5541 +#: gcc.c:5830 #, gcc-internal-format msgid "spec failure: '%%*' has not been initialized by pattern match" msgstr "" -#: gcc.c:5550 +#: gcc.c:5839 #, gcc-internal-format msgid "warning: use of obsolete %%[ operator in specs" msgstr "" -#: gcc.c:5631 +#: gcc.c:5920 #, gcc-internal-format msgid "spec failure: unrecognized spec option '%c'" msgstr "" -#: gcc.c:6528 +#: gcc.c:6655 +#, gcc-internal-format +msgid "%s: could not determine length of compare-debug file %s" +msgstr "" + +#: gcc.c:6666 +#, gcc-internal-format +msgid "%s: -fcompare-debug failure (length)" +msgstr "" + +#: gcc.c:6676 gcc.c:6717 +#, gcc-internal-format +msgid "%s: could not open compare-debug file %s" +msgstr "" + +#: gcc.c:6696 gcc.c:6733 +#, gcc-internal-format +msgid "%s: -fcompare-debug failure" +msgstr "" + +#: gcc.c:6969 #, gcc-internal-format msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC" msgstr "" -#: gcc.c:6551 +#: gcc.c:6992 #, gcc-internal-format msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC" msgstr "" -#: gcc.c:6638 +#: gcc.c:7100 #, gcc-internal-format msgid "unrecognized option '-%s'" msgstr "" -#: gcc.c:6871 gcc.c:6934 +#: gcc.c:7333 gcc.c:7396 #, gcc-internal-format msgid "%s: %s compiler not installed on this system" msgstr "" -#: gcc.c:7034 +#: gcc.c:7420 +#, gcc-internal-format +msgid "Recompiling with -fcompare-debug" +msgstr "" + +#: gcc.c:7434 +#, gcc-internal-format +msgid "during -fcompare-debug recompilation" +msgstr "" + +#: gcc.c:7443 +#, gcc-internal-format +msgid "Comparing final insns dumps" +msgstr "" + +#: gcc.c:7567 #, gcc-internal-format msgid "%s: linker input file unused because linking not done" msgstr "" -#: gcc.c:7074 +#: gcc.c:7607 #, gcc-internal-format msgid "language %s not recognized" msgstr "" -#: gcc.c:7145 +#: gcc.c:7678 lto/lto.c:1162 #, gcc-internal-format msgid "%s: %s" msgstr "" -#: gcse.c:4910 +#: gcse.c:4933 #, gcc-internal-format msgid "%s: %d basic blocks and %d edges/basic block" msgstr "" -#: gcse.c:4923 +#: gcse.c:4946 #, gcc-internal-format msgid "%s: %d basic blocks and %d registers" msgstr "" -#: ggc-common.c:400 ggc-common.c:408 ggc-common.c:476 ggc-common.c:495 -#: ggc-page.c:2173 ggc-page.c:2204 ggc-page.c:2211 ggc-zone.c:2437 -#: ggc-zone.c:2448 ggc-zone.c:2452 +#: ggc-common.c:466 ggc-common.c:474 ggc-common.c:542 ggc-common.c:561 +#: ggc-page.c:2180 ggc-page.c:2211 ggc-page.c:2218 ggc-zone.c:2442 +#: ggc-zone.c:2453 ggc-zone.c:2457 #, gcc-internal-format msgid "can't write PCH file: %m" msgstr "" -#: ggc-common.c:488 config/i386/host-cygwin.c:57 +#: ggc-common.c:554 config/i386/host-cygwin.c:57 #, gcc-internal-format msgid "can't get position in PCH file: %m" msgstr "" -#: ggc-common.c:498 +#: ggc-common.c:564 #, gcc-internal-format msgid "can't write padding to PCH file: %m" msgstr "" -#: ggc-common.c:553 ggc-common.c:561 ggc-common.c:568 ggc-common.c:571 -#: ggc-common.c:581 ggc-common.c:584 ggc-page.c:2301 ggc-zone.c:2471 +#: ggc-common.c:619 ggc-common.c:627 ggc-common.c:634 ggc-common.c:637 +#: ggc-common.c:647 ggc-common.c:650 ggc-page.c:2308 ggc-zone.c:2476 #, gcc-internal-format msgid "can't read PCH file: %m" msgstr "" -#: ggc-common.c:576 +#: ggc-common.c:642 #, gcc-internal-format msgid "had to relocate PCH" msgstr "" -#: ggc-page.c:1505 +#: ggc-page.c:1506 #, gcc-internal-format msgid "open /dev/zero: %m" msgstr "" -#: ggc-page.c:2189 ggc-page.c:2195 +#: ggc-page.c:2196 ggc-page.c:2202 #, gcc-internal-format msgid "can't write PCH file" msgstr "" -#: ggc-zone.c:2434 ggc-zone.c:2445 +#: ggc-zone.c:2439 ggc-zone.c:2450 #, gcc-internal-format msgid "can't seek PCH file: %m" msgstr "" -#: gimple.c:1113 +#: gimple.c:1032 #, gcc-internal-format msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d" msgstr "" -#: gimplify.c:4816 +#: gimplify.c:2423 +#, gcc-internal-format +msgid "using result of function returning %<void%>" +msgstr "" + +#: gimplify.c:4809 #, gcc-internal-format msgid "invalid lvalue in asm output %d" msgstr "" -#: gimplify.c:4932 +#: gimplify.c:4925 #, gcc-internal-format msgid "non-memory input %d must stay in memory" msgstr "" -#: gimplify.c:4947 +#: gimplify.c:4940 #, gcc-internal-format msgid "memory input %d is not directly addressable" msgstr "" @@ -23912,7 +24605,7 @@ msgstr "" #: gimplify.c:5443 #, gcc-internal-format -msgid "%Henclosing parallel" +msgid "enclosing parallel" msgstr "" #: gimplify.c:5548 @@ -23935,99 +24628,250 @@ msgstr "" msgid "%s variable %qE is private in outer context" msgstr "" -#: gimplify.c:7252 +#: gimplify.c:7246 #, gcc-internal-format msgid "gimplification failed" msgstr "" -#: graph.c:401 java/jcf-parse.c:1750 java/jcf-parse.c:1890 objc/objc-act.c:496 +#: graph.c:401 java/jcf-parse.c:1751 java/jcf-parse.c:1892 objc/objc-act.c:524 #, gcc-internal-format msgid "can't open %s: %m" msgstr "" -#: graphite.c:6188 toplev.c:1791 +#: graphite.c:299 toplev.c:1836 #, gcc-internal-format msgid "Graphite loop optimizations cannot be used" msgstr "" -#: haifa-sched.c:184 +#: haifa-sched.c:185 #, gcc-internal-format msgid "fix_sched_param: unknown param: %s" msgstr "" -#: ira.c:1439 ira.c:1452 ira.c:1466 +#: ira.c:1472 ira.c:1485 ira.c:1499 #, gcc-internal-format msgid "%s cannot be used in asm here" msgstr "" -#: omp-low.c:1819 +#: lto-cgraph.c:508 +#, gcc-internal-format +msgid "bytecode stream: found multiple instances of cgraph node %d" +msgstr "" + +#: lto-cgraph.c:549 +#, gcc-internal-format +msgid "bytecode stream: no caller found while reading edge" +msgstr "" + +#: lto-cgraph.c:553 +#, gcc-internal-format +msgid "bytecode stream: no callee found while reading edge" +msgstr "" + +#: lto-cgraph.c:602 +#, gcc-internal-format +msgid "bytecode stream: found empty cgraph node" +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 +#, gcc-internal-format +msgid "compressed stream: %s" +msgstr "" + +#: lto-section-in.c:66 +#, gcc-internal-format +msgid "" +"bytecode stream: trying to read %d bytes after the end of the input buffer" +msgstr "" + +#: lto-streamer-in.c:80 +#, gcc-internal-format +msgid "bytecode stream: unexpected tag %s" +msgstr "" + +#: lto-streamer-in.c:91 +#, gcc-internal-format +msgid "bytecode stream: tag %s is not in the expected range [%s, %s]" +msgstr "" + +#: lto-streamer-in.c:105 +#, gcc-internal-format +msgid "bytecode stream: expected tag %s instead of %s" +msgstr "" + +#: lto-streamer-in.c:149 +#, gcc-internal-format +msgid "bytecode stream: string too long for the string table" +msgstr "" + +#: lto-streamer-in.c:209 +#, gcc-internal-format +msgid "bytecode stream: found non-null terminated string" +msgstr "" + +#: lto-streamer-in.c:1102 +#, gcc-internal-format +msgid "bytecode stream: unknown GIMPLE statement tag %s" +msgstr "" + +#: lto-streamer-in.c:2357 +#, gcc-internal-format +msgid "optimization options not supported yet" +msgstr "" + +#: lto-streamer-in.c:2362 +#, gcc-internal-format +msgid "target optimization options not supported yet" +msgstr "" + +#: lto-streamer-in.c:2505 +#, gcc-internal-format +msgid "bytecode stream: tried to jump backwards in the stream" +msgstr "" + +#: lto-streamer-in.c:2549 +#, gcc-internal-format +msgid "target specific builtin not available" +msgstr "" + +#: lto-streamer-out.c:1169 +#, gcc-internal-format +msgid "gimple bytecode streams do not support the optimization attribute" +msgstr "" + +#: lto-streamer-out.c:1172 +#, gcc-internal-format +msgid "gimple bytecode streams do not support the target attribute" +msgstr "" + +#: lto-streamer-out.c:1190 +#, gcc-internal-format +msgid "tree code %qs is not supported in gimple streams" +msgstr "" + +#: lto-streamer-out.c:1234 +#, gcc-internal-format +msgid "" +"gimple bytecode streams do not support machine specific builtin functions on " +"this target" +msgstr "" + +#: lto-streamer.c:173 +#, gcc-internal-format +msgid "bytecode stream: unexpected LTO section %s" +msgstr "" + +#: lto-streamer.c:856 +#, gcc-internal-format +msgid "" +"bytecode stream generated with LTO version %d.%d instead of the expected %d.%" +"d" +msgstr "" + +#: lto-symtab.c:410 +#, gcc-internal-format +msgid "%qD has already been defined" +msgstr "" + +#: lto-symtab.c:412 +#, gcc-internal-format +msgid "previously defined here" +msgstr "" + +#: lto-symtab.c:482 +#, gcc-internal-format +msgid "type of %qD does not match original declaration" +msgstr "" + +#: lto-symtab.c:489 +#, gcc-internal-format +msgid "alignment of %qD is bigger than original declaration" +msgstr "" + +#: lto-symtab.c:495 lto-symtab.c:592 +#, gcc-internal-format +msgid "previously declared here" +msgstr "" + +#: lto-symtab.c:575 +#, gcc-internal-format +msgid "variable %qD redeclared as function" +msgstr "" + +#: lto-symtab.c:581 +#, gcc-internal-format +msgid "function %qD redeclared as variable" +msgstr "" + +#: omp-low.c:1840 #, gcc-internal-format msgid "" "barrier region may not be closely nested inside of work-sharing, critical, " "ordered, master or explicit task region" msgstr "" -#: omp-low.c:1824 +#: omp-low.c:1845 #, gcc-internal-format msgid "" "work-sharing region may not be closely nested inside of work-sharing, " "critical, ordered, master or explicit task region" msgstr "" -#: omp-low.c:1842 +#: omp-low.c:1863 #, gcc-internal-format msgid "" "master region may not be closely nested inside of work-sharing or explicit " "task region" msgstr "" -#: omp-low.c:1857 +#: omp-low.c:1878 #, gcc-internal-format msgid "" "ordered region may not be closely nested inside of critical or explicit task " "region" msgstr "" -#: omp-low.c:1863 +#: omp-low.c:1884 #, gcc-internal-format msgid "" "ordered region must be closely nested inside a loop region with an ordered " "clause" msgstr "" -#: omp-low.c:1878 +#: omp-low.c:1899 #, gcc-internal-format msgid "" "critical region may not be nested inside a critical region with the same name" msgstr "" -#: omp-low.c:6695 cp/decl.c:2667 +#: omp-low.c:6756 cp/decl.c:2712 cp/parser.c:8327 cp/parser.c:8347 #, gcc-internal-format msgid "invalid exit from OpenMP structured block" msgstr "" -#: omp-low.c:6697 omp-low.c:6702 +#: omp-low.c:6758 omp-low.c:6763 #, gcc-internal-format msgid "invalid entry to OpenMP structured block" msgstr "" #. Otherwise, be vague and lazy, but efficient. -#: omp-low.c:6705 +#: omp-low.c:6766 #, gcc-internal-format msgid "invalid branch to/from an OpenMP structured block" msgstr "" -#: opts.c:169 +#: opts.c:171 #, gcc-internal-format msgid "argument %qs to %<-femit-struct-debug-detailed%> not recognized" msgstr "" -#: opts.c:203 +#: opts.c:205 #, gcc-internal-format msgid "argument %qs to %<-femit-struct-debug-detailed%> unknown" msgstr "" -#: opts.c:209 +#: opts.c:211 #, gcc-internal-format msgid "" "%<-femit-struct-debug-detailed=dir:...%> must allow at least as much as %<-" @@ -24035,147 +24879,156 @@ msgid "" msgstr "" #. Eventually this should become a hard error IMO. -#: opts.c:435 +#: opts.c:451 #, gcc-internal-format msgid "command line option \"%s\" is valid for %s but not for %s" msgstr "" -#: opts.c:466 opts.c:762 +#: opts.c:482 opts.c:765 #, gcc-internal-format msgid "unrecognized command line option \"%s\"" msgstr "" -#: opts.c:527 +#: opts.c:543 #, gcc-internal-format msgid "command line option %qs is not supported by this configuration" msgstr "" -#: opts.c:580 +#: opts.c:596 #, gcc-internal-format msgid "missing argument to \"%s\"" msgstr "" -#: opts.c:590 +#: opts.c:606 #, gcc-internal-format msgid "argument to \"%s\" should be a non-negative integer" msgstr "" -#: opts.c:990 +#: opts.c:998 #, gcc-internal-format msgid "Section anchors must be disabled when unit-at-a-time is disabled." msgstr "" -#: opts.c:994 +#: opts.c:1002 #, gcc-internal-format msgid "Toplevel reorder must be disabled when unit-at-a-time is disabled." msgstr "" -#: opts.c:1009 +#: opts.c:1017 #, gcc-internal-format msgid "section anchors must be disabled when toplevel reorder is disabled" msgstr "" -#: opts.c:1039 +#: opts.c:1052 config/sh/sh.c:896 #, gcc-internal-format -msgid "-freorder-blocks-and-partition does not work with exceptions" +msgid "" +"-freorder-blocks-and-partition does not work with exceptions on this " +"architecture" msgstr "" -#: opts.c:1050 +#: opts.c:1069 config/sh/sh.c:904 #, gcc-internal-format -msgid "-freorder-blocks-and-partition does not support unwind info" +msgid "" +"-freorder-blocks-and-partition does not support unwind info on this " +"architecture" msgstr "" -#: opts.c:1064 +#: opts.c:1088 #, gcc-internal-format msgid "-freorder-blocks-and-partition does not work on this architecture" msgstr "" -#: opts.c:1078 +#: opts.c:1102 #, gcc-internal-format msgid "-fira-algorithm=CB does not work on this architecture" msgstr "" -#: opts.c:1387 +#: opts.c:1411 #, gcc-internal-format msgid "unrecognized include_flags 0x%x passed to print_specific_help" msgstr "" -#: opts.c:1725 +#: opts.c:1749 #, gcc-internal-format msgid "unknown excess precision style \"%s\"" msgstr "" -#: opts.c:1762 +#: opts.c:1786 #, gcc-internal-format msgid "structure alignment must be a small power of two, not %d" msgstr "" -#: opts.c:1778 opts.c:1786 +#: opts.c:1802 opts.c:1810 #, gcc-internal-format msgid "Plugin support is disabled. Configure with --enable-plugin." msgstr "" -#: opts.c:1865 +#: opts.c:1889 #, gcc-internal-format msgid "unrecognized visibility value \"%s\"" msgstr "" -#: opts.c:1923 +#: opts.c:1947 #, gcc-internal-format msgid "unknown stack check parameter \"%s\"" msgstr "" -#: opts.c:1949 +#: opts.c:1973 #, gcc-internal-format msgid "unrecognized register name \"%s\"" msgstr "" -#: opts.c:1973 +#: opts.c:1997 #, gcc-internal-format msgid "unknown tls-model \"%s\"" msgstr "" -#: opts.c:1982 +#: opts.c:2006 #, gcc-internal-format msgid "unknown ira algorithm \"%s\"" msgstr "" -#: opts.c:1993 +#: opts.c:2017 #, gcc-internal-format msgid "unknown ira region \"%s\"" msgstr "" -#: opts.c:2096 +#: opts.c:2062 +#, gcc-internal-format +msgid "dwarf version %d is not supported" +msgstr "" + +#: opts.c:2126 #, gcc-internal-format msgid "%s: --param arguments should be of the form NAME=VALUE" msgstr "" -#: opts.c:2101 +#: opts.c:2131 #, gcc-internal-format msgid "invalid --param value %qs" msgstr "" -#: opts.c:2204 +#: opts.c:2234 #, gcc-internal-format msgid "target system does not support debug output" msgstr "" -#: opts.c:2211 +#: opts.c:2241 #, gcc-internal-format msgid "debug format \"%s\" conflicts with prior selection" msgstr "" -#: opts.c:2227 +#: opts.c:2257 #, gcc-internal-format msgid "unrecognised debug output level \"%s\"" msgstr "" -#: opts.c:2229 +#: opts.c:2259 #, gcc-internal-format msgid "debug output level %s is too high" msgstr "" -#: opts.c:2313 +#: opts.c:2379 #, gcc-internal-format msgid "-Werror=%s: No option -%s" msgstr "" @@ -24196,499 +25049,517 @@ msgstr "" msgid "invalid parameter %qs" msgstr "" -#: plugin.c:160 +#: passes.c:567 #, gcc-internal-format -msgid "" -"Plugin %s was specified with different paths:\n" -"%s\n" -"%s" +msgid "Invalid pass positioning operation" msgstr "" -#: plugin.c:206 +#: passes.c:607 #, gcc-internal-format -msgid "Malformed option -fplugin-arg-%s (multiple '=' signs)" +msgid "plugin cannot register a missing pass" msgstr "" -#: plugin.c:222 +#: passes.c:610 #, gcc-internal-format -msgid "Malformed option -fplugin-arg-%s (missing -<key>[=<value>])" +msgid "plugin cannot register an unnamed pass" msgstr "" -#: plugin.c:284 +#: passes.c:614 #, gcc-internal-format -msgid "" -"Plugin %s should be specified before -fplugin-arg-%s in the command line" +msgid "plugin cannot register pass %qs without reference pass name" msgstr "" -#: plugin.c:365 +#: passes.c:626 #, gcc-internal-format -msgid "Invalid pass positioning operation" +msgid "pass %qs not found but is referenced by new pass %qs" msgstr "" -#: plugin.c:405 +#: plugin.c:145 #, gcc-internal-format -msgid "No pass specified when registering a new pass in plugin %s" +msgid "" +"Plugin %s was specified with different paths:\n" +"%s\n" +"%s" +msgstr "" + +#: plugin.c:191 +#, gcc-internal-format +msgid "Malformed option -fplugin-arg-%s (multiple '=' signs)" msgstr "" -#: plugin.c:412 +#: plugin.c:207 #, gcc-internal-format -msgid "No reference pass specified for positioning the pass from plugin %s" +msgid "Malformed option -fplugin-arg-%s (missing -<key>[=<value>])" msgstr "" -#: plugin.c:422 +#: plugin.c:269 #, gcc-internal-format msgid "" -"Failed to position pass %s registered by plugin %s. Cannot find the " -"(specified instance of) reference pass %s" +"Plugin %s should be specified before -fplugin-arg-%s in the command line" msgstr "" -#: plugin.c:501 +#: plugin.c:333 #, gcc-internal-format msgid "Plugin %s registered a null callback function for event %s" msgstr "" -#: plugin.c:515 +#: plugin.c:347 #, gcc-internal-format msgid "Unkown callback event registered by plugin %s" msgstr "" -#: plugin.c:578 +#: plugin.c:421 #, gcc-internal-format msgid "" "Cannot load plugin %s\n" "%s" msgstr "" -#: plugin.c:591 +#: plugin.c:430 +#, gcc-internal-format +msgid "" +"plugin %s is not licensed under a GPL-compatible license\n" +"%s" +msgstr "" + +#: plugin.c:439 #, gcc-internal-format msgid "" "Cannot find %s in plugin %s\n" "%s" msgstr "" -#: plugin.c:600 +#: plugin.c:447 #, gcc-internal-format msgid "Fail to initialize plugin %s" msgstr "" -#: profile.c:415 +#: profile.c:414 #, gcc-internal-format msgid "corrupted profile info: edge from %i to %i exceeds maximal count" msgstr "" -#: profile.c:460 +#: profile.c:458 #, gcc-internal-format msgid "corrupted profile info: run_max * runs < sum_max" msgstr "" -#: profile.c:466 +#: profile.c:464 #, gcc-internal-format msgid "corrupted profile info: sum_all is smaller than sum_max" msgstr "" -#: profile.c:632 +#: profile.c:630 #, gcc-internal-format msgid "correcting inconsistent profile data" msgstr "" -#: profile.c:642 +#: profile.c:640 #, gcc-internal-format msgid "corrupted profile info: profile data is not flow-consistent" msgstr "" -#: profile.c:660 +#: profile.c:657 #, gcc-internal-format msgid "" "corrupted profile info: number of iterations for basic block %d thought to " "be %i" msgstr "" -#: profile.c:681 +#: profile.c:678 #, gcc-internal-format msgid "" "corrupted profile info: number of executions for edge %d-%d thought to be %i" msgstr "" -#: reg-stack.c:538 +#: reg-stack.c:537 #, gcc-internal-format msgid "output constraint %d must specify a single register" msgstr "" -#: reg-stack.c:548 +#: reg-stack.c:547 #, gcc-internal-format msgid "output constraint %d cannot be specified together with \"%s\" clobber" msgstr "" -#: reg-stack.c:571 +#: reg-stack.c:570 #, gcc-internal-format msgid "output regs must be grouped at top of stack" msgstr "" -#: reg-stack.c:608 +#: reg-stack.c:607 #, gcc-internal-format msgid "implicitly popped regs must be grouped at top of stack" msgstr "" -#: reg-stack.c:627 +#: reg-stack.c:626 #, gcc-internal-format msgid "output operand %d must use %<&%> constraint" msgstr "" -#: regcprop.c:948 +#: regcprop.c:978 #, gcc-internal-format msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" msgstr "" -#: regcprop.c:960 +#: regcprop.c:990 #, gcc-internal-format msgid "validate_value_data: Loop in regno chain (%u)" msgstr "" -#: regcprop.c:963 +#: regcprop.c:993 #, gcc-internal-format msgid "validate_value_data: [%u] Bad oldest_regno (%u)" msgstr "" -#: regcprop.c:975 +#: regcprop.c:1005 #, gcc-internal-format msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" msgstr "" -#: reginfo.c:823 +#: reginfo.c:819 #, gcc-internal-format msgid "can't use '%s' as a %s register" msgstr "" -#: reginfo.c:838 config/ia64/ia64.c:5186 config/ia64/ia64.c:5193 -#: config/pa/pa.c:367 config/pa/pa.c:374 config/sh/sh.c:7966 -#: config/sh/sh.c:7973 config/spu/spu.c:4624 config/spu/spu.c:4631 +#: reginfo.c:834 config/ia64/ia64.c:5399 config/ia64/ia64.c:5406 +#: config/pa/pa.c:380 config/pa/pa.c:387 config/sh/sh.c:8484 +#: config/sh/sh.c:8491 config/spu/spu.c:4717 config/spu/spu.c:4724 #, gcc-internal-format msgid "unknown register name: %s" msgstr "" -#: reginfo.c:847 +#: reginfo.c:843 #, gcc-internal-format msgid "global register variable follows a function definition" msgstr "" -#: reginfo.c:851 +#: reginfo.c:847 #, gcc-internal-format msgid "register used for two global register variables" msgstr "" -#: reginfo.c:856 +#: reginfo.c:852 #, gcc-internal-format msgid "call-clobbered register used for global register variable" msgstr "" -#: reload.c:1259 +#: reload.c:1260 #, gcc-internal-format msgid "cannot reload integer constant operand in %<asm%>" msgstr "" -#: reload.c:1273 +#: reload.c:1274 #, gcc-internal-format msgid "impossible register constraint in %<asm%>" msgstr "" -#: reload.c:3610 +#: reload.c:3617 #, gcc-internal-format msgid "%<&%> constraint used with no register class" msgstr "" -#: reload.c:3781 reload.c:4039 +#: reload.c:3814 reload.c:4072 #, gcc-internal-format msgid "inconsistent operand constraints in an %<asm%>" msgstr "" -#: reload1.c:1323 +#: reload1.c:1380 #, gcc-internal-format msgid "%<asm%> operand has impossible constraints" msgstr "" -#: reload1.c:1343 +#: reload1.c:1400 #, gcc-internal-format msgid "frame size too large for reliable stack checking" msgstr "" -#: reload1.c:1346 +#: reload1.c:1403 #, gcc-internal-format msgid "try reducing the number of local variables" msgstr "" -#: reload1.c:2081 +#: reload1.c:2138 #, gcc-internal-format msgid "can't find a register in class %qs while reloading %<asm%>" msgstr "" -#: reload1.c:2086 +#: reload1.c:2143 #, gcc-internal-format msgid "unable to find a register to spill in class %qs" msgstr "" -#: reload1.c:4241 +#: reload1.c:4294 #, gcc-internal-format msgid "%<asm%> operand requires impossible reload" msgstr "" -#: reload1.c:5624 +#: reload1.c:5676 #, gcc-internal-format msgid "%<asm%> operand constraint incompatible with operand size" msgstr "" -#: reload1.c:7598 +#: reload1.c:7657 #, gcc-internal-format msgid "output operand is constant in %<asm%>" msgstr "" -#: rtl.c:501 +#: rtl.c:613 #, gcc-internal-format msgid "RTL check: access of elt %d of '%s' with last elt %d in %s, at %s:%d" msgstr "" -#: rtl.c:511 +#: rtl.c:623 #, gcc-internal-format msgid "" "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" msgstr "" -#: rtl.c:521 +#: rtl.c:633 #, gcc-internal-format msgid "" "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %" "s:%d" msgstr "" -#: rtl.c:530 +#: rtl.c:642 #, gcc-internal-format msgid "RTL check: expected code '%s', have '%s' in %s, at %s:%d" msgstr "" -#: rtl.c:540 +#: rtl.c:652 #, gcc-internal-format msgid "RTL check: expected code '%s' or '%s', have '%s' in %s, at %s:%d" msgstr "" -#: rtl.c:567 +#: rtl.c:679 #, gcc-internal-format msgid "" "RTL check: attempt to treat non-block symbol as a block symbol in %s, at %s:%" "d" msgstr "" -#: rtl.c:577 +#: rtl.c:689 #, gcc-internal-format msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" msgstr "" -#: rtl.c:588 +#: rtl.c:700 #, gcc-internal-format msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d" msgstr "" -#: stmt.c:311 +#: stmt.c:312 #, gcc-internal-format msgid "output operand constraint lacks %<=%>" msgstr "" -#: stmt.c:326 +#: stmt.c:327 #, gcc-internal-format msgid "output constraint %qc for operand %d is not at the beginning" msgstr "" -#: stmt.c:349 +#: stmt.c:350 #, gcc-internal-format msgid "operand constraint contains incorrectly positioned %<+%> or %<=%>" msgstr "" -#: stmt.c:356 stmt.c:455 +#: stmt.c:357 stmt.c:456 #, gcc-internal-format msgid "%<%%%> constraint used with last operand" msgstr "" -#: stmt.c:375 +#: stmt.c:376 #, gcc-internal-format msgid "matching constraint not valid in output operand" msgstr "" -#: stmt.c:446 +#: stmt.c:447 #, gcc-internal-format msgid "input operand constraint contains %qc" msgstr "" -#: stmt.c:488 +#: stmt.c:489 #, gcc-internal-format msgid "matching constraint references invalid operand number" msgstr "" -#: stmt.c:526 +#: stmt.c:527 #, gcc-internal-format msgid "invalid punctuation %qc in constraint" msgstr "" -#: stmt.c:550 +#: stmt.c:551 #, gcc-internal-format msgid "matching constraint does not allow a register" msgstr "" -#: stmt.c:604 +#: stmt.c:605 #, gcc-internal-format msgid "asm-specifier for variable %qE conflicts with asm clobber list" msgstr "" -#: stmt.c:694 +#: stmt.c:696 #, gcc-internal-format msgid "unknown register name %qs in %<asm%>" msgstr "" -#: stmt.c:702 +#: stmt.c:704 #, gcc-internal-format msgid "PIC register %qs clobbered in %<asm%>" msgstr "" -#: stmt.c:749 +#: stmt.c:751 #, gcc-internal-format msgid "more than %d operands in %<asm%>" msgstr "" -#: stmt.c:812 +#: stmt.c:814 #, gcc-internal-format msgid "output number %d not directly addressable" msgstr "" -#: stmt.c:895 +#: stmt.c:900 #, gcc-internal-format msgid "asm operand %d probably doesn%'t match constraints" msgstr "" -#: stmt.c:905 +#: stmt.c:910 #, gcc-internal-format msgid "use of memory input without lvalue in asm operand %d is deprecated" msgstr "" -#: stmt.c:1052 +#: stmt.c:1065 #, gcc-internal-format msgid "asm clobber conflict with output operand" msgstr "" -#: stmt.c:1057 +#: stmt.c:1070 #, gcc-internal-format msgid "asm clobber conflict with input operand" msgstr "" -#: stmt.c:1135 +#: stmt.c:1195 #, gcc-internal-format msgid "too many alternatives in %<asm%>" msgstr "" -#: stmt.c:1147 +#: stmt.c:1207 #, gcc-internal-format msgid "operand constraints for %<asm%> differ in number of alternatives" msgstr "" -#: stmt.c:1200 +#: stmt.c:1274 #, gcc-internal-format msgid "duplicate asm operand name %qs" msgstr "" -#: stmt.c:1298 +#: stmt.c:1371 #, gcc-internal-format msgid "missing close brace for named operand" msgstr "" -#: stmt.c:1326 +#: stmt.c:1396 #, gcc-internal-format msgid "undefined named operand %qs" msgstr "" -#: stmt.c:1471 +#: stmt.c:1541 cp/cvt.c:916 cp/cvt.c:1032 #, gcc-internal-format -msgid "%Hvalue computed is not used" +msgid "value computed is not used" msgstr "" -#: stor-layout.c:149 +#: stor-layout.c:160 #, gcc-internal-format msgid "type size can%'t be explicitly evaluated" msgstr "" -#: stor-layout.c:151 +#: stor-layout.c:162 #, gcc-internal-format msgid "variable-size type declared outside of any function" msgstr "" -#: stor-layout.c:467 +#: stor-layout.c:680 #, gcc-internal-format msgid "size of %q+D is %d bytes" msgstr "" -#: stor-layout.c:469 +#: stor-layout.c:682 #, gcc-internal-format msgid "size of %q+D is larger than %wd bytes" msgstr "" -#: stor-layout.c:888 +#: stor-layout.c:1101 #, gcc-internal-format msgid "packed attribute causes inefficient alignment for %q+D" msgstr "" -#: stor-layout.c:891 +#: stor-layout.c:1104 #, gcc-internal-format msgid "packed attribute is unnecessary for %q+D" msgstr "" -#. No, we need to skip space before this field. -#. Bump the cumulative size to multiple of field alignment. -#: stor-layout.c:908 +#: stor-layout.c:1122 #, gcc-internal-format msgid "padding struct to align %q+D" msgstr "" -#: stor-layout.c:969 +#: stor-layout.c:1183 #, gcc-internal-format msgid "Offset of packed bit-field %qD has changed in GCC 4.4" msgstr "" -#: stor-layout.c:1273 +#: stor-layout.c:1489 #, gcc-internal-format msgid "padding struct size to alignment boundary" msgstr "" -#: stor-layout.c:1303 +#: stor-layout.c:1519 #, gcc-internal-format msgid "packed attribute causes inefficient alignment for %qE" msgstr "" -#: stor-layout.c:1307 +#: stor-layout.c:1523 #, gcc-internal-format msgid "packed attribute is unnecessary for %qE" msgstr "" -#: stor-layout.c:1313 +#: stor-layout.c:1529 #, gcc-internal-format msgid "packed attribute causes inefficient alignment" msgstr "" -#: stor-layout.c:1315 +#: stor-layout.c:1531 #, gcc-internal-format msgid "packed attribute is unnecessary" msgstr "" -#: stor-layout.c:1848 +#: stor-layout.c:2044 #, gcc-internal-format msgid "alignment of array elements is greater than element size" msgstr "" -#: targhooks.c:124 +#: targhooks.c:163 #, gcc-internal-format msgid "__builtin_saveregs not supported by this target" msgstr "" -#: targhooks.c:742 +#: targhooks.c:658 +#, gcc-internal-format +msgid "nested functions not supported on this target" +msgstr "" + +#: targhooks.c:671 +#, gcc-internal-format +msgid "nested function trampolines not supported on this target" +msgstr "" + +#: targhooks.c:847 #, gcc-internal-format msgid "target attribute is not supported on this machine" msgstr "" -#: targhooks.c:752 +#: targhooks.c:857 #, gcc-internal-format msgid "#pragma GCC target is not supported for this machine" msgstr "" @@ -24710,797 +25581,848 @@ msgstr "" msgid "ld returned %d exit status" msgstr "" -#: toplev.c:528 +#: toplev.c:551 #, gcc-internal-format msgid "invalid option argument %qs" msgstr "" -#: toplev.c:626 +#: toplev.c:641 #, gcc-internal-format msgid "getting core file size maximum limit: %m" msgstr "" -#: toplev.c:629 +#: toplev.c:644 #, gcc-internal-format msgid "setting core file size limit to maximum: %m" msgstr "" -#: toplev.c:849 +#: toplev.c:864 #, gcc-internal-format msgid "%q+F declared %<static%> but never defined" msgstr "" -#: toplev.c:877 +#: toplev.c:892 #, gcc-internal-format msgid "%q+D defined but not used" msgstr "" -#: toplev.c:944 +#: toplev.c:959 #, gcc-internal-format msgid "%qD is deprecated (declared at %s:%d): %s" msgstr "" -#: toplev.c:948 +#: toplev.c:963 #, gcc-internal-format msgid "%qD is deprecated (declared at %s:%d)" msgstr "" -#: toplev.c:973 +#: toplev.c:988 #, gcc-internal-format msgid "%qE is deprecated (declared at %s:%d): %s" msgstr "" -#: toplev.c:977 +#: toplev.c:992 #, gcc-internal-format msgid "%qE is deprecated (declared at %s:%d)" msgstr "" -#: toplev.c:984 +#: toplev.c:999 #, gcc-internal-format msgid "type is deprecated (declared at %s:%d): %s" msgstr "" -#: toplev.c:988 +#: toplev.c:1003 #, gcc-internal-format msgid "type is deprecated (declared at %s:%d)" msgstr "" -#: toplev.c:997 +#: toplev.c:1012 #, gcc-internal-format msgid "%qE is deprecated: %s" msgstr "" -#: toplev.c:1000 +#: toplev.c:1015 #, gcc-internal-format msgid "%qE is deprecated" msgstr "" -#: toplev.c:1005 +#: toplev.c:1020 #, gcc-internal-format msgid "type is deprecated: %s" msgstr "" -#: toplev.c:1008 +#: toplev.c:1023 #, gcc-internal-format msgid "type is deprecated" msgstr "" -#: toplev.c:1148 +#: toplev.c:1176 #, gcc-internal-format msgid "unrecognized gcc debugging option: %c" msgstr "" -#: toplev.c:1407 +#: toplev.c:1451 #, gcc-internal-format msgid "can%'t open %s for writing: %m" msgstr "" -#: toplev.c:1428 +#: toplev.c:1472 #, gcc-internal-format msgid "-frecord-gcc-switches is not supported by the current target" msgstr "" -#: toplev.c:1765 +#: toplev.c:1809 #, gcc-internal-format msgid "this target does not support %qs" msgstr "" -#: toplev.c:1820 +#: toplev.c:1865 #, gcc-internal-format msgid "instruction scheduling not supported on this target machine" msgstr "" -#: toplev.c:1824 +#: toplev.c:1869 #, gcc-internal-format msgid "this target machine does not have delayed branches" msgstr "" -#: toplev.c:1838 +#: toplev.c:1883 #, gcc-internal-format msgid "-f%sleading-underscore not supported on this target machine" msgstr "" -#: toplev.c:1911 +#: toplev.c:1926 +#, gcc-internal-format +msgid "could not close zeroed insn dump file %qs: %s" +msgstr "" + +#: toplev.c:1991 #, gcc-internal-format msgid "target system does not support the \"%s\" debug format" msgstr "" -#: toplev.c:1924 +#: toplev.c:2004 #, gcc-internal-format msgid "variable tracking requested, but useless unless producing debug info" msgstr "" -#: toplev.c:1927 +#: toplev.c:2007 #, gcc-internal-format msgid "variable tracking requested, but not supported by this debug format" msgstr "" -#: toplev.c:1961 +#: toplev.c:2035 +#, gcc-internal-format +msgid "var-tracking-assignments changes selective scheduling" +msgstr "" + +#: toplev.c:2055 #, gcc-internal-format msgid "can%'t open %s: %m" msgstr "" -#: toplev.c:1968 +#: toplev.c:2062 #, gcc-internal-format msgid "-ffunction-sections not supported for this target" msgstr "" -#: toplev.c:1973 +#: toplev.c:2067 #, gcc-internal-format msgid "-fdata-sections not supported for this target" msgstr "" -#: toplev.c:1980 +#: toplev.c:2074 #, gcc-internal-format msgid "-ffunction-sections disabled; it makes profiling impossible" msgstr "" -#: toplev.c:1987 +#: toplev.c:2081 #, gcc-internal-format msgid "-fprefetch-loop-arrays not supported for this target" msgstr "" -#: toplev.c:1993 +#: toplev.c:2087 #, gcc-internal-format msgid "" "-fprefetch-loop-arrays not supported for this target (try -march switches)" msgstr "" -#: toplev.c:2002 +#: toplev.c:2096 #, gcc-internal-format msgid "-fprefetch-loop-arrays is not supported with -Os" msgstr "" -#: toplev.c:2013 +#: toplev.c:2107 #, gcc-internal-format msgid "-fassociative-math disabled; other options take precedence" msgstr "" -#: toplev.c:2029 +#: toplev.c:2123 #, gcc-internal-format msgid "-fstack-protector not supported for this target" msgstr "" -#: toplev.c:2042 +#: toplev.c:2136 #, gcc-internal-format msgid "unwind tables currently require a frame pointer for correctness" msgstr "" -#: toplev.c:2269 +#: toplev.c:2363 #, gcc-internal-format msgid "error writing to %s: %m" msgstr "" -#: toplev.c:2271 java/jcf-parse.c:1769 +#: toplev.c:2365 java/jcf-parse.c:1770 #, gcc-internal-format msgid "error closing %s: %m" msgstr "" -#: tree-cfg.c:1535 tree-cfg.c:2214 +#: tree-cfg.c:1849 #, gcc-internal-format -msgid "%Hwill never be executed" +msgid "will never be executed" msgstr "" -#: tree-cfg.c:2848 +#: tree-cfg.c:2535 #, gcc-internal-format msgid "SSA name in freelist but still referenced" msgstr "" -#: tree-cfg.c:2857 +#: tree-cfg.c:2544 #, gcc-internal-format msgid "Indirect reference's operand is not a register or a constant." msgstr "" -#: tree-cfg.c:2866 +#: tree-cfg.c:2553 #, gcc-internal-format msgid "ASSERT_EXPR with an always-false condition" msgstr "" -#: tree-cfg.c:2872 +#: tree-cfg.c:2559 #, gcc-internal-format msgid "MODIFY_EXPR not expected while having tuples." msgstr "" -#: tree-cfg.c:2893 +#: tree-cfg.c:2580 #, gcc-internal-format msgid "constant not recomputed when ADDR_EXPR changed" msgstr "" -#: tree-cfg.c:2898 +#: tree-cfg.c:2585 #, gcc-internal-format msgid "side effects not recomputed when ADDR_EXPR changed" msgstr "" -#: tree-cfg.c:2916 tree-ssa.c:497 +#: tree-cfg.c:2603 tree-ssa.c:816 #, gcc-internal-format msgid "address taken, but ADDRESSABLE bit not set" msgstr "" -#: tree-cfg.c:2921 +#: tree-cfg.c:2608 #, gcc-internal-format msgid "DECL_GIMPLE_REG_P set on a variable with address taken" msgstr "" -#: tree-cfg.c:2932 +#: tree-cfg.c:2619 #, gcc-internal-format msgid "non-integral used in condition" msgstr "" -#: tree-cfg.c:2937 +#: tree-cfg.c:2624 #, gcc-internal-format msgid "invalid conditional operand" msgstr "" -#: tree-cfg.c:2984 +#: tree-cfg.c:2671 #, gcc-internal-format msgid "invalid position or size operand to BIT_FIELD_REF" msgstr "" -#: tree-cfg.c:2991 +#: tree-cfg.c:2678 #, gcc-internal-format msgid "" "integral result type precision does not match field size of BIT_FIELD_REF" msgstr "" -#: tree-cfg.c:2999 +#: tree-cfg.c:2686 #, gcc-internal-format msgid "" "mode precision of non-integral result does not match field size of " "BIT_FIELD_REF" msgstr "" -#: tree-cfg.c:3010 +#: tree-cfg.c:2697 #, gcc-internal-format msgid "invalid reference prefix" msgstr "" -#: tree-cfg.c:3021 +#: tree-cfg.c:2708 #, gcc-internal-format msgid "invalid operand to plus/minus, type is a pointer" msgstr "" -#: tree-cfg.c:3032 +#: tree-cfg.c:2719 #, gcc-internal-format msgid "invalid operand to pointer plus, first operand is not a pointer" msgstr "" -#: tree-cfg.c:3040 +#: tree-cfg.c:2727 #, gcc-internal-format msgid "" "invalid operand to pointer plus, second operand is not an integer with type " "of sizetype." msgstr "" -#: tree-cfg.c:3111 +#: tree-cfg.c:2798 #, gcc-internal-format msgid "invalid expression for min lvalue" msgstr "" -#: tree-cfg.c:3122 +#: tree-cfg.c:2809 #, gcc-internal-format msgid "invalid operand in indirect reference" msgstr "" -#: tree-cfg.c:3129 +#: tree-cfg.c:2816 #, gcc-internal-format msgid "type mismatch in indirect reference" msgstr "" -#: tree-cfg.c:3158 +#: tree-cfg.c:2845 #, gcc-internal-format msgid "invalid operands to array reference" msgstr "" -#: tree-cfg.c:3169 +#: tree-cfg.c:2856 #, gcc-internal-format msgid "type mismatch in array reference" msgstr "" -#: tree-cfg.c:3178 +#: tree-cfg.c:2865 #, gcc-internal-format msgid "type mismatch in array range reference" msgstr "" -#: tree-cfg.c:3189 +#: tree-cfg.c:2876 #, gcc-internal-format msgid "type mismatch in real/imagpart reference" msgstr "" -#: tree-cfg.c:3199 +#: tree-cfg.c:2886 #, gcc-internal-format msgid "type mismatch in component reference" msgstr "" -#: tree-cfg.c:3262 +#: tree-cfg.c:2949 #, gcc-internal-format msgid "non-function in gimple call" msgstr "" -#: tree-cfg.c:3269 +#: tree-cfg.c:2956 #, gcc-internal-format msgid "invalid LHS in gimple call" msgstr "" -#: tree-cfg.c:3285 +#: tree-cfg.c:2972 #, gcc-internal-format msgid "invalid conversion in gimple call" msgstr "" -#: tree-cfg.c:3310 +#: tree-cfg.c:2985 +#, gcc-internal-format +msgid "static chain in indirect gimple call" +msgstr "" + +#: tree-cfg.c:2992 +#, gcc-internal-format +msgid "static chain with function that doesn't use one" +msgstr "" + +#: tree-cfg.c:3016 #, gcc-internal-format msgid "invalid operands in gimple comparison" msgstr "" -#: tree-cfg.c:3328 +#: tree-cfg.c:3034 #, gcc-internal-format msgid "type mismatch in comparison expression" msgstr "" -#: tree-cfg.c:3354 +#: tree-cfg.c:3060 #, gcc-internal-format msgid "non-register as LHS of unary operation" msgstr "" -#: tree-cfg.c:3360 +#: tree-cfg.c:3066 #, gcc-internal-format msgid "invalid operand in unary operation" msgstr "" -#: tree-cfg.c:3395 +#: tree-cfg.c:3101 #, gcc-internal-format msgid "invalid types in nop conversion" msgstr "" -#: tree-cfg.c:3409 +#: tree-cfg.c:3115 #, gcc-internal-format msgid "invalid types in fixed-point conversion" msgstr "" -#: tree-cfg.c:3422 +#: tree-cfg.c:3128 #, gcc-internal-format msgid "invalid types in conversion to floating point" msgstr "" -#: tree-cfg.c:3435 +#: tree-cfg.c:3141 #, gcc-internal-format msgid "invalid types in conversion to integer" msgstr "" -#: tree-cfg.c:3470 +#: tree-cfg.c:3176 #, gcc-internal-format msgid "non-trivial conversion in unary operation" msgstr "" -#: tree-cfg.c:3497 +#: tree-cfg.c:3203 #, gcc-internal-format msgid "non-register as LHS of binary operation" msgstr "" -#: tree-cfg.c:3504 +#: tree-cfg.c:3210 #, gcc-internal-format msgid "invalid operands in binary operation" msgstr "" -#: tree-cfg.c:3519 +#: tree-cfg.c:3225 #, gcc-internal-format msgid "type mismatch in complex expression" msgstr "" -#: tree-cfg.c:3548 +#: tree-cfg.c:3254 #, gcc-internal-format msgid "type mismatch in shift expression" msgstr "" -#: tree-cfg.c:3570 +#: tree-cfg.c:3276 #, gcc-internal-format msgid "type mismatch in vector shift expression" msgstr "" -#: tree-cfg.c:3583 +#: tree-cfg.c:3289 #, gcc-internal-format msgid "non-element sized vector shift of floating point vector" msgstr "" -#: tree-cfg.c:3601 +#: tree-cfg.c:3307 #, gcc-internal-format msgid "invalid non-vector operands to vector valued plus" msgstr "" -#: tree-cfg.c:3625 +#: tree-cfg.c:3331 #, gcc-internal-format msgid "invalid (pointer) operands to plus/minus" msgstr "" -#: tree-cfg.c:3640 +#: tree-cfg.c:3346 #, gcc-internal-format msgid "type mismatch in pointer plus expression" msgstr "" -#: tree-cfg.c:3663 +#: tree-cfg.c:3369 #, gcc-internal-format msgid "type mismatch in binary truth expression" msgstr "" -#: tree-cfg.c:3731 +#: tree-cfg.c:3437 #, gcc-internal-format msgid "type mismatch in binary expression" msgstr "" -#: tree-cfg.c:3756 +#: tree-cfg.c:3462 #, gcc-internal-format msgid "non-trivial conversion at assignment" msgstr "" -#: tree-cfg.c:3773 +#: tree-cfg.c:3479 #, gcc-internal-format msgid "invalid operand in unary expression" msgstr "" -#: tree-cfg.c:3780 +#: tree-cfg.c:3487 #, gcc-internal-format msgid "type mismatch in address expression" msgstr "" -#: tree-cfg.c:3804 tree-cfg.c:3830 +#: tree-cfg.c:3511 tree-cfg.c:3537 #, gcc-internal-format msgid "invalid rhs for gimple memory store" msgstr "" -#: tree-cfg.c:3896 +#: tree-cfg.c:3601 #, gcc-internal-format msgid "invalid operand in return statement" msgstr "" -#: tree-cfg.c:3908 +#: tree-cfg.c:3613 #, gcc-internal-format msgid "invalid conversion in return statement" msgstr "" -#: tree-cfg.c:3932 +#: tree-cfg.c:3637 #, gcc-internal-format msgid "goto destination is neither a label nor a pointer" msgstr "" -#: tree-cfg.c:3947 +#: tree-cfg.c:3652 #, gcc-internal-format msgid "invalid operand to switch statement" msgstr "" -#: tree-cfg.c:3967 +#: tree-cfg.c:3672 #, gcc-internal-format msgid "Invalid PHI result" msgstr "" -#: tree-cfg.c:3979 +#: tree-cfg.c:3684 #, gcc-internal-format msgid "Invalid PHI argument" msgstr "" -#: tree-cfg.c:3985 +#: tree-cfg.c:3690 #, gcc-internal-format msgid "Incompatible types in PHI argument %u" msgstr "" -#: tree-cfg.c:4110 +#: tree-cfg.c:3830 #, gcc-internal-format msgid "verify_gimple failed" msgstr "" -#: tree-cfg.c:4144 +#: tree-cfg.c:3865 #, gcc-internal-format msgid "invalid function in call statement" msgstr "" -#: tree-cfg.c:4155 +#: tree-cfg.c:3876 #, gcc-internal-format msgid "invalid pure const state for function" msgstr "" -#: tree-cfg.c:4165 tree-ssa.c:669 tree-ssa.c:678 +#: tree-cfg.c:3889 tree-ssa.c:991 tree-ssa.c:1000 #, gcc-internal-format msgid "in statement" msgstr "" -#: tree-cfg.c:4182 +#: tree-cfg.c:3909 #, gcc-internal-format msgid "statement marked for throw, but doesn%'t" msgstr "" -#: tree-cfg.c:4187 +#: tree-cfg.c:3915 #, gcc-internal-format msgid "statement marked for throw in middle of block" msgstr "" -#: tree-cfg.c:4259 +#: tree-cfg.c:3987 #, gcc-internal-format msgid "Dead STMT in EH table" msgstr "" -#: tree-cfg.c:4297 +#: tree-cfg.c:4025 #, gcc-internal-format msgid "gimple_bb (phi) is set to a wrong basic block" msgstr "" -#: tree-cfg.c:4308 +#: tree-cfg.c:4036 #, gcc-internal-format msgid "missing PHI def" msgstr "" -#: tree-cfg.c:4319 +#: tree-cfg.c:4047 #, gcc-internal-format msgid "PHI argument is not a GIMPLE value" msgstr "" -#: tree-cfg.c:4328 tree-cfg.c:4389 +#: tree-cfg.c:4056 tree-cfg.c:4129 #, gcc-internal-format msgid "incorrect sharing of tree nodes" msgstr "" -#: tree-cfg.c:4351 +#: tree-cfg.c:4079 #, gcc-internal-format msgid "invalid GIMPLE statement" msgstr "" -#: tree-cfg.c:4360 +#: tree-cfg.c:4088 #, gcc-internal-format msgid "gimple_bb (stmt) is set to a wrong basic block" msgstr "" -#: tree-cfg.c:4372 +#: tree-cfg.c:4101 +#, gcc-internal-format +msgid "incorrect entry in label_to_block_map" +msgstr "" + +#: tree-cfg.c:4111 #, gcc-internal-format -msgid "incorrect entry in label_to_block_map.\n" +msgid "incorrect setting of landing pad number" msgstr "" -#: tree-cfg.c:4405 +#: tree-cfg.c:4145 #, gcc-internal-format msgid "verify_stmts failed" msgstr "" -#: tree-cfg.c:4428 +#: tree-cfg.c:4168 #, gcc-internal-format msgid "ENTRY_BLOCK has IL associated with it" msgstr "" -#: tree-cfg.c:4434 +#: tree-cfg.c:4174 #, gcc-internal-format msgid "EXIT_BLOCK has IL associated with it" msgstr "" -#: tree-cfg.c:4441 +#: tree-cfg.c:4181 #, gcc-internal-format msgid "fallthru to exit from bb %d" msgstr "" -#: tree-cfg.c:4465 +#: tree-cfg.c:4205 #, gcc-internal-format msgid "nonlocal label " msgstr "" -#: tree-cfg.c:4474 tree-cfg.c:4483 tree-cfg.c:4508 +#: tree-cfg.c:4214 tree-cfg.c:4223 tree-cfg.c:4248 #, gcc-internal-format msgid "label " msgstr "" -#: tree-cfg.c:4498 +#: tree-cfg.c:4238 #, gcc-internal-format msgid "control flow in the middle of basic block %d" msgstr "" -#: tree-cfg.c:4528 +#: tree-cfg.c:4271 #, gcc-internal-format msgid "fallthru edge after a control statement in bb %d" msgstr "" -#: tree-cfg.c:4541 +#: tree-cfg.c:4284 #, gcc-internal-format msgid "true/false edge after a non-GIMPLE_COND in bb %d" msgstr "" -#: tree-cfg.c:4564 tree-cfg.c:4586 tree-cfg.c:4599 tree-cfg.c:4668 +#: tree-cfg.c:4307 tree-cfg.c:4329 tree-cfg.c:4342 tree-cfg.c:4411 #, gcc-internal-format msgid "wrong outgoing edge flags at end of bb %d" msgstr "" -#: tree-cfg.c:4574 +#: tree-cfg.c:4317 #, gcc-internal-format msgid "explicit goto at end of bb %d" msgstr "" -#: tree-cfg.c:4604 +#: tree-cfg.c:4347 #, gcc-internal-format msgid "return edge does not point to exit in bb %d" msgstr "" -#: tree-cfg.c:4634 +#: tree-cfg.c:4377 #, gcc-internal-format msgid "found default case not at the start of case vector" msgstr "" -#: tree-cfg.c:4642 +#: tree-cfg.c:4385 #, gcc-internal-format msgid "case labels not sorted: " msgstr "" -#: tree-cfg.c:4659 +#: tree-cfg.c:4402 #, gcc-internal-format msgid "extra outgoing edge %d->%d" msgstr "" -#: tree-cfg.c:4682 +#: tree-cfg.c:4425 #, gcc-internal-format msgid "missing edge %i->%i" msgstr "" -#: tree-cfg.c:7156 +#: tree-cfg.c:7006 #, gcc-internal-format -msgid "%H%<noreturn%> function does return" +msgid "%<noreturn%> function does return" msgstr "" -#: tree-cfg.c:7176 +#: tree-cfg.c:7026 #, gcc-internal-format msgid "control reaches end of non-void function" msgstr "" -#: tree-cfg.c:7238 +#: tree-cfg.c:7089 +#, gcc-internal-format +msgid "function might be possible candidate for attribute %<noreturn%>" +msgstr "" + +#: tree-cfg.c:7160 #, gcc-internal-format -msgid "%Jfunction might be possible candidate for attribute %<noreturn%>" +msgid "" +"ignoring return value of %qD, declared with attribute warn_unused_result" msgstr "" -#: tree-dump.c:923 +#: tree-cfg.c:7165 +#, gcc-internal-format +msgid "" +"ignoring return value of function declared with attribute warn_unused_result" +msgstr "" + +#: tree-dump.c:929 #, gcc-internal-format msgid "could not open dump file %qs: %s" msgstr "" -#: tree-dump.c:1056 +#: tree-dump.c:1062 #, gcc-internal-format msgid "ignoring unknown option %q.*s in %<-fdump-%s%>" msgstr "" -#: tree-eh.c:2080 +#: tree-eh.c:3882 #, gcc-internal-format -msgid "EH edge %i->%i is missing" +msgid "BB %i has multiple EH edges" msgstr "" -#: tree-eh.c:2085 +#: tree-eh.c:3894 #, gcc-internal-format -msgid "EH edge %i->%i miss EH flag" +msgid "BB %i can not throw but has an EH edge" msgstr "" -#. ??? might not be mistake. -#: tree-eh.c:2091 +#: tree-eh.c:3902 #, gcc-internal-format -msgid "EH edge %i->%i has duplicated regions" +msgid "BB %i last statement has incorrectly set lp" msgstr "" -#: tree-eh.c:2127 +#: tree-eh.c:3908 #, gcc-internal-format -msgid "BB %i can not throw but has EH edges" +msgid "BB %i is missing an EH edge" msgstr "" -#: tree-eh.c:2134 +#: tree-eh.c:3914 #, gcc-internal-format -msgid "BB %i last statement has incorrectly set region" +msgid "Incorrect EH edge %i->%i" msgstr "" -#: tree-eh.c:2146 +#: tree-eh.c:3948 tree-eh.c:3967 #, gcc-internal-format -msgid "unnecessary EH edge %i->%i" +msgid "BB %i is missing an edge" msgstr "" -#: tree-inline.c:2474 +#: tree-eh.c:3984 +#, gcc-internal-format +msgid "BB %i too many fallthru edges" +msgstr "" + +#: tree-eh.c:3993 +#, gcc-internal-format +msgid "BB %i has incorrect edge" +msgstr "" + +#: tree-eh.c:3999 +#, gcc-internal-format +msgid "BB %i has incorrect fallthru edge" +msgstr "" + +#: tree-inline.c:2774 +#, gcc-internal-format +msgid "function %q+F can never be copied because it receives a non-local goto" +msgstr "" + +#: tree-inline.c:2791 +#, gcc-internal-format +msgid "" +"function %q+F can never be copied because it saves address of local label in " +"a static variable" +msgstr "" + +#: tree-inline.c:2801 #, gcc-internal-format msgid "" -"function %q+F can never be inlined because it uses variable sized variables" +"function %q+F can never be copied because it uses variable sized variables" msgstr "" -#: tree-inline.c:2508 +#: tree-inline.c:2839 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses alloca (override using " "the always_inline attribute)" msgstr "" -#: tree-inline.c:2522 +#: tree-inline.c:2853 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses setjmp" msgstr "" -#: tree-inline.c:2536 +#: tree-inline.c:2867 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses variable argument lists" msgstr "" -#: tree-inline.c:2548 +#: tree-inline.c:2879 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses setjmp-longjmp exception " "handling" msgstr "" -#: tree-inline.c:2556 +#: tree-inline.c:2887 #, gcc-internal-format msgid "function %q+F can never be inlined because it uses non-local goto" msgstr "" -#: tree-inline.c:2568 +#: tree-inline.c:2899 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses __builtin_return or " "__builtin_apply_args" msgstr "" -#: tree-inline.c:2588 +#: tree-inline.c:2919 #, gcc-internal-format msgid "function %q+F can never be inlined because it contains a computed goto" msgstr "" -#: tree-inline.c:2603 -#, gcc-internal-format -msgid "function %q+F can never be inlined because it receives a non-local goto" -msgstr "" - -#: tree-inline.c:2629 -#, gcc-internal-format -msgid "" -"function %q+F can never be inlined because it saves address of local label " -"in a static variable" -msgstr "" - -#: tree-inline.c:2720 +#: tree-inline.c:2999 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it is suppressed using -fno-inline" msgstr "" -#: tree-inline.c:2734 +#: tree-inline.c:3013 #, gcc-internal-format msgid "" "function %q+F can never be inlined because it uses attributes conflicting " "with inlining" msgstr "" -#: tree-inline.c:3259 tree-inline.c:3270 +#: tree-inline.c:3577 tree-inline.c:3588 #, gcc-internal-format msgid "inlining failed in call to %q+F: %s" msgstr "" -#: tree-inline.c:3261 tree-inline.c:3272 +#: tree-inline.c:3579 tree-inline.c:3590 #, gcc-internal-format msgid "called from here" msgstr "" -#: tree-mudflap.c:873 +#: tree-mudflap.c:907 #, gcc-internal-format msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF" msgstr "" -#: tree-mudflap.c:1064 +#: tree-mudflap.c:1114 #, gcc-internal-format msgid "mudflap cannot track %qE in stub function" msgstr "" -#: tree-mudflap.c:1308 +#: tree-mudflap.c:1358 #, gcc-internal-format msgid "mudflap cannot track unknown size extern %qE" msgstr "" @@ -25510,18 +26432,18 @@ msgstr "" msgid "mudflap: this language is not supported" msgstr "" -#: tree-optimize.c:419 +#: tree-optimize.c:417 #, gcc-internal-format msgid "size of return value of %q+D is %u bytes" msgstr "" -#: tree-optimize.c:422 +#: tree-optimize.c:420 #, gcc-internal-format msgid "size of return value of %q+D is larger than %wd bytes" msgstr "" -#: tree-outof-ssa.c:693 tree-outof-ssa.c:750 tree-ssa-coalesce.c:956 -#: tree-ssa-coalesce.c:971 tree-ssa-coalesce.c:1190 tree-ssa-live.c:1130 +#: tree-outof-ssa.c:756 tree-outof-ssa.c:813 tree-ssa-coalesce.c:958 +#: tree-ssa-coalesce.c:973 tree-ssa-coalesce.c:1195 tree-ssa-live.c:1194 #, gcc-internal-format msgid "SSA corruption" msgstr "" @@ -25531,310 +26453,314 @@ msgstr "" msgid "unimplemented functionality" msgstr "" -#: tree-ssa-structalias.c:4708 +#: tree-ssa-loop.c:315 #, gcc-internal-format -msgid "initialized from %qE" +msgid "loop blocking not implemented" msgstr "" -#: tree-ssa-structalias.c:4712 -#, gcc-internal-format -msgid "initialized from here" -msgstr "" - -#: tree-ssa-structalias.c:4761 -#, gcc-internal-format -msgid "dereferencing pointer %qD does break strict-aliasing rules" -msgstr "" - -#: tree-ssa.c:252 +#: tree-ssa.c:571 #, gcc-internal-format msgid "expected an SSA_NAME object" msgstr "" -#: tree-ssa.c:258 +#: tree-ssa.c:577 #, gcc-internal-format msgid "type mismatch between an SSA_NAME and its symbol" msgstr "" -#: tree-ssa.c:264 +#: tree-ssa.c:583 #, gcc-internal-format msgid "found an SSA_NAME that had been released into the free pool" msgstr "" -#: tree-ssa.c:270 +#: tree-ssa.c:589 #, gcc-internal-format msgid "found a virtual definition for a GIMPLE register" msgstr "" -#: tree-ssa.c:276 +#: tree-ssa.c:595 #, gcc-internal-format msgid "virtual SSA name for non-VOP decl" msgstr "" -#: tree-ssa.c:282 +#: tree-ssa.c:601 #, gcc-internal-format msgid "found a real definition for a non-register" msgstr "" -#: tree-ssa.c:289 +#: tree-ssa.c:608 #, gcc-internal-format msgid "found a default name with a non-empty defining statement" msgstr "" -#: tree-ssa.c:317 +#: tree-ssa.c:636 #, gcc-internal-format msgid "SSA_NAME created in two different blocks %i and %i" msgstr "" -#: tree-ssa.c:326 tree-ssa.c:696 +#: tree-ssa.c:645 tree-ssa.c:1018 #, gcc-internal-format msgid "SSA_NAME_DEF_STMT is wrong" msgstr "" -#: tree-ssa.c:378 +#: tree-ssa.c:697 #, gcc-internal-format msgid "missing definition" msgstr "" -#: tree-ssa.c:384 +#: tree-ssa.c:703 #, gcc-internal-format msgid "definition in block %i does not dominate use in block %i" msgstr "" -#: tree-ssa.c:392 +#: tree-ssa.c:711 #, gcc-internal-format msgid "definition in block %i follows the use" msgstr "" -#: tree-ssa.c:399 +#: tree-ssa.c:718 #, gcc-internal-format msgid "SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set" msgstr "" -#: tree-ssa.c:407 +#: tree-ssa.c:726 #, gcc-internal-format msgid "no immediate_use list" msgstr "" -#: tree-ssa.c:419 +#: tree-ssa.c:738 #, gcc-internal-format msgid "wrong immediate use list" msgstr "" -#: tree-ssa.c:453 +#: tree-ssa.c:772 #, gcc-internal-format msgid "incoming edge count does not match number of PHI arguments" msgstr "" -#: tree-ssa.c:467 +#: tree-ssa.c:786 #, gcc-internal-format msgid "PHI argument is missing for edge %d->%d" msgstr "" -#: tree-ssa.c:476 +#: tree-ssa.c:795 #, gcc-internal-format msgid "PHI argument is not SSA_NAME, or invariant" msgstr "" -#: tree-ssa.c:504 +#: tree-ssa.c:823 #, gcc-internal-format msgid "wrong edge %d->%d for PHI argument" msgstr "" -#: tree-ssa.c:585 +#: tree-ssa.c:904 #, gcc-internal-format msgid "AUX pointer initialized for edge %d->%d" msgstr "" -#: tree-ssa.c:611 +#: tree-ssa.c:930 #, gcc-internal-format msgid "stmt (%p) marked modified after optimization pass: " msgstr "" -#: tree-ssa.c:630 +#: tree-ssa.c:949 #, gcc-internal-format msgid "statement makes a memory store, but has no VDEFS" msgstr "" -#: tree-ssa.c:642 +#: tree-ssa.c:964 #, gcc-internal-format msgid "statement has VDEF operand not in defs list" msgstr "" -#: tree-ssa.c:647 +#: tree-ssa.c:969 #, gcc-internal-format msgid "statement has VDEF but no VUSE operand" msgstr "" -#: tree-ssa.c:653 +#: tree-ssa.c:975 #, gcc-internal-format msgid "VDEF and VUSE do not use the same symbol" msgstr "" -#: tree-ssa.c:662 +#: tree-ssa.c:984 #, gcc-internal-format msgid "statement has VUSE operand not in uses list" msgstr "" -#: tree-ssa.c:725 +#: tree-ssa.c:1047 #, gcc-internal-format msgid "verify_ssa failed" msgstr "" -#: tree-ssa.c:1271 +#: tree-ssa.c:1665 #, gcc-internal-format -msgid "%J%qD was declared here" +msgid "%qD was declared here" msgstr "" -#: tree-ssa.c:1338 +#: tree-ssa.c:1737 #, gcc-internal-format msgid "%qD is used uninitialized in this function" msgstr "" -#: tree-ssa.c:1341 tree-ssa.c:1380 +#: tree-ssa.c:1740 tree-ssa.c:1779 #, gcc-internal-format msgid "%qD may be used uninitialized in this function" msgstr "" -#: tree-vrp.c:5033 +#: tree-vrp.c:5017 #, gcc-internal-format msgid "array subscript is outside array bounds" msgstr "" -#: tree-vrp.c:5048 +#: tree-vrp.c:5032 #, gcc-internal-format msgid "array subscript is above array bounds" msgstr "" -#: tree-vrp.c:5055 +#: tree-vrp.c:5039 #, gcc-internal-format msgid "array subscript is below array bounds" msgstr "" -#: tree-vrp.c:5705 +#: tree-vrp.c:5708 #, gcc-internal-format msgid "" "assuming signed overflow does not occur when simplifying conditional to " "constant" msgstr "" -#: tree-vrp.c:5711 +#: tree-vrp.c:5714 #, gcc-internal-format msgid "assuming signed overflow does not occur when simplifying conditional" msgstr "" -#: tree-vrp.c:5748 +#: tree-vrp.c:5758 #, gcc-internal-format msgid "comparison always false due to limited range of data type" msgstr "" -#: tree-vrp.c:5751 +#: tree-vrp.c:5760 #, gcc-internal-format msgid "comparison always true due to limited range of data type" msgstr "" -#: tree.c:3697 +#: tree-vrp.c:6602 +#, gcc-internal-format +msgid "" +"assuming signed overflow does not occur when simplifying %</%> or %<%%%> to %" +"<>>%> or %<&%>" +msgstr "" + +#: tree-vrp.c:6684 +#, gcc-internal-format +msgid "" +"assuming signed overflow does not occur when simplifying %<abs (X)%> to %<X%" +"> or %<-X%>" +msgstr "" + +#: tree.c:4072 #, gcc-internal-format msgid "ignoring attributes applied to %qT after definition" msgstr "" -#: tree.c:3980 +#: tree.c:5218 #, gcc-internal-format msgid "%q+D already declared with dllexport attribute: dllimport ignored" msgstr "" -#: tree.c:3992 +#: tree.c:5230 #, gcc-internal-format msgid "" "%q+D redeclared without dllimport attribute after being referenced with dll " "linkage" msgstr "" -#: tree.c:4007 +#: tree.c:5245 #, gcc-internal-format msgid "%q+D redeclared without dllimport attribute: previous dllimport ignored" msgstr "" -#: tree.c:4104 +#: tree.c:5345 #, gcc-internal-format msgid "inline function %q+D declared as dllimport: attribute ignored" msgstr "" -#: tree.c:4112 +#: tree.c:5353 #, gcc-internal-format msgid "function %q+D definition is marked dllimport" msgstr "" -#: tree.c:4120 config/sh/symbian.c:430 +#: tree.c:5361 config/sh/symbian-c.c:144 config/sh/symbian-cxx.c:576 #, gcc-internal-format msgid "variable %q+D definition is marked dllimport" msgstr "" -#: tree.c:4143 config/sh/symbian.c:505 +#: tree.c:5388 config/sh/symbian-c.c:164 config/sh/symbian-cxx.c:651 #, gcc-internal-format msgid "external linkage required for symbol %q+D because of %qE attribute" msgstr "" -#: tree.c:4157 +#: tree.c:5402 #, gcc-internal-format msgid "" "%qE implies default visibility, but %qD has already been declared with a " "different visibility" msgstr "" -#: tree.c:5739 +#: tree.c:6995 #, gcc-internal-format msgid "arrays of functions are not meaningful" msgstr "" -#: tree.c:5890 +#: tree.c:7131 #, gcc-internal-format msgid "function return type cannot be function" msgstr "" -#: tree.c:7103 tree.c:7188 tree.c:7249 +#: tree.c:8343 tree.c:8428 tree.c:8489 #, gcc-internal-format msgid "tree check: %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:7140 +#: tree.c:8380 #, gcc-internal-format msgid "tree check: expected none of %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:7153 +#: tree.c:8393 #, gcc-internal-format msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: tree.c:7202 +#: tree.c:8442 #, gcc-internal-format msgid "tree check: did not expect class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: tree.c:7215 +#: tree.c:8455 #, gcc-internal-format msgid "tree check: expected omp_clause %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:7275 +#: tree.c:8515 #, gcc-internal-format msgid "" "tree check: expected tree that contains %qs structure, have %qs in %s, at %s:" "%d" msgstr "" -#: tree.c:7289 +#: tree.c:8529 #, gcc-internal-format msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" msgstr "" -#: tree.c:7302 +#: tree.c:8542 #, gcc-internal-format msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" msgstr "" -#: tree.c:7315 +#: tree.c:8555 #, gcc-internal-format msgid "" "tree check: accessed operand %d of omp_clause %s with %d operands in %s, at %" @@ -25868,154 +26794,149 @@ msgstr "" #: value-prof.c:477 #, gcc-internal-format msgid "" -"%HCorrupted value profile: %s profiler overall count (%d) does not match BB " +"Corrupted value profile: %s profiler overall count (%d) does not match BB " "count (%d)" msgstr "" -#: varasm.c:574 +#: varasm.c:580 #, gcc-internal-format msgid "%+D causes a section type conflict" msgstr "" -#: varasm.c:1124 +#: varasm.c:1130 #, gcc-internal-format msgid "" "alignment of %q+D is greater than maximum object file alignment. Using %d" msgstr "" -#: varasm.c:1350 varasm.c:1358 +#: varasm.c:1356 varasm.c:1364 #, gcc-internal-format msgid "register name not specified for %q+D" msgstr "" -#: varasm.c:1360 +#: varasm.c:1366 #, gcc-internal-format msgid "invalid register name for %q+D" msgstr "" -#: varasm.c:1362 +#: varasm.c:1368 #, gcc-internal-format msgid "data type of %q+D isn%'t suitable for a register" msgstr "" -#: varasm.c:1365 +#: varasm.c:1371 #, gcc-internal-format msgid "register specified for %q+D isn%'t suitable for data type" msgstr "" -#: varasm.c:1375 +#: varasm.c:1381 #, gcc-internal-format msgid "global register variable has initial value" msgstr "" -#: varasm.c:1379 +#: varasm.c:1385 #, gcc-internal-format msgid "optimization may eliminate reads and/or writes to register variables" msgstr "" -#: varasm.c:1417 +#: varasm.c:1423 #, gcc-internal-format msgid "register name given for non-register variable %q+D" msgstr "" -#: varasm.c:1486 +#: varasm.c:1492 #, gcc-internal-format msgid "global destructors not supported on this target" msgstr "" -#: varasm.c:1552 +#: varasm.c:1558 #, gcc-internal-format msgid "global constructors not supported on this target" msgstr "" -#: varasm.c:1938 +#: varasm.c:1945 #, gcc-internal-format msgid "thread-local COMMON data not implemented" msgstr "" -#: varasm.c:1967 +#: varasm.c:1974 #, gcc-internal-format msgid "" "requested alignment for %q+D is greater than implemented alignment of %wu" msgstr "" -#: varasm.c:4486 +#: varasm.c:4536 #, gcc-internal-format msgid "initializer for integer/fixed-point value is too complicated" msgstr "" -#: varasm.c:4491 +#: varasm.c:4541 #, gcc-internal-format msgid "initializer for floating value is not a floating constant" msgstr "" -#: varasm.c:4764 +#: varasm.c:4847 #, gcc-internal-format msgid "invalid initial value for member %qE" msgstr "" -#: varasm.c:4960 varasm.c:5004 +#: varasm.c:5156 varasm.c:5200 #, gcc-internal-format msgid "weak declaration of %q+D must precede definition" msgstr "" -#: varasm.c:4968 +#: varasm.c:5164 #, gcc-internal-format msgid "" "weak declaration of %q+D after first use results in unspecified behavior" msgstr "" -#: varasm.c:5002 +#: varasm.c:5198 #, gcc-internal-format msgid "weak declaration of %q+D must be public" msgstr "" -#: varasm.c:5006 +#: varasm.c:5202 #, gcc-internal-format msgid "weak declaration of %q+D not supported" msgstr "" -#: varasm.c:5032 +#: varasm.c:5228 varasm.c:5630 #, gcc-internal-format msgid "only weak aliases are supported in this configuration" msgstr "" -#: varasm.c:5266 +#: varasm.c:5445 #, gcc-internal-format -msgid "%Jweakref is not supported in this configuration" +msgid "weakref is not supported in this configuration" msgstr "" -#: varasm.c:5347 +#: varasm.c:5559 #, gcc-internal-format msgid "%q+D aliased to undefined symbol %qE" msgstr "" -#: varasm.c:5352 +#: varasm.c:5569 #, gcc-internal-format msgid "%q+D aliased to external symbol %qE" msgstr "" -#: varasm.c:5391 +#: varasm.c:5608 #, gcc-internal-format msgid "weakref %q+D ultimately targets itself" msgstr "" -#: varasm.c:5400 +#: varasm.c:5617 #, gcc-internal-format msgid "weakref %q+D must have static linkage" msgstr "" -#: varasm.c:5406 -#, gcc-internal-format -msgid "%Jalias definitions not supported in this configuration" -msgstr "" - -#: varasm.c:5411 +#: varasm.c:5624 #, gcc-internal-format -msgid "%Jonly weak aliases are supported in this configuration" +msgid "alias definitions not supported in this configuration" msgstr "" -#: varasm.c:5471 +#: varasm.c:5690 #, gcc-internal-format msgid "visibility attribute not supported in this configuration; ignored" msgstr "" @@ -26030,7 +26951,7 @@ msgstr "" msgid "underflowed virtual array %s in %s, at %s:%d" msgstr "" -#: vec.c:382 +#: vec.c:523 #, gcc-internal-format msgid "vector %s %s domain error, in %s at %s:%u" msgstr "" @@ -26195,7 +27116,7 @@ msgstr "" #. coalesced sections. Weak aliases (or any other kind of aliases) are #. not supported. Weak symbols that aren't visible outside the .s file #. are not supported. -#: config/darwin.h:456 +#: config/darwin.h:488 #, gcc-internal-format msgid "alias definitions not supported in Mach-O; ignored" msgstr "" @@ -26206,303 +27127,339 @@ msgstr "" msgid "profiler support for VxWorks" msgstr "" -#: config/alpha/alpha.c:233 config/rs6000/rs6000.c:2194 +#: config/alpha/alpha.c:230 config/rs6000/rs6000.c:3103 #, gcc-internal-format msgid "bad value %qs for -mtls-size switch" msgstr "" -#: config/alpha/alpha.c:287 +#: config/alpha/alpha.c:284 #, gcc-internal-format msgid "-f%s ignored for Unicos/Mk (not supported)" msgstr "" -#: config/alpha/alpha.c:311 +#: config/alpha/alpha.c:308 #, gcc-internal-format msgid "-mieee not supported on Unicos/Mk" msgstr "" -#: config/alpha/alpha.c:322 +#: config/alpha/alpha.c:319 #, gcc-internal-format msgid "-mieee-with-inexact not supported on Unicos/Mk" msgstr "" -#: config/alpha/alpha.c:339 +#: config/alpha/alpha.c:336 #, gcc-internal-format msgid "bad value %qs for -mtrap-precision switch" msgstr "" -#: config/alpha/alpha.c:353 +#: config/alpha/alpha.c:350 #, gcc-internal-format msgid "bad value %qs for -mfp-rounding-mode switch" msgstr "" -#: config/alpha/alpha.c:368 +#: config/alpha/alpha.c:365 #, gcc-internal-format msgid "bad value %qs for -mfp-trap-mode switch" msgstr "" -#: config/alpha/alpha.c:382 config/alpha/alpha.c:394 +#: config/alpha/alpha.c:379 config/alpha/alpha.c:391 #, gcc-internal-format msgid "bad value %qs for -mcpu switch" msgstr "" -#: config/alpha/alpha.c:401 +#: config/alpha/alpha.c:398 #, gcc-internal-format msgid "trap mode not supported on Unicos/Mk" msgstr "" -#: config/alpha/alpha.c:408 +#: config/alpha/alpha.c:405 #, gcc-internal-format msgid "fp software completion requires -mtrap-precision=i" msgstr "" -#: config/alpha/alpha.c:424 +#: config/alpha/alpha.c:421 #, gcc-internal-format msgid "rounding mode not supported for VAX floats" msgstr "" -#: config/alpha/alpha.c:429 +#: config/alpha/alpha.c:426 #, gcc-internal-format msgid "trap mode not supported for VAX floats" msgstr "" -#: config/alpha/alpha.c:433 +#: config/alpha/alpha.c:430 #, gcc-internal-format msgid "128-bit long double not supported for VAX floats" msgstr "" -#: config/alpha/alpha.c:461 +#: config/alpha/alpha.c:458 #, gcc-internal-format msgid "L%d cache latency unknown for %s" msgstr "" -#: config/alpha/alpha.c:476 +#: config/alpha/alpha.c:473 #, gcc-internal-format msgid "bad value %qs for -mmemory-latency" msgstr "" -#: config/alpha/alpha.c:6578 config/alpha/alpha.c:6581 config/s390/s390.c:8715 -#: config/s390/s390.c:8718 +#: config/alpha/alpha.c:6728 config/alpha/alpha.c:6731 config/s390/s390.c:8797 +#: config/s390/s390.c:8800 #, gcc-internal-format msgid "bad builtin fcode" msgstr "" -#: config/arc/arc.c:392 +#: config/arc/arc.c:393 #, gcc-internal-format msgid "argument of %qE attribute is not a string constant" msgstr "" -#: config/arc/arc.c:400 +#: config/arc/arc.c:401 #, gcc-internal-format msgid "argument of %qE attribute is not \"ilink1\" or \"ilink2\"" msgstr "" -#: config/arm/arm.c:1183 +#: config/arm/arm.c:1342 #, gcc-internal-format msgid "switch -mcpu=%s conflicts with -march= switch" msgstr "" -#: config/arm/arm.c:1193 config/rs6000/rs6000.c:1592 config/sparc/sparc.c:768 +#: config/arm/arm.c:1352 config/rs6000/rs6000.c:2334 config/sparc/sparc.c:780 #, gcc-internal-format msgid "bad value (%s) for %s switch" msgstr "" -#: config/arm/arm.c:1306 +#: config/arm/arm.c:1465 +#, gcc-internal-format +msgid "invalid __fp16 format option: -mfp16-format=%s" +msgstr "" + +#: config/arm/arm.c:1482 #, gcc-internal-format msgid "invalid ABI option: -mabi=%s" msgstr "" -#: config/arm/arm.c:1314 +#: config/arm/arm.c:1490 #, gcc-internal-format msgid "target CPU does not support ARM mode" msgstr "" -#: config/arm/arm.c:1320 +#: config/arm/arm.c:1496 #, gcc-internal-format msgid "target CPU does not support interworking" msgstr "" -#: config/arm/arm.c:1326 +#: config/arm/arm.c:1502 #, gcc-internal-format msgid "target CPU does not support THUMB instructions" msgstr "" -#: config/arm/arm.c:1344 +#: config/arm/arm.c:1520 #, gcc-internal-format msgid "" "enabling backtrace support is only meaningful when compiling for the Thumb" msgstr "" -#: config/arm/arm.c:1347 +#: config/arm/arm.c:1523 #, gcc-internal-format msgid "" "enabling callee interworking support is only meaningful when compiling for " "the Thumb" msgstr "" -#: config/arm/arm.c:1350 +#: config/arm/arm.c:1526 #, gcc-internal-format msgid "" "enabling caller interworking support is only meaningful when compiling for " "the Thumb" msgstr "" -#: config/arm/arm.c:1354 +#: config/arm/arm.c:1530 #, gcc-internal-format msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" -#: config/arm/arm.c:1362 +#: config/arm/arm.c:1538 #, gcc-internal-format msgid "-fpic and -mapcs-reent are incompatible" msgstr "" -#: config/arm/arm.c:1365 +#: config/arm/arm.c:1541 #, gcc-internal-format msgid "APCS reentrant code not supported. Ignored" msgstr "" -#: config/arm/arm.c:1373 +#: config/arm/arm.c:1549 #, gcc-internal-format msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" -#: config/arm/arm.c:1376 +#: config/arm/arm.c:1552 #, gcc-internal-format msgid "passing floating point arguments in fp regs not yet supported" msgstr "" -#: config/arm/arm.c:1433 +#: config/arm/arm.c:1609 #, gcc-internal-format msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" msgstr "" -#: config/arm/arm.c:1436 +#: config/arm/arm.c:1612 #, gcc-internal-format msgid "iwmmxt abi requires an iwmmxt capable cpu" msgstr "" -#: config/arm/arm.c:1446 +#: config/arm/arm.c:1622 #, gcc-internal-format msgid "invalid floating point emulation option: -mfpe=%s" msgstr "" -#: config/arm/arm.c:1463 +#: config/arm/arm.c:1639 #, gcc-internal-format msgid "invalid floating point option: -mfpu=%s" msgstr "" -#: config/arm/arm.c:1503 +#: config/arm/arm.c:1679 #, gcc-internal-format msgid "invalid floating point abi: -mfloat-abi=%s" msgstr "" -#: config/arm/arm.c:1510 +#: config/arm/arm.c:1687 #, gcc-internal-format -msgid "-mfloat-abi=hard and VFP" +msgid "FPA is unsupported in the AAPCS" msgstr "" -#: config/arm/arm.c:1514 +#: config/arm/arm.c:1692 #, gcc-internal-format -msgid "FPA is unsupported in the AAPCS" +msgid "AAPCS does not support -mcaller-super-interworking" msgstr "" -#: config/arm/arm.c:1520 +#: config/arm/arm.c:1695 +#, gcc-internal-format +msgid "AAPCS does not support -mcallee-super-interworking" +msgstr "" + +#: config/arm/arm.c:1702 #, gcc-internal-format msgid "iWMMXt and hardware floating point" msgstr "" -#: config/arm/arm.c:1524 +#: config/arm/arm.c:1706 #, gcc-internal-format msgid "Thumb-2 iWMMXt" msgstr "" -#: config/arm/arm.c:1547 +#: config/arm/arm.c:1710 +#, gcc-internal-format +msgid "__fp16 and no ldrh" +msgstr "" + +#: config/arm/arm.c:1730 +#, gcc-internal-format +msgid "-mfloat-abi=hard and VFP" +msgstr "" + +#: config/arm/arm.c:1755 #, gcc-internal-format msgid "invalid thread pointer option: -mtp=%s" msgstr "" -#: config/arm/arm.c:1560 +#: config/arm/arm.c:1768 #, gcc-internal-format msgid "can not use -mtp=cp15 with 16-bit Thumb" msgstr "" -#: config/arm/arm.c:1574 +#: config/arm/arm.c:1782 #, gcc-internal-format msgid "structure size boundary can only be set to %s" msgstr "" -#: config/arm/arm.c:1580 +#: config/arm/arm.c:1788 #, gcc-internal-format msgid "RTP PIC is incompatible with Thumb" msgstr "" -#: config/arm/arm.c:1589 +#: config/arm/arm.c:1797 #, gcc-internal-format msgid "RTP PIC is incompatible with -msingle-pic-base" msgstr "" -#: config/arm/arm.c:1601 +#: config/arm/arm.c:1809 #, gcc-internal-format msgid "-mpic-register= is useless without -fpic" msgstr "" -#: config/arm/arm.c:1610 +#: config/arm/arm.c:1818 #, gcc-internal-format msgid "unable to use '%s' for PIC register" msgstr "" -#: config/arm/arm.c:3267 config/arm/arm.c:3285 config/avr/avr.c:4827 -#: config/avr/avr.c:4843 config/bfin/bfin.c:5270 config/bfin/bfin.c:5331 -#: config/bfin/bfin.c:5360 config/h8300/h8300.c:5259 config/i386/i386.c:4248 -#: config/i386/i386.c:26839 config/m68hc11/m68hc11.c:1147 -#: config/m68k/m68k.c:784 config/mcore/mcore.c:3034 -#: config/rs6000/rs6000.c:20670 config/sh/sh.c:8132 config/sh/sh.c:8150 -#: config/sh/sh.c:8179 config/sh/sh.c:8261 config/sh/sh.c:8284 -#: config/spu/spu.c:3726 config/stormy16/stormy16.c:2221 -#: config/v850/v850.c:2048 +#: config/arm/arm.c:3590 +#, gcc-internal-format +msgid "Non-AAPCS derived PCS variant" +msgstr "" + +#: config/arm/arm.c:3592 +#, gcc-internal-format +msgid "Variadic functions must use the base AAPCS variant" +msgstr "" + +#: config/arm/arm.c:3611 +#, gcc-internal-format +msgid "PCS variant" +msgstr "" + +#: config/arm/arm.c:4472 config/arm/arm.c:4490 config/avr/avr.c:4678 +#: config/avr/avr.c:4694 config/bfin/bfin.c:5546 config/bfin/bfin.c:5607 +#: config/bfin/bfin.c:5636 config/h8300/h8300.c:5338 config/i386/i386.c:4364 +#: config/i386/i386.c:26460 config/i386/i386.c:26542 +#: config/m68hc11/m68hc11.c:1168 config/m68k/m68k.c:802 +#: config/mcore/mcore.c:3036 config/mep/mep.c:4061 config/mep/mep.c:4075 +#: config/mep/mep.c:4149 config/rs6000/rs6000.c:23288 config/sh/sh.c:8625 +#: config/sh/sh.c:8643 config/sh/sh.c:8672 config/sh/sh.c:8754 +#: config/sh/sh.c:8777 config/spu/spu.c:3751 config/stormy16/stormy16.c:2230 +#: config/v850/v850.c:2072 #, gcc-internal-format msgid "%qE attribute only applies to functions" msgstr "" -#: config/arm/arm.c:14814 +#: config/arm/arm.c:16127 #, gcc-internal-format msgid "unable to compute real location of stacked parameter" msgstr "" -#: config/arm/arm.c:16320 +#: config/arm/arm.c:17707 #, gcc-internal-format msgid "argument must be a constant" msgstr "" #. @@@ better error message -#: config/arm/arm.c:16628 config/arm/arm.c:16665 +#: config/arm/arm.c:18015 config/arm/arm.c:18052 #, gcc-internal-format msgid "selector must be an immediate" msgstr "" #. @@@ better error message -#: config/arm/arm.c:16708 +#: config/arm/arm.c:18095 #, gcc-internal-format msgid "mask must be an immediate" msgstr "" -#: config/arm/arm.c:17369 +#: config/arm/arm.c:18757 #, gcc-internal-format msgid "no low registers available for popping high registers" msgstr "" -#: config/arm/arm.c:17592 +#: config/arm/arm.c:18980 #, gcc-internal-format msgid "interrupt Service Routines cannot be coded in Thumb mode" msgstr "" -#: config/arm/arm.c:19640 +#: config/arm/arm.c:21099 #, gcc-internal-format msgid "the mangling of %<va_list%> has changed in GCC 4.4" msgstr "" -#: config/arm/pe.c:158 config/mcore/mcore.c:2900 +#: config/arm/pe.c:158 config/mcore/mcore.c:2911 #, gcc-internal-format msgid "initialized variable %q+D is marked dllimport" msgstr "" @@ -26512,107 +27469,103 @@ msgstr "" msgid "static variable %q+D is marked dllimport" msgstr "" -#: config/avr/avr.c:4629 +#: config/avr/avr.c:4492 #, gcc-internal-format msgid "%qs appears to be a misspelled interrupt handler" msgstr "" -#: config/avr/avr.c:4638 +#: config/avr/avr.c:4501 #, gcc-internal-format msgid "%qs appears to be a misspelled signal handler" msgstr "" -#: config/avr/avr.c:4800 +#: config/avr/avr.c:4651 #, gcc-internal-format msgid "only initialized variables can be placed into program memory area" msgstr "" -#: config/avr/avr.c:4934 +#: config/avr/avr.c:4785 #, gcc-internal-format msgid "only uninitialized variables can be placed in the .noinit section" msgstr "" -#: config/avr/avr.c:4948 +#: config/avr/avr.c:4799 #, gcc-internal-format msgid "MCU %qs supported for assembler only" msgstr "" -#: config/avr/avr.h:738 -#, gcc-internal-format -msgid "trampolines not supported" -msgstr "" - -#: config/bfin/bfin.c:2458 config/m68k/m68k.c:501 +#: config/bfin/bfin.c:2554 config/m68k/m68k.c:519 #, gcc-internal-format msgid "-mshared-library-id=%s is not between 0 and %d" msgstr "" -#: config/bfin/bfin.c:2478 +#: config/bfin/bfin.c:2574 #, gcc-internal-format msgid "-mcpu=%s is not valid" msgstr "" -#: config/bfin/bfin.c:2514 +#: config/bfin/bfin.c:2610 #, gcc-internal-format msgid "-mcpu=%s has invalid silicon revision" msgstr "" -#: config/bfin/bfin.c:2579 +#: config/bfin/bfin.c:2675 #, gcc-internal-format msgid "-mshared-library-id= specified without -mid-shared-library" msgstr "" -#: config/bfin/bfin.c:2582 +#: config/bfin/bfin.c:2678 #, gcc-internal-format msgid "Can't use multiple stack checking methods together." msgstr "" -#: config/bfin/bfin.c:2585 +#: config/bfin/bfin.c:2681 #, gcc-internal-format msgid "ID shared libraries and FD-PIC mode can't be used together." msgstr "" -#: config/bfin/bfin.c:2590 config/m68k/m68k.c:609 +#: config/bfin/bfin.c:2686 config/m68k/m68k.c:627 #, gcc-internal-format msgid "cannot specify both -msep-data and -mid-shared-library" msgstr "" -#: config/bfin/bfin.c:2610 +#: config/bfin/bfin.c:2706 #, gcc-internal-format msgid "-mmulticore can only be used with BF561" msgstr "" -#: config/bfin/bfin.c:2613 +#: config/bfin/bfin.c:2709 #, gcc-internal-format msgid "-mcorea should be used with -mmulticore" msgstr "" -#: config/bfin/bfin.c:2616 +#: config/bfin/bfin.c:2712 #, gcc-internal-format msgid "-mcoreb should be used with -mmulticore" msgstr "" -#: config/bfin/bfin.c:2619 +#: config/bfin/bfin.c:2715 #, gcc-internal-format msgid "-mcorea and -mcoreb can't be used together" msgstr "" -#: config/bfin/bfin.c:5275 +#: config/bfin/bfin.c:5551 #, gcc-internal-format msgid "multiple function type attributes specified" msgstr "" -#: config/bfin/bfin.c:5342 +#: config/bfin/bfin.c:5618 #, gcc-internal-format msgid "can't apply both longcall and shortcall attributes to the same function" msgstr "" -#: config/bfin/bfin.c:5392 config/i386/winnt.c:59 +#: config/bfin/bfin.c:5668 config/i386/winnt.c:59 config/mep/mep.c:3965 +#: config/mep/mep.c:4103 #, gcc-internal-format msgid "%qE attribute only applies to variables" msgstr "" -#: config/bfin/bfin.c:5399 +#: config/bfin/bfin.c:5675 #, gcc-internal-format msgid "%qE attribute cannot be specified for local variables" msgstr "" @@ -26621,90 +27574,90 @@ msgstr "" #. an operator, for immediate output. If that ever happens for #. MULT, we need to apply TARGET_MUL_BUG in the caller. Make sure #. we notice. -#: config/cris/cris.c:447 +#: config/cris/cris.c:463 #, gcc-internal-format msgid "MULT case in cris_op_str" msgstr "" -#: config/cris/cris.c:837 +#: config/cris/cris.c:853 #, gcc-internal-format msgid "invalid use of ':' modifier" msgstr "" -#: config/cris/cris.c:1024 +#: config/cris/cris.c:1040 config/moxie/moxie.c:169 #, gcc-internal-format msgid "internal error: bad register: %d" msgstr "" -#: config/cris/cris.c:1586 +#: config/cris/cris.c:1607 #, gcc-internal-format msgid "internal error: sideeffect-insn affecting main effect" msgstr "" -#: config/cris/cris.c:1683 +#: config/cris/cris.c:1704 #, gcc-internal-format msgid "unknown cc_attr value" msgstr "" #. If we get here, the caller got its initial tests wrong. -#: config/cris/cris.c:2062 +#: config/cris/cris.c:2088 #, gcc-internal-format msgid "internal error: cris_side_effect_mode_ok with bad operands" msgstr "" -#: config/cris/cris.c:2354 +#: config/cris/cris.c:2380 #, gcc-internal-format msgid "-max-stackframe=%d is not usable, not between 0 and %d" msgstr "" -#: config/cris/cris.c:2382 +#: config/cris/cris.c:2408 #, gcc-internal-format msgid "unknown CRIS version specification in -march= or -mcpu= : %s" msgstr "" -#: config/cris/cris.c:2418 +#: config/cris/cris.c:2444 #, gcc-internal-format msgid "unknown CRIS cpu version specification in -mtune= : %s" msgstr "" -#: config/cris/cris.c:2439 +#: config/cris/cris.c:2465 #, gcc-internal-format msgid "-fPIC and -fpic are not supported in this configuration" msgstr "" -#: config/cris/cris.c:2454 +#: config/cris/cris.c:2480 #, gcc-internal-format msgid "that particular -g option is invalid with -maout and -melinux" msgstr "" -#: config/cris/cris.c:2680 +#: config/cris/cris.c:2706 #, gcc-internal-format msgid "Unknown src" msgstr "" -#: config/cris/cris.c:2741 +#: config/cris/cris.c:2767 #, gcc-internal-format msgid "Unknown dest" msgstr "" -#: config/cris/cris.c:3026 +#: config/cris/cris.c:3052 #, gcc-internal-format msgid "stackframe too big: %d bytes" msgstr "" -#: config/cris/cris.c:3520 config/cris/cris.c:3548 +#: config/cris/cris.c:3546 config/cris/cris.c:3574 #, gcc-internal-format msgid "expand_binop failed in movsi got" msgstr "" -#: config/cris/cris.c:3630 +#: config/cris/cris.c:3656 #, gcc-internal-format msgid "emitting PIC operand, but PIC register isn't set up" msgstr "" #. Definitions for GCC. Part of the machine description for CRIS. -#. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 -#. Free Software Foundation, Inc. +#. Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, +#. 2009 Free Software Foundation, Inc. #. Contributed by Axis Communications. Written by Hans-Peter Nilsson. #. #. This file is part of GCC. @@ -26751,77 +27704,72 @@ msgstr "" #. See cris.c for TARGET_ASM_FUNCTION_PROLOGUE and #. TARGET_ASM_FUNCTION_EPILOGUE. #. Node: Profiling -#: config/cris/cris.h:953 +#: config/cris/cris.h:935 #, gcc-internal-format msgid "no FUNCTION_PROFILER for CRIS" msgstr "" -#: config/crx/crx.h:368 +#: config/crx/crx.h:363 #, gcc-internal-format msgid "Profiler support for CRX" msgstr "" -#: config/crx/crx.h:379 -#, gcc-internal-format -msgid "Trampoline support for CRX" -msgstr "" - -#: config/frv/frv.c:8705 +#: config/frv/frv.c:8694 #, gcc-internal-format msgid "accumulator is not a constant integer" msgstr "" -#: config/frv/frv.c:8710 +#: config/frv/frv.c:8699 #, gcc-internal-format msgid "accumulator number is out of bounds" msgstr "" -#: config/frv/frv.c:8721 +#: config/frv/frv.c:8710 #, gcc-internal-format msgid "inappropriate accumulator for %qs" msgstr "" -#: config/frv/frv.c:8798 +#: config/frv/frv.c:8787 #, gcc-internal-format msgid "invalid IACC argument" msgstr "" -#: config/frv/frv.c:8821 +#: config/frv/frv.c:8810 #, gcc-internal-format msgid "%qs expects a constant argument" msgstr "" -#: config/frv/frv.c:8826 +#: config/frv/frv.c:8815 #, gcc-internal-format msgid "constant argument out of range for %qs" msgstr "" -#: config/frv/frv.c:9307 +#: config/frv/frv.c:9296 #, gcc-internal-format msgid "media functions are not available unless -mmedia is used" msgstr "" -#: config/frv/frv.c:9319 +#: config/frv/frv.c:9308 #, gcc-internal-format msgid "this media function is only available on the fr500" msgstr "" -#: config/frv/frv.c:9347 +#: config/frv/frv.c:9336 #, gcc-internal-format msgid "this media function is only available on the fr400 and fr550" msgstr "" -#: config/frv/frv.c:9366 +#: config/frv/frv.c:9355 #, gcc-internal-format msgid "this builtin function is only available on the fr405 and fr450" msgstr "" -#: config/frv/frv.c:9375 +#: config/frv/frv.c:9364 #, gcc-internal-format msgid "this builtin function is only available on the fr500 and fr550" msgstr "" -#: config/frv/frv.c:9387 +#: config/frv/frv.c:9376 #, gcc-internal-format msgid "this builtin function is only available on the fr450" msgstr "" @@ -26846,392 +27794,392 @@ msgstr "" msgid "can't set position in PCH file: %m" msgstr "" -#: config/i386/i386.c:2748 config/i386/i386.c:2990 +#: config/i386/i386.c:2786 config/i386/i386.c:3031 #, gcc-internal-format msgid "bad value (%s) for %stune=%s %s" msgstr "" -#: config/i386/i386.c:2792 +#: config/i386/i386.c:2830 #, gcc-internal-format msgid "bad value (%s) for %sstringop-strategy=%s %s" msgstr "" -#: config/i386/i386.c:2796 +#: config/i386/i386.c:2834 #, gcc-internal-format msgid "" "%stune=x86-64%s is deprecated. Use %stune=k8%s or %stune=generic%s instead " "as appropriate." msgstr "" -#: config/i386/i386.c:2806 +#: config/i386/i386.c:2844 #, gcc-internal-format msgid "generic CPU can be used only for %stune=%s %s" msgstr "" -#: config/i386/i386.c:2809 config/i386/i386.c:2951 +#: config/i386/i386.c:2847 config/i386/i386.c:2992 #, gcc-internal-format msgid "bad value (%s) for %sarch=%s %s" msgstr "" -#: config/i386/i386.c:2820 +#: config/i386/i386.c:2858 #, gcc-internal-format msgid "unknown ABI (%s) for %sabi=%s %s" msgstr "" -#: config/i386/i386.c:2835 +#: config/i386/i386.c:2873 #, gcc-internal-format msgid "code model %s does not support PIC mode" msgstr "" -#: config/i386/i386.c:2841 +#: config/i386/i386.c:2879 #, gcc-internal-format msgid "bad value (%s) for %scmodel=%s %s" msgstr "" -#: config/i386/i386.c:2865 +#: config/i386/i386.c:2903 #, gcc-internal-format msgid "bad value (%s) for %sasm=%s %s" msgstr "" -#: config/i386/i386.c:2869 +#: config/i386/i386.c:2907 #, gcc-internal-format msgid "code model %qs not supported in the %s bit mode" msgstr "" -#: config/i386/i386.c:2872 +#: config/i386/i386.c:2910 #, gcc-internal-format msgid "%i-bit mode not compiled in" msgstr "" -#: config/i386/i386.c:2884 config/i386/i386.c:2976 +#: config/i386/i386.c:2922 config/i386/i386.c:3017 #, gcc-internal-format msgid "CPU you selected does not support x86-64 instruction set" msgstr "" -#: config/i386/i386.c:3009 +#: config/i386/i386.c:3050 #, gcc-internal-format msgid "%sregparm%s is ignored in 64-bit mode" msgstr "" -#: config/i386/i386.c:3012 +#: config/i386/i386.c:3053 #, gcc-internal-format msgid "%sregparm=%d%s is not between 0 and %d" msgstr "" -#: config/i386/i386.c:3025 +#: config/i386/i386.c:3066 #, gcc-internal-format msgid "%salign-loops%s is obsolete, use -falign-loops%s" msgstr "" -#: config/i386/i386.c:3031 config/i386/i386.c:3046 config/i386/i386.c:3061 +#: config/i386/i386.c:3072 config/i386/i386.c:3087 config/i386/i386.c:3102 #, gcc-internal-format msgid "%salign-loops=%d%s is not between 0 and %d" msgstr "" -#: config/i386/i386.c:3040 +#: config/i386/i386.c:3081 #, gcc-internal-format msgid "%salign-jumps%s is obsolete, use -falign-jumps%s" msgstr "" -#: config/i386/i386.c:3055 +#: config/i386/i386.c:3096 #, gcc-internal-format msgid "%salign-functions%s is obsolete, use -falign-functions%s" msgstr "" -#: config/i386/i386.c:3090 +#: config/i386/i386.c:3131 #, gcc-internal-format msgid "%sbranch-cost=%d%s is not between 0 and 5" msgstr "" -#: config/i386/i386.c:3098 +#: config/i386/i386.c:3139 #, gcc-internal-format msgid "%slarge-data-threshold=%d%s is negative" msgstr "" -#: config/i386/i386.c:3112 +#: config/i386/i386.c:3153 #, gcc-internal-format msgid "bad value (%s) for %stls-dialect=%s %s" msgstr "" -#: config/i386/i386.c:3120 +#: config/i386/i386.c:3161 #, gcc-internal-format msgid "pc%d is not valid precision setting (32, 64 or 80)" msgstr "" -#: config/i386/i386.c:3136 +#: config/i386/i386.c:3177 #, gcc-internal-format msgid "%srtd%s is ignored in 64bit mode" msgstr "" -#: config/i386/i386.c:3191 +#: config/i386/i386.c:3232 #, gcc-internal-format msgid "%spreferred-stack-boundary=%d%s is not between %d and 12" msgstr "" -#: config/i386/i386.c:3212 +#: config/i386/i386.c:3253 #, gcc-internal-format msgid "-mincoming-stack-boundary=%d is not between %d and 12" msgstr "" -#: config/i386/i386.c:3225 +#: config/i386/i386.c:3266 #, gcc-internal-format msgid "%ssseregparm%s used without SSE enabled" msgstr "" -#: config/i386/i386.c:3236 config/i386/i386.c:3250 +#: config/i386/i386.c:3277 config/i386/i386.c:3291 #, gcc-internal-format msgid "SSE instruction set disabled, using 387 arithmetics" msgstr "" -#: config/i386/i386.c:3255 +#: config/i386/i386.c:3296 #, gcc-internal-format msgid "387 instruction set disabled, using SSE arithmetics" msgstr "" -#: config/i386/i386.c:3262 +#: config/i386/i386.c:3303 #, gcc-internal-format msgid "bad value (%s) for %sfpmath=%s %s" msgstr "" -#: config/i386/i386.c:3278 +#: config/i386/i386.c:3319 #, gcc-internal-format msgid "unknown vectorization library ABI type (%s) for %sveclibabi=%s %s" msgstr "" -#: config/i386/i386.c:3298 +#: config/i386/i386.c:3339 #, gcc-internal-format msgid "" "unwind tables currently require either a frame pointer or %saccumulate-" "outgoing-args%s for correctness" msgstr "" -#: config/i386/i386.c:3311 +#: config/i386/i386.c:3352 #, gcc-internal-format msgid "stack probing requires %saccumulate-outgoing-args%s for correctness" msgstr "" -#: config/i386/i386.c:3649 +#: config/i386/i386.c:3761 #, gcc-internal-format msgid "attribute(target(\"%s\")) is unknown" msgstr "" -#: config/i386/i386.c:3671 +#: config/i386/i386.c:3783 #, gcc-internal-format msgid "option(\"%s\") was already specified" msgstr "" -#: config/i386/i386.c:4261 config/i386/i386.c:4305 +#: config/i386/i386.c:4377 config/i386/i386.c:4422 #, gcc-internal-format msgid "fastcall and regparm attributes are not compatible" msgstr "" -#: config/i386/i386.c:4268 +#: config/i386/i386.c:4384 #, gcc-internal-format msgid "%qE attribute requires an integer constant argument" msgstr "" -#: config/i386/i386.c:4274 +#: config/i386/i386.c:4390 #, gcc-internal-format msgid "argument to %qE attribute larger than %d" msgstr "" -#: config/i386/i386.c:4297 config/i386/i386.c:4332 +#: config/i386/i386.c:4414 config/i386/i386.c:4449 #, gcc-internal-format msgid "fastcall and cdecl attributes are not compatible" msgstr "" -#: config/i386/i386.c:4301 +#: config/i386/i386.c:4418 #, gcc-internal-format msgid "fastcall and stdcall attributes are not compatible" msgstr "" -#: config/i386/i386.c:4315 config/i386/i386.c:4328 +#: config/i386/i386.c:4432 config/i386/i386.c:4445 #, gcc-internal-format msgid "stdcall and cdecl attributes are not compatible" msgstr "" -#: config/i386/i386.c:4319 +#: config/i386/i386.c:4436 #, gcc-internal-format msgid "stdcall and fastcall attributes are not compatible" msgstr "" -#: config/i386/i386.c:4406 +#: config/i386/i386.c:4579 #, gcc-internal-format -msgid "nested functions are limited to 2 register parameters" +msgid "Calling %qD with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.c:4492 +#: config/i386/i386.c:4582 #, gcc-internal-format -msgid "Calling %qD with attribute sseregparm without SSE/SSE2 enabled" +msgid "Calling %qT with attribute sseregparm without SSE/SSE2 enabled" msgstr "" -#: config/i386/i386.c:4495 +#: config/i386/i386.c:4787 #, gcc-internal-format -msgid "Calling %qT with attribute sseregparm without SSE/SSE2 enabled" +msgid "ms_hook_prologue is not compatible with nested function" msgstr "" -#: config/i386/i386.c:4754 +#: config/i386/i386.c:4860 #, gcc-internal-format msgid "" -"ms_abi attribute require -maccumulate-outgoing-args or subtarget " +"ms_abi attribute requires -maccumulate-outgoing-args or subtarget " "optimization implying it" msgstr "" -#: config/i386/i386.c:4871 +#: config/i386/i386.c:4979 #, gcc-internal-format msgid "AVX vector argument without AVX enabled changes the ABI" msgstr "" -#: config/i386/i386.c:5053 +#: config/i386/i386.c:5161 #, gcc-internal-format msgid "" "The ABI of passing struct with a flexible array member has changed in GCC 4.4" msgstr "" -#: config/i386/i386.c:5169 +#: config/i386/i386.c:5277 #, gcc-internal-format msgid "The ABI of passing union with long double has changed in GCC 4.4" msgstr "" -#: config/i386/i386.c:5284 +#: config/i386/i386.c:5392 #, gcc-internal-format msgid "" "The ABI of passing structure with complex float member has changed in GCC 4.4" msgstr "" -#: config/i386/i386.c:5429 +#: config/i386/i386.c:5537 #, gcc-internal-format msgid "SSE register return with SSE disabled" msgstr "" -#: config/i386/i386.c:5435 +#: config/i386/i386.c:5543 #, gcc-internal-format msgid "SSE register argument with SSE disabled" msgstr "" -#: config/i386/i386.c:5451 +#: config/i386/i386.c:5559 #, gcc-internal-format msgid "x87 register return with x87 disabled" msgstr "" -#: config/i386/i386.c:5820 +#: config/i386/i386.c:5928 #, gcc-internal-format msgid "SSE vector argument without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.c:5857 +#: config/i386/i386.c:5965 #, gcc-internal-format msgid "MMX vector argument without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.c:6458 +#: config/i386/i386.c:6567 #, gcc-internal-format msgid "SSE vector return without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.c:6468 +#: config/i386/i386.c:6577 #, gcc-internal-format msgid "MMX vector return without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.c:10734 +#: config/i386/i386.c:11125 #, gcc-internal-format msgid "extended registers have no high halves" msgstr "" -#: config/i386/i386.c:10749 +#: config/i386/i386.c:11140 #, gcc-internal-format msgid "unsupported operand size for extended register" msgstr "" -#: config/i386/i386.c:10987 +#: config/i386/i386.c:11377 #, gcc-internal-format msgid "non-integer operand used with operand code '%c'" msgstr "" -#: config/i386/i386.c:24052 +#: config/i386/i386.c:23627 #, gcc-internal-format msgid "last argument must be an immediate" msgstr "" -#: config/i386/i386.c:24345 +#: config/i386/i386.c:23920 #, gcc-internal-format msgid "the fifth argument must be a 8-bit immediate" msgstr "" -#: config/i386/i386.c:24440 +#: config/i386/i386.c:24015 #, gcc-internal-format msgid "the third argument must be a 8-bit immediate" msgstr "" -#: config/i386/i386.c:24780 +#: config/i386/i386.c:24360 #, gcc-internal-format msgid "the last argument must be a 4-bit immediate" msgstr "" -#: config/i386/i386.c:24785 +#: config/i386/i386.c:24365 #, gcc-internal-format msgid "the last argument must be a 2-bit immediate" msgstr "" -#: config/i386/i386.c:24794 +#: config/i386/i386.c:24374 #, gcc-internal-format msgid "the last argument must be a 1-bit immediate" msgstr "" -#: config/i386/i386.c:24803 +#: config/i386/i386.c:24383 #, gcc-internal-format msgid "the last argument must be a 5-bit immediate" msgstr "" -#: config/i386/i386.c:24812 +#: config/i386/i386.c:24392 #, gcc-internal-format msgid "the next to last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386.c:24816 config/i386/i386.c:24994 +#: config/i386/i386.c:24396 config/i386/i386.c:24580 #, gcc-internal-format msgid "the last argument must be an 8-bit immediate" msgstr "" -#: config/i386/i386.c:25052 config/rs6000/rs6000.c:8545 +#: config/i386/i386.c:24641 config/rs6000/rs6000.c:10154 #, gcc-internal-format msgid "selector must be an integer constant in the range 0..%wi" msgstr "" -#: config/i386/i386.c:25195 +#: config/i386/i386.c:24784 #, gcc-internal-format msgid "%qE needs unknown isa option" msgstr "" -#: config/i386/i386.c:25199 +#: config/i386/i386.c:24788 #, gcc-internal-format msgid "%qE needs isa option %s" msgstr "" -#: config/i386/i386.c:26846 +#: config/i386/i386.c:26467 #, gcc-internal-format msgid "%qE attribute only available for 64-bit" msgstr "" -#: config/i386/i386.c:26857 config/i386/i386.c:26866 +#: config/i386/i386.c:26478 config/i386/i386.c:26487 #, gcc-internal-format msgid "ms_abi and sysv_abi attributes are not compatible" msgstr "" -#: config/i386/i386.c:26904 config/rs6000/rs6000.c:20753 +#: config/i386/i386.c:26525 config/rs6000/rs6000.c:23371 #, gcc-internal-format msgid "%qE incompatible attribute ignored" msgstr "" -#: config/i386/netware.c:253 +#: config/i386/i386.c:26550 #, gcc-internal-format -msgid "-fPIC and -fpic are not supported for this target" +msgid "%qE attribute only available for 32-bit" msgstr "" -#: config/i386/winnt-cxx.c:71 config/sh/symbian.c:172 +#: config/i386/i386.c:26556 #, gcc-internal-format -msgid "definition of static data member %q+D of dllimport'd class" +msgid "ms_hook_prologue attribute needs assembler swap suffix support" msgstr "" #: config/i386/winnt.c:81 @@ -27240,17 +28188,23 @@ msgid "" "%qE attribute applies only to initialized variables with external linkage" msgstr "" -#: config/i386/winnt.c:290 +#: config/i386/winnt.c:143 config/sh/symbian-c.c:96 +#: config/sh/symbian-cxx.c:120 +#, gcc-internal-format +msgid "definition of static data member %q+D of dllimport'd class" +msgstr "" + +#: config/i386/winnt.c:292 #, gcc-internal-format msgid "%q+D:'selectany' attribute applies only to initialized objects" msgstr "" -#: config/i386/winnt.c:447 +#: config/i386/winnt.c:440 #, gcc-internal-format msgid "%q+D causes a section type conflict" msgstr "" -#: config/i386/cygming.h:150 +#: config/i386/cygming.h:151 #, gcc-internal-format msgid "-f%s ignored for target (all code is position independent)" msgstr "" @@ -27265,94 +28219,101 @@ msgstr "" msgid "ms-bitfields not supported for objc" msgstr "" +#. Don't allow flag_pic to propagate since invalid relocations will +#. result otherwise. +#: config/i386/netware.h:81 +#, gcc-internal-format +msgid "-fPIC and -fpic are not supported for this target" +msgstr "" + #: config/ia64/ia64-c.c:51 #, gcc-internal-format msgid "malformed #pragma builtin" msgstr "" -#: config/ia64/ia64.c:589 +#: config/ia64/ia64.c:597 #, gcc-internal-format msgid "invalid argument of %qE attribute" msgstr "" -#: config/ia64/ia64.c:601 +#: config/ia64/ia64.c:610 #, gcc-internal-format -msgid "%Jan address area attribute cannot be specified for local variables" +msgid "an address area attribute cannot be specified for local variables" msgstr "" -#: config/ia64/ia64.c:608 +#: config/ia64/ia64.c:617 #, gcc-internal-format msgid "address area of %q+D conflicts with previous declaration" msgstr "" -#: config/ia64/ia64.c:615 +#: config/ia64/ia64.c:625 +#, gcc-internal-format +msgid "address area attribute cannot be specified for functions" +msgstr "" + +#: config/ia64/ia64.c:666 #, gcc-internal-format -msgid "%Jaddress area attribute cannot be specified for functions" +msgid "%qE attribute requires a string constant argument" msgstr "" -#: config/ia64/ia64.c:5174 config/pa/pa.c:355 config/sh/sh.c:7955 -#: config/spu/spu.c:4613 +#: config/ia64/ia64.c:5387 config/pa/pa.c:368 config/sh/sh.c:8473 +#: config/spu/spu.c:4706 #, gcc-internal-format msgid "value of -mfixed-range must have form REG1-REG2" msgstr "" -#: config/ia64/ia64.c:5201 config/pa/pa.c:382 config/sh/sh.c:7981 -#: config/spu/spu.c:4639 +#: config/ia64/ia64.c:5414 config/pa/pa.c:395 config/sh/sh.c:8499 +#: config/spu/spu.c:4732 #, gcc-internal-format msgid "%s-%s is an empty range" msgstr "" -#: config/ia64/ia64.c:5231 +#: config/ia64/ia64.c:5444 #, gcc-internal-format msgid "bad value %<%s%> for -mtls-size= switch" msgstr "" -#: config/ia64/ia64.c:5260 +#: config/ia64/ia64.c:5473 #, gcc-internal-format msgid "value %<%s%> for -mtune= switch is deprecated" msgstr "" -#: config/ia64/ia64.c:5262 +#: config/ia64/ia64.c:5475 #, gcc-internal-format msgid "GCC 4.4 is the last release with Itanium1 tuning support" msgstr "" -#: config/ia64/ia64.c:5269 +#: config/ia64/ia64.c:5482 #, gcc-internal-format msgid "bad value %<%s%> for -mtune= switch" msgstr "" -#: config/ia64/ia64.c:5288 -#, gcc-internal-format -msgid "not yet implemented: latency-optimized inline square root" -msgstr "" - -#: config/ia64/ia64.c:10557 +#: config/ia64/ia64.c:10810 #, gcc-internal-format msgid "version attribute is not a string" msgstr "" -#: config/iq2000/iq2000.c:1832 +#: config/iq2000/iq2000.c:1825 #, gcc-internal-format msgid "gp_offset (%ld) or end_offset (%ld) is less than zero" msgstr "" -#: config/iq2000/iq2000.c:2602 +#: config/iq2000/iq2000.c:2595 #, gcc-internal-format msgid "argument %qd is not a constant" msgstr "" -#: config/iq2000/iq2000.c:2904 config/xtensa/xtensa.c:2324 +#: config/iq2000/iq2000.c:2897 config/xtensa/xtensa.c:2335 #, gcc-internal-format msgid "PRINT_OPERAND_ADDRESS, null pointer" msgstr "" -#: config/iq2000/iq2000.c:3059 +#: config/iq2000/iq2000.c:3052 #, gcc-internal-format msgid "PRINT_OPERAND: Unknown punctuation '%c'" msgstr "" -#: config/iq2000/iq2000.c:3068 config/xtensa/xtensa.c:2178 +#: config/iq2000/iq2000.c:3061 config/xtensa/xtensa.c:2189 #, gcc-internal-format msgid "PRINT_OPERAND null pointer" msgstr "" @@ -27372,327 +28333,612 @@ msgstr "" msgid "#pragma GCC memregs takes a number [0..16]" msgstr "" -#: config/m32c/m32c.c:416 +#: config/m32c/m32c.c:421 #, gcc-internal-format msgid "invalid target memregs value '%d'" msgstr "" -#: config/m32c/m32c.c:2784 +#: config/m32c/m32c.c:2824 #, gcc-internal-format msgid "%qE attribute is not supported for R8C target" msgstr "" -#: config/m32c/m32c.c:2792 -#, gcc-internal-format -msgid "%qE attribute applies only to functions" -msgstr "" - #. The argument must be a constant integer. -#: config/m32c/m32c.c:2800 config/sh/sh.c:8187 config/sh/sh.c:8293 +#: config/m32c/m32c.c:2840 config/sh/sh.c:8680 config/sh/sh.c:8786 #, gcc-internal-format msgid "%qE attribute argument not an integer constant" msgstr "" -#: config/m32c/m32c.c:2809 +#: config/m32c/m32c.c:2849 #, gcc-internal-format msgid "%qE attribute argument should be between 18 to 255" msgstr "" -#: config/m32r/m32r.c:377 +#: config/m32c/m32c.c:3980 +#, gcc-internal-format +msgid "%<bank_switch%> has no effect on non-interrupt functions" +msgstr "" + +#: config/m32c/m32c.c:4081 +#, gcc-internal-format +msgid "%<fast_interrupt%> attribute directive ignored" +msgstr "" + +#: config/m32r/m32r.c:382 #, gcc-internal-format msgid "invalid argument of %qs attribute" msgstr "" -#: config/m68hc11/m68hc11.c:279 +#: config/m68hc11/m68hc11.c:301 #, gcc-internal-format msgid "-f%s ignored for 68HC11/68HC12 (not supported)" msgstr "" -#: config/m68hc11/m68hc11.c:1232 +#: config/m68hc11/m68hc11.c:1253 #, gcc-internal-format msgid "%<trap%> and %<far%> attributes are not compatible, ignoring %<far%>" msgstr "" -#: config/m68hc11/m68hc11.c:1239 +#: config/m68hc11/m68hc11.c:1260 #, gcc-internal-format msgid "%<trap%> attribute is already used" msgstr "" -#: config/m68k/m68k.c:550 +#: config/m68k/m68k.c:568 #, gcc-internal-format msgid "-mcpu=%s conflicts with -march=%s" msgstr "" -#: config/m68k/m68k.c:621 +#: config/m68k/m68k.c:639 #, gcc-internal-format msgid "-mpcrel -fPIC is not currently supported on selected cpu" msgstr "" -#: config/m68k/m68k.c:683 +#: config/m68k/m68k.c:701 #, gcc-internal-format msgid "-falign-labels=%d is not supported" msgstr "" -#: config/m68k/m68k.c:688 +#: config/m68k/m68k.c:706 #, gcc-internal-format msgid "-falign-loops=%d is not supported" msgstr "" -#: config/m68k/m68k.c:791 +#: config/m68k/m68k.c:809 #, gcc-internal-format msgid "multiple interrupt attributes not allowed" msgstr "" -#: config/m68k/m68k.c:798 +#: config/m68k/m68k.c:816 #, gcc-internal-format msgid "interrupt_thread is available only on fido" msgstr "" -#: config/m68k/m68k.c:1120 config/rs6000/rs6000.c:15600 +#: config/m68k/m68k.c:1145 config/rs6000/rs6000.c:17877 #, gcc-internal-format msgid "stack limit expression is not supported" msgstr "" -#: config/mips/mips.c:1283 config/mips/mips.c:1285 +#: config/mep/mep-pragma.c:65 +#, gcc-internal-format +msgid "junk at end of #pragma io_volatile" +msgstr "" + +#: config/mep/mep-pragma.c:79 +#, gcc-internal-format +msgid "#pragma io_volatile takes only on or off" +msgstr "" + +#: config/mep/mep-pragma.c:118 +#, gcc-internal-format +msgid "invalid coprocessor register range" +msgstr "" + +#: config/mep/mep-pragma.c:138 +#, gcc-internal-format +msgid "invalid coprocessor register %qE" +msgstr "" + +#: config/mep/mep-pragma.c:161 +#, gcc-internal-format +msgid "malformed coprocessor register" +msgstr "" + +#: config/mep/mep-pragma.c:248 +#, gcc-internal-format +msgid "junk at end of #pragma GCC coprocessor width" +msgstr "" + +#: config/mep/mep-pragma.c:255 +#, gcc-internal-format +msgid "#pragma GCC coprocessor width takes only 32 or 64" +msgstr "" + +#: config/mep/mep-pragma.c:275 +#, gcc-internal-format +msgid "#pragma GCC coprocessor subclass letter must be in [ABCD]" +msgstr "" + +#: config/mep/mep-pragma.c:280 +#, gcc-internal-format +msgid "#pragma GCC coprocessor subclass '%c' already defined" +msgstr "" + +#: config/mep/mep-pragma.c:298 +#, gcc-internal-format +msgid "malformed #pragma GCC coprocessor subclass" +msgstr "" + +#: config/mep/mep-pragma.c:320 +#, gcc-internal-format +msgid "malformed #pragma disinterrupt" +msgstr "" + +#: config/mep/mep-pragma.c:334 +#, gcc-internal-format +msgid "malformed #pragma GCC coprocessor" +msgstr "" + +#: config/mep/mep-pragma.c:339 +#, gcc-internal-format +msgid "coprocessor not enabled" +msgstr "" + +#: config/mep/mep-pragma.c:350 +#, gcc-internal-format +msgid "unknown #pragma GCC coprocessor %E" +msgstr "" + +#: config/mep/mep-pragma.c:372 +#, gcc-internal-format +msgid "malformed #pragma call" +msgstr "" + +#: config/mep/mep.c:388 +#, gcc-internal-format +msgid "-fpic is not supported" +msgstr "" + +#: config/mep/mep.c:390 +#, gcc-internal-format +msgid "-fPIC is not supported" +msgstr "" + +#: config/mep/mep.c:392 +#, gcc-internal-format +msgid "only one of -ms and -mm may be given" +msgstr "" + +#: config/mep/mep.c:394 +#, gcc-internal-format +msgid "only one of -ms and -ml may be given" +msgstr "" + +#: config/mep/mep.c:396 +#, gcc-internal-format +msgid "only one of -mm and -ml may be given" +msgstr "" + +#: config/mep/mep.c:398 +#, gcc-internal-format +msgid "only one of -ms and -mtiny= may be given" +msgstr "" + +#: config/mep/mep.c:400 +#, gcc-internal-format +msgid "only one of -mm and -mtiny= may be given" +msgstr "" + +#: config/mep/mep.c:402 +#, gcc-internal-format +msgid "-mclip currently has no effect without -mminmax" +msgstr "" + +#: config/mep/mep.c:409 +#, gcc-internal-format +msgid "-mc= must be -mc=tiny, -mc=near, or -mc=far" +msgstr "" + +#: config/mep/mep.c:1534 +#, gcc-internal-format +msgid "unusual TP-relative address" +msgstr "" + +#: config/mep/mep.c:3530 +#, gcc-internal-format +msgid "unconvertible operand %c %qs" +msgstr "" + +#: config/mep/mep.c:3972 config/mep/mep.c:4035 +#, gcc-internal-format +msgid "address region attributes not allowed with auto storage class" +msgstr "" + +#: config/mep/mep.c:3978 config/mep/mep.c:4041 +#, gcc-internal-format +msgid "address region attributes on pointed-to types ignored" +msgstr "" + +#: config/mep/mep.c:4027 +#, gcc-internal-format +msgid "%qE attribute only applies to variables and functions" +msgstr "" + +#: config/mep/mep.c:4047 config/mep/mep.c:4335 +#, gcc-internal-format +msgid "duplicate address region attribute %qE in declaration of %qE on line %d" +msgstr "" + +#: config/mep/mep.c:4081 +#, gcc-internal-format +msgid "cannot inline interrupt function %qE" +msgstr "" + +#: config/mep/mep.c:4087 +#, gcc-internal-format +msgid "interrupt function must have return type of void" +msgstr "" + +#: config/mep/mep.c:4092 +#, gcc-internal-format +msgid "interrupt function must have no arguments" +msgstr "" + +#: config/mep/mep.c:4113 +#, gcc-internal-format +msgid "%qE attribute allows only an integer constant argument" +msgstr "" + +#: config/mep/mep.c:4146 +#, gcc-internal-format +msgid "%qE attribute only applies to functions, not %s" +msgstr "" + +#: config/mep/mep.c:4156 +#, gcc-internal-format +msgid "To describe a pointer to a VLIW function, use syntax like this:" +msgstr "" + +#: config/mep/mep.c:4157 +#, gcc-internal-format +msgid " typedef int (__vliw *vfuncptr) ();" +msgstr "" + +#: config/mep/mep.c:4164 +#, gcc-internal-format +msgid "To describe an array of VLIW function pointers, use syntax like this:" +msgstr "" + +#: config/mep/mep.c:4165 +#, gcc-internal-format +msgid " typedef int (__vliw *vfuncptr[]) ();" +msgstr "" + +#: config/mep/mep.c:4170 +#, gcc-internal-format +msgid "VLIW functions are not allowed without a VLIW configuration" +msgstr "" + +#: config/mep/mep.c:4318 +#, gcc-internal-format +msgid "\"#pragma disinterrupt %s\" not used" +msgstr "" + +#: config/mep/mep.c:4460 +#, gcc-internal-format +msgid "__io address 0x%x is the same for %qE and %qE" +msgstr "" + +#: config/mep/mep.c:4608 +#, gcc-internal-format +msgid "variable %s (%ld bytes) is too large for the %s section (%d bytes)" +msgstr "" + +#: config/mep/mep.c:4706 +#, gcc-internal-format +msgid "variable %D of type %<io%> must be uninitialized" +msgstr "" + +#: config/mep/mep.c:4711 +#, gcc-internal-format +msgid "variable %D of type %<cb%> must be uninitialized" +msgstr "" + +#: config/mep/mep.c:6164 +#, gcc-internal-format +msgid "coprocessor intrinsic %qs is not available in this configuration" +msgstr "" + +#: config/mep/mep.c:6167 +#, gcc-internal-format +msgid "%qs is not available in VLIW functions" +msgstr "" + +#: config/mep/mep.c:6170 +#, gcc-internal-format +msgid "%qs is not available in non-VLIW functions" +msgstr "" + +#: config/mep/mep.c:6332 config/mep/mep.c:6450 +#, gcc-internal-format +msgid "argument %d of %qE must be in the range %d...%d" +msgstr "" + +#: config/mep/mep.c:6335 +#, gcc-internal-format +msgid "argument %d of %qE must be a multiple of %d" +msgstr "" + +#: config/mep/mep.c:6389 +#, gcc-internal-format +msgid "too few arguments to %qE" +msgstr "" + +#: config/mep/mep.c:6394 +#, gcc-internal-format +msgid "too many arguments to %qE" +msgstr "" + +#: config/mep/mep.c:6412 +#, gcc-internal-format +msgid "argument %d of %qE must be an address" +msgstr "" + +#: config/mep/mep.c:7208 +#, gcc-internal-format +msgid "2 byte cop instructions are not allowed in 64-bit VLIW mode" +msgstr "" + +#: config/mep/mep.c:7214 +#, gcc-internal-format +msgid "unexpected %d byte cop instruction" +msgstr "" + +#: config/mips/mips.c:1340 config/mips/mips.c:1342 #, gcc-internal-format msgid "%qs attribute only applies to functions" msgstr "" -#: config/mips/mips.c:1295 +#: config/mips/mips.c:1352 #, gcc-internal-format msgid "%qE cannot have both %<mips16%> and %<nomips16%> attributes" msgstr "" -#: config/mips/mips.c:1317 config/mips/mips.c:1320 +#: config/mips/mips.c:1374 config/mips/mips.c:1377 #, gcc-internal-format msgid "%qE redeclared with conflicting %qs attributes" msgstr "" -#: config/mips/mips.c:2780 +#: config/mips/mips.c:2870 #, gcc-internal-format msgid "MIPS16 TLS" msgstr "" -#: config/mips/mips.c:6116 +#: config/mips/mips.c:6345 #, gcc-internal-format msgid "cannot handle inconsistent calls to %qs" msgstr "" -#: config/mips/mips.c:8719 +#: config/mips/mips.c:9127 #, gcc-internal-format msgid "the %<interrupt%> attribute requires a MIPS32r2 processor" msgstr "" -#: config/mips/mips.c:8721 +#: config/mips/mips.c:9129 #, gcc-internal-format msgid "the %<interrupt%> attribute requires %<-msoft-float%>" msgstr "" -#: config/mips/mips.c:8723 +#: config/mips/mips.c:9131 #, gcc-internal-format msgid "interrupt handlers cannot be MIPS16 functions" msgstr "" -#: config/mips/mips.c:12134 +#: config/mips/mips.c:13034 #, gcc-internal-format msgid "invalid argument to built-in function" msgstr "" -#: config/mips/mips.c:12375 +#: config/mips/mips.c:13275 #, gcc-internal-format msgid "built-in function %qE not supported for MIPS16" msgstr "" -#: config/mips/mips.c:12953 +#: config/mips/mips.c:13865 #, gcc-internal-format msgid "%qs does not support MIPS16 code" msgstr "" -#: config/mips/mips.c:13927 +#: config/mips/mips.c:15069 #, gcc-internal-format msgid "MIPS16 PIC for ABIs other than o32 and o64" msgstr "" -#: config/mips/mips.c:13930 +#: config/mips/mips.c:15072 #, gcc-internal-format msgid "MIPS16 -mxgot code" msgstr "" -#: config/mips/mips.c:13933 +#: config/mips/mips.c:15075 #, gcc-internal-format msgid "hard-float MIPS16 code for ABIs other than o32 and o64" msgstr "" -#: config/mips/mips.c:14062 +#: config/mips/mips.c:15206 #, gcc-internal-format msgid "CPU names must be lower case" msgstr "" -#: config/mips/mips.c:14205 +#: config/mips/mips.c:15349 #, gcc-internal-format msgid "" "%<-%s%> conflicts with the other architecture options, which specify a %s " "processor" msgstr "" -#: config/mips/mips.c:14221 +#: config/mips/mips.c:15365 #, gcc-internal-format msgid "%<-march=%s%> is not compatible with the selected ABI" msgstr "" -#: config/mips/mips.c:14236 +#: config/mips/mips.c:15380 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit processor" msgstr "" -#: config/mips/mips.c:14238 +#: config/mips/mips.c:15382 #, gcc-internal-format msgid "%<-mgp32%> used with a 64-bit ABI" msgstr "" -#: config/mips/mips.c:14240 +#: config/mips/mips.c:15384 #, gcc-internal-format msgid "%<-mgp64%> used with a 32-bit ABI" msgstr "" -#: config/mips/mips.c:14256 config/mips/mips.c:14258 config/mips/mips.c:14325 +#: config/mips/mips.c:15400 config/mips/mips.c:15402 config/mips/mips.c:15469 #, gcc-internal-format msgid "unsupported combination: %s" msgstr "" -#: config/mips/mips.c:14262 +#: config/mips/mips.c:15406 #, gcc-internal-format msgid "" "%<-mgp32%> and %<-mfp64%> can only be combined if the target supports the " "mfhc1 and mthc1 instructions" msgstr "" -#: config/mips/mips.c:14265 +#: config/mips/mips.c:15409 #, gcc-internal-format msgid "%<-mgp32%> and %<-mfp64%> can only be combined when using the o32 ABI" msgstr "" -#: config/mips/mips.c:14319 +#: config/mips/mips.c:15463 #, gcc-internal-format msgid "the %qs architecture does not support branch-likely instructions" msgstr "" -#: config/mips/mips.c:14359 +#: config/mips/mips.c:15503 #, gcc-internal-format msgid "%<-mno-gpopt%> needs %<-mexplicit-relocs%>" msgstr "" -#: config/mips/mips.c:14367 config/mips/mips.c:14370 +#: config/mips/mips.c:15511 config/mips/mips.c:15514 #, gcc-internal-format msgid "cannot use small-data accesses for %qs" msgstr "" -#: config/mips/mips.c:14384 +#: config/mips/mips.c:15528 #, gcc-internal-format msgid "%<-mips3d%> requires %<-mpaired-single%>" msgstr "" -#: config/mips/mips.c:14393 +#: config/mips/mips.c:15537 #, gcc-internal-format msgid "%qs must be used with %qs" msgstr "" -#: config/mips/mips.c:14400 +#: config/mips/mips.c:15544 #, gcc-internal-format msgid "the %qs architecture does not support paired-single instructions" msgstr "" -#: config/mips/mips.c:14406 +#: config/mips/mips.c:15550 #, gcc-internal-format msgid "%qs requires a target that provides the %qs instruction" msgstr "" -#: config/mips/mips.c:14506 +#: config/mips/mips.c:15655 #, gcc-internal-format msgid "%qs requires branch-likely instructions" msgstr "" +#: config/mips/mips.c:15659 +#, gcc-internal-format +msgid "the %qs architecture does not support the synci instruction" +msgstr "" + #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. -#: config/mips/mips.h:2335 +#: config/mips/mips.h:2378 #, gcc-internal-format msgid "mips16 function profiling" msgstr "" -#: config/mmix/mmix.c:226 +#: config/mmix/mmix.c:239 #, gcc-internal-format msgid "-f%s not supported: ignored" msgstr "" -#: config/mmix/mmix.c:674 +#: config/mmix/mmix.c:687 #, gcc-internal-format msgid "support for mode %qs" msgstr "" -#: config/mmix/mmix.c:688 +#: config/mmix/mmix.c:701 #, gcc-internal-format msgid "" "too large function value type, needs %d registers, have only %d registers " "for this" msgstr "" -#: config/mmix/mmix.c:858 +#: config/mmix/mmix.c:871 #, gcc-internal-format msgid "function_profiler support for MMIX" msgstr "" -#: config/mmix/mmix.c:880 +#: config/mmix/mmix.c:893 #, gcc-internal-format msgid "MMIX Internal: Last named vararg would not fit in a register" msgstr "" -#: config/mmix/mmix.c:1492 config/mmix/mmix.c:1516 config/mmix/mmix.c:1632 +#: config/mmix/mmix.c:1502 config/mmix/mmix.c:1526 config/mmix/mmix.c:1642 #, gcc-internal-format msgid "MMIX Internal: Bad register: %d" msgstr "" #. Presumably there's a missing case above if we get here. -#: config/mmix/mmix.c:1624 +#: config/mmix/mmix.c:1634 #, gcc-internal-format msgid "MMIX Internal: Missing %qc case in mmix_print_operand" msgstr "" -#: config/mmix/mmix.c:1910 +#: config/mmix/mmix.c:1920 #, gcc-internal-format msgid "stack frame not a multiple of 8 bytes: %wd" msgstr "" -#: config/mmix/mmix.c:2146 +#: config/mmix/mmix.c:2156 #, gcc-internal-format msgid "stack frame not a multiple of octabyte: %wd" msgstr "" -#: config/mmix/mmix.c:2486 config/mmix/mmix.c:2550 +#: config/mmix/mmix.c:2440 config/mmix/mmix.c:2504 #, gcc-internal-format msgid "MMIX Internal: %s is not a shiftable int" msgstr "" -#: config/pa/pa.c:487 +#: config/pa/pa.c:500 #, gcc-internal-format msgid "PIC code generation is not supported in the portable runtime model" msgstr "" -#: config/pa/pa.c:492 +#: config/pa/pa.c:505 #, gcc-internal-format msgid "PIC code generation is not compatible with fast indirect calls" msgstr "" -#: config/pa/pa.c:497 +#: config/pa/pa.c:510 #, gcc-internal-format msgid "-g is only supported when using GAS on this processor," msgstr "" -#: config/pa/pa.c:498 +#: config/pa/pa.c:511 #, gcc-internal-format msgid "-g option disabled" msgstr "" -#: config/pa/pa.c:8380 +#: config/pa/pa.c:8463 #, gcc-internal-format msgid "" "alignment (%u) for %s exceeds maximum alignment for global common data. " @@ -27704,93 +28950,93 @@ msgstr "" msgid "-munix=98 option required for C89 Amendment 1 features.\n" msgstr "" -#: config/picochip/picochip.c:379 +#: config/picochip/picochip.c:383 #, gcc-internal-format msgid "invalid AE type specified (%s)\n" msgstr "" -#: config/picochip/picochip.c:402 +#: config/picochip/picochip.c:406 #, gcc-internal-format msgid "Invalid mul type specified (%s) - expected mac, mul or none" msgstr "" -#: config/picochip/picochip.c:634 +#: config/picochip/picochip.c:638 #, gcc-internal-format msgid "unexpected mode %s encountered in picochip_emit_save_register\n" msgstr "" -#: config/picochip/picochip.c:801 +#: config/picochip/picochip.c:805 #, gcc-internal-format msgid "Defaulting to stack for %s register creation\n" msgstr "" -#: config/picochip/picochip.c:1338 +#: config/picochip/picochip.c:1342 #, gcc-internal-format msgid "LCFI labels have already been deferred." msgstr "" -#: config/picochip/picochip.c:1401 +#: config/picochip/picochip.c:1405 #, gcc-internal-format msgid "LM label has already been deferred." msgstr "" -#: config/picochip/picochip.c:1681 +#: config/picochip/picochip.c:1685 #, gcc-internal-format msgid "picochip_asm_output_opcode - Found multiple lines in VLIW packet %s\n" msgstr "" -#: config/picochip/picochip.c:1784 +#: config/picochip/picochip.c:1788 #, gcc-internal-format msgid "picochip_asm_output_opcode - can't output unknown operator %c\n" msgstr "" -#: config/picochip/picochip.c:2036 config/picochip/picochip.c:2095 +#: config/picochip/picochip.c:2040 config/picochip/picochip.c:2099 #, gcc-internal-format msgid "%s: At least one operand can't be handled" msgstr "" -#: config/picochip/picochip.c:2176 +#: config/picochip/picochip.c:2180 #, gcc-internal-format msgid "Unknown short branch in %s (type %d)\n" msgstr "" -#: config/picochip/picochip.c:2213 +#: config/picochip/picochip.c:2217 #, gcc-internal-format msgid "Unknown long branch in %s (type %d)\n" msgstr "" -#: config/picochip/picochip.c:2253 config/picochip/picochip.c:2321 +#: config/picochip/picochip.c:2257 config/picochip/picochip.c:2325 #, gcc-internal-format msgid "PUT uses port array index %d, which is out of range [%d..%d)" msgstr "" -#: config/picochip/picochip.c:2287 +#: config/picochip/picochip.c:2291 #, gcc-internal-format msgid "GET uses port array index %d, which is out of range [%d..%d)" msgstr "" -#: config/picochip/picochip.c:3130 +#: config/picochip/picochip.c:3134 #, gcc-internal-format msgid "Too many ALU instructions emitted (%d)\n" msgstr "" -#: config/picochip/picochip.c:3761 config/picochip/picochip.c:3854 +#: config/picochip/picochip.c:3765 config/picochip/picochip.c:3858 #, gcc-internal-format msgid "%s: Second source operand is not a constant" msgstr "" -#: config/picochip/picochip.c:3764 config/picochip/picochip.c:3815 -#: config/picochip/picochip.c:3857 +#: config/picochip/picochip.c:3768 config/picochip/picochip.c:3819 +#: config/picochip/picochip.c:3861 #, gcc-internal-format msgid "%s: Third source operand is not a constant" msgstr "" -#: config/picochip/picochip.c:3818 +#: config/picochip/picochip.c:3822 #, gcc-internal-format msgid "%s: Fourth source operand is not a constant" msgstr "" -#: config/picochip/picochip.c:4128 +#: config/picochip/picochip.c:4132 #, gcc-internal-format msgid "%s (disable warning using -mno-inefficient-warnings)" msgstr "" @@ -27854,298 +29100,336 @@ msgstr "" msgid "junk at end of #pragma longcall" msgstr "" -#: config/rs6000/rs6000-c.c:3023 +#: config/rs6000/rs6000-c.c:3238 #, gcc-internal-format msgid "%s only accepts %d arguments" msgstr "" -#: config/rs6000/rs6000-c.c:3028 +#: config/rs6000/rs6000-c.c:3243 #, gcc-internal-format msgid "%s only accepts 1 argument" msgstr "" -#: config/rs6000/rs6000-c.c:3033 +#: config/rs6000/rs6000-c.c:3248 #, gcc-internal-format msgid "%s only accepts 2 arguments" msgstr "" -#: config/rs6000/rs6000-c.c:3094 +#: config/rs6000/rs6000-c.c:3313 #, gcc-internal-format msgid "vec_extract only accepts 2 arguments" msgstr "" -#: config/rs6000/rs6000-c.c:3149 +#: config/rs6000/rs6000-c.c:3389 #, gcc-internal-format msgid "vec_insert only accepts 3 arguments" msgstr "" -#: config/rs6000/rs6000-c.c:3231 +#: config/rs6000/rs6000-c.c:3492 #, gcc-internal-format msgid "passing arg %d of %qE discards qualifiers frompointer target type" msgstr "" -#: config/rs6000/rs6000-c.c:3274 +#: config/rs6000/rs6000-c.c:3535 #, gcc-internal-format msgid "invalid parameter combination for AltiVec intrinsic" msgstr "" -#: config/rs6000/rs6000.c:1372 +#: config/rs6000/rs6000.c:2088 #, gcc-internal-format msgid "-mdynamic-no-pic overrides -fpic or -fPIC" msgstr "" -#: config/rs6000/rs6000.c:1383 +#: config/rs6000/rs6000.c:2099 #, gcc-internal-format msgid "-m64 requires PowerPC64 architecture, enabling" msgstr "" -#: config/rs6000/rs6000.c:1604 +#: config/rs6000/rs6000.c:2342 #, gcc-internal-format msgid "AltiVec not supported in this target" msgstr "" -#: config/rs6000/rs6000.c:1606 +#: config/rs6000/rs6000.c:2344 #, gcc-internal-format msgid "Spe not supported in this target" msgstr "" -#: config/rs6000/rs6000.c:1633 +#: config/rs6000/rs6000.c:2371 #, gcc-internal-format msgid "-mmultiple is not supported on little endian systems" msgstr "" -#: config/rs6000/rs6000.c:1640 +#: config/rs6000/rs6000.c:2378 #, gcc-internal-format msgid "-mstring is not supported on little endian systems" msgstr "" -#: config/rs6000/rs6000.c:1654 +#: config/rs6000/rs6000.c:2432 #, gcc-internal-format msgid "unknown -mdebug-%s switch" msgstr "" -#: config/rs6000/rs6000.c:1666 +#: config/rs6000/rs6000.c:2472 #, gcc-internal-format msgid "" "unknown -mtraceback arg %qs; expecting %<full%>, %<partial%> or %<none%>" msgstr "" -#: config/rs6000/rs6000.c:2177 +#: config/rs6000/rs6000.c:3086 #, gcc-internal-format msgid "unknown -m%s= option specified: '%s'" msgstr "" -#: config/rs6000/rs6000.c:2223 +#: config/rs6000/rs6000.c:3132 #, gcc-internal-format msgid "unknown value %s for -mfpu" msgstr "" -#: config/rs6000/rs6000.c:2421 +#: config/rs6000/rs6000.c:3461 #, gcc-internal-format msgid "not configured for ABI: '%s'" msgstr "" -#: config/rs6000/rs6000.c:2434 +#: config/rs6000/rs6000.c:3474 #, gcc-internal-format msgid "Using darwin64 ABI" msgstr "" -#: config/rs6000/rs6000.c:2439 +#: config/rs6000/rs6000.c:3479 #, gcc-internal-format msgid "Using old darwin ABI" msgstr "" -#: config/rs6000/rs6000.c:2446 +#: config/rs6000/rs6000.c:3486 #, gcc-internal-format msgid "Using IBM extended precision long double" msgstr "" -#: config/rs6000/rs6000.c:2452 +#: config/rs6000/rs6000.c:3492 #, gcc-internal-format msgid "Using IEEE extended precision long double" msgstr "" -#: config/rs6000/rs6000.c:2457 +#: config/rs6000/rs6000.c:3497 #, gcc-internal-format msgid "unknown ABI specified: '%s'" msgstr "" -#: config/rs6000/rs6000.c:2484 +#: config/rs6000/rs6000.c:3524 #, gcc-internal-format msgid "invalid option for -mfloat-gprs: '%s'" msgstr "" -#: config/rs6000/rs6000.c:2494 +#: config/rs6000/rs6000.c:3534 #, gcc-internal-format msgid "Unknown switch -mlong-double-%s" msgstr "" -#: config/rs6000/rs6000.c:2515 +#: config/rs6000/rs6000.c:3555 #, gcc-internal-format msgid "" "-malign-power is not supported for 64-bit Darwin; it is incompatible with " "the installed C and C++ libraries" msgstr "" -#: config/rs6000/rs6000.c:2523 +#: config/rs6000/rs6000.c:3563 #, gcc-internal-format msgid "unknown -malign-XXXXX option specified: '%s'" msgstr "" -#: config/rs6000/rs6000.c:2530 +#: config/rs6000/rs6000.c:3570 #, gcc-internal-format msgid "-msingle-float option equivalent to -mhard-float" msgstr "" -#: config/rs6000/rs6000.c:2546 +#: config/rs6000/rs6000.c:3586 #, gcc-internal-format msgid "-msimple-fpu option ignored" msgstr "" -#: config/rs6000/rs6000.c:5382 +#: config/rs6000/rs6000.c:6698 #, gcc-internal-format msgid "" "GCC vector returned by reference: non-standard ABI extension with no " "compatibility guarantee" msgstr "" -#: config/rs6000/rs6000.c:5455 +#: config/rs6000/rs6000.c:6771 #, gcc-internal-format msgid "" "cannot return value in vector register because altivec instructions are " "disabled, use -maltivec to enable them" msgstr "" -#: config/rs6000/rs6000.c:5713 +#: config/rs6000/rs6000.c:7030 #, gcc-internal-format msgid "" "cannot pass argument in vector register because altivec instructions are " "disabled, use -maltivec to enable them" msgstr "" -#: config/rs6000/rs6000.c:6614 +#: config/rs6000/rs6000.c:7932 #, gcc-internal-format msgid "" "GCC vector passed by reference: non-standard ABI extension with no " "compatibility guarantee" msgstr "" -#: config/rs6000/rs6000.c:7873 +#: config/rs6000/rs6000.c:8514 +#, gcc-internal-format +msgid "internal error: builtin function to %s already processed." +msgstr "" + +#: config/rs6000/rs6000.c:9449 #, gcc-internal-format msgid "argument 1 must be a 5-bit signed literal" msgstr "" -#: config/rs6000/rs6000.c:7976 config/rs6000/rs6000.c:8908 +#: config/rs6000/rs6000.c:9552 config/rs6000/rs6000.c:10524 #, gcc-internal-format msgid "argument 2 must be a 5-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:8016 +#: config/rs6000/rs6000.c:9591 #, gcc-internal-format msgid "argument 1 of __builtin_altivec_predicate must be a constant" msgstr "" -#: config/rs6000/rs6000.c:8069 +#: config/rs6000/rs6000.c:9643 #, gcc-internal-format msgid "argument 1 of __builtin_altivec_predicate is out of range" msgstr "" -#: config/rs6000/rs6000.c:8318 +#: config/rs6000/rs6000.c:9893 #, gcc-internal-format msgid "argument 3 must be a 4-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:8490 +#: config/rs6000/rs6000.c:9911 +#, gcc-internal-format +msgid "argument 3 must be a 2-bit unsigned literal" +msgstr "" + +#: config/rs6000/rs6000.c:9923 +#, gcc-internal-format +msgid "argument 3 must be a 1-bit unsigned literal" +msgstr "" + +#: config/rs6000/rs6000.c:10099 #, gcc-internal-format msgid "argument to %qs must be a 2-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:8632 +#: config/rs6000/rs6000.c:10243 #, gcc-internal-format msgid "unresolved overload for Altivec builtin %qF" msgstr "" -#: config/rs6000/rs6000.c:8723 +#: config/rs6000/rs6000.c:10334 #, gcc-internal-format msgid "argument to dss must be a 2-bit unsigned literal" msgstr "" -#: config/rs6000/rs6000.c:9028 +#: config/rs6000/rs6000.c:10644 #, gcc-internal-format msgid "argument 1 of __builtin_paired_predicate must be a constant" msgstr "" -#: config/rs6000/rs6000.c:9075 +#: config/rs6000/rs6000.c:10691 #, gcc-internal-format msgid "argument 1 of __builtin_paired_predicate is out of range" msgstr "" -#: config/rs6000/rs6000.c:9100 +#: config/rs6000/rs6000.c:10716 #, gcc-internal-format msgid "argument 1 of __builtin_spe_predicate must be a constant" msgstr "" -#: config/rs6000/rs6000.c:9172 +#: config/rs6000/rs6000.c:10788 #, gcc-internal-format msgid "argument 1 of __builtin_spe_predicate is out of range" msgstr "" -#: config/rs6000/rs6000.c:15563 +#: config/rs6000/rs6000.c:12134 #, gcc-internal-format -msgid "stack frame too large" +msgid "internal error: builtin function %s had no type" msgstr "" -#: config/rs6000/rs6000.c:18606 +#: config/rs6000/rs6000.c:12141 #, gcc-internal-format -msgid "no profiling of 64-bit code for this ABI" +msgid "internal error: builtin function %s had an unexpected return type %s" msgstr "" -#: config/rs6000/rs6000.c:20555 +#: config/rs6000/rs6000.c:12154 #, gcc-internal-format -msgid "use of %<long%> in AltiVec types is invalid for 64-bit code" +msgid "" +"internal error: builtin function %s, argument %d had unexpected argument " +"type %s" msgstr "" -#: config/rs6000/rs6000.c:20557 +#: config/rs6000/rs6000.c:17847 #, gcc-internal-format -msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>" +msgid "stack frame too large" msgstr "" -#: config/rs6000/rs6000.c:20561 +#: config/rs6000/rs6000.c:18243 #, gcc-internal-format -msgid "use of %<long long%> in AltiVec types is invalid" +msgid "Out-of-line save/restore routines not supported on Darwin" msgstr "" -#: config/rs6000/rs6000.c:20563 +#: config/rs6000/rs6000.c:21138 #, gcc-internal-format -msgid "use of %<double%> in AltiVec types is invalid" +msgid "no profiling of 64-bit code for this ABI" msgstr "" -#: config/rs6000/rs6000.c:20565 +#: config/rs6000/rs6000.c:23158 #, gcc-internal-format msgid "use of %<long double%> in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:20567 +#: config/rs6000/rs6000.c:23160 #, gcc-internal-format msgid "use of boolean types in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:20569 +#: config/rs6000/rs6000.c:23162 #, gcc-internal-format msgid "use of %<complex%> in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:20571 +#: config/rs6000/rs6000.c:23164 #, gcc-internal-format msgid "use of decimal floating point types in AltiVec types is invalid" msgstr "" -#: config/rs6000/rs6000.c:22861 +#: config/rs6000/rs6000.c:23170 +#, gcc-internal-format +msgid "" +"use of %<long%> in AltiVec types is invalid for 64-bit code without -mvsx" +msgstr "" + +#: config/rs6000/rs6000.c:23173 +#, gcc-internal-format +msgid "use of %<long%> in AltiVec types is deprecated; use %<int%>" +msgstr "" + +#: config/rs6000/rs6000.c:23178 +#, gcc-internal-format +msgid "use of %<long long%> in AltiVec types is invalid without -mvsx" +msgstr "" + +#: config/rs6000/rs6000.c:23181 +#, gcc-internal-format +msgid "use of %<double%> in AltiVec types is invalid without -mvsx" +msgstr "" + +#: config/rs6000/rs6000.c:25577 #, gcc-internal-format msgid "emitting microcode insn %s\t[%s] #%d" msgstr "" -#: config/rs6000/rs6000.c:22865 +#: config/rs6000/rs6000.c:25581 #, gcc-internal-format msgid "emitting conditional microcode insn %s\t[%s] #%d" msgstr "" @@ -28175,17 +29459,22 @@ msgid "" "-maix64 required: 64-bit computation with 32-bit addressing not yet supported" msgstr "" -#: config/rs6000/e500.h:39 +#: config/rs6000/e500.h:40 #, gcc-internal-format msgid "AltiVec and E500 instructions cannot coexist" msgstr "" -#: config/rs6000/e500.h:41 +#: config/rs6000/e500.h:42 +#, gcc-internal-format +msgid "VSX and E500 instructions cannot coexist" +msgstr "" + +#: config/rs6000/e500.h:44 #, gcc-internal-format msgid "64-bit E500 not supported" msgstr "" -#: config/rs6000/e500.h:43 +#: config/rs6000/e500.h:46 #, gcc-internal-format msgid "E500 and FPRs not supported" msgstr "" @@ -28212,7 +29501,7 @@ msgstr "" #. Number of bytes into the frame return addresses can be found. See #. rs6000_stack_info in rs6000.c for more information on how the different #. abi's store the return address. -#: config/rs6000/rs6000.h:1641 +#: config/rs6000/rs6000.h:1756 #, gcc-internal-format msgid "RETURN_ADDRESS_OFFSET not supported" msgstr "" @@ -28337,118 +29626,121 @@ msgstr "" msgid "-mstack-guard implies use of -mstack-size" msgstr "" -#: config/s390/s390.c:7065 +#: config/s390/s390.c:7088 #, gcc-internal-format msgid "total size of local variables exceeds architecture limit" msgstr "" -#: config/s390/s390.c:7734 +#: config/s390/s390.c:7786 #, gcc-internal-format msgid "frame size of function %qs is " msgstr "" -#: config/s390/s390.c:7764 +#: config/s390/s390.c:7812 #, gcc-internal-format msgid "frame size of %qs is " msgstr "" -#: config/s390/s390.c:7768 +#: config/s390/s390.c:7816 #, gcc-internal-format msgid "%qs uses dynamic stack allocation" msgstr "" -#: config/score/score3.c:653 config/score/score7.c:652 +#: config/score/score3.c:649 config/score/score7.c:648 #, gcc-internal-format msgid "-fPIC and -G are incompatible" msgstr "" -#: config/sh/sh.c:6954 +#: config/sh/sh.c:881 +#, gcc-internal-format +msgid "ignoring -fschedule-insns because of exception handling bug" +msgstr "" + +#: config/sh/sh.c:7456 #, gcc-internal-format msgid "__builtin_saveregs not supported by this subtarget" msgstr "" -#: config/sh/sh.c:8043 +#: config/sh/sh.c:8561 #, gcc-internal-format msgid "%qE attribute only applies to interrupt functions" msgstr "" -#: config/sh/sh.c:8126 +#: config/sh/sh.c:8619 #, gcc-internal-format msgid "%qE attribute is supported only for SH2A" msgstr "" -#: config/sh/sh.c:8156 +#: config/sh/sh.c:8649 #, gcc-internal-format msgid "attribute interrupt_handler is not compatible with -m5-compact" msgstr "" -#: config/sh/sh.c:8173 +#: config/sh/sh.c:8666 #, gcc-internal-format msgid "%qE attribute only applies to SH2A" msgstr "" -#: config/sh/sh.c:8195 +#: config/sh/sh.c:8688 #, gcc-internal-format msgid "%qE attribute argument should be between 0 to 255" msgstr "" #. The argument must be a constant string. -#: config/sh/sh.c:8268 +#: config/sh/sh.c:8761 #, gcc-internal-format msgid "%qE attribute argument not a string constant" msgstr "" -#: config/sh/sh.c:10539 +#: config/sh/sh.c:11186 #, gcc-internal-format msgid "r0 needs to be available as a call-clobbered register" msgstr "" -#: config/sh/sh.c:10560 +#: config/sh/sh.c:11207 #, gcc-internal-format msgid "Need a second call-clobbered general purpose register" msgstr "" -#: config/sh/sh.c:10568 +#: config/sh/sh.c:11215 #, gcc-internal-format msgid "Need a call-clobbered target register" msgstr "" -#: config/sh/symbian.c:146 -#, gcc-internal-format -msgid "" -"function %q+D is defined after prior declaration as dllimport: attribute " -"ignored" -msgstr "" - -#: config/sh/symbian.c:158 -#, gcc-internal-format -msgid "inline function %q+D is declared as dllimport: attribute ignored" -msgstr "" - -#: config/sh/symbian.c:272 +#: config/sh/symbian-base.c:112 #, gcc-internal-format msgid "%qE declared as both exported to and imported from a DLL" msgstr "" -#: config/sh/symbian.c:279 +#: config/sh/symbian-base.c:119 #, gcc-internal-format msgid "" "failure in redeclaration of %q+D: dllimport'd symbol lacks external linkage" msgstr "" -#: config/sh/symbian.c:325 +#: config/sh/symbian-base.c:210 #, gcc-internal-format msgid "%s %q+D %s after being referenced with dllimport linkage" msgstr "" -#: config/sh/symbian.c:408 config/sh/symbian.c:415 +#: config/sh/symbian-c.c:83 config/sh/symbian-cxx.c:94 +#, gcc-internal-format +msgid "" +"function %q+D is defined after prior declaration as dllimport: attribute " +"ignored" +msgstr "" + +#: config/sh/symbian-c.c:122 config/sh/symbian-c.c:129 +#: config/sh/symbian-cxx.c:554 config/sh/symbian-cxx.c:561 +#: ada/gcc-interface/utils.c:5159 ada/gcc-interface/utils.c:5335 +#: ada/gcc-interface/utils.c:5355 ada/gcc-interface/utils.c:5415 #, gcc-internal-format msgid "%qs attribute ignored" msgstr "" -#: config/sh/symbian.c:891 cp/tree.c:2858 +#: config/sh/symbian-cxx.c:106 #, gcc-internal-format -msgid "lang_* check: failed in %s, at %s:%d" +msgid "inline function %q+D is declared as dllimport: attribute ignored" msgstr "" #. FIXME @@ -28457,49 +29749,28 @@ msgstr "" msgid "unimplemented-shmedia profiling" msgstr "" -#. There are no delay slots on SHmedia. -#. Relaxation isn't yet supported for SHmedia -#. After reload, if conversion does little good but can cause ICEs: - find_if_block doesn't do anything for SH because we don't have conditional execution patterns. (We use conditional move patterns, which are handled differently, and only before reload). - find_cond_trap doesn't do anything for the SH because we #. don't have conditional traps. - find_if_case_1 uses redirect_edge_and_branch_force in the only path that does an optimization, and this causes an ICE when branch targets are in registers. - find_if_case_2 doesn't do anything for the SHmedia after reload except when it can redirect a tablejump - and that's rather rare. -#. Assembler CFI isn't yet fully supported for SHmedia. -#. Only the sh64-elf assembler fully supports .quad properly. -#. Pick one that makes most sense for the target in general. It is not much good to use different functions depending on -Os, since then we'll end up with two different functions when some of the code is compiled for size, and some for speed. -#. SH4 tends to emphasize speed. -#. These have their own way of doing things. -#. ??? Should we use the integer SHmedia function instead? -#. SH1 .. SH3 cores often go into small-footprint systems, so default to the smallest implementation available. -#. ??? EXPERIMENTAL -#. User supplied - leave it alone. -#. The debugging information is sufficient, but gdb doesn't implement this yet -#. Never run scheduling before reload, since that can break global alloc, and generates slower code anyway due to the pressure on R0. -#. Enable sched1 for SH4; ready queue will be reordered by the target hooks when pressure is high. We can not do this for PIC, SH3 and lower as they give spill failures for R0. -#. ??? Current exception handling places basic block boundaries after call_insns. It causes the high pressure on R0 and gives spill failures for R0 in reload. See PR 22553 and the thread on gcc-patches <http://gcc.gnu.org/ml/gcc-patches/2005-10/msg00816.html>. -#: config/sh/sh.h:728 -#, gcc-internal-format -msgid "ignoring -fschedule-insns because of exception handling bug" -msgstr "" - #. The kernel loader cannot handle the relaxation relocations, so it cannot load kernel modules (which are ET_REL) or RTP executables (which are linked with --emit-relocs). No relaxation relocations appear in shared libraries, so relaxation is OK for RTP PIC. #: config/sh/vxworks.h:43 #, gcc-internal-format msgid "-mrelax is only supported for RTP PIC" msgstr "" -#: config/sparc/sparc.c:705 +#: config/sparc/sparc.c:717 #, gcc-internal-format msgid "%s is not supported by this configuration" msgstr "" -#: config/sparc/sparc.c:712 +#: config/sparc/sparc.c:724 #, gcc-internal-format msgid "-mlong-double-64 not allowed with -m64" msgstr "" -#: config/sparc/sparc.c:732 +#: config/sparc/sparc.c:744 #, gcc-internal-format msgid "bad value (%s) for -mcmodel= switch" msgstr "" -#: config/sparc/sparc.c:737 +#: config/sparc/sparc.c:749 #, gcc-internal-format msgid "-mcmodel= is not supported on 32 bit systems" msgstr "" @@ -28519,901 +29790,948 @@ msgstr "" msgid "parameter list does not match a valid signature for %s()" msgstr "" -#: config/spu/spu.c:450 config/spu/spu.c:461 +#: config/spu/spu.c:468 config/spu/spu.c:479 #, gcc-internal-format msgid "Unknown architecture '%s'" msgstr "" -#: config/spu/spu.c:5973 +#: config/spu/spu.c:4986 config/spu/spu.c:4989 +#, gcc-internal-format +msgid "creating run-time relocation for %qD" +msgstr "" + +#: config/spu/spu.c:4994 config/spu/spu.c:4996 +#, gcc-internal-format +msgid "creating run-time relocation" +msgstr "" + +#: config/spu/spu.c:6054 #, gcc-internal-format msgid "%s expects an integer literal in the range [%d, %d]." msgstr "" -#: config/spu/spu.c:5993 +#: config/spu/spu.c:6074 #, gcc-internal-format msgid "%s expects an integer literal in the range [%d, %d]. (" msgstr "" -#: config/spu/spu.c:6023 +#: config/spu/spu.c:6104 #, gcc-internal-format msgid "%d least significant bits of %s are ignored." msgstr "" -#: config/stormy16/stormy16.c:1086 +#: config/stormy16/stormy16.c:1090 #, gcc-internal-format msgid "local variable memory requirements exceed capacity" msgstr "" -#: config/stormy16/stormy16.c:1243 +#: config/stormy16/stormy16.c:1247 #, gcc-internal-format msgid "function_profiler support" msgstr "" -#: config/stormy16/stormy16.c:1333 +#: config/stormy16/stormy16.c:1340 #, gcc-internal-format msgid "cannot use va_start in interrupt function" msgstr "" -#: config/stormy16/stormy16.c:1875 +#: config/stormy16/stormy16.c:1884 #, gcc-internal-format msgid "switch statement of size %lu entries too large" msgstr "" -#: config/stormy16/stormy16.c:2244 +#: config/stormy16/stormy16.c:2253 #, gcc-internal-format msgid "%<__BELOW100__%> attribute only applies to variables" msgstr "" -#: config/stormy16/stormy16.c:2251 +#: config/stormy16/stormy16.c:2260 #, gcc-internal-format msgid "__BELOW100__ attribute not allowed with auto storage class" msgstr "" -#: config/v850/v850-c.c:66 +#: config/v850/v850-c.c:67 #, gcc-internal-format msgid "#pragma GHS endXXXX found without previous startXXX" msgstr "" -#: config/v850/v850-c.c:69 +#: config/v850/v850-c.c:70 #, gcc-internal-format msgid "#pragma GHS endXXX does not match previous startXXX" msgstr "" -#: config/v850/v850-c.c:95 +#: config/v850/v850-c.c:96 #, gcc-internal-format msgid "cannot set interrupt attribute: no current function" msgstr "" -#: config/v850/v850-c.c:103 +#: config/v850/v850-c.c:104 #, gcc-internal-format msgid "cannot set interrupt attribute: no such identifier" msgstr "" -#: config/v850/v850-c.c:152 +#: config/v850/v850-c.c:153 #, gcc-internal-format msgid "junk at end of #pragma ghs section" msgstr "" -#: config/v850/v850-c.c:169 +#: config/v850/v850-c.c:170 #, gcc-internal-format msgid "unrecognized section name %qE" msgstr "" -#: config/v850/v850-c.c:184 +#: config/v850/v850-c.c:185 #, gcc-internal-format msgid "malformed #pragma ghs section" msgstr "" -#: config/v850/v850-c.c:203 +#: config/v850/v850-c.c:204 #, gcc-internal-format msgid "junk at end of #pragma ghs interrupt" msgstr "" -#: config/v850/v850-c.c:214 +#: config/v850/v850-c.c:215 #, gcc-internal-format msgid "junk at end of #pragma ghs starttda" msgstr "" -#: config/v850/v850-c.c:225 +#: config/v850/v850-c.c:226 #, gcc-internal-format msgid "junk at end of #pragma ghs startsda" msgstr "" -#: config/v850/v850-c.c:236 +#: config/v850/v850-c.c:237 #, gcc-internal-format msgid "junk at end of #pragma ghs startzda" msgstr "" -#: config/v850/v850-c.c:247 +#: config/v850/v850-c.c:248 #, gcc-internal-format msgid "junk at end of #pragma ghs endtda" msgstr "" -#: config/v850/v850-c.c:258 +#: config/v850/v850-c.c:259 #, gcc-internal-format msgid "junk at end of #pragma ghs endsda" msgstr "" -#: config/v850/v850-c.c:269 +#: config/v850/v850-c.c:270 #, gcc-internal-format msgid "junk at end of #pragma ghs endzda" msgstr "" -#: config/v850/v850.c:184 +#: config/v850/v850.c:212 #, gcc-internal-format msgid "value passed to %<-m%s%> is too large" msgstr "" -#: config/v850/v850.c:2084 +#: config/v850/v850.c:2109 #, gcc-internal-format -msgid "%Jdata area attributes cannot be specified for local variables" +msgid "data area attributes cannot be specified for local variables" msgstr "" -#: config/v850/v850.c:2095 +#: config/v850/v850.c:2120 #, gcc-internal-format msgid "data area of %q+D conflicts with previous declaration" msgstr "" -#: config/v850/v850.c:2225 +#: config/v850/v850.c:2250 #, gcc-internal-format msgid "bogus JR construction: %d" msgstr "" -#: config/v850/v850.c:2243 config/v850/v850.c:2352 +#: config/v850/v850.c:2268 config/v850/v850.c:2377 #, gcc-internal-format msgid "bad amount of stack space removal: %d" msgstr "" -#: config/v850/v850.c:2332 +#: config/v850/v850.c:2357 #, gcc-internal-format msgid "bogus JARL construction: %d\n" msgstr "" -#: config/v850/v850.c:2631 +#: config/v850/v850.c:2656 #, gcc-internal-format msgid "bogus DISPOSE construction: %d" msgstr "" -#: config/v850/v850.c:2650 +#: config/v850/v850.c:2675 #, gcc-internal-format msgid "too much stack space to dispose of: %d" msgstr "" -#: config/v850/v850.c:2752 +#: config/v850/v850.c:2777 #, gcc-internal-format msgid "bogus PREPEARE construction: %d" msgstr "" -#: config/v850/v850.c:2771 +#: config/v850/v850.c:2796 #, gcc-internal-format msgid "too much stack space to prepare: %d" msgstr "" -#: config/xtensa/xtensa.c:2065 +#: config/xtensa/xtensa.c:2076 #, gcc-internal-format msgid "boolean registers required for the floating-point option" msgstr "" -#: config/xtensa/xtensa.c:2100 +#: config/xtensa/xtensa.c:2111 #, gcc-internal-format msgid "-f%s is not supported with CONST16 instructions" msgstr "" -#: config/xtensa/xtensa.c:2105 +#: config/xtensa/xtensa.c:2116 #, gcc-internal-format msgid "PIC is required but not supported with CONST16 instructions" msgstr "" -#: config/xtensa/xtensa.c:3010 config/xtensa/xtensa.c:3050 +#: config/xtensa/xtensa.c:3025 config/xtensa/xtensa.c:3065 #, gcc-internal-format msgid "bad builtin code" msgstr "" -#: config/xtensa/xtensa.c:3160 +#: config/xtensa/xtensa.c:3175 #, gcc-internal-format msgid "only uninitialized variables can be placed in a .bss section" msgstr "" -#: cp/call.c:2552 +#: cp/call.c:2705 #, gcc-internal-format msgid "%s %D(%T, %T, %T) <built-in>" msgstr "" -#: cp/call.c:2557 +#: cp/call.c:2710 #, gcc-internal-format msgid "%s %D(%T, %T) <built-in>" msgstr "" -#: cp/call.c:2561 +#: cp/call.c:2714 #, gcc-internal-format msgid "%s %D(%T) <built-in>" msgstr "" -#: cp/call.c:2565 +#: cp/call.c:2718 #, gcc-internal-format msgid "%s %T <conversion>" msgstr "" -#: cp/call.c:2567 +#: cp/call.c:2720 #, gcc-internal-format msgid "%s %+#D <near match>" msgstr "" -#: cp/call.c:2569 cp/pt.c:1407 +#: cp/call.c:2722 +#, gcc-internal-format +msgid "%s %+#D <deleted>" +msgstr "" + +#: cp/call.c:2724 cp/pt.c:1651 #, gcc-internal-format msgid "%s %+#D" msgstr "" -#: cp/call.c:2851 +#: cp/call.c:3023 #, gcc-internal-format msgid "conversion from %qT to %qT is ambiguous" msgstr "" -#: cp/call.c:3010 cp/call.c:3030 cp/call.c:3094 +#: cp/call.c:3185 cp/call.c:3206 cp/call.c:3271 #, gcc-internal-format msgid "no matching function for call to %<%D(%A)%>" msgstr "" -#: cp/call.c:3033 cp/call.c:3097 +#: cp/call.c:3209 cp/call.c:3274 #, gcc-internal-format msgid "call of overloaded %<%D(%A)%> is ambiguous" msgstr "" #. It's no good looking for an overloaded operator() on a #. pointer-to-member-function. -#: cp/call.c:3170 +#: cp/call.c:3353 #, gcc-internal-format msgid "" "pointer-to-member function %E cannot be called without an object; consider " "using .* or ->*" msgstr "" -#: cp/call.c:3246 +#: cp/call.c:3435 #, gcc-internal-format msgid "no match for call to %<(%T) (%A)%>" msgstr "" -#: cp/call.c:3258 +#: cp/call.c:3448 #, gcc-internal-format msgid "call of %<(%T) (%A)%> is ambiguous" msgstr "" -#: cp/call.c:3299 +#: cp/call.c:3489 #, gcc-internal-format msgid "%s for ternary %<operator?:%> in %<%E ? %E : %E%>" msgstr "" -#: cp/call.c:3305 +#: cp/call.c:3495 #, gcc-internal-format msgid "%s for %<operator%s%> in %<%E%s%>" msgstr "" -#: cp/call.c:3309 +#: cp/call.c:3499 #, gcc-internal-format msgid "%s for %<operator[]%> in %<%E[%E]%>" msgstr "" -#: cp/call.c:3314 +#: cp/call.c:3504 #, gcc-internal-format msgid "%s for %qs in %<%s %E%>" msgstr "" -#: cp/call.c:3319 +#: cp/call.c:3509 #, gcc-internal-format msgid "%s for %<operator%s%> in %<%E %s %E%>" msgstr "" -#: cp/call.c:3322 +#: cp/call.c:3512 #, gcc-internal-format msgid "%s for %<operator%s%> in %<%s%E%>" msgstr "" -#: cp/call.c:3416 +#: cp/call.c:3606 #, gcc-internal-format msgid "ISO C++ forbids omitting the middle term of a ?: expression" msgstr "" -#: cp/call.c:3496 +#: cp/call.c:3687 #, 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 "" -#: cp/call.c:3501 +#: cp/call.c:3692 #, 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 "" -#: cp/call.c:3543 cp/call.c:3779 +#: cp/call.c:3734 cp/call.c:3972 #, gcc-internal-format msgid "operands to ?: have different types %qT and %qT" msgstr "" -#: cp/call.c:3726 +#: cp/call.c:3919 #, gcc-internal-format msgid "enumeral mismatch in conditional expression: %qT vs %qT" msgstr "" -#: cp/call.c:3737 +#: cp/call.c:3930 #, gcc-internal-format msgid "enumeral and non-enumeral type in conditional expression" msgstr "" -#: cp/call.c:4052 +#: cp/call.c:4272 #, gcc-internal-format msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead" msgstr "" -#: cp/call.c:4142 +#: cp/call.c:4274 +#, gcc-internal-format +msgid "no %<%D(int)%> declared for postfix %qs" +msgstr "" + +#: cp/call.c:4368 #, gcc-internal-format msgid "comparison between %q#T and %q#T" msgstr "" -#: cp/call.c:4430 +#: cp/call.c:4662 #, gcc-internal-format msgid "no corresponding deallocation function for %qD" msgstr "" -#: cp/call.c:4435 +#: cp/call.c:4667 #, gcc-internal-format msgid "no suitable %<operator %s%> for %qT" msgstr "" -#: cp/call.c:4453 +#: cp/call.c:4685 #, gcc-internal-format msgid "%q+#D is private" msgstr "" -#: cp/call.c:4455 +#: cp/call.c:4687 #, gcc-internal-format msgid "%q+#D is protected" msgstr "" -#: cp/call.c:4457 +#: cp/call.c:4689 #, gcc-internal-format msgid "%q+#D is inaccessible" msgstr "" -#: cp/call.c:4458 +#: cp/call.c:4690 #, gcc-internal-format msgid "within this context" msgstr "" -#: cp/call.c:4504 +#: cp/call.c:4737 #, gcc-internal-format msgid "passing NULL to non-pointer argument %P of %qD" msgstr "" -#: cp/call.c:4507 +#: cp/call.c:4740 #, gcc-internal-format msgid "converting to non-pointer type %qT from NULL" msgstr "" -#: cp/call.c:4513 +#: cp/call.c:4746 #, gcc-internal-format msgid "converting %<false%> to pointer type for argument %P of %qD" msgstr "" -#: cp/call.c:4564 cp/cvt.c:217 +#: cp/call.c:4784 +#, gcc-internal-format +msgid "too many braces around initializer for %qT" +msgstr "" + +#: cp/call.c:4806 cp/cvt.c:217 #, gcc-internal-format msgid "invalid conversion from %qT to %qT" msgstr "" -#: cp/call.c:4566 +#: cp/call.c:4808 #, gcc-internal-format msgid " initializing argument %P of %qD" msgstr "" -#: cp/call.c:4590 +#: cp/call.c:4832 #, gcc-internal-format msgid "" "converting to %qT from initializer list would use explicit constructor %qD" msgstr "" -#: cp/call.c:4753 +#: cp/call.c:4992 +#, gcc-internal-format +msgid "cannot bind %qT lvalue to %qT" +msgstr "" + +#: cp/call.c:4995 +#, gcc-internal-format +msgid " initializing argument %P of %q+D" +msgstr "" + +#: cp/call.c:5022 #, gcc-internal-format msgid "cannot bind bitfield %qE to %qT" msgstr "" -#: cp/call.c:4756 cp/call.c:4774 +#: cp/call.c:5025 cp/call.c:5043 #, gcc-internal-format msgid "cannot bind packed field %qE to %qT" msgstr "" -#: cp/call.c:4759 +#: cp/call.c:5028 #, gcc-internal-format msgid "cannot bind rvalue %qE to %qT" msgstr "" -#: cp/call.c:4883 +#: cp/call.c:5147 #, gcc-internal-format -msgid "" -"cannot pass objects of non-POD type %q#T through %<...%>; call will abort at " -"runtime" +msgid "cannot pass objects of non-trivially-copyable type %q#T through %<...%>" msgstr "" -#. Undefined behavior [expr.call] 5.2.2/7. -#: cp/call.c:4911 +#. conditionally-supported behavior [expr.call] 5.2.2/7. +#: cp/call.c:5174 #, gcc-internal-format msgid "" -"cannot receive objects of non-POD type %q#T through %<...%>; call will abort " -"at runtime" +"cannot receive objects of non-trivially-copyable type %q#T through %<...%>; " msgstr "" -#: cp/call.c:4959 +#: cp/call.c:5220 #, gcc-internal-format msgid "the default argument for parameter %d of %qD has not yet been parsed" msgstr "" -#: cp/call.c:4969 +#: cp/call.c:5230 #, gcc-internal-format msgid "recursive evaluation of default argument for %q#D" msgstr "" -#: cp/call.c:5086 +#: cp/call.c:5347 #, gcc-internal-format msgid "argument of function call might be a candidate for a format attribute" msgstr "" -#: cp/call.c:5240 +#: cp/call.c:5531 #, gcc-internal-format msgid "passing %qT as %<this%> argument of %q#D discards qualifiers" msgstr "" -#: cp/call.c:5262 +#: cp/call.c:5553 #, gcc-internal-format msgid "%qT is not an accessible base of %qT" msgstr "" -#: cp/call.c:5557 +#: cp/call.c:5601 +#, gcc-internal-format +msgid "deducing %qT as %qT" +msgstr "" + +#: cp/call.c:5604 +#, gcc-internal-format +msgid " in call to %q+D" +msgstr "" + +#: cp/call.c:5606 +#, gcc-internal-format +msgid " (you can disable this with -fno-deduce-init-list)" +msgstr "" + +#: cp/call.c:5879 #, gcc-internal-format msgid "could not find class$ field in java interface type %qT" msgstr "" -#: cp/call.c:5800 +#: cp/call.c:6138 #, gcc-internal-format msgid "call to non-function %qD" msgstr "" -#: cp/call.c:5939 +#: cp/call.c:6290 #, gcc-internal-format msgid "no matching function for call to %<%T::%s(%A)%#V%>" msgstr "" -#: cp/call.c:5960 +#: cp/call.c:6315 #, gcc-internal-format msgid "call of overloaded %<%s(%A)%> is ambiguous" msgstr "" -#: cp/call.c:5989 +#: cp/call.c:6344 #, gcc-internal-format msgid "cannot call member function %qD without object" msgstr "" -#: cp/call.c:6677 +#: cp/call.c:7029 #, gcc-internal-format msgid "passing %qT chooses %qT over %qT" msgstr "" -#: cp/call.c:6679 cp/name-lookup.c:4474 cp/name-lookup.c:4919 +#: cp/call.c:7031 cp/name-lookup.c:4518 cp/name-lookup.c:4978 #, gcc-internal-format msgid " in call to %qD" msgstr "" -#: cp/call.c:6736 +#: cp/call.c:7088 #, gcc-internal-format msgid "choosing %qD over %qD" msgstr "" -#: cp/call.c:6737 +#: cp/call.c:7089 #, gcc-internal-format msgid " for conversion from %qT to %qT" msgstr "" -#: cp/call.c:6740 +#: cp/call.c:7092 #, gcc-internal-format msgid " because conversion sequence for the argument is better" msgstr "" -#: cp/call.c:6858 +#: cp/call.c:7210 #, gcc-internal-format msgid "default argument mismatch in overload resolution" msgstr "" -#: cp/call.c:6861 +#: cp/call.c:7213 #, gcc-internal-format msgid " candidate 1: %q+#F" msgstr "" -#: cp/call.c:6863 +#: cp/call.c:7215 #, gcc-internal-format msgid " candidate 2: %q+#F" msgstr "" -#: cp/call.c:6901 +#: cp/call.c:7253 #, gcc-internal-format msgid "" "ISO C++ says that these are ambiguous, even though the worst conversion for " "the first is better than the worst conversion for the second:" msgstr "" -#: cp/call.c:7045 +#: cp/call.c:7406 #, gcc-internal-format msgid "could not convert %qE to %qT" msgstr "" -#: cp/call.c:7251 +#: cp/call.c:7621 #, gcc-internal-format msgid "" "invalid initialization of non-const reference of type %qT from a temporary " "of type %qT" msgstr "" -#: cp/call.c:7255 +#: cp/call.c:7625 #, gcc-internal-format msgid "" "invalid initialization of reference of type %qT from expression of type %qT" msgstr "" -#: cp/class.c:280 +#: cp/class.c:278 #, gcc-internal-format msgid "cannot convert from base %qT to derived type %qT via virtual base %qT" msgstr "" -#: cp/class.c:974 +#: cp/class.c:972 #, gcc-internal-format msgid "Java class %qT cannot have a destructor" msgstr "" -#: cp/class.c:976 +#: cp/class.c:974 #, gcc-internal-format msgid "Java class %qT cannot have an implicit non-trivial destructor" msgstr "" -#: cp/class.c:1077 +#: cp/class.c:1075 #, gcc-internal-format msgid "repeated using declaration %q+D" msgstr "" -#: cp/class.c:1079 +#: cp/class.c:1077 #, gcc-internal-format msgid "using declaration %q+D conflicts with a previous using declaration" msgstr "" -#: cp/class.c:1084 +#: cp/class.c:1082 #, gcc-internal-format msgid "%q+#D cannot be overloaded" msgstr "" -#: cp/class.c:1085 +#: cp/class.c:1083 #, gcc-internal-format msgid "with %q+#D" msgstr "" -#: cp/class.c:1152 +#: cp/class.c:1150 #, gcc-internal-format msgid "conflicting access specifications for method %q+D, ignored" msgstr "" -#: cp/class.c:1155 +#: cp/class.c:1153 #, gcc-internal-format msgid "conflicting access specifications for field %qE, ignored" msgstr "" -#: cp/class.c:1216 cp/class.c:1224 +#: cp/class.c:1214 cp/class.c:1222 #, gcc-internal-format msgid "%q+D invalid in %q#T" msgstr "" -#: cp/class.c:1217 +#: cp/class.c:1215 #, gcc-internal-format msgid " because of local method %q+#D with same name" msgstr "" -#: cp/class.c:1225 +#: cp/class.c:1223 #, gcc-internal-format msgid " because of local member %q+#D with same name" msgstr "" -#: cp/class.c:1268 +#: cp/class.c:1272 #, gcc-internal-format msgid "base class %q#T has a non-virtual destructor" msgstr "" -#: cp/class.c:1597 +#: cp/class.c:1632 #, gcc-internal-format msgid "all member functions in class %qT are private" msgstr "" -#: cp/class.c:1609 +#: cp/class.c:1644 #, gcc-internal-format msgid "%q#T only defines a private destructor and has no friends" msgstr "" -#: cp/class.c:1654 +#: cp/class.c:1689 #, gcc-internal-format msgid "%q#T only defines private constructors and has no friends" msgstr "" -#: cp/class.c:2047 +#: cp/class.c:2082 #, gcc-internal-format msgid "no unique final overrider for %qD in %qT" msgstr "" #. Here we know it is a hider, and no overrider exists. -#: cp/class.c:2467 +#: cp/class.c:2505 #, gcc-internal-format msgid "%q+D was hidden" msgstr "" -#: cp/class.c:2468 +#: cp/class.c:2506 #, gcc-internal-format msgid " by %q+D" msgstr "" -#: cp/class.c:2511 cp/decl2.c:1269 +#: cp/class.c:2549 cp/decl2.c:1282 #, gcc-internal-format msgid "%q+#D invalid; an anonymous union can only have non-static data members" msgstr "" -#: cp/class.c:2514 +#: cp/class.c:2552 #, gcc-internal-format msgid "" "%q+#D invalid; an anonymous struct can only have non-static data members" msgstr "" -#: cp/class.c:2522 cp/decl2.c:1275 +#: cp/class.c:2560 cp/decl2.c:1288 #, gcc-internal-format msgid "private member %q+#D in anonymous union" msgstr "" -#: cp/class.c:2524 +#: cp/class.c:2562 #, gcc-internal-format msgid "private member %q+#D in anonymous struct" msgstr "" -#: cp/class.c:2529 cp/decl2.c:1277 +#: cp/class.c:2567 cp/decl2.c:1290 #, gcc-internal-format msgid "protected member %q+#D in anonymous union" msgstr "" -#: cp/class.c:2531 +#: cp/class.c:2569 #, gcc-internal-format msgid "protected member %q+#D in anonymous struct" msgstr "" -#: cp/class.c:2710 +#: cp/class.c:2752 #, gcc-internal-format msgid "bit-field %q+#D with non-integral type" msgstr "" -#: cp/class.c:2723 +#: cp/class.c:2765 #, gcc-internal-format msgid "bit-field %q+D width not an integer constant" msgstr "" -#: cp/class.c:2728 +#: cp/class.c:2770 #, gcc-internal-format msgid "negative width in bit-field %q+D" msgstr "" -#: cp/class.c:2733 +#: cp/class.c:2775 #, gcc-internal-format msgid "zero width for bit-field %q+D" msgstr "" -#: cp/class.c:2739 +#: cp/class.c:2781 #, gcc-internal-format msgid "width of %q+D exceeds its type" msgstr "" -#: cp/class.c:2749 +#: cp/class.c:2791 #, gcc-internal-format msgid "%q+D is too small to hold all values of %q#T" msgstr "" -#: cp/class.c:2806 +#: cp/class.c:2848 #, gcc-internal-format msgid "member %q+#D with constructor not allowed in union" msgstr "" -#: cp/class.c:2809 +#: cp/class.c:2851 #, gcc-internal-format msgid "member %q+#D with destructor not allowed in union" msgstr "" -#: cp/class.c:2811 +#: cp/class.c:2853 #, gcc-internal-format msgid "member %q+#D with copy assignment operator not allowed in union" msgstr "" -#: cp/class.c:2835 +#: cp/class.c:2877 #, gcc-internal-format msgid "multiple fields in union %qT initialized" msgstr "" -#: cp/class.c:2924 +#: cp/class.c:2968 #, gcc-internal-format msgid "%q+D may not be static because it is a member of a union" msgstr "" -#: cp/class.c:2929 +#: cp/class.c:2973 #, gcc-internal-format msgid "%q+D may not have reference type %qT because it is a member of a union" msgstr "" -#: cp/class.c:2940 +#: cp/class.c:2984 #, gcc-internal-format msgid "field %q+D invalidly declared function type" msgstr "" -#: cp/class.c:2946 +#: cp/class.c:2990 #, gcc-internal-format msgid "field %q+D invalidly declared method type" msgstr "" -#: cp/class.c:2984 +#: cp/class.c:3039 #, gcc-internal-format msgid "ignoring packed attribute because of unpacked non-POD field %q+#D" msgstr "" -#: cp/class.c:3064 +#: cp/class.c:3122 #, gcc-internal-format msgid "field %q+#D with same name as class" msgstr "" -#: cp/class.c:3095 +#: cp/class.c:3153 #, gcc-internal-format msgid "%q#T has pointer data members" msgstr "" -#: cp/class.c:3100 +#: cp/class.c:3158 #, gcc-internal-format msgid " but does not override %<%T(const %T&)%>" msgstr "" -#: cp/class.c:3102 +#: cp/class.c:3160 #, gcc-internal-format msgid " or %<operator=(const %T&)%>" msgstr "" -#: cp/class.c:3106 +#: cp/class.c:3164 #, gcc-internal-format msgid " but does not override %<operator=(const %T&)%>" msgstr "" -#: cp/class.c:3567 +#: cp/class.c:3627 #, gcc-internal-format msgid "" "offset of empty base %qT may not be ABI-compliant and maychange in a future " "version of GCC" msgstr "" -#: cp/class.c:3692 +#: cp/class.c:3754 #, gcc-internal-format msgid "class %qT will be considered nearly empty in a future version of GCC" msgstr "" -#: cp/class.c:3774 +#: cp/class.c:3836 #, gcc-internal-format msgid "initializer specified for non-virtual method %q+D" msgstr "" -#: cp/class.c:4345 +#: cp/class.c:4441 #, gcc-internal-format msgid "non-static reference %q+#D in class without a constructor" msgstr "" -#: cp/class.c:4350 +#: cp/class.c:4446 #, gcc-internal-format msgid "non-static const member %q+#D in class without a constructor" msgstr "" -#: cp/class.c:4605 +#: cp/class.c:4669 #, gcc-internal-format msgid "" "offset of virtual base %qT is not ABI-compliant and may change in a future " "version of GCC" msgstr "" -#: cp/class.c:4706 +#: cp/class.c:4770 #, gcc-internal-format msgid "direct base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: cp/class.c:4718 +#: cp/class.c:4782 #, gcc-internal-format msgid "virtual base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: cp/class.c:4897 +#: cp/class.c:4961 #, gcc-internal-format msgid "" "size assigned to %qT may not be ABI-compliant and may change in a future " "version of GCC" msgstr "" -#: cp/class.c:4937 +#: cp/class.c:5001 #, gcc-internal-format msgid "" "the offset of %qD may not be ABI-compliant and may change in a future " "version of GCC" msgstr "" -#: cp/class.c:4965 +#: cp/class.c:5029 #, gcc-internal-format msgid "" "offset of %q+D is not ABI-compliant and may change in a future version of GCC" msgstr "" -#: cp/class.c:4974 +#: cp/class.c:5038 #, gcc-internal-format msgid "" "%q+D contains empty classes which may cause base classes to be placed at " "different locations in a future version of GCC" msgstr "" -#: cp/class.c:5061 +#: cp/class.c:5126 #, gcc-internal-format msgid "" "layout of classes derived from empty class %qT may change in a future " "version of GCC" msgstr "" -#: cp/class.c:5207 +#: cp/class.c:5274 cp/parser.c:16267 #, gcc-internal-format msgid "redefinition of %q#T" msgstr "" -#: cp/class.c:5363 +#: cp/class.c:5426 #, gcc-internal-format msgid "%q#T has virtual functions and accessible non-virtual destructor" msgstr "" -#: cp/class.c:5465 +#: cp/class.c:5528 #, gcc-internal-format msgid "trying to finish struct, but kicked out due to previous parse errors" msgstr "" -#: cp/class.c:5927 +#: cp/class.c:5992 #, gcc-internal-format msgid "language string %<\"%E\"%> not recognized" msgstr "" -#: cp/class.c:6020 +#: cp/class.c:6085 #, gcc-internal-format msgid "cannot resolve overloaded function %qD based on conversion to type %qT" msgstr "" -#: cp/class.c:6149 +#: cp/class.c:6225 #, gcc-internal-format msgid "no matches converting function %qD to type %q#T" msgstr "" -#: cp/class.c:6179 +#: cp/class.c:6255 #, gcc-internal-format msgid "converting overloaded function %qD to type %q#T is ambiguous" msgstr "" -#: cp/class.c:6206 +#: cp/class.c:6282 #, gcc-internal-format msgid "assuming pointer to member %qD" msgstr "" -#: cp/class.c:6209 +#: cp/class.c:6285 #, gcc-internal-format msgid "(a pointer to member can only be formed with %<&%E%>)" msgstr "" -#: cp/class.c:6271 cp/class.c:6305 +#: cp/class.c:6347 cp/class.c:6381 #, gcc-internal-format msgid "not enough type information" msgstr "" -#: cp/class.c:6288 +#: cp/class.c:6364 #, gcc-internal-format msgid "argument of type %qT does not match %qT" msgstr "" @@ -29423,12 +30741,12 @@ msgstr "" #. A name N used in a class S shall refer to the same declaration #. in its context and when re-evaluated in the completed scope of #. S. -#: cp/class.c:6588 cp/decl.c:1180 cp/name-lookup.c:525 +#: cp/class.c:6665 cp/decl.c:1199 cp/name-lookup.c:520 #, gcc-internal-format msgid "declaration of %q#D" msgstr "" -#: cp/class.c:6589 +#: cp/class.c:6666 #, gcc-internal-format msgid "changes meaning of %qD from %q+#D" msgstr "" @@ -29438,12 +30756,7 @@ msgstr "" msgid "continue statement not within loop or switch" msgstr "" -#: cp/cp-gimplify.c:409 -#, gcc-internal-format -msgid "statement with no effect" -msgstr "" - -#: cp/cp-gimplify.c:1141 +#: cp/cp-gimplify.c:1196 #, gcc-internal-format msgid "%qE implicitly determined as %<firstprivate%> has reference type" msgstr "" @@ -29468,7 +30781,7 @@ msgstr "" msgid "conversion from %qT to %qT discards qualifiers" msgstr "" -#: cp/cvt.c:470 cp/typeck.c:5485 +#: cp/cvt.c:470 cp/typeck.c:5598 #, gcc-internal-format msgid "casting %qT to %qT does not dereference pointer" msgstr "" @@ -29478,195 +30791,190 @@ msgstr "" msgid "cannot convert type %qT to type %qT" msgstr "" -#: cp/cvt.c:652 +#: cp/cvt.c:668 #, gcc-internal-format msgid "conversion from %q#T to %q#T" msgstr "" -#: cp/cvt.c:667 +#: cp/cvt.c:683 #, gcc-internal-format msgid "" "the result of the conversion is unspecified because %qE is outside the range " "of type %qT" msgstr "" -#: cp/cvt.c:678 cp/cvt.c:698 +#: cp/cvt.c:694 cp/cvt.c:714 #, gcc-internal-format msgid "%q#T used where a %qT was expected" msgstr "" -#: cp/cvt.c:713 +#: cp/cvt.c:729 #, gcc-internal-format msgid "%q#T used where a floating point value was expected" msgstr "" -#: cp/cvt.c:769 +#: cp/cvt.c:789 #, gcc-internal-format msgid "conversion from %qT to non-scalar type %qT requested" msgstr "" -#: cp/cvt.c:808 +#: cp/cvt.c:828 #, gcc-internal-format msgid "pseudo-destructor is not called" msgstr "" -#: cp/cvt.c:870 +#: cp/cvt.c:891 #, gcc-internal-format msgid "object of incomplete type %qT will not be accessed in %s" msgstr "" -#: cp/cvt.c:878 +#: cp/cvt.c:899 #, gcc-internal-format msgid "object of type %qT will not be accessed in %s" msgstr "" -#: cp/cvt.c:895 cp/cvt.c:1009 -#, gcc-internal-format -msgid "value computed is not used" -msgstr "" - -#: cp/cvt.c:909 +#: cp/cvt.c:930 #, gcc-internal-format msgid "object %qE of incomplete type %qT will not be accessed in %s" msgstr "" -#: cp/cvt.c:947 +#: cp/cvt.c:970 #, gcc-internal-format msgid "%s cannot resolve address of overloaded function" msgstr "" -#: cp/cvt.c:957 +#: cp/cvt.c:980 #, gcc-internal-format msgid "%s is a reference, not call, to function %qE" msgstr "" -#: cp/cvt.c:975 +#: cp/cvt.c:998 #, gcc-internal-format msgid "%s has no effect" msgstr "" -#: cp/cvt.c:1119 +#: cp/cvt.c:1142 #, gcc-internal-format msgid "converting NULL to non-pointer type" msgstr "" -#: cp/cvt.c:1225 +#: cp/cvt.c:1251 #, gcc-internal-format msgid "ambiguous default type conversion from %qT" msgstr "" -#: cp/cvt.c:1227 +#: cp/cvt.c:1253 #, gcc-internal-format msgid " candidate conversions include %qD and %qD" msgstr "" -#: cp/decl.c:1043 +#: cp/decl.c:1062 #, gcc-internal-format msgid "%qD was declared %<extern%> and later %<static%>" msgstr "" -#: cp/decl.c:1044 cp/decl.c:1591 objc/objc-act.c:2938 objc/objc-act.c:7539 +#: cp/decl.c:1063 cp/decl.c:1611 objc/objc-act.c:2977 objc/objc-act.c:7602 #, gcc-internal-format msgid "previous declaration of %q+D" msgstr "" -#: cp/decl.c:1077 +#: cp/decl.c:1096 #, gcc-internal-format msgid "declaration of %qF throws different exceptions" msgstr "" -#: cp/decl.c:1078 +#: cp/decl.c:1097 #, gcc-internal-format msgid "from previous declaration %q+F" msgstr "" -#: cp/decl.c:1134 +#: cp/decl.c:1153 #, gcc-internal-format msgid "function %q+D redeclared as inline" msgstr "" -#: cp/decl.c:1136 +#: cp/decl.c:1155 #, gcc-internal-format msgid "previous declaration of %q+D with attribute noinline" msgstr "" -#: cp/decl.c:1143 +#: cp/decl.c:1162 #, gcc-internal-format msgid "function %q+D redeclared with attribute noinline" msgstr "" -#: cp/decl.c:1145 +#: cp/decl.c:1164 #, gcc-internal-format msgid "previous declaration of %q+D was inline" msgstr "" -#: cp/decl.c:1167 cp/decl.c:1240 +#: cp/decl.c:1186 cp/decl.c:1259 #, gcc-internal-format msgid "shadowing %s function %q#D" msgstr "" -#: cp/decl.c:1176 +#: cp/decl.c:1195 #, gcc-internal-format msgid "library function %q#D redeclared as non-function %q#D" msgstr "" -#: cp/decl.c:1181 +#: cp/decl.c:1200 #, gcc-internal-format msgid "conflicts with built-in declaration %q#D" msgstr "" -#: cp/decl.c:1235 cp/decl.c:1361 cp/decl.c:1377 +#: cp/decl.c:1254 cp/decl.c:1380 cp/decl.c:1396 #, gcc-internal-format msgid "new declaration %q#D" msgstr "" -#: cp/decl.c:1236 +#: cp/decl.c:1255 #, gcc-internal-format msgid "ambiguates built-in declaration %q#D" msgstr "" -#: cp/decl.c:1325 +#: cp/decl.c:1344 #, gcc-internal-format msgid "%q#D redeclared as different kind of symbol" msgstr "" -#: cp/decl.c:1328 +#: cp/decl.c:1347 #, gcc-internal-format msgid "previous declaration of %q+#D" msgstr "" -#: cp/decl.c:1347 +#: cp/decl.c:1366 #, gcc-internal-format msgid "declaration of template %q#D" msgstr "" -#: cp/decl.c:1348 cp/name-lookup.c:526 cp/name-lookup.c:812 -#: cp/name-lookup.c:823 +#: cp/decl.c:1367 cp/name-lookup.c:521 cp/name-lookup.c:807 +#: cp/name-lookup.c:818 #, gcc-internal-format msgid "conflicts with previous declaration %q+#D" msgstr "" -#: cp/decl.c:1362 cp/decl.c:1378 +#: cp/decl.c:1381 cp/decl.c:1397 #, gcc-internal-format msgid "ambiguates old declaration %q+#D" msgstr "" -#: cp/decl.c:1370 +#: cp/decl.c:1389 #, gcc-internal-format msgid "declaration of C function %q#D conflicts with" msgstr "" -#: cp/decl.c:1372 +#: cp/decl.c:1391 #, gcc-internal-format msgid "previous declaration %q+#D here" msgstr "" -#: cp/decl.c:1386 +#: cp/decl.c:1405 #, gcc-internal-format msgid "conflicting declaration %q#D" msgstr "" -#: cp/decl.c:1387 +#: cp/decl.c:1406 #, gcc-internal-format msgid "%q+D has a previous declaration as %q#D" msgstr "" @@ -29678,63 +30986,63 @@ msgstr "" #. A namespace-name defined at global scope shall not be #. declared as the name of any other entity in any global scope #. of the program. -#: cp/decl.c:1439 +#: cp/decl.c:1458 #, gcc-internal-format msgid "declaration of namespace %qD conflicts with" msgstr "" -#: cp/decl.c:1440 +#: cp/decl.c:1459 #, gcc-internal-format msgid "previous declaration of namespace %q+D here" msgstr "" -#: cp/decl.c:1451 +#: cp/decl.c:1470 #, gcc-internal-format msgid "%q+#D previously defined here" msgstr "" #. Prototype decl follows defn w/o prototype. -#: cp/decl.c:1461 +#: cp/decl.c:1480 #, gcc-internal-format msgid "prototype for %q+#D" msgstr "" -#: cp/decl.c:1462 +#: cp/decl.c:1482 #, gcc-internal-format -msgid "%Jfollows non-prototype definition here" +msgid "follows non-prototype definition here" msgstr "" -#: cp/decl.c:1502 +#: cp/decl.c:1522 #, gcc-internal-format msgid "previous declaration of %q+#D with %qL linkage" msgstr "" -#: cp/decl.c:1504 +#: cp/decl.c:1524 #, gcc-internal-format msgid "conflicts with new declaration with %qL linkage" msgstr "" -#: cp/decl.c:1527 cp/decl.c:1533 +#: cp/decl.c:1547 cp/decl.c:1553 #, gcc-internal-format msgid "default argument given for parameter %d of %q#D" msgstr "" -#: cp/decl.c:1529 cp/decl.c:1535 +#: cp/decl.c:1549 cp/decl.c:1555 #, gcc-internal-format msgid "after previous specification in %q+#D" msgstr "" -#: cp/decl.c:1590 +#: cp/decl.c:1610 #, gcc-internal-format msgid "redundant redeclaration of %qD in same scope" msgstr "" -#: cp/decl.c:1596 +#: cp/decl.c:1616 #, gcc-internal-format msgid "deleted definition of %qD" msgstr "" -#: cp/decl.c:1597 +#: cp/decl.c:1617 #, gcc-internal-format msgid "after previous declaration %q+D" msgstr "" @@ -29747,334 +31055,324 @@ msgstr "" #. that specialization that would cause an implicit #. instantiation to take place, in every translation unit in #. which such a use occurs. -#: cp/decl.c:1933 +#: cp/decl.c:1968 #, gcc-internal-format msgid "explicit specialization of %qD after first use" msgstr "" -#: cp/decl.c:2029 +#: cp/decl.c:2065 #, gcc-internal-format msgid "%q+D: visibility attribute ignored because it" msgstr "" -#: cp/decl.c:2031 +#: cp/decl.c:2067 #, gcc-internal-format -msgid "%Jconflicts with previous declaration here" +msgid "conflicts with previous declaration here" msgstr "" -#: cp/decl.c:2464 +#: cp/decl.c:2507 #, gcc-internal-format msgid "jump to label %qD" msgstr "" -#: cp/decl.c:2466 +#: cp/decl.c:2509 #, gcc-internal-format msgid "jump to case label" msgstr "" -#: cp/decl.c:2468 +#: cp/decl.c:2511 cp/decl.c:2651 cp/decl.c:2692 #, gcc-internal-format -msgid "%H from here" +msgid " from here" msgstr "" -#: cp/decl.c:2487 cp/decl.c:2650 +#: cp/decl.c:2530 cp/decl.c:2695 #, gcc-internal-format msgid " exits OpenMP structured block" msgstr "" -#: cp/decl.c:2508 +#: cp/decl.c:2551 #, gcc-internal-format msgid " crosses initialization of %q+#D" msgstr "" -#: cp/decl.c:2510 cp/decl.c:2625 +#: cp/decl.c:2553 cp/decl.c:2669 #, gcc-internal-format -msgid " enters scope of non-POD %q+#D" +msgid " enters scope of %q+#D which has non-trivial destructor" msgstr "" -#: cp/decl.c:2523 cp/decl.c:2629 +#: cp/decl.c:2567 cp/decl.c:2674 #, gcc-internal-format msgid " enters try block" msgstr "" -#: cp/decl.c:2525 cp/decl.c:2631 +#. Can't skip init of __exception_info. +#: cp/decl.c:2569 cp/decl.c:2663 cp/decl.c:2676 #, gcc-internal-format msgid " enters catch block" msgstr "" -#: cp/decl.c:2535 cp/decl.c:2634 +#: cp/decl.c:2579 cp/decl.c:2679 #, gcc-internal-format msgid " enters OpenMP structured block" msgstr "" -#: cp/decl.c:2606 cp/decl.c:2646 +#: cp/decl.c:2650 cp/decl.c:2691 #, gcc-internal-format msgid "jump to label %q+D" msgstr "" -#: cp/decl.c:2607 cp/decl.c:2647 -#, gcc-internal-format -msgid " from here" -msgstr "" - -#. Can't skip init of __exception_info. -#: cp/decl.c:2619 -#, gcc-internal-format -msgid "%J enters catch block" -msgstr "" - -#: cp/decl.c:2623 +#: cp/decl.c:2667 #, gcc-internal-format msgid " skips initialization of %q+#D" msgstr "" -#: cp/decl.c:2699 +#: cp/decl.c:2744 #, gcc-internal-format msgid "label named wchar_t" msgstr "" -#: cp/decl.c:2703 -#, gcc-internal-format -msgid "duplicate label %qD" -msgstr "" - -#: cp/decl.c:2970 +#: cp/decl.c:3015 #, gcc-internal-format msgid "%qD is not a type" msgstr "" -#: cp/decl.c:2976 +#: cp/decl.c:3021 cp/parser.c:4197 #, gcc-internal-format msgid "%qD used without template parameters" msgstr "" -#: cp/decl.c:2985 +#: cp/decl.c:3030 #, gcc-internal-format msgid "%q#T is not a class" msgstr "" -#: cp/decl.c:3009 cp/decl.c:3077 +#: cp/decl.c:3054 cp/decl.c:3122 #, gcc-internal-format msgid "no class template named %q#T in %q#T" msgstr "" -#: cp/decl.c:3017 +#: cp/decl.c:3062 #, gcc-internal-format msgid "%<typename %T::%D%> names %q#T, which is not a class template" msgstr "" -#: cp/decl.c:3024 +#: cp/decl.c:3069 #, gcc-internal-format msgid "%<typename %T::%D%> names %q#T, which is not a type" msgstr "" -#: cp/decl.c:3086 +#: cp/decl.c:3131 #, gcc-internal-format msgid "template parameters do not match template" msgstr "" -#: cp/decl.c:3087 cp/friend.c:321 cp/friend.c:329 +#: cp/decl.c:3132 cp/friend.c:321 cp/friend.c:329 #, gcc-internal-format msgid "%q+D declared here" msgstr "" -#: cp/decl.c:3770 +#: cp/decl.c:3815 #, gcc-internal-format -msgid "%Jan anonymous struct cannot have function members" +msgid "an anonymous struct cannot have function members" msgstr "" -#: cp/decl.c:3772 +#: cp/decl.c:3818 #, gcc-internal-format -msgid "%Jan anonymous union cannot have function members" +msgid "an anonymous union cannot have function members" msgstr "" -#: cp/decl.c:3790 +#: cp/decl.c:3836 #, gcc-internal-format msgid "member %q+#D with constructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:3793 +#: cp/decl.c:3839 #, gcc-internal-format msgid "member %q+#D with destructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:3796 +#: cp/decl.c:3842 #, gcc-internal-format msgid "" "member %q+#D with copy assignment operator not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:3821 +#: cp/decl.c:3867 #, gcc-internal-format msgid "multiple types in one declaration" msgstr "" -#: cp/decl.c:3825 +#: cp/decl.c:3871 #, gcc-internal-format msgid "redeclaration of C++ built-in type %qT" msgstr "" -#: cp/decl.c:3862 +#: cp/decl.c:3908 #, gcc-internal-format msgid "missing type-name in typedef-declaration" msgstr "" -#: cp/decl.c:3869 +#: cp/decl.c:3915 #, gcc-internal-format msgid "ISO C++ prohibits anonymous structs" msgstr "" -#: cp/decl.c:3876 +#: cp/decl.c:3922 #, gcc-internal-format msgid "%qs can only be specified for functions" msgstr "" -#: cp/decl.c:3882 +#: cp/decl.c:3928 #, gcc-internal-format msgid "%<friend%> can only be specified inside a class" msgstr "" -#: cp/decl.c:3884 +#: cp/decl.c:3930 #, gcc-internal-format msgid "%<explicit%> can only be specified for constructors" msgstr "" -#: cp/decl.c:3886 +#: cp/decl.c:3932 #, gcc-internal-format msgid "a storage class can only be specified for objects and functions" msgstr "" -#: cp/decl.c:3892 +#: cp/decl.c:3938 #, gcc-internal-format msgid "qualifiers can only be specified for objects and functions" msgstr "" -#: cp/decl.c:3895 +#: cp/decl.c:3941 #, gcc-internal-format msgid "%<typedef%> was ignored in this declaration" msgstr "" -#: cp/decl.c:3924 +#: cp/decl.c:3943 +#, gcc-internal-format +msgid "%<constexpr> cannot be used for type declarations" +msgstr "" + +#: cp/decl.c:3972 #, gcc-internal-format msgid "attribute ignored in declaration of %q+#T" msgstr "" -#: cp/decl.c:3925 +#: cp/decl.c:3973 #, gcc-internal-format msgid "attribute for %q+#T must follow the %qs keyword" msgstr "" -#: cp/decl.c:3970 +#: cp/decl.c:4018 #, gcc-internal-format msgid "ignoring attributes applied to class type %qT outside of definition" msgstr "" #. A template type parameter or other dependent type. -#: cp/decl.c:3974 +#: cp/decl.c:4022 #, gcc-internal-format msgid "" "ignoring attributes applied to dependent type %qT without an associated " "declaration" msgstr "" -#: cp/decl.c:4050 +#: cp/decl.c:4098 #, gcc-internal-format msgid "typedef %qD is initialized (use decltype instead)" msgstr "" -#: cp/decl.c:4068 +#: cp/decl.c:4116 #, gcc-internal-format msgid "declaration of %q#D has %<extern%> and is initialized" msgstr "" -#: cp/decl.c:4093 +#: cp/decl.c:4141 #, gcc-internal-format msgid "definition of %q#D is marked %<dllimport%>" msgstr "" -#: cp/decl.c:4112 +#: cp/decl.c:4160 #, gcc-internal-format msgid "%q#D is not a static member of %q#T" msgstr "" -#: cp/decl.c:4118 +#: cp/decl.c:4166 #, gcc-internal-format msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>" msgstr "" -#: cp/decl.c:4127 +#: cp/decl.c:4175 #, gcc-internal-format msgid "" "template header not allowed in member definition of explicitly specialized " "class" msgstr "" -#: cp/decl.c:4135 +#: cp/decl.c:4183 #, gcc-internal-format msgid "duplicate initialization of %qD" msgstr "" -#: cp/decl.c:4174 +#: cp/decl.c:4188 +#, gcc-internal-format +msgid "%qD declared %<constexpr%> outside its class" +msgstr "" + +#: cp/decl.c:4225 #, gcc-internal-format msgid "declaration of %q#D outside of class is not definition" msgstr "" -#: cp/decl.c:4269 +#: cp/decl.c:4323 #, gcc-internal-format msgid "variable %q#D has initializer but incomplete type" msgstr "" -#: cp/decl.c:4275 cp/decl.c:5023 +#: cp/decl.c:4329 cp/decl.c:5077 #, gcc-internal-format msgid "elements of array %q#D have incomplete type" msgstr "" -#: cp/decl.c:4282 cp/decl.c:5519 +#: cp/decl.c:4336 cp/decl.c:5573 #, gcc-internal-format msgid "declaration of %q#D has no initializer" msgstr "" -#: cp/decl.c:4284 +#: cp/decl.c:4338 #, gcc-internal-format msgid "aggregate %q#D has incomplete type and cannot be defined" msgstr "" -#: cp/decl.c:4320 +#: cp/decl.c:4374 #, gcc-internal-format msgid "%qD declared as reference but not initialized" msgstr "" -#: cp/decl.c:4326 -#, gcc-internal-format -msgid "ISO C++ forbids use of initializer list to initialize reference %qD" -msgstr "" - -#: cp/decl.c:4352 +#: cp/decl.c:4399 #, gcc-internal-format msgid "cannot initialize %qT from %qT" msgstr "" -#: cp/decl.c:4413 +#: cp/decl.c:4463 #, gcc-internal-format msgid "name used in a GNU-style designated initializer for an array" msgstr "" -#: cp/decl.c:4418 +#: cp/decl.c:4468 #, gcc-internal-format msgid "name %qD used in a GNU-style designated initializer for an array" msgstr "" -#: cp/decl.c:4468 +#: cp/decl.c:4518 #, gcc-internal-format msgid "initializer fails to determine size of %qD" msgstr "" -#: cp/decl.c:4475 +#: cp/decl.c:4525 #, gcc-internal-format msgid "array size missing in %qD" msgstr "" -#: cp/decl.c:4487 +#: cp/decl.c:4537 #, gcc-internal-format msgid "zero-size array %qD" msgstr "" @@ -30082,894 +31380,897 @@ msgstr "" #. An automatic variable with an incomplete type: that is an error. #. Don't talk about array types here, since we took care of that #. message in grokdeclarator. -#: cp/decl.c:4530 +#: cp/decl.c:4580 #, gcc-internal-format msgid "storage size of %qD isn't known" msgstr "" -#: cp/decl.c:4553 +#: cp/decl.c:4603 #, gcc-internal-format msgid "storage size of %qD isn't constant" msgstr "" -#: cp/decl.c:4604 +#: cp/decl.c:4649 #, gcc-internal-format msgid "" "sorry: semantics of inline function static data %q+#D are wrong (you'll wind " "up with multiple copies)" msgstr "" -#: cp/decl.c:4607 +#: cp/decl.c:4653 +#, gcc-internal-format +msgid " you can work around this by removing the initializer" +msgstr "" + +#: cp/decl.c:4673 #, gcc-internal-format -msgid "%J you can work around this by removing the initializer" +msgid "missing initializer for constexpr %qD" msgstr "" -#: cp/decl.c:4634 +#: cp/decl.c:4683 #, gcc-internal-format msgid "uninitialized const %qD" msgstr "" -#: cp/decl.c:4746 +#: cp/decl.c:4795 #, gcc-internal-format msgid "invalid type %qT as initializer for a vector of type %qT" msgstr "" -#: cp/decl.c:4788 +#: cp/decl.c:4837 #, gcc-internal-format msgid "initializer for %qT must be brace-enclosed" msgstr "" -#: cp/decl.c:4806 +#: cp/decl.c:4855 #, gcc-internal-format msgid "%qT has no non-static data member named %qD" msgstr "" -#: cp/decl.c:4862 +#: cp/decl.c:4911 #, gcc-internal-format msgid "braces around scalar initializer for type %qT" msgstr "" -#: cp/decl.c:4948 +#: cp/decl.c:5002 #, gcc-internal-format msgid "missing braces around initializer for %qT" msgstr "" -#: cp/decl.c:5005 cp/typeck2.c:1086 cp/typeck2.c:1109 cp/typeck2.c:1152 +#: cp/decl.c:5059 cp/typeck2.c:924 cp/typeck2.c:1099 cp/typeck2.c:1122 +#: cp/typeck2.c:1165 #, gcc-internal-format msgid "too many initializers for %qT" msgstr "" -#: cp/decl.c:5025 +#: cp/decl.c:5079 #, gcc-internal-format msgid "elements of array %q#T have incomplete type" msgstr "" -#: cp/decl.c:5034 +#: cp/decl.c:5088 #, gcc-internal-format msgid "variable-sized object %qD may not be initialized" msgstr "" -#: cp/decl.c:5036 +#: cp/decl.c:5090 #, gcc-internal-format msgid "variable-sized compound literal" msgstr "" -#: cp/decl.c:5090 +#: cp/decl.c:5144 #, gcc-internal-format msgid "%qD has incomplete type" msgstr "" -#: cp/decl.c:5110 +#: cp/decl.c:5164 #, gcc-internal-format msgid "scalar object %qD requires one element in initializer" msgstr "" -#: cp/decl.c:5141 +#: cp/decl.c:5195 #, gcc-internal-format msgid "in C++98 %qD must be initialized by constructor, not by %<{...}%>" msgstr "" -#: cp/decl.c:5173 +#: cp/decl.c:5227 #, gcc-internal-format msgid "array %qD initialized by parenthesized string literal %qE" msgstr "" -#: cp/decl.c:5187 +#: cp/decl.c:5241 #, gcc-internal-format msgid "structure %qD with uninitialized const members" msgstr "" -#: cp/decl.c:5189 +#: cp/decl.c:5243 #, gcc-internal-format msgid "structure %qD with uninitialized reference members" msgstr "" -#: cp/decl.c:5486 +#: cp/decl.c:5540 #, gcc-internal-format msgid "assignment (not initialization) in declaration" msgstr "" -#: cp/decl.c:5545 cp/decl2.c:853 +#: cp/decl.c:5608 cp/decl2.c:866 #, gcc-internal-format msgid "%qD cannot be defaulted" msgstr "" -#: cp/decl.c:5621 +#: cp/decl.c:5688 #, gcc-internal-format msgid "shadowing previous type declaration of %q#D" msgstr "" -#: cp/decl.c:5651 +#: cp/decl.c:5720 #, gcc-internal-format -msgid "%qD cannot be thread-local because it has non-POD type %qT" +msgid "%qD cannot be thread-local because it has non-trivial type %qT" msgstr "" -#: cp/decl.c:5683 +#: cp/decl.c:5752 #, gcc-internal-format msgid "Java object %qD not allocated with %<new%>" msgstr "" -#: cp/decl.c:5700 +#: cp/decl.c:5769 #, gcc-internal-format msgid "%qD is thread-local and so cannot be dynamically initialized" msgstr "" -#: cp/decl.c:5718 +#: cp/decl.c:5787 #, gcc-internal-format msgid "" "%qD cannot be initialized by a non-constant expression when being declared" msgstr "" -#: cp/decl.c:5758 +#: cp/decl.c:5836 #, gcc-internal-format msgid "non-static data member %qD has Java class type" msgstr "" -#: cp/decl.c:5822 +#: cp/decl.c:5900 #, gcc-internal-format msgid "function %q#D is initialized like a variable" msgstr "" -#: cp/decl.c:6411 +#: cp/decl.c:6480 #, gcc-internal-format msgid "destructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.c:6413 +#: cp/decl.c:6482 #, gcc-internal-format msgid "constructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.c:6434 +#: cp/decl.c:6503 #, gcc-internal-format msgid "%qD declared as a %<virtual%> %s" msgstr "" -#: cp/decl.c:6436 +#: cp/decl.c:6505 #, gcc-internal-format msgid "%qD declared as an %<inline%> %s" msgstr "" -#: cp/decl.c:6438 +#: cp/decl.c:6507 #, gcc-internal-format msgid "" "%<const%> and %<volatile%> function specifiers on %qD invalid in %s " "declaration" msgstr "" -#: cp/decl.c:6442 +#: cp/decl.c:6511 #, gcc-internal-format msgid "%q+D declared as a friend" msgstr "" -#: cp/decl.c:6448 +#: cp/decl.c:6517 #, gcc-internal-format msgid "%q+D declared with an exception specification" msgstr "" -#: cp/decl.c:6482 +#: cp/decl.c:6551 #, gcc-internal-format msgid "definition of %qD is not in namespace enclosing %qT" msgstr "" -#: cp/decl.c:6602 +#: cp/decl.c:6672 #, gcc-internal-format msgid "defining explicit specialization %qD in friend declaration" msgstr "" #. Something like `template <class T> friend void f<T>()'. -#: cp/decl.c:6612 +#: cp/decl.c:6682 #, gcc-internal-format msgid "invalid use of template-id %qD in declaration of primary template" msgstr "" -#: cp/decl.c:6642 +#: cp/decl.c:6712 #, gcc-internal-format msgid "" "default arguments are not allowed in declaration of friend template " "specialization %qD" msgstr "" -#: cp/decl.c:6650 +#: cp/decl.c:6720 #, gcc-internal-format msgid "" "%<inline%> is not allowed in declaration of friend template specialization %" "qD" msgstr "" -#: cp/decl.c:6693 +#: cp/decl.c:6763 #, gcc-internal-format msgid "cannot declare %<::main%> to be a template" msgstr "" -#: cp/decl.c:6695 +#: cp/decl.c:6765 #, gcc-internal-format msgid "cannot declare %<::main%> to be inline" msgstr "" -#: cp/decl.c:6697 +#: cp/decl.c:6767 #, gcc-internal-format msgid "cannot declare %<::main%> to be static" msgstr "" -#: cp/decl.c:6725 -#, gcc-internal-format -msgid "non-local function %q#D uses anonymous type" -msgstr "" - -#: cp/decl.c:6728 cp/decl.c:7004 -#, gcc-internal-format -msgid "" -"%q+#D does not refer to the unqualified type, so it is not used for linkage" -msgstr "" - -#: cp/decl.c:6734 -#, gcc-internal-format -msgid "non-local function %q#D uses local type %qT" -msgstr "" - -#: cp/decl.c:6753 +#: cp/decl.c:6793 #, gcc-internal-format msgid "static member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.c:6754 +#: cp/decl.c:6794 #, gcc-internal-format msgid "non-member function %qD cannot have cv-qualifier" msgstr "" -#: cp/decl.c:6802 +#: cp/decl.c:6839 #, gcc-internal-format msgid "%<::main%> must return %<int%>" msgstr "" -#: cp/decl.c:6842 +#: cp/decl.c:6879 #, gcc-internal-format msgid "definition of implicitly-declared %qD" msgstr "" -#: cp/decl.c:6859 cp/decl2.c:685 +#: cp/decl.c:6896 cp/decl2.c:692 #, gcc-internal-format msgid "no %q#D member function declared in class %qT" msgstr "" -#. DRs 132, 319 and 389 seem to indicate types with -#. no linkage can only be used to declare extern "C" -#. entities. Since it's not always an error in the -#. ISO C++ 90 Standard, we only issue a warning. -#: cp/decl.c:7001 -#, gcc-internal-format -msgid "non-local variable %q#D uses anonymous type" -msgstr "" - -#: cp/decl.c:7010 -#, gcc-internal-format -msgid "non-local variable %q#D uses local type %qT" -msgstr "" - -#: cp/decl.c:7133 +#: cp/decl.c:7152 #, gcc-internal-format msgid "" "invalid in-class initialization of static data member of non-integral type %" "qT" msgstr "" -#: cp/decl.c:7143 +#: cp/decl.c:7162 #, gcc-internal-format msgid "ISO C++ forbids in-class initialization of non-const static member %qD" msgstr "" -#: cp/decl.c:7147 +#: cp/decl.c:7166 #, gcc-internal-format msgid "" "ISO C++ forbids initialization of member constant %qD of non-integral type %" "qT" msgstr "" -#: cp/decl.c:7172 +#: cp/decl.c:7191 #, gcc-internal-format msgid "size of array %qD has non-integral type %qT" msgstr "" -#: cp/decl.c:7174 +#: cp/decl.c:7193 #, gcc-internal-format msgid "size of array has non-integral type %qT" msgstr "" -#: cp/decl.c:7226 +#: cp/decl.c:7245 #, gcc-internal-format msgid "size of array %qD is negative" msgstr "" -#: cp/decl.c:7228 +#: cp/decl.c:7247 #, gcc-internal-format msgid "size of array is negative" msgstr "" -#: cp/decl.c:7236 +#: cp/decl.c:7255 #, gcc-internal-format msgid "ISO C++ forbids zero-size array %qD" msgstr "" -#: cp/decl.c:7238 +#: cp/decl.c:7257 #, gcc-internal-format msgid "ISO C++ forbids zero-size array" msgstr "" -#: cp/decl.c:7245 +#: cp/decl.c:7264 #, gcc-internal-format msgid "size of array %qD is not an integral constant-expression" msgstr "" -#: cp/decl.c:7248 +#: cp/decl.c:7267 #, gcc-internal-format msgid "size of array is not an integral constant-expression" msgstr "" -#: cp/decl.c:7254 +#: cp/decl.c:7273 #, gcc-internal-format msgid "ISO C++ forbids variable length array %qD" msgstr "" -#: cp/decl.c:7256 +#: cp/decl.c:7275 #, gcc-internal-format msgid "ISO C++ forbids variable length array" msgstr "" -#: cp/decl.c:7262 +#: cp/decl.c:7281 #, gcc-internal-format msgid "variable length array %qD is used" msgstr "" -#: cp/decl.c:7298 +#: cp/decl.c:7317 #, gcc-internal-format msgid "overflow in array dimension" msgstr "" -#: cp/decl.c:7379 +#: cp/decl.c:7398 #, gcc-internal-format msgid "declaration of %qD as %s" msgstr "" -#: cp/decl.c:7381 +#: cp/decl.c:7400 #, gcc-internal-format msgid "creating %s" msgstr "" -#: cp/decl.c:7393 +#: cp/decl.c:7412 #, gcc-internal-format msgid "" "declaration of %qD as multidimensional array must have bounds for all " "dimensions except the first" msgstr "" -#: cp/decl.c:7397 +#: cp/decl.c:7416 #, gcc-internal-format msgid "" "multidimensional array must have bounds for all dimensions except the first" msgstr "" -#: cp/decl.c:7432 +#: cp/decl.c:7451 #, gcc-internal-format msgid "return type specification for constructor invalid" msgstr "" -#: cp/decl.c:7442 +#: cp/decl.c:7461 #, gcc-internal-format msgid "return type specification for destructor invalid" msgstr "" -#: cp/decl.c:7455 +#: cp/decl.c:7474 #, gcc-internal-format msgid "return type specified for %<operator %T%>" msgstr "" -#: cp/decl.c:7477 +#: cp/decl.c:7496 #, gcc-internal-format msgid "unnamed variable or field declared void" msgstr "" -#: cp/decl.c:7484 +#: cp/decl.c:7503 #, gcc-internal-format msgid "variable or field declared void" msgstr "" -#: cp/decl.c:7657 +#: cp/decl.c:7677 #, gcc-internal-format msgid "invalid use of qualified-name %<::%D%>" msgstr "" -#: cp/decl.c:7660 +#: cp/decl.c:7680 #, gcc-internal-format msgid "invalid use of qualified-name %<%T::%D%>" msgstr "" -#: cp/decl.c:7663 +#: cp/decl.c:7683 #, gcc-internal-format msgid "invalid use of qualified-name %<%D::%D%>" msgstr "" -#: cp/decl.c:7675 +#: cp/decl.c:7695 #, gcc-internal-format msgid "type %qT is not derived from type %qT" msgstr "" -#: cp/decl.c:7691 cp/decl.c:7783 cp/decl.c:8985 +#: cp/decl.c:7711 cp/decl.c:7803 cp/decl.c:9063 #, gcc-internal-format msgid "declaration of %qD as non-function" msgstr "" -#: cp/decl.c:7697 +#: cp/decl.c:7717 #, gcc-internal-format msgid "declaration of %qD as non-member" msgstr "" -#: cp/decl.c:7728 +#: cp/decl.c:7748 #, gcc-internal-format msgid "declarator-id missing; using reserved word %qD" msgstr "" -#: cp/decl.c:7775 +#: cp/decl.c:7795 #, gcc-internal-format msgid "function definition does not declare parameters" msgstr "" -#: cp/decl.c:7817 +#: cp/decl.c:7837 #, gcc-internal-format msgid "two or more data types in declaration of %qs" msgstr "" -#: cp/decl.c:7823 +#: cp/decl.c:7843 #, gcc-internal-format msgid "conflicting specifiers in declaration of %qs" msgstr "" -#: cp/decl.c:7894 cp/decl.c:7897 cp/decl.c:7900 +#: cp/decl.c:7914 cp/decl.c:7917 cp/decl.c:7920 #, gcc-internal-format msgid "ISO C++ forbids declaration of %qs with no type" msgstr "" -#: cp/decl.c:7925 cp/decl.c:7943 +#: cp/decl.c:7945 cp/decl.c:7963 #, gcc-internal-format msgid "%<signed%> or %<unsigned%> invalid for %qs" msgstr "" -#: cp/decl.c:7927 +#: cp/decl.c:7947 #, gcc-internal-format msgid "%<signed%> and %<unsigned%> specified together for %qs" msgstr "" -#: cp/decl.c:7929 +#: cp/decl.c:7949 #, gcc-internal-format msgid "%<long long%> invalid for %qs" msgstr "" -#: cp/decl.c:7931 +#: cp/decl.c:7951 #, gcc-internal-format msgid "%<long%> invalid for %qs" msgstr "" -#: cp/decl.c:7933 +#: cp/decl.c:7953 #, gcc-internal-format msgid "%<short%> invalid for %qs" msgstr "" -#: cp/decl.c:7935 +#: cp/decl.c:7955 #, gcc-internal-format msgid "%<long%> or %<short%> invalid for %qs" msgstr "" -#: cp/decl.c:7937 +#: cp/decl.c:7957 #, gcc-internal-format msgid "%<long%> or %<short%> specified with char for %qs" msgstr "" -#: cp/decl.c:7939 +#: cp/decl.c:7959 #, gcc-internal-format msgid "%<long%> and %<short%> specified together for %qs" msgstr "" -#: cp/decl.c:7945 +#: cp/decl.c:7965 #, gcc-internal-format msgid "%<short%> or %<long%> invalid for %qs" msgstr "" -#: cp/decl.c:7953 +#: cp/decl.c:7973 #, gcc-internal-format msgid "long, short, signed or unsigned used invalidly for %qs" msgstr "" -#: cp/decl.c:8017 +#: cp/decl.c:8037 #, gcc-internal-format msgid "complex invalid for %qs" msgstr "" -#: cp/decl.c:8046 +#: cp/decl.c:8068 +#, gcc-internal-format +msgid "both %<const%> and %<constexpr%> cannot be used here" +msgstr "" + +#: cp/decl.c:8077 #, gcc-internal-format msgid "qualifiers are not allowed on declaration of %<operator %T%>" msgstr "" -#: cp/decl.c:8059 cp/typeck.c:7293 +#: cp/decl.c:8090 cp/typeck.c:7458 #, gcc-internal-format msgid "ignoring %qV qualifiers added to function type %qT" msgstr "" -#: cp/decl.c:8082 +#: cp/decl.c:8113 #, gcc-internal-format msgid "member %qD cannot be declared both virtual and static" msgstr "" -#: cp/decl.c:8090 +#: cp/decl.c:8121 #, gcc-internal-format msgid "%<%T::%D%> is not a valid declarator" msgstr "" -#: cp/decl.c:8099 +#: cp/decl.c:8130 #, gcc-internal-format msgid "typedef declaration invalid in parameter declaration" msgstr "" -#: cp/decl.c:8105 +#: cp/decl.c:8136 #, gcc-internal-format msgid "storage class specifiers invalid in parameter declarations" msgstr "" -#: cp/decl.c:8109 +#: cp/decl.c:8140 #, gcc-internal-format msgid "parameter declared %<auto%>" msgstr "" -#: cp/decl.c:8118 +#: cp/decl.c:8148 +#, gcc-internal-format +msgid "a parameter cannot be declared %<constexpr%>" +msgstr "" + +#: cp/decl.c:8157 #, gcc-internal-format msgid "%<virtual%> outside class declaration" msgstr "" -#: cp/decl.c:8136 +#: cp/decl.c:8175 #, gcc-internal-format msgid "multiple storage classes in declaration of %qs" msgstr "" -#: cp/decl.c:8159 +#: cp/decl.c:8198 #, gcc-internal-format msgid "storage class specified for %qs" msgstr "" -#: cp/decl.c:8163 +#: cp/decl.c:8202 #, gcc-internal-format msgid "storage class specified for parameter %qs" msgstr "" -#: cp/decl.c:8176 +#: cp/decl.c:8215 #, gcc-internal-format msgid "nested function %qs declared %<extern%>" msgstr "" -#: cp/decl.c:8180 +#: cp/decl.c:8219 #, gcc-internal-format msgid "top-level declaration of %qs specifies %<auto%>" msgstr "" -#: cp/decl.c:8186 +#: cp/decl.c:8225 #, gcc-internal-format msgid "function-scope %qs implicitly auto and declared %<__thread%>" msgstr "" -#: cp/decl.c:8193 +#: cp/decl.c:8232 #, gcc-internal-format msgid "storage class specifiers invalid in friend function declarations" msgstr "" -#: cp/decl.c:8282 +#: cp/decl.c:8326 #, gcc-internal-format msgid "%qs declared as function returning a function" msgstr "" -#: cp/decl.c:8287 +#: cp/decl.c:8331 #, gcc-internal-format msgid "%qs declared as function returning an array" msgstr "" -#: cp/decl.c:8308 +#: cp/decl.c:8352 #, gcc-internal-format msgid "%qs function uses %<auto%> type specifier without late return type" msgstr "" -#: cp/decl.c:8314 +#: cp/decl.c:8358 #, gcc-internal-format msgid "" "%qs function with late return type has %qT as its type rather than plain %" "<auto%>" msgstr "" -#: cp/decl.c:8322 +#: cp/decl.c:8366 #, gcc-internal-format msgid "" "%qs function with late return type not declared with %<auto%> type specifier" msgstr "" -#: cp/decl.c:8355 +#: cp/decl.c:8399 #, gcc-internal-format msgid "destructor cannot be static member function" msgstr "" -#: cp/decl.c:8360 +#: cp/decl.c:8404 #, gcc-internal-format msgid "destructors may not be cv-qualified" msgstr "" -#: cp/decl.c:8378 +#: cp/decl.c:8422 #, gcc-internal-format msgid "constructors cannot be declared virtual" msgstr "" -#: cp/decl.c:8391 +#: cp/decl.c:8435 #, gcc-internal-format msgid "can't initialize friend function %qs" msgstr "" #. Cannot be both friend and virtual. -#: cp/decl.c:8395 +#: cp/decl.c:8439 #, gcc-internal-format msgid "virtual functions cannot be friends" msgstr "" -#: cp/decl.c:8399 +#: cp/decl.c:8443 #, gcc-internal-format msgid "friend declaration not in class definition" msgstr "" -#: cp/decl.c:8401 +#: cp/decl.c:8445 #, gcc-internal-format msgid "can't define friend function %qs in a local class definition" msgstr "" -#: cp/decl.c:8414 +#: cp/decl.c:8463 +#, gcc-internal-format +msgid "" +"the %<constexpr%> specifier cannot be used in a function declaration that is " +"not a definition" +msgstr "" + +#: cp/decl.c:8481 #, gcc-internal-format msgid "destructors may not have parameters" msgstr "" -#: cp/decl.c:8433 +#: cp/decl.c:8500 #, gcc-internal-format msgid "cannot declare pointer to %q#T" msgstr "" -#: cp/decl.c:8446 cp/decl.c:8453 +#: cp/decl.c:8513 cp/decl.c:8520 #, gcc-internal-format msgid "cannot declare reference to %q#T" msgstr "" -#: cp/decl.c:8455 +#: cp/decl.c:8522 #, gcc-internal-format msgid "cannot declare pointer to %q#T member" msgstr "" -#: cp/decl.c:8475 +#: cp/decl.c:8542 #, gcc-internal-format msgid "cannot declare %s to qualified function type %qT" msgstr "" -#: cp/decl.c:8512 +#: cp/decl.c:8579 #, gcc-internal-format msgid "" "cannot declare reference to %q#T, which is not a typedef or a template type " "argument" msgstr "" -#: cp/decl.c:8556 +#: cp/decl.c:8623 #, gcc-internal-format msgid "template-id %qD used as a declarator" msgstr "" -#: cp/decl.c:8607 +#: cp/decl.c:8674 #, gcc-internal-format msgid "member functions are implicitly friends of their class" msgstr "" -#: cp/decl.c:8612 +#: cp/decl.c:8679 #, gcc-internal-format msgid "extra qualification %<%T::%> on member %qs" msgstr "" -#: cp/decl.c:8644 +#: cp/decl.c:8711 #, gcc-internal-format msgid "cannot define member function %<%T::%s%> within %<%T%>" msgstr "" -#: cp/decl.c:8661 +#: cp/decl.c:8720 +#, gcc-internal-format +msgid "a constexpr function cannot be defined outside of its class." +msgstr "" + +#: cp/decl.c:8734 #, gcc-internal-format msgid "cannot declare member %<%T::%s%> within %qT" msgstr "" -#: cp/decl.c:8684 +#: cp/decl.c:8757 #, gcc-internal-format msgid "non-parameter %qs cannot be a parameter pack" msgstr "" -#: cp/decl.c:8694 +#: cp/decl.c:8767 #, gcc-internal-format msgid "size of array %qs is too large" msgstr "" -#: cp/decl.c:8705 +#: cp/decl.c:8778 #, gcc-internal-format msgid "data member may not have variably modified type %qT" msgstr "" -#: cp/decl.c:8707 +#: cp/decl.c:8780 #, gcc-internal-format msgid "parameter may not have variably modified type %qT" msgstr "" #. [dcl.fct.spec] The explicit specifier shall only be used in #. declarations of constructors within a class definition. -#: cp/decl.c:8715 +#: cp/decl.c:8788 #, gcc-internal-format msgid "only declarations of constructors can be %<explicit%>" msgstr "" -#: cp/decl.c:8723 +#: cp/decl.c:8796 #, gcc-internal-format msgid "non-member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:8728 +#: cp/decl.c:8801 #, gcc-internal-format msgid "non-object member %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:8734 +#: cp/decl.c:8807 #, gcc-internal-format msgid "function %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:8739 +#: cp/decl.c:8812 #, gcc-internal-format msgid "static %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:8744 +#: cp/decl.c:8817 #, gcc-internal-format msgid "const %qs cannot be declared %<mutable%>" msgstr "" -#: cp/decl.c:8781 +#: cp/decl.c:8855 #, gcc-internal-format -msgid "%Jtypedef name may not be a nested-name-specifier" +msgid "typedef name may not be a nested-name-specifier" msgstr "" -#: cp/decl.c:8799 +#: cp/decl.c:8873 #, gcc-internal-format msgid "ISO C++ forbids nested type %qD with same name as enclosing class" msgstr "" -#: cp/decl.c:8887 +#: cp/decl.c:8965 #, gcc-internal-format msgid "" "qualified function types cannot be used to declare static member functions" msgstr "" -#: cp/decl.c:8889 +#: cp/decl.c:8967 #, gcc-internal-format msgid "qualified function types cannot be used to declare free functions" msgstr "" -#: cp/decl.c:8915 +#: cp/decl.c:8993 #, gcc-internal-format msgid "type qualifiers specified for friend class declaration" msgstr "" -#: cp/decl.c:8920 +#: cp/decl.c:8998 #, gcc-internal-format msgid "%<inline%> specified for friend class declaration" msgstr "" -#: cp/decl.c:8928 +#: cp/decl.c:9006 #, gcc-internal-format msgid "template parameters cannot be friends" msgstr "" -#: cp/decl.c:8930 +#: cp/decl.c:9008 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend class %T::%D%>" msgstr "" -#: cp/decl.c:8934 +#: cp/decl.c:9012 #, gcc-internal-format msgid "friend declaration requires class-key, i.e. %<friend %#T%>" msgstr "" -#: cp/decl.c:8947 +#: cp/decl.c:9025 #, gcc-internal-format msgid "trying to make class %qT a friend of global scope" msgstr "" -#: cp/decl.c:8965 +#: cp/decl.c:9043 #, gcc-internal-format msgid "invalid qualifiers on non-member function type" msgstr "" -#: cp/decl.c:8975 +#: cp/decl.c:9053 #, gcc-internal-format msgid "abstract declarator %qT used as declaration" msgstr "" -#: cp/decl.c:9004 +#: cp/decl.c:9082 #, gcc-internal-format msgid "cannot use %<::%> in parameter declaration" msgstr "" #. Something like struct S { int N::j; }; -#: cp/decl.c:9050 +#: cp/decl.c:9128 #, gcc-internal-format msgid "invalid use of %<::%>" msgstr "" -#: cp/decl.c:9065 +#: cp/decl.c:9143 #, gcc-internal-format msgid "can't make %qD into a method -- not in a class" msgstr "" -#: cp/decl.c:9074 +#: cp/decl.c:9152 #, gcc-internal-format msgid "function %qD declared virtual inside a union" msgstr "" -#: cp/decl.c:9083 +#: cp/decl.c:9161 #, gcc-internal-format msgid "%qD cannot be declared virtual, since it is always static" msgstr "" -#: cp/decl.c:9101 +#: cp/decl.c:9179 #, gcc-internal-format msgid "expected qualified name in friend declaration for destructor %qD" msgstr "" -#: cp/decl.c:9108 +#: cp/decl.c:9186 #, gcc-internal-format msgid "declaration of %qD as member of %qT" msgstr "" -#: cp/decl.c:9115 +#: cp/decl.c:9191 +#, gcc-internal-format +msgid "a destructor cannot be %<constexpr%>" +msgstr "" + +#: cp/decl.c:9195 #, gcc-internal-format msgid "expected qualified name in friend declaration for constructor %qD" msgstr "" -#: cp/decl.c:9178 +#: cp/decl.c:9259 #, gcc-internal-format msgid "field %qD has incomplete type" msgstr "" -#: cp/decl.c:9180 +#: cp/decl.c:9261 #, gcc-internal-format msgid "name %qT has incomplete type" msgstr "" -#: cp/decl.c:9189 +#: cp/decl.c:9270 #, gcc-internal-format msgid " in instantiation of template %qT" msgstr "" -#: cp/decl.c:9198 +#: cp/decl.c:9279 #, gcc-internal-format msgid "%qE is neither function nor member function; cannot be declared friend" msgstr "" @@ -30986,127 +32287,132 @@ msgstr "" #. the rest of the compiler does not correctly #. handle the initialization unless the member is #. static so we make it static below. -#: cp/decl.c:9250 +#: cp/decl.c:9332 #, gcc-internal-format msgid "ISO C++ forbids initialization of member %qD" msgstr "" -#: cp/decl.c:9252 +#: cp/decl.c:9334 #, gcc-internal-format msgid "making %qD static" msgstr "" -#: cp/decl.c:9317 +#: cp/decl.c:9368 +#, gcc-internal-format +msgid "non-static data member %qE declared %<constexpr%>" +msgstr "" + +#: cp/decl.c:9403 #, gcc-internal-format msgid "storage class %<auto%> invalid for function %qs" msgstr "" -#: cp/decl.c:9319 +#: cp/decl.c:9405 #, gcc-internal-format msgid "storage class %<register%> invalid for function %qs" msgstr "" -#: cp/decl.c:9321 +#: cp/decl.c:9407 #, gcc-internal-format msgid "storage class %<__thread%> invalid for function %qs" msgstr "" -#: cp/decl.c:9333 +#: cp/decl.c:9419 #, gcc-internal-format msgid "" "%<static%> specified invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:9337 +#: cp/decl.c:9423 #, gcc-internal-format msgid "" "%<inline%> specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:9344 +#: cp/decl.c:9430 #, gcc-internal-format msgid "%q#T is not a class or a namespace" msgstr "" -#: cp/decl.c:9352 +#: cp/decl.c:9438 #, gcc-internal-format msgid "virtual non-class function %qs" msgstr "" -#: cp/decl.c:9359 +#: cp/decl.c:9445 #, gcc-internal-format msgid "%qs defined in a non-class scope" msgstr "" -#: cp/decl.c:9392 +#: cp/decl.c:9478 #, gcc-internal-format msgid "cannot declare member function %qD to have static linkage" msgstr "" #. FIXME need arm citation -#: cp/decl.c:9399 +#: cp/decl.c:9485 #, gcc-internal-format msgid "cannot declare static function inside another function" msgstr "" -#: cp/decl.c:9429 +#: cp/decl.c:9515 #, gcc-internal-format msgid "" "%<static%> may not be used when defining (as opposed to declaring) a static " "data member" msgstr "" -#: cp/decl.c:9436 +#: cp/decl.c:9522 #, gcc-internal-format msgid "static member %qD declared %<register%>" msgstr "" -#: cp/decl.c:9442 +#: cp/decl.c:9528 #, gcc-internal-format msgid "cannot explicitly declare member %q#D to have extern linkage" msgstr "" -#: cp/decl.c:9456 +#: cp/decl.c:9542 #, gcc-internal-format msgid "%qs initialized and declared %<extern%>" msgstr "" -#: cp/decl.c:9460 +#: cp/decl.c:9546 #, gcc-internal-format msgid "%qs has both %<extern%> and initializer" msgstr "" -#: cp/decl.c:9586 +#: cp/decl.c:9673 #, gcc-internal-format msgid "default argument for %q#D has type %qT" msgstr "" -#: cp/decl.c:9589 +#: cp/decl.c:9676 #, gcc-internal-format msgid "default argument for parameter of type %qT has type %qT" msgstr "" -#: cp/decl.c:9605 +#: cp/decl.c:9692 #, gcc-internal-format msgid "default argument %qE uses local variable %qD" msgstr "" -#: cp/decl.c:9688 +#: cp/decl.c:9776 #, gcc-internal-format msgid "parameter %qD has Java class type" msgstr "" -#: cp/decl.c:9708 +#: cp/decl.c:9804 #, gcc-internal-format msgid "parameter %qD invalidly declared method type" msgstr "" -#: cp/decl.c:9732 +#: cp/decl.c:9828 #, gcc-internal-format msgid "parameter %qD includes %s to array of unknown bound %qT" msgstr "" -#: cp/decl.c:9747 +#: cp/decl.c:9843 #, gcc-internal-format msgid "parameter packs must be at the end of the parameter list" msgstr "" @@ -31126,139 +32432,139 @@ msgstr "" #. or implicitly defined), there's no need to worry about their #. existence. Theoretically, they should never even be #. instantiated, but that's hard to forestall. -#: cp/decl.c:9970 +#: cp/decl.c:10071 #, gcc-internal-format msgid "invalid constructor; you probably meant %<%T (const %T&)%>" msgstr "" -#: cp/decl.c:10092 +#: cp/decl.c:10193 #, gcc-internal-format msgid "%qD may not be declared within a namespace" msgstr "" -#: cp/decl.c:10097 +#: cp/decl.c:10198 #, gcc-internal-format msgid "%qD may not be declared as static" msgstr "" -#: cp/decl.c:10123 +#: cp/decl.c:10224 #, gcc-internal-format msgid "%qD must be a nonstatic member function" msgstr "" -#: cp/decl.c:10132 +#: cp/decl.c:10233 #, gcc-internal-format msgid "" "%qD must be either a non-static member function or a non-member function" msgstr "" -#: cp/decl.c:10154 +#: cp/decl.c:10255 #, gcc-internal-format msgid "%qD must have an argument of class or enumerated type" msgstr "" -#: cp/decl.c:10195 +#: cp/decl.c:10296 #, gcc-internal-format msgid "conversion to %s%s will never use a type conversion operator" msgstr "" #. 13.4.0.3 -#: cp/decl.c:10203 +#: cp/decl.c:10304 #, gcc-internal-format msgid "ISO C++ prohibits overloading operator ?:" msgstr "" -#: cp/decl.c:10208 +#: cp/decl.c:10309 #, gcc-internal-format msgid "%qD must not have variable number of arguments" msgstr "" -#: cp/decl.c:10259 +#: cp/decl.c:10360 #, gcc-internal-format msgid "postfix %qD must take %<int%> as its argument" msgstr "" -#: cp/decl.c:10262 +#: cp/decl.c:10363 #, gcc-internal-format msgid "postfix %qD must take %<int%> as its second argument" msgstr "" -#: cp/decl.c:10270 +#: cp/decl.c:10371 #, gcc-internal-format msgid "%qD must take either zero or one argument" msgstr "" -#: cp/decl.c:10272 +#: cp/decl.c:10373 #, gcc-internal-format msgid "%qD must take either one or two arguments" msgstr "" -#: cp/decl.c:10294 +#: cp/decl.c:10395 #, gcc-internal-format msgid "prefix %qD should return %qT" msgstr "" -#: cp/decl.c:10300 +#: cp/decl.c:10401 #, gcc-internal-format msgid "postfix %qD should return %qT" msgstr "" -#: cp/decl.c:10309 +#: cp/decl.c:10410 #, gcc-internal-format msgid "%qD must take %<void%>" msgstr "" -#: cp/decl.c:10311 cp/decl.c:10320 +#: cp/decl.c:10412 cp/decl.c:10421 #, gcc-internal-format msgid "%qD must take exactly one argument" msgstr "" -#: cp/decl.c:10322 +#: cp/decl.c:10423 #, gcc-internal-format msgid "%qD must take exactly two arguments" msgstr "" -#: cp/decl.c:10331 +#: cp/decl.c:10432 #, gcc-internal-format msgid "user-defined %qD always evaluates both arguments" msgstr "" -#: cp/decl.c:10345 +#: cp/decl.c:10446 #, gcc-internal-format msgid "%qD should return by value" msgstr "" -#: cp/decl.c:10356 cp/decl.c:10361 +#: cp/decl.c:10457 cp/decl.c:10462 #, gcc-internal-format msgid "%qD cannot have default arguments" msgstr "" -#: cp/decl.c:10419 +#: cp/decl.c:10520 #, gcc-internal-format msgid "using template type parameter %qT after %qs" msgstr "" -#: cp/decl.c:10434 +#: cp/decl.c:10535 #, gcc-internal-format msgid "using typedef-name %qD after %qs" msgstr "" -#: cp/decl.c:10435 +#: cp/decl.c:10536 #, gcc-internal-format msgid "%q+D has a previous declaration here" msgstr "" -#: cp/decl.c:10443 +#: cp/decl.c:10544 #, gcc-internal-format msgid "%qT referred to as %qs" msgstr "" -#: cp/decl.c:10444 cp/decl.c:10451 +#: cp/decl.c:10545 cp/decl.c:10552 #, gcc-internal-format msgid "%q+T has a previous declaration here" msgstr "" -#: cp/decl.c:10450 +#: cp/decl.c:10551 #, gcc-internal-format msgid "%qT referred to as enum" msgstr "" @@ -31270,77 +32576,78 @@ msgstr "" #. void f(class C); // No template header here #. #. then the required template argument is missing. -#: cp/decl.c:10465 +#: cp/decl.c:10566 #, gcc-internal-format msgid "template argument required for %<%s %T%>" msgstr "" -#: cp/decl.c:10513 cp/name-lookup.c:2807 +#: cp/decl.c:10614 cp/name-lookup.c:2818 #, gcc-internal-format msgid "%qD has the same name as the class in which it is declared" msgstr "" -#: cp/decl.c:10543 cp/name-lookup.c:2315 +#: cp/decl.c:10644 cp/name-lookup.c:2323 cp/parser.c:4202 cp/parser.c:15645 +#: cp/parser.c:17996 #, gcc-internal-format msgid "reference to %qD is ambiguous" msgstr "" -#: cp/decl.c:10657 +#: cp/decl.c:10758 #, gcc-internal-format msgid "use of enum %q#D without previous declaration" msgstr "" -#: cp/decl.c:10678 +#: cp/decl.c:10779 #, gcc-internal-format msgid "redeclaration of %qT as a non-template" msgstr "" -#: cp/decl.c:10679 +#: cp/decl.c:10780 #, gcc-internal-format msgid "previous declaration %q+D" msgstr "" -#: cp/decl.c:10793 +#: cp/decl.c:10894 #, gcc-internal-format msgid "derived union %qT invalid" msgstr "" -#: cp/decl.c:10802 +#: cp/decl.c:10903 #, gcc-internal-format msgid "Java class %qT cannot have multiple bases" msgstr "" -#: cp/decl.c:10813 +#: cp/decl.c:10914 #, gcc-internal-format msgid "Java class %qT cannot have virtual bases" msgstr "" -#: cp/decl.c:10833 +#: cp/decl.c:10934 #, gcc-internal-format msgid "base type %qT fails to be a struct or class type" msgstr "" -#: cp/decl.c:10866 +#: cp/decl.c:10967 #, gcc-internal-format msgid "recursive type %qT undefined" msgstr "" -#: cp/decl.c:10868 +#: cp/decl.c:10969 #, gcc-internal-format msgid "duplicate base type %qT invalid" msgstr "" -#: cp/decl.c:10952 +#: cp/decl.c:11053 #, gcc-internal-format msgid "multiple definition of %q#T" msgstr "" -#: cp/decl.c:10953 +#: cp/decl.c:11055 #, gcc-internal-format -msgid "%Jprevious definition here" +msgid "previous definition here" msgstr "" -#: cp/decl.c:11000 +#: cp/decl.c:11102 #, gcc-internal-format msgid "underlying type %<%T%> of %<%T%> must be an integral type" msgstr "" @@ -31349,210 +32656,220 @@ msgstr "" #. #. IF no integral type can represent all the enumerator values, the #. enumeration is ill-formed. -#: cp/decl.c:11132 +#: cp/decl.c:11236 #, gcc-internal-format msgid "no integral type can represent all of the enumerator values for %qT" msgstr "" -#: cp/decl.c:11263 +#: cp/decl.c:11368 #, gcc-internal-format msgid "enumerator value for %qD is not an integer constant" msgstr "" -#: cp/decl.c:11295 +#: cp/decl.c:11400 #, gcc-internal-format msgid "overflow in enumeration values at %qD" msgstr "" -#: cp/decl.c:11315 +#: cp/decl.c:11420 #, gcc-internal-format msgid "enumerator value %E is too large for underlying type %<%T%>" msgstr "" -#: cp/decl.c:11412 +#: cp/decl.c:11521 #, gcc-internal-format msgid "return type %q#T is incomplete" msgstr "" -#: cp/decl.c:11414 +#: cp/decl.c:11523 #, gcc-internal-format msgid "return type has Java class type %q#T" msgstr "" -#: cp/decl.c:11539 cp/typeck.c:6977 +#: cp/decl.c:11648 cp/typeck.c:7142 #, gcc-internal-format msgid "%<operator=%> should return a reference to %<*this%>" msgstr "" -#: cp/decl.c:11854 +#: cp/decl.c:11743 +#, gcc-internal-format +msgid "no previous declaration for %q+D" +msgstr "" + +#: cp/decl.c:11964 #, gcc-internal-format msgid "invalid function declaration" msgstr "" -#: cp/decl.c:11938 +#: cp/decl.c:12048 #, gcc-internal-format msgid "parameter %qD declared void" msgstr "" -#: cp/decl.c:12440 +#: cp/decl.c:12547 #, gcc-internal-format msgid "invalid member function declaration" msgstr "" -#: cp/decl.c:12455 +#: cp/decl.c:12562 #, gcc-internal-format msgid "%qD is already defined in class %qT" msgstr "" -#: cp/decl.c:12702 +#: cp/decl.c:12746 #, gcc-internal-format msgid "static member function %q#D declared with type qualifiers" msgstr "" -#: cp/decl2.c:270 +#: cp/decl2.c:277 #, gcc-internal-format msgid "name missing for member function" msgstr "" -#: cp/decl2.c:341 cp/decl2.c:355 +#: cp/decl2.c:348 cp/decl2.c:362 #, gcc-internal-format msgid "ambiguous conversion for array subscript" msgstr "" -#: cp/decl2.c:349 +#: cp/decl2.c:356 #, gcc-internal-format msgid "invalid types %<%T[%T]%> for array subscript" msgstr "" -#: cp/decl2.c:392 +#: cp/decl2.c:399 #, gcc-internal-format msgid "deleting array %q#D" msgstr "" -#: cp/decl2.c:398 +#: cp/decl2.c:405 #, gcc-internal-format msgid "type %q#T argument given to %<delete%>, expected pointer" msgstr "" -#: cp/decl2.c:410 +#: cp/decl2.c:417 #, gcc-internal-format msgid "" "cannot delete a function. Only pointer-to-objects are valid arguments to %" "<delete%>" msgstr "" -#: cp/decl2.c:418 +#: cp/decl2.c:425 #, gcc-internal-format msgid "deleting %qT is undefined" msgstr "" -#: cp/decl2.c:461 cp/pt.c:3849 +#: cp/decl2.c:468 cp/pt.c:4210 #, gcc-internal-format msgid "template declaration of %q#D" msgstr "" -#: cp/decl2.c:513 +#: cp/decl2.c:520 #, gcc-internal-format msgid "Java method %qD has non-Java return type %qT" msgstr "" -#: cp/decl2.c:530 +#: cp/decl2.c:537 #, gcc-internal-format msgid "Java method %qD has non-Java parameter type %qT" msgstr "" -#: cp/decl2.c:579 +#: cp/decl2.c:586 #, gcc-internal-format msgid "" "template parameter lists provided don't match the template parameters of %qD" msgstr "" -#: cp/decl2.c:647 +#: cp/decl2.c:654 #, gcc-internal-format msgid "prototype for %q#D does not match any in class %qT" msgstr "" -#: cp/decl2.c:727 +#: cp/decl2.c:730 #, gcc-internal-format msgid "local class %q#T shall not have static data member %q#D" msgstr "" -#: cp/decl2.c:735 +#: cp/decl2.c:738 #, gcc-internal-format msgid "initializer invalid for static member with constructor" msgstr "" -#: cp/decl2.c:738 +#: cp/decl2.c:741 #, gcc-internal-format msgid "(an out of class initialization is required)" msgstr "" -#: cp/decl2.c:798 +#: cp/decl2.c:802 +#, gcc-internal-format +msgid "explicit template argument list not allowed" +msgstr "" + +#: cp/decl2.c:808 #, gcc-internal-format msgid "member %qD conflicts with virtual function table field name" msgstr "" -#: cp/decl2.c:831 +#: cp/decl2.c:844 #, gcc-internal-format msgid "%qD is already defined in %qT" msgstr "" -#: cp/decl2.c:869 +#: cp/decl2.c:882 #, gcc-internal-format msgid "initializer specified for static member function %qD" msgstr "" -#: cp/decl2.c:892 +#: cp/decl2.c:905 #, gcc-internal-format msgid "field initializer is not constant" msgstr "" -#: cp/decl2.c:919 +#: cp/decl2.c:932 #, gcc-internal-format msgid "%<asm%> specifiers are not permitted on non-static data members" msgstr "" -#: cp/decl2.c:971 +#: cp/decl2.c:984 #, gcc-internal-format msgid "bit-field %qD with non-integral type" msgstr "" -#: cp/decl2.c:977 +#: cp/decl2.c:990 #, gcc-internal-format msgid "cannot declare %qD to be a bit-field type" msgstr "" -#: cp/decl2.c:987 +#: cp/decl2.c:1000 #, gcc-internal-format msgid "cannot declare bit-field %qD with function type" msgstr "" -#: cp/decl2.c:994 +#: cp/decl2.c:1007 #, gcc-internal-format msgid "%qD is already defined in the class %qT" msgstr "" -#: cp/decl2.c:1001 +#: cp/decl2.c:1014 #, gcc-internal-format msgid "static member %qD cannot be a bit-field" msgstr "" -#: cp/decl2.c:1256 +#: cp/decl2.c:1269 #, gcc-internal-format msgid "anonymous struct not inside named type" msgstr "" -#: cp/decl2.c:1340 +#: cp/decl2.c:1354 #, gcc-internal-format msgid "namespace-scope anonymous aggregates must be static" msgstr "" -#: cp/decl2.c:1349 +#: cp/decl2.c:1363 #, gcc-internal-format msgid "anonymous union with no members" msgstr "" -#: cp/decl2.c:1386 +#: cp/decl2.c:1400 #, gcc-internal-format msgid "%<operator new%> must return type %qT" msgstr "" @@ -31561,62 +32878,78 @@ msgstr "" #. #. The first parameter shall not have an associated default #. argument. -#: cp/decl2.c:1397 +#: cp/decl2.c:1411 #, gcc-internal-format msgid "the first parameter of %<operator new%> cannot have a default argument" msgstr "" -#: cp/decl2.c:1413 +#: cp/decl2.c:1427 #, gcc-internal-format msgid "%<operator new%> takes type %<size_t%> (%qT) as first parameter" msgstr "" -#: cp/decl2.c:1442 +#: cp/decl2.c:1456 #, gcc-internal-format msgid "%<operator delete%> must return type %qT" msgstr "" -#: cp/decl2.c:1451 +#: cp/decl2.c:1465 #, gcc-internal-format msgid "%<operator delete%> takes type %qT as first parameter" msgstr "" -#: cp/decl2.c:2142 +#: cp/decl2.c:2186 #, gcc-internal-format msgid "%qT has a field %qD whose type uses the anonymous namespace" msgstr "" -#: cp/decl2.c:2149 +#: cp/decl2.c:2193 #, gcc-internal-format msgid "%qT declared with greater visibility than the type of its field %qD" msgstr "" -#: cp/decl2.c:2162 +#: cp/decl2.c:2206 #, gcc-internal-format msgid "%qT has a base %qT whose type uses the anonymous namespace" msgstr "" -#: cp/decl2.c:2168 +#: cp/decl2.c:2212 #, gcc-internal-format msgid "%qT declared with greater visibility than its base %qT" msgstr "" -#: cp/decl2.c:3602 +#: cp/decl2.c:3427 +#, gcc-internal-format +msgid "%q+#D, declared using anonymous type, is used but never defined" +msgstr "" + +#: cp/decl2.c:3430 +#, gcc-internal-format +msgid "" +"%q+#D does not refer to the unqualified type, so it is not used for linkage" +msgstr "" + +#: cp/decl2.c:3434 +#, gcc-internal-format +msgid "%q+#D, declared using local type %qT, is used but never defined" +msgstr "" + +#: cp/decl2.c:3714 #, gcc-internal-format msgid "inline function %q+D used but never defined" msgstr "" -#: cp/decl2.c:3751 +#: cp/decl2.c:3880 #, gcc-internal-format msgid "default argument missing for parameter %P of %q+#D" msgstr "" -#: cp/decl2.c:3800 cp/search.c:1912 +#: cp/decl2.c:3931 cp/search.c:1912 #, gcc-internal-format msgid "deleted function %q+D" msgstr "" -#: cp/decl2.c:3801 +#: cp/decl2.c:3932 #, gcc-internal-format msgid "used here" msgstr "" @@ -31624,67 +32957,67 @@ msgstr "" #. We really want to suppress this warning in system headers, #. because libstdc++ uses variadic templates even when we aren't #. in C++0x mode. -#: cp/error.c:2825 +#: cp/error.c:2885 #, gcc-internal-format msgid "%s only available with -std=c++0x or -std=gnu++0x" msgstr "" #. Can't throw a reference. -#: cp/except.c:286 +#: cp/except.c:277 #, gcc-internal-format msgid "type %qT is disallowed in Java %<throw%> or %<catch%>" msgstr "" -#: cp/except.c:297 +#: cp/except.c:288 #, gcc-internal-format msgid "call to Java %<catch%> or %<throw%> with %<jthrowable%> undefined" msgstr "" #. Thrown object must be a Throwable. -#: cp/except.c:304 +#: cp/except.c:295 #, gcc-internal-format msgid "type %qT is not derived from %<java::lang::Throwable%>" msgstr "" -#: cp/except.c:368 +#: cp/except.c:357 #, gcc-internal-format msgid "mixing C++ and Java catches in a single translation unit" msgstr "" -#: cp/except.c:639 +#: cp/except.c:629 #, gcc-internal-format msgid "throwing NULL, which has integral, not pointer type" msgstr "" -#: cp/except.c:662 cp/init.c:1895 +#: cp/except.c:652 cp/init.c:1886 #, gcc-internal-format msgid "%qD should never be overloaded" msgstr "" -#: cp/except.c:759 +#: cp/except.c:750 #, gcc-internal-format msgid " in thrown expression" msgstr "" -#: cp/except.c:915 +#: cp/except.c:906 #, gcc-internal-format msgid "" "expression %qE of abstract class type %qT cannot be used in throw-expression" msgstr "" -#: cp/except.c:1000 +#: cp/except.c:992 #, gcc-internal-format -msgid "%Hexception of type %qT will be caught" +msgid "exception of type %qT will be caught" msgstr "" -#: cp/except.c:1002 +#: cp/except.c:995 #, gcc-internal-format -msgid "%H by earlier handler for %qT" +msgid " by earlier handler for %qT" msgstr "" -#: cp/except.c:1032 +#: cp/except.c:1024 #, gcc-internal-format -msgid "%H%<...%> handler must be the last handler for its try block" +msgid "%<...%> handler must be the last handler for its try block" msgstr "" #: cp/friend.c:156 @@ -31773,238 +33106,242 @@ msgid "" "already been declared and add <> after the function name here) " msgstr "" -#: cp/init.c:351 +#: cp/init.c:352 #, gcc-internal-format msgid "value-initialization of reference" msgstr "" -#: cp/init.c:429 +#: cp/init.c:431 #, gcc-internal-format -msgid "%J%qD should be initialized in the member initialization list" +msgid "%qD should be initialized in the member initialization list" msgstr "" -#: cp/init.c:454 +#: cp/init.c:457 #, gcc-internal-format -msgid "%Jvalue-initialization of %q#D, which has reference type" +msgid "value-initialization of %q#D, which has reference type" msgstr "" -#. TYPE_NEEDS_CONSTRUCTING can be set just because we have a -#. vtable; still give this diagnostic. -#: cp/init.c:495 cp/init.c:510 +#: cp/init.c:498 cp/init.c:515 #, gcc-internal-format -msgid "%Juninitialized member %qD with %<const%> type %qT" +msgid "uninitialized member %qD with %<const%> type %qT" msgstr "" -#: cp/init.c:507 +#: cp/init.c:511 #, gcc-internal-format -msgid "%Juninitialized reference member %qD" +msgid "uninitialized reference member %qD" msgstr "" -#: cp/init.c:655 +#: cp/init.c:660 #, gcc-internal-format msgid "%q+D will be initialized after" msgstr "" -#: cp/init.c:658 +#: cp/init.c:663 #, gcc-internal-format msgid "base %qT will be initialized after" msgstr "" -#: cp/init.c:661 +#: cp/init.c:666 #, gcc-internal-format msgid " %q+#D" msgstr "" -#: cp/init.c:663 +#: cp/init.c:668 #, gcc-internal-format msgid " base %qT" msgstr "" -#: cp/init.c:664 +#: cp/init.c:670 #, gcc-internal-format -msgid "%J when initialized here" +msgid " when initialized here" msgstr "" -#: cp/init.c:680 +#: cp/init.c:687 #, gcc-internal-format -msgid "%Jmultiple initializations given for %qD" +msgid "multiple initializations given for %qD" msgstr "" -#: cp/init.c:683 +#: cp/init.c:691 #, gcc-internal-format -msgid "%Jmultiple initializations given for base %qT" +msgid "multiple initializations given for base %qT" msgstr "" -#: cp/init.c:750 +#: cp/init.c:759 #, gcc-internal-format -msgid "%Jinitializations for multiple members of %qT" +msgid "initializations for multiple members of %qT" msgstr "" -#: cp/init.c:813 +#: cp/init.c:823 #, gcc-internal-format msgid "" -"%Jbase class %q#T should be explicitly initialized in the copy constructor" +"base class %q#T should be explicitly initialized in the copy constructor" msgstr "" -#: cp/init.c:1036 cp/init.c:1055 +#: cp/init.c:1047 cp/init.c:1066 #, gcc-internal-format msgid "class %qT does not have any field named %qD" msgstr "" -#: cp/init.c:1042 +#: cp/init.c:1053 #, gcc-internal-format msgid "" "%q#D is a static data member; it can only be initialized at its definition" msgstr "" -#: cp/init.c:1049 +#: cp/init.c:1060 #, gcc-internal-format msgid "%q#D is not a non-static data member of %qT" msgstr "" -#: cp/init.c:1088 +#: cp/init.c:1099 #, gcc-internal-format msgid "unnamed initializer for %qT, which has no base classes" msgstr "" -#: cp/init.c:1096 +#: cp/init.c:1107 #, gcc-internal-format msgid "unnamed initializer for %qT, which uses multiple inheritance" msgstr "" -#: cp/init.c:1142 +#: cp/init.c:1153 #, gcc-internal-format msgid "%qD is both a direct base and an indirect virtual base" msgstr "" -#: cp/init.c:1150 +#: cp/init.c:1161 #, gcc-internal-format msgid "type %qT is not a direct or virtual base of %qT" msgstr "" -#: cp/init.c:1153 +#: cp/init.c:1164 #, gcc-internal-format msgid "type %qT is not a direct base of %qT" msgstr "" -#: cp/init.c:1234 +#: cp/init.c:1245 #, gcc-internal-format msgid "bad array initializer" msgstr "" -#: cp/init.c:1440 cp/semantics.c:2536 +#: cp/init.c:1456 cp/semantics.c:2561 #, gcc-internal-format msgid "%qT is not a class type" msgstr "" -#: cp/init.c:1494 +#: cp/init.c:1510 #, gcc-internal-format msgid "incomplete type %qT does not have member %qD" msgstr "" -#: cp/init.c:1507 +#: cp/init.c:1523 #, gcc-internal-format msgid "invalid pointer to bit-field %qD" msgstr "" -#: cp/init.c:1585 +#: cp/init.c:1601 #, gcc-internal-format msgid "invalid use of non-static member function %qD" msgstr "" -#: cp/init.c:1591 +#: cp/init.c:1607 #, gcc-internal-format msgid "invalid use of non-static data member %qD" msgstr "" -#: cp/init.c:1851 +#: cp/init.c:1833 #, gcc-internal-format msgid "invalid type %<void%> for new" msgstr "" -#: cp/init.c:1864 +#: cp/init.c:1846 #, gcc-internal-format msgid "uninitialized const in %<new%> of %q#T" msgstr "" -#: cp/init.c:1889 +#: cp/init.c:1880 #, gcc-internal-format msgid "call to Java constructor with %qs undefined" msgstr "" -#: cp/init.c:1907 +#: cp/init.c:1898 #, gcc-internal-format msgid "Java class %q#T object allocated using placement new" msgstr "" -#: cp/init.c:1937 +#: cp/init.c:1928 #, gcc-internal-format msgid "no suitable %qD found in class %qT" msgstr "" -#: cp/init.c:1944 +#: cp/init.c:1935 #, gcc-internal-format msgid "request for member %qD is ambiguous" msgstr "" -#: cp/init.c:2123 +#: cp/init.c:2125 +#, gcc-internal-format +msgid "" +"non-constant array size in new, unable to verify length of initializer-list" +msgstr "" + +#: cp/init.c:2134 #, gcc-internal-format msgid "ISO C++ forbids initialization in array new" msgstr "" -#: cp/init.c:2347 +#: cp/init.c:2360 #, gcc-internal-format msgid "size in array new must have integral type" msgstr "" -#: cp/init.c:2360 +#: cp/init.c:2373 #, gcc-internal-format msgid "new cannot be applied to a reference type" msgstr "" -#: cp/init.c:2369 +#: cp/init.c:2382 #, gcc-internal-format msgid "new cannot be applied to a function type" msgstr "" -#: cp/init.c:2408 +#: cp/init.c:2426 #, gcc-internal-format msgid "call to Java constructor, while %<jclass%> undefined" msgstr "" -#: cp/init.c:2426 +#: cp/init.c:2444 #, gcc-internal-format msgid "can't find %<class$%> in %qT" msgstr "" -#: cp/init.c:2801 +#: cp/init.c:2833 #, gcc-internal-format msgid "initializer ends prematurely" msgstr "" -#: cp/init.c:2859 +#: cp/init.c:2891 #, gcc-internal-format msgid "cannot initialize multi-dimensional array with initializer" msgstr "" -#: cp/init.c:3008 +#: cp/init.c:3040 #, gcc-internal-format msgid "possible problem detected in invocation of delete operator:" msgstr "" -#: cp/init.c:3012 +#: cp/init.c:3044 #, gcc-internal-format msgid "" "neither the destructor nor the class-specific operator delete will be " "called, even if they are declared when the class is defined." msgstr "" -#: cp/init.c:3034 +#: cp/init.c:3066 #, gcc-internal-format msgid "unknown array size in delete" msgstr "" -#: cp/init.c:3288 +#: cp/init.c:3321 #, gcc-internal-format msgid "type to vector delete is neither pointer or array type" msgstr "" @@ -32054,46 +33391,46 @@ msgstr "" #. Note that we have the exact wording of the following message in #. the manual (trouble.texi, node "Name lookup"), so they need to #. be kept in synch. -#: cp/lex.c:488 +#: cp/lex.c:489 #, gcc-internal-format msgid "" "there are no arguments to %qD that depend on a template parameter, so a " "declaration of %qD must be available" msgstr "" -#: cp/lex.c:497 +#: cp/lex.c:498 #, gcc-internal-format msgid "" "(if you use %<-fpermissive%>, G++ will accept your code, but allowing the " "use of an undeclared name is deprecated)" msgstr "" -#: cp/mangle.c:1689 +#: cp/mangle.c:1897 #, gcc-internal-format msgid "mangling typeof, use decltype instead" msgstr "" -#: cp/mangle.c:1902 +#: cp/mangle.c:2116 #, gcc-internal-format msgid "mangling unknown fixed point type" msgstr "" -#: cp/mangle.c:2331 +#: cp/mangle.c:2544 #, gcc-internal-format msgid "mangling %C" msgstr "" -#: cp/mangle.c:2386 +#: cp/mangle.c:2599 #, gcc-internal-format msgid "mangling new-expression" msgstr "" -#: cp/mangle.c:2406 +#: cp/mangle.c:2619 #, gcc-internal-format msgid "omitted middle operand to %<?:%> operand cannot be mangled" msgstr "" -#: cp/mangle.c:2721 +#: cp/mangle.c:2932 #, gcc-internal-format msgid "the mangled name of %qD will change in a future version of GCC" msgstr "" @@ -32103,29 +33440,29 @@ msgstr "" msgid "generic thunk code fails for method %q#D which uses %<...%>" msgstr "" -#: cp/method.c:697 +#: cp/method.c:704 #, gcc-internal-format msgid "non-static const member %q#D, can't use default assignment operator" msgstr "" -#: cp/method.c:703 +#: cp/method.c:710 #, gcc-internal-format msgid "non-static reference member %q#D, can't use default assignment operator" msgstr "" -#: cp/method.c:816 +#: cp/method.c:823 #, gcc-internal-format msgid "synthesized method %qD first required here " msgstr "" -#: cp/method.c:1159 +#: cp/method.c:1172 #, gcc-internal-format msgid "" "vtable layout for class %qT may not be ABI-compliantand may change in a " "future version of GCC due to implicit virtual destructor" msgstr "" -#: cp/name-lookup.c:733 +#: cp/name-lookup.c:728 #, gcc-internal-format msgid "redeclaration of %<wchar_t%> as %qT" msgstr "" @@ -32136,58 +33473,58 @@ msgstr "" #. [basic.start.main] #. #. This function shall not be overloaded. -#: cp/name-lookup.c:763 +#: cp/name-lookup.c:758 #, gcc-internal-format msgid "invalid redeclaration of %q+D" msgstr "" -#: cp/name-lookup.c:764 +#: cp/name-lookup.c:759 #, gcc-internal-format msgid "as %qD" msgstr "" -#: cp/name-lookup.c:810 cp/name-lookup.c:821 +#: cp/name-lookup.c:805 cp/name-lookup.c:816 #, gcc-internal-format msgid "declaration of %q#D with C language linkage" msgstr "" -#: cp/name-lookup.c:814 +#: cp/name-lookup.c:809 #, gcc-internal-format msgid "due to different exception specifications" msgstr "" -#: cp/name-lookup.c:905 +#: cp/name-lookup.c:900 #, gcc-internal-format msgid "type mismatch with previous external decl of %q#D" msgstr "" -#: cp/name-lookup.c:906 +#: cp/name-lookup.c:901 #, gcc-internal-format msgid "previous external decl of %q+#D" msgstr "" -#: cp/name-lookup.c:997 +#: cp/name-lookup.c:992 #, gcc-internal-format msgid "extern declaration of %q#D doesn't match" msgstr "" -#: cp/name-lookup.c:998 +#: cp/name-lookup.c:993 #, gcc-internal-format msgid "global declaration %q+#D" msgstr "" -#: cp/name-lookup.c:1040 cp/name-lookup.c:1047 +#: cp/name-lookup.c:1035 cp/name-lookup.c:1043 #, gcc-internal-format msgid "declaration of %q#D shadows a parameter" msgstr "" #. Location of previous decl is not useful in this case. -#: cp/name-lookup.c:1072 +#: cp/name-lookup.c:1069 #, gcc-internal-format msgid "declaration of %qD shadows a member of 'this'" msgstr "" -#: cp/name-lookup.c:1078 +#: cp/name-lookup.c:1076 #, gcc-internal-format msgid "declaration of %qD shadows a previous local" msgstr "" @@ -32227,776 +33564,710 @@ msgstr "" msgid " using obsolete binding at %q+D" msgstr "" -#: cp/name-lookup.c:1246 cp/parser.c:10152 +#: cp/name-lookup.c:1246 cp/parser.c:10818 #, gcc-internal-format msgid "(if you use %<-fpermissive%> G++ will accept your code)" msgstr "" -#: cp/name-lookup.c:1302 +#: cp/name-lookup.c:1301 #, gcc-internal-format msgid "%s %s(%E) %p %d\n" msgstr "" -#: cp/name-lookup.c:1305 +#: cp/name-lookup.c:1304 #, gcc-internal-format msgid "%s %s %p %d\n" msgstr "" -#: cp/name-lookup.c:1433 -#, gcc-internal-format -msgid "XXX is_class_level != (current_scope == class_scope)\n" -msgstr "" - -#: cp/name-lookup.c:2028 +#: cp/name-lookup.c:2036 #, gcc-internal-format msgid "%q#D hides constructor for %q#T" msgstr "" -#: cp/name-lookup.c:2045 +#: cp/name-lookup.c:2053 #, gcc-internal-format msgid "%q#D conflicts with previous using declaration %q#D" msgstr "" -#: cp/name-lookup.c:2068 +#: cp/name-lookup.c:2076 #, gcc-internal-format msgid "previous non-function declaration %q+#D" msgstr "" -#: cp/name-lookup.c:2069 +#: cp/name-lookup.c:2077 #, gcc-internal-format msgid "conflicts with function declaration %q#D" msgstr "" #. It's a nested name with template parameter dependent scope. #. This can only be using-declaration for class member. -#: cp/name-lookup.c:2147 cp/name-lookup.c:2172 +#: cp/name-lookup.c:2155 cp/name-lookup.c:2180 #, gcc-internal-format msgid "%qT is not a namespace" msgstr "" #. 7.3.3/5 #. A using-declaration shall not name a template-id. -#: cp/name-lookup.c:2157 +#: cp/name-lookup.c:2165 #, gcc-internal-format msgid "a using-declaration cannot specify a template-id. Try %<using %D%>" msgstr "" -#: cp/name-lookup.c:2164 +#: cp/name-lookup.c:2172 #, gcc-internal-format msgid "namespace %qD not allowed in using-declaration" msgstr "" -#: cp/name-lookup.c:2200 +#: cp/name-lookup.c:2208 #, gcc-internal-format msgid "%qD not declared" msgstr "" -#: cp/name-lookup.c:2236 cp/name-lookup.c:2273 cp/name-lookup.c:2307 -#: cp/name-lookup.c:2322 +#: cp/name-lookup.c:2244 cp/name-lookup.c:2281 cp/name-lookup.c:2315 +#: cp/name-lookup.c:2330 #, gcc-internal-format msgid "%qD is already declared in this scope" msgstr "" -#: cp/name-lookup.c:2926 +#: cp/name-lookup.c:2937 #, gcc-internal-format msgid "using-declaration for non-member at class scope" msgstr "" -#: cp/name-lookup.c:2933 +#: cp/name-lookup.c:2944 #, gcc-internal-format msgid "%<%T::%D%> names destructor" msgstr "" -#: cp/name-lookup.c:2938 +#: cp/name-lookup.c:2949 #, gcc-internal-format msgid "%<%T::%D%> names constructor" msgstr "" -#: cp/name-lookup.c:2943 +#: cp/name-lookup.c:2954 #, gcc-internal-format msgid "%<%T::%D%> names constructor in %qT" msgstr "" -#: cp/name-lookup.c:2993 +#: cp/name-lookup.c:3004 #, gcc-internal-format msgid "no members matching %<%T::%D%> in %q#T" msgstr "" -#: cp/name-lookup.c:3061 +#: cp/name-lookup.c:3072 #, gcc-internal-format msgid "declaration of %qD not in a namespace surrounding %qD" msgstr "" -#: cp/name-lookup.c:3069 +#: cp/name-lookup.c:3080 #, gcc-internal-format msgid "explicit qualification in declaration of %qD" msgstr "" -#: cp/name-lookup.c:3112 +#: cp/name-lookup.c:3123 #, gcc-internal-format msgid "%qD should have been declared inside %qD" msgstr "" -#: cp/name-lookup.c:3157 +#: cp/name-lookup.c:3168 #, gcc-internal-format msgid "%qD attribute requires a single NTBS argument" msgstr "" -#: cp/name-lookup.c:3164 +#: cp/name-lookup.c:3175 #, gcc-internal-format msgid "" "%qD attribute is meaningless since members of the anonymous namespace get " "local symbols" msgstr "" -#: cp/name-lookup.c:3173 cp/name-lookup.c:3543 +#: cp/name-lookup.c:3184 cp/name-lookup.c:3554 #, gcc-internal-format msgid "%qD attribute directive ignored" msgstr "" -#: cp/name-lookup.c:3218 +#: cp/name-lookup.c:3229 #, gcc-internal-format msgid "namespace alias %qD not allowed here, assuming %qD" msgstr "" -#: cp/name-lookup.c:3531 +#: cp/name-lookup.c:3542 #, gcc-internal-format msgid "strong using only meaningful at namespace scope" msgstr "" -#: cp/name-lookup.c:3535 +#: cp/name-lookup.c:3546 #, gcc-internal-format msgid "current namespace %qD does not enclose strongly used namespace %qD" msgstr "" -#: cp/name-lookup.c:4472 +#: cp/name-lookup.c:4516 #, gcc-internal-format msgid "%q+D is not a function," msgstr "" -#: cp/name-lookup.c:4473 +#: cp/name-lookup.c:4517 #, gcc-internal-format msgid " conflict with %q+D" msgstr "" -#: cp/name-lookup.c:4918 +#: cp/name-lookup.c:4977 #, gcc-internal-format msgid "argument dependent lookup finds %q+D" msgstr "" -#: cp/name-lookup.c:5359 +#: cp/name-lookup.c:5422 #, gcc-internal-format msgid "XXX entering pop_everything ()\n" msgstr "" -#: cp/name-lookup.c:5368 +#: cp/name-lookup.c:5431 #, gcc-internal-format msgid "XXX leaving pop_everything ()\n" msgstr "" -#: cp/parser.c:431 +#: cp/parser.c:435 #, gcc-internal-format msgid "identifier %qE will become a keyword in C++0x" msgstr "" -#: cp/parser.c:2078 +#: cp/parser.c:2098 #, gcc-internal-format -msgid "%H%<#pragma%> is not allowed here" +msgid "%<#pragma%> is not allowed here" msgstr "" -#: cp/parser.c:2109 +#: cp/parser.c:2129 #, gcc-internal-format -msgid "%H%<%E::%E%> has not been declared" +msgid "%<%E::%E%> has not been declared" msgstr "" -#: cp/parser.c:2112 +#: cp/parser.c:2132 #, gcc-internal-format -msgid "%H%<::%E%> has not been declared" +msgid "%<::%E%> has not been declared" msgstr "" -#: cp/parser.c:2115 +#: cp/parser.c:2135 #, gcc-internal-format -msgid "%Hrequest for member %qE in non-class type %qT" +msgid "request for member %qE in non-class type %qT" msgstr "" -#: cp/parser.c:2118 +#: cp/parser.c:2138 #, gcc-internal-format -msgid "%H%<%T::%E%> has not been declared" +msgid "%<%T::%E%> has not been declared" msgstr "" -#: cp/parser.c:2121 +#: cp/parser.c:2141 #, gcc-internal-format -msgid "%H%qE has not been declared" +msgid "%qE has not been declared" msgstr "" -#: cp/parser.c:2124 +#: cp/parser.c:2144 #, gcc-internal-format -msgid "%H%<%E::%E%> %s" +msgid "%<%E::%E%> %s" msgstr "" -#: cp/parser.c:2126 +#: cp/parser.c:2146 #, gcc-internal-format -msgid "%H%<::%E%> %s" +msgid "%<::%E%> %s" msgstr "" -#: cp/parser.c:2128 +#: cp/parser.c:2148 #, gcc-internal-format -msgid "%H%qE %s" +msgid "%qE %s" msgstr "" -#: cp/parser.c:2163 -#, gcc-internal-format -msgid "%H%<long long long%> is too long for GCC" -msgstr "" - -#: cp/parser.c:2166 +#: cp/parser.c:2186 #, gcc-internal-format msgid "ISO C++ 1998 does not support %<long long%>" msgstr "" -#: cp/parser.c:2186 +#: cp/parser.c:2207 #, gcc-internal-format -msgid "%Hduplicate %qs" +msgid "duplicate %qs" msgstr "" -#: cp/parser.c:2230 +#: cp/parser.c:2252 #, gcc-internal-format -msgid "%Hnew types may not be defined in a return type" +msgid "new types may not be defined in a return type" msgstr "" -#: cp/parser.c:2232 +#: cp/parser.c:2254 #, gcc-internal-format msgid "(perhaps a semicolon is missing after the definition of %qT)" msgstr "" -#: cp/parser.c:2252 +#: cp/parser.c:2274 cp/parser.c:4248 cp/pt.c:6030 #, gcc-internal-format -msgid "%H%qT is not a template" +msgid "%qT is not a template" msgstr "" -#: cp/parser.c:2254 +#: cp/parser.c:2276 #, gcc-internal-format -msgid "%H%qE is not a template" +msgid "%qE is not a template" msgstr "" -#: cp/parser.c:2256 +#: cp/parser.c:2278 #, gcc-internal-format -msgid "%Hinvalid template-id" +msgid "invalid template-id" msgstr "" -#: cp/parser.c:2318 +#: cp/parser.c:2341 #, gcc-internal-format -msgid "%Hinvalid use of template-name %qE without an argument list" +msgid "invalid use of template-name %qE without an argument list" msgstr "" -#: cp/parser.c:2321 +#: cp/parser.c:2344 #, gcc-internal-format -msgid "%Hinvalid use of destructor %qD as a type" +msgid "invalid use of destructor %qD as a type" msgstr "" #. Something like 'unsigned A a;' -#: cp/parser.c:2324 +#: cp/parser.c:2347 #, gcc-internal-format -msgid "%Hinvalid combination of multiple type-specifiers" +msgid "invalid combination of multiple type-specifiers" msgstr "" #. Issue an error message. -#: cp/parser.c:2329 +#: cp/parser.c:2351 #, gcc-internal-format -msgid "%H%qE does not name a type" +msgid "%qE does not name a type" msgstr "" -#: cp/parser.c:2362 +#: cp/parser.c:2384 #, gcc-internal-format msgid "(perhaps %<typename %T::%E%> was intended)" msgstr "" -#: cp/parser.c:2377 +#: cp/parser.c:2399 #, gcc-internal-format -msgid "%H%qE in namespace %qE does not name a type" +msgid "%qE in namespace %qE does not name a type" msgstr "" -#: cp/parser.c:2380 +#: cp/parser.c:2402 #, gcc-internal-format -msgid "%H%qE in class %qT does not name a type" +msgid "%qE in class %qT does not name a type" msgstr "" -#: cp/parser.c:2944 +#: cp/parser.c:3182 #, gcc-internal-format -msgid "%Hunsupported non-standard concatenation of string literals" +msgid "fixed-point types not supported in C++" msgstr "" -#: cp/parser.c:3147 -#, gcc-internal-format -msgid "%Hfixed-point types not supported in C++" -msgstr "" - -#: cp/parser.c:3228 +#: cp/parser.c:3262 #, gcc-internal-format msgid "ISO C++ forbids braced-groups within expressions" msgstr "" -#: cp/parser.c:3239 +#: cp/parser.c:3274 #, gcc-internal-format msgid "" -"%Hstatement-expressions are not allowed outside functions nor in template-" +"statement-expressions are not allowed outside functions nor in template-" "argument lists" msgstr "" -#: cp/parser.c:3298 -#, gcc-internal-format -msgid "%H%<this%> may not be used in this context" -msgstr "" - -#: cp/parser.c:3507 +#: cp/parser.c:3347 #, gcc-internal-format -msgid "%Hlocal variable %qD may not appear in this context" +msgid "%<this%> may not be used in this context" msgstr "" -#: cp/parser.c:3807 +#: cp/parser.c:3558 #, gcc-internal-format -msgid "%Hscope %qT before %<~%> is not a class-name" +msgid "local variable %qD may not appear in this context" msgstr "" -#: cp/parser.c:3921 +#: cp/parser.c:3852 #, gcc-internal-format -msgid "%Hdeclaration of %<~%T%> as member of %qT" +msgid "scope %qT before %<~%> is not a class-name" msgstr "" -#: cp/parser.c:3935 +#: cp/parser.c:3967 #, gcc-internal-format -msgid "%Htypedef-name %qD used as destructor declarator" +msgid "declaration of %<~%T%> as member of %qT" msgstr "" -#: cp/parser.c:4149 +#: cp/parser.c:3982 #, gcc-internal-format -msgid "%H%qD used without template parameters" -msgstr "" - -#: cp/parser.c:4153 cp/parser.c:14879 cp/parser.c:17176 -#, gcc-internal-format -msgid "%Hreference to %qD is ambiguous" -msgstr "" - -#: cp/parser.c:4199 cp/pt.c:5660 -#, gcc-internal-format -msgid "%qT is not a template" +msgid "typedef-name %qD used as destructor declarator" msgstr "" #. Warn the user that a compound literal is not #. allowed in standard C++. -#: cp/parser.c:4623 +#: cp/parser.c:4672 #, gcc-internal-format msgid "ISO C++ forbids compound-literals" msgstr "" -#: cp/parser.c:4996 +#: cp/parser.c:5050 #, gcc-internal-format -msgid "%H%qE does not have class type" +msgid "%qE does not have class type" msgstr "" -#: cp/parser.c:5080 +#: cp/parser.c:5135 cp/typeck.c:2121 #, gcc-internal-format -msgid "%Hinvalid use of %qD" +msgid "invalid use of %qD" msgstr "" -#: cp/parser.c:5659 +#: cp/parser.c:5718 #, gcc-internal-format -msgid "%Harray bound forbidden after parenthesized type-id" +msgid "array bound forbidden after parenthesized type-id" msgstr "" -#: cp/parser.c:5662 +#: cp/parser.c:5720 #, gcc-internal-format msgid "try removing the parentheses around the type-id" msgstr "" -#: cp/parser.c:5855 +#: cp/parser.c:5924 #, gcc-internal-format -msgid "%Hexpression in new-declarator must have integral or enumeration type" +msgid "expression in new-declarator must have integral or enumeration type" msgstr "" -#: cp/parser.c:6111 +#: cp/parser.c:6178 #, gcc-internal-format msgid "use of old-style cast" msgstr "" -#: cp/parser.c:6242 +#: cp/parser.c:6309 #, gcc-internal-format -msgid "%H%<>>%> operator will be treated as two right angle brackets in C++0x" +msgid "%<>>%> operator will be treated as two right angle brackets in C++0x" msgstr "" -#: cp/parser.c:6245 +#: cp/parser.c:6312 #, gcc-internal-format msgid "suggest parentheses around %<>>%> expression" msgstr "" -#: cp/parser.c:7082 -#, gcc-internal-format -msgid "%Hcase label %qE not within a switch statement" -msgstr "" - -#: cp/parser.c:7094 +#: cp/parser.c:7145 #, gcc-internal-format -msgid "%Hcase label not within a switch statement" +msgid "expected end of capture-list" msgstr "" -#: cp/parser.c:7212 +#: cp/parser.c:7196 #, gcc-internal-format -msgid "%H%<else%> without a previous %<if%>" +msgid "ISO C++ does not allow initializers in lambda expression capture lists" msgstr "" -#: cp/parser.c:7691 +#: cp/parser.c:7290 #, gcc-internal-format -msgid "%Hbreak statement not within loop or switch" +msgid "default argument specified for lambda parameter" msgstr "" -#: cp/parser.c:7699 cp/parser.c:7719 +#: cp/parser.c:7686 #, gcc-internal-format -msgid "%Hinvalid exit from OpenMP structured block" -msgstr "" - -#: cp/parser.c:7702 -#, gcc-internal-format -msgid "%Hbreak statement used with OpenMP for loop" -msgstr "" - -#: cp/parser.c:7712 -#, gcc-internal-format -msgid "%Hcontinue statement not within a loop" +msgid "case label %qE not within a switch statement" msgstr "" #. Issue a warning about this use of a GNU extension. -#: cp/parser.c:7755 +#: cp/parser.c:8383 #, gcc-internal-format msgid "ISO C++ forbids computed gotos" msgstr "" -#: cp/parser.c:7899 cp/parser.c:15753 +#: cp/parser.c:8528 cp/parser.c:16519 #, gcc-internal-format msgid "extra %<;%>" msgstr "" -#: cp/parser.c:8120 +#: cp/parser.c:8749 #, gcc-internal-format -msgid "%H%<__label__%> not at the beginning of a block" +msgid "%<__label__%> not at the beginning of a block" msgstr "" -#: cp/parser.c:8257 +#: cp/parser.c:8887 #, gcc-internal-format -msgid "%Hmixing declarations and function-definitions is forbidden" +msgid "mixing declarations and function-definitions is forbidden" msgstr "" -#: cp/parser.c:8397 +#: cp/parser.c:9028 #, gcc-internal-format -msgid "%H%<friend%> used outside of class" +msgid "%<friend%> used outside of class" msgstr "" -#: cp/parser.c:8453 +#. Complain about `auto' as a storage specifier, if +#. we're complaining about C++0x compatibility. +#: cp/parser.c:9087 #, gcc-internal-format -msgid "%H%<auto%> will change meaning in C++0x; please remove it" +msgid "%<auto%> will change meaning in C++0x; please remove it" msgstr "" -#: cp/parser.c:8572 +#: cp/parser.c:9207 #, gcc-internal-format -msgid "%Hclass definition may not be declared a friend" +msgid "class definition may not be declared a friend" msgstr "" -#: cp/parser.c:8642 cp/parser.c:16075 +#: cp/parser.c:9276 cp/parser.c:16843 #, gcc-internal-format -msgid "%Htemplates may not be %<virtual%>" +msgid "templates may not be %<virtual%>" msgstr "" -#: cp/parser.c:9045 +#: cp/parser.c:9697 #, gcc-internal-format msgid "invalid use of %<auto%> in conversion operator" msgstr "" -#: cp/parser.c:9129 +#: cp/parser.c:9782 #, gcc-internal-format -msgid "%Honly constructors take base initializers" +msgid "only constructors take base initializers" msgstr "" -#: cp/parser.c:9151 +#: cp/parser.c:9804 #, gcc-internal-format -msgid "%Hcannot expand initializer for member %<%D%>" +msgid "cannot expand initializer for member %<%D%>" msgstr "" -#: cp/parser.c:9206 +#: cp/parser.c:9859 #, gcc-internal-format msgid "anachronistic old-style base class initializer" msgstr "" -#: cp/parser.c:9266 +#: cp/parser.c:9927 #, gcc-internal-format msgid "" -"%Hkeyword %<typename%> not allowed in this context (a qualified member " +"keyword %<typename%> not allowed in this context (a qualified member " "initializer is implicitly a type)" msgstr "" #. Warn that we do not support `export'. -#: cp/parser.c:9612 +#: cp/parser.c:10272 #, gcc-internal-format msgid "keyword %<export%> not implemented, and will be ignored" msgstr "" -#: cp/parser.c:9794 cp/parser.c:9892 cp/parser.c:9998 +#: cp/parser.c:10458 cp/parser.c:10557 cp/parser.c:10665 cp/parser.c:15222 #, gcc-internal-format -msgid "%Htemplate parameter pack %qD cannot have a default argument" +msgid "template parameter pack %qD cannot have a default argument" msgstr "" -#: cp/parser.c:9797 +#: cp/parser.c:10462 cp/parser.c:15229 #, gcc-internal-format -msgid "%Htemplate parameter pack cannot have a default argument" +msgid "template parameter pack cannot have a default argument" msgstr "" -#: cp/parser.c:9895 cp/parser.c:10002 +#: cp/parser.c:10561 cp/parser.c:10669 #, gcc-internal-format -msgid "%Htemplate parameter packs cannot have default arguments" +msgid "template parameter packs cannot have default arguments" msgstr "" -#: cp/parser.c:10144 +#: cp/parser.c:10810 #, gcc-internal-format msgid "%<<::%> cannot begin a template-argument list" msgstr "" -#: cp/parser.c:10148 +#: cp/parser.c:10814 #, gcc-internal-format msgid "" "%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> " "and %<::%>" msgstr "" -#: cp/parser.c:10226 +#: cp/parser.c:10892 #, gcc-internal-format -msgid "%Hparse error in template argument list" +msgid "parse error in template argument list" msgstr "" #. Explain what went wrong. -#: cp/parser.c:10341 +#: cp/parser.c:11006 #, gcc-internal-format -msgid "%Hnon-template %qD used as template" +msgid "non-template %qD used as template" msgstr "" -#: cp/parser.c:10343 +#: cp/parser.c:11008 #, gcc-internal-format msgid "use %<%T::template %D%> to indicate that it is a template" msgstr "" -#: cp/parser.c:10476 +#: cp/parser.c:11142 #, gcc-internal-format -msgid "%Hexpected parameter pack before %<...%>" +msgid "expected parameter pack before %<...%>" msgstr "" -#: cp/parser.c:10886 +#: cp/parser.c:11551 #, gcc-internal-format -msgid "%Htemplate specialization with C linkage" +msgid "template specialization with C linkage" msgstr "" -#: cp/parser.c:11532 -#, gcc-internal-format -msgid "using %<typename%> outside of template" -msgstr "" - -#: cp/parser.c:11700 +#: cp/parser.c:12369 #, gcc-internal-format msgid "declaration %qD does not declare anything" msgstr "" -#: cp/parser.c:11786 +#: cp/parser.c:12455 #, gcc-internal-format msgid "attributes ignored on uninstantiated type" msgstr "" -#: cp/parser.c:11790 +#: cp/parser.c:12459 #, gcc-internal-format msgid "attributes ignored on template instantiation" msgstr "" -#: cp/parser.c:11795 +#: cp/parser.c:12464 #, gcc-internal-format msgid "" "attributes ignored on elaborated-type-specifier that is not a forward " "declaration" msgstr "" -#: cp/parser.c:12078 +#: cp/parser.c:12749 #, gcc-internal-format -msgid "%H%qD is not a namespace-name" +msgid "%qD is not a namespace-name" msgstr "" -#: cp/parser.c:12205 +#: cp/parser.c:12876 #, gcc-internal-format -msgid "%H%<namespace%> definition is not allowed here" +msgid "%<namespace%> definition is not allowed here" msgstr "" -#. [namespace.udecl] -#. -#. A using declaration shall not name a template-id. -#: cp/parser.c:12345 +#: cp/parser.c:13017 #, gcc-internal-format -msgid "%Ha template-id may not appear in a using-declaration" +msgid "a template-id may not appear in a using-declaration" msgstr "" -#: cp/parser.c:12722 +#: cp/parser.c:13438 #, gcc-internal-format -msgid "%Han asm-specification is not allowed on a function-definition" +msgid "an asm-specification is not allowed on a function-definition" msgstr "" -#: cp/parser.c:12726 +#: cp/parser.c:13442 #, gcc-internal-format -msgid "%Hattributes are not allowed on a function-definition" +msgid "attributes are not allowed on a function-definition" msgstr "" -#: cp/parser.c:12879 +#: cp/parser.c:13595 #, gcc-internal-format -msgid "%Hinitializer provided for function" +msgid "initializer provided for function" msgstr "" -#: cp/parser.c:12901 +#: cp/parser.c:13628 #, gcc-internal-format msgid "attributes after parenthesized initializer ignored" msgstr "" -#: cp/parser.c:13306 +#: cp/parser.c:14027 cp/pt.c:9622 #, gcc-internal-format -msgid "%Harray bound is not an integer constant" +msgid "array bound is not an integer constant" msgstr "" -#: cp/parser.c:13418 +#: cp/parser.c:14146 #, gcc-internal-format -msgid "%H%<%T::%E%> is not a type" +msgid "%<%T::%E%> is not a type" msgstr "" -#: cp/parser.c:13445 +#: cp/parser.c:14173 #, gcc-internal-format -msgid "%Hinvalid use of constructor as a template" +msgid "invalid use of constructor as a template" msgstr "" -#: cp/parser.c:13447 +#: cp/parser.c:14175 #, gcc-internal-format msgid "" "use %<%T::%D%> instead of %<%T::%D%> to name the constructor in a qualified " "name" msgstr "" -#: cp/parser.c:13620 +#: cp/parser.c:14349 #, gcc-internal-format -msgid "%H%qD is a namespace" +msgid "%qD is a namespace" msgstr "" -#: cp/parser.c:13695 +#: cp/parser.c:14424 #, gcc-internal-format -msgid "%Hduplicate cv-qualifier" +msgid "duplicate cv-qualifier" msgstr "" -#: cp/parser.c:13807 +#: cp/parser.c:14546 #, gcc-internal-format msgid "invalid use of %<auto%>" msgstr "" -#: cp/parser.c:14392 +#: cp/parser.c:15155 #, gcc-internal-format -msgid "%Hfile ends in default argument" +msgid "file ends in default argument" msgstr "" -#: cp/parser.c:14438 +#: cp/parser.c:15201 #, gcc-internal-format msgid "deprecated use of default argument for parameter of non-function" msgstr "" -#: cp/parser.c:14441 +#: cp/parser.c:15205 #, gcc-internal-format -msgid "%Hdefault arguments are only permitted for function parameters" +msgid "default arguments are only permitted for function parameters" msgstr "" -#: cp/parser.c:14459 -#, gcc-internal-format -msgid "%H%sparameter pack %qD cannot have a default argument" -msgstr "" - -#: cp/parser.c:14463 -#, gcc-internal-format -msgid "%H%sparameter pack cannot have a default argument" -msgstr "" - -#: cp/parser.c:14726 +#: cp/parser.c:15491 #, gcc-internal-format msgid "ISO C++ does not allow designated initializers" msgstr "" -#: cp/parser.c:15345 +#: cp/parser.c:16111 #, gcc-internal-format -msgid "%Hinvalid class name in declaration of %qD" +msgid "invalid class name in declaration of %qD" msgstr "" -#: cp/parser.c:15358 +#: cp/parser.c:16125 #, gcc-internal-format -msgid "%Hdeclaration of %qD in namespace %qD which does not enclose %qD" +msgid "declaration of %qD in namespace %qD which does not enclose %qD" msgstr "" -#: cp/parser.c:15363 +#: cp/parser.c:16130 #, gcc-internal-format -msgid "%Hdeclaration of %qD in %qD which does not enclose %qD" +msgid "declaration of %qD in %qD which does not enclose %qD" msgstr "" -#: cp/parser.c:15377 +#: cp/parser.c:16144 #, gcc-internal-format -msgid "%Hextra qualification not allowed" +msgid "extra qualification not allowed" msgstr "" -#: cp/parser.c:15389 +#: cp/parser.c:16156 #, gcc-internal-format -msgid "%Han explicit specialization must be preceded by %<template <>%>" +msgid "an explicit specialization must be preceded by %<template <>%>" msgstr "" -#: cp/parser.c:15419 +#: cp/parser.c:16186 #, gcc-internal-format -msgid "%Hfunction template %qD redeclared as a class template" +msgid "function template %qD redeclared as a class template" msgstr "" -#: cp/parser.c:15501 +#: cp/parser.c:16269 #, gcc-internal-format -msgid "%Hredefinition of %q#T" +msgid "previous definition of %q+#T" msgstr "" -#: cp/parser.c:15503 +#: cp/parser.c:16538 #, gcc-internal-format -msgid "%Hprevious definition of %q+#T" +msgid "a class-key must be used when declaring a friend" msgstr "" -#: cp/parser.c:15771 +#: cp/parser.c:16553 #, gcc-internal-format -msgid "%Ha class-key must be used when declaring a friend" +msgid "friend declaration does not name a class or function" msgstr "" -#: cp/parser.c:15786 +#: cp/parser.c:16735 #, gcc-internal-format -msgid "%Hfriend declaration does not name a class or function" +msgid "pure-specifier on function-definition" msgstr "" -#: cp/parser.c:15966 +#: cp/parser.c:17048 #, gcc-internal-format -msgid "%Hpure-specifier on function-definition" +msgid "keyword %<typename%> not allowed outside of templates" msgstr "" -#: cp/parser.c:16279 -#, gcc-internal-format -msgid "%Hkeyword %<typename%> not allowed outside of templates" -msgstr "" - -#: cp/parser.c:16282 +#: cp/parser.c:17051 #, gcc-internal-format msgid "" -"%Hkeyword %<typename%> not allowed in this context (the base class is " +"keyword %<typename%> not allowed in this context (the base class is " "implicitly a type)" msgstr "" -#: cp/parser.c:17365 +#: cp/parser.c:18185 #, gcc-internal-format msgid "specializing member %<%T::%E%> requires %<template<>%> syntax" msgstr "" -#: cp/parser.c:17370 +#: cp/parser.c:18190 #, gcc-internal-format msgid "too few template-parameter-lists" msgstr "" @@ -33005,317 +34276,248 @@ msgstr "" #. something like: #. #. template <class T> template <class U> void S::f(); -#: cp/parser.c:17377 +#: cp/parser.c:18197 #, gcc-internal-format -msgid "%Htoo many template-parameter-lists" +msgid "too many template-parameter-lists" msgstr "" -#. Issue an error message. -#: cp/parser.c:17651 +#: cp/parser.c:18472 #, gcc-internal-format -msgid "%Hnamed return values are no longer supported" +msgid "named return values are no longer supported" msgstr "" -#. 14.5.2.2 [temp.mem] -#. -#. A local class shall not have member templates. -#: cp/parser.c:17726 +#: cp/parser.c:18552 #, gcc-internal-format -msgid "%Hinvalid declaration of member template in local class" +msgid "invalid declaration of member template in local class" msgstr "" -#: cp/parser.c:17736 +#: cp/parser.c:18561 #, gcc-internal-format -msgid "%Htemplate with C linkage" +msgid "template with C linkage" msgstr "" -#: cp/parser.c:17883 +#: cp/parser.c:18709 #, gcc-internal-format -msgid "%Htemplate declaration of %qs" +msgid "template declaration of %<typedef%>" msgstr "" -#: cp/parser.c:17947 +#: cp/parser.c:18773 #, gcc-internal-format -msgid "%Hexplicit template specialization cannot have a storage class" +msgid "explicit template specialization cannot have a storage class" msgstr "" -#: cp/parser.c:18165 +#: cp/parser.c:18998 #, gcc-internal-format -msgid "%H%<>>%> should be %<> >%> within a nested template argument list" +msgid "%<>>%> should be %<> >%> within a nested template argument list" msgstr "" -#: cp/parser.c:18178 +#: cp/parser.c:19011 #, gcc-internal-format -msgid "%Hspurious %<>>%>, use %<>%> to terminate a template argument list" +msgid "spurious %<>>%>, use %<>%> to terminate a template argument list" msgstr "" -#: cp/parser.c:18512 +#: cp/parser.c:19354 #, gcc-internal-format -msgid "%Hinvalid use of %qD in linkage specification" +msgid "invalid use of %qD in linkage specification" msgstr "" -#: cp/parser.c:18525 +#: cp/parser.c:19367 #, gcc-internal-format -msgid "%H%<__thread%> before %qD" +msgid "%<__thread%> before %qD" msgstr "" -#: cp/parser.c:18846 +#: cp/parser.c:19688 #, gcc-internal-format msgid "%qs tag used in naming %q#T" msgstr "" -#: cp/parser.c:18867 +#: cp/parser.c:19709 #, gcc-internal-format -msgid "%H%qD redeclared with different access" +msgid "%qD redeclared with different access" msgstr "" -#: cp/parser.c:18885 +#: cp/parser.c:19728 #, gcc-internal-format -msgid "%H%<template%> (as a disambiguator) is only allowed within templates" +msgid "%<template%> (as a disambiguator) is only allowed within templates" msgstr "" -#: cp/parser.c:19151 cp/parser.c:20078 cp/parser.c:20210 +#: cp/parser.c:19995 cp/parser.c:20923 cp/parser.c:21056 #, gcc-internal-format -msgid "%Hmisplaced %<@%D%> Objective-C++ construct" +msgid "misplaced %<@%D%> Objective-C++ construct" msgstr "" -#: cp/parser.c:19295 +#: cp/parser.c:20140 #, gcc-internal-format -msgid "%H%<@encode%> must specify a type as an argument" +msgid "%<@encode%> must specify a type as an argument" msgstr "" -#: cp/parser.c:19611 +#: cp/parser.c:20456 #, gcc-internal-format -msgid "%Hinvalid Objective-C++ selector name" +msgid "invalid Objective-C++ selector name" msgstr "" -#: cp/parser.c:19942 +#: cp/parser.c:20787 #, gcc-internal-format -msgid "%Hidentifier expected after %<@protocol%>" +msgid "identifier expected after %<@protocol%>" msgstr "" -#: cp/parser.c:20303 -#, gcc-internal-format -msgid "%Htoo many %qs clauses" -msgstr "" - -#: cp/parser.c:20417 -#, gcc-internal-format -msgid "%Hcollapse argument needs positive constant integer expression" -msgstr "" - -#: cp/parser.c:20706 -#, gcc-internal-format -msgid "%Hschedule %<runtime%> does not take a %<chunk_size%> parameter" -msgstr "" - -#: cp/parser.c:20709 -#, gcc-internal-format -msgid "%Hschedule %<auto%> does not take a %<chunk_size%> parameter" -msgstr "" - -#: cp/parser.c:20857 -#, gcc-internal-format -msgid "%H%qs is not valid for %qs" -msgstr "" - -#: cp/parser.c:21280 +#: cp/parser.c:22126 #, gcc-internal-format msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop" msgstr "" -#: cp/parser.c:21405 cp/parser.c:21443 -#, gcc-internal-format -msgid "%Hiteration variable %qD should not be firstprivate" -msgstr "" - -#: cp/parser.c:21447 -#, gcc-internal-format -msgid "%Hiteration variable %qD should not be reduction" -msgstr "" - -#: cp/parser.c:21514 +#: cp/parser.c:22294 cp/pt.c:11021 #, gcc-internal-format -msgid "%Hnot enough collapsed for loops" -msgstr "" - -#: cp/parser.c:21560 -#, gcc-internal-format -msgid "%Hcollapsed loops not perfectly nested" -msgstr "" - -#: cp/parser.c:21971 -#, gcc-internal-format -msgid "%Hjunk at end of %<#pragma GCC pch_preprocess%>" -msgstr "" - -#: cp/parser.c:21975 -#, gcc-internal-format -msgid "%Hexpected string literal" -msgstr "" - -#: cp/parser.c:22008 -#, gcc-internal-format -msgid "%H%<#pragma GCC pch_preprocess%> must be first" -msgstr "" - -#: cp/parser.c:22019 -#, gcc-internal-format -msgid "%H%<#pragma omp barrier%> may only be used in compound statements" -msgstr "" - -#: cp/parser.c:22034 -#, gcc-internal-format -msgid "%H%<#pragma omp flush%> may only be used in compound statements" +msgid "iteration variable %qD should not be reduction" msgstr "" -#: cp/parser.c:22049 +#: cp/parser.c:22361 #, gcc-internal-format -msgid "%H%<#pragma omp taskwait%> may only be used in compound statements" +msgid "not enough collapsed for loops" msgstr "" -#: cp/parser.c:22077 +#: cp/parser.c:22822 #, gcc-internal-format -msgid "" -"%H%<#pragma omp section%> may only be used in %<#pragma omp sections%> " -"construct" +msgid "junk at end of %<#pragma GCC pch_preprocess%>" msgstr "" -#: cp/parser.c:22135 +#: cp/parser.c:22986 #, gcc-internal-format msgid "inter-module optimizations not implemented for C++" msgstr "" -#: cp/pt.c:254 +#: cp/pt.c:273 #, gcc-internal-format msgid "data member %qD cannot be a member template" msgstr "" -#: cp/pt.c:266 +#: cp/pt.c:285 #, gcc-internal-format msgid "invalid member template declaration %qD" msgstr "" -#: cp/pt.c:613 +#: cp/pt.c:636 #, gcc-internal-format msgid "explicit specialization in non-namespace scope %qD" msgstr "" -#: cp/pt.c:627 +#: cp/pt.c:650 #, gcc-internal-format msgid "enclosing class templates are not explicitly specialized" msgstr "" -#: cp/pt.c:715 +#: cp/pt.c:738 #, gcc-internal-format msgid "specialization of %qD in different namespace" msgstr "" -#: cp/pt.c:716 cp/pt.c:817 +#: cp/pt.c:739 cp/pt.c:841 #, gcc-internal-format msgid " from definition of %q+#D" msgstr "" -#: cp/pt.c:733 +#: cp/pt.c:756 #, gcc-internal-format msgid "" "explicit instantiation of %qD in namespace %qD (which does not enclose " "namespace %qD)" msgstr "" -#: cp/pt.c:751 +#: cp/pt.c:774 #, gcc-internal-format msgid "name of class shadows template template parameter %qD" msgstr "" -#: cp/pt.c:784 +#: cp/pt.c:807 #, gcc-internal-format msgid "specialization of %qT after instantiation" msgstr "" -#: cp/pt.c:816 +#: cp/pt.c:840 #, gcc-internal-format msgid "specializing %q#T in different namespace" msgstr "" -#: cp/pt.c:831 +#. But if we've had an implicit instantiation, that's a +#. problem ([temp.expl.spec]/6). +#: cp/pt.c:878 #, gcc-internal-format msgid "specialization %qT after instantiation %qT" msgstr "" -#: cp/pt.c:844 +#: cp/pt.c:892 #, gcc-internal-format msgid "explicit specialization of non-template %qT" msgstr "" -#: cp/pt.c:1252 +#: cp/pt.c:1308 #, gcc-internal-format msgid "specialization of %qD after instantiation" msgstr "" -#: cp/pt.c:1474 +#: cp/pt.c:1718 #, gcc-internal-format msgid "%qD is not a function template" msgstr "" -#: cp/pt.c:1683 +#: cp/pt.c:1927 #, gcc-internal-format msgid "template-id %qD for %q+D does not match any template declaration" msgstr "" -#: cp/pt.c:1691 +#: cp/pt.c:1935 #, gcc-internal-format msgid "ambiguous template specialization %qD for %q+D" msgstr "" #. This case handles bogus declarations like template <> #. template <class T> void f<int>(); -#: cp/pt.c:1926 cp/pt.c:1980 +#: cp/pt.c:2171 cp/pt.c:2225 #, gcc-internal-format msgid "template-id %qD in declaration of primary template" msgstr "" -#: cp/pt.c:1939 +#: cp/pt.c:2184 #, gcc-internal-format msgid "template parameter list used in explicit instantiation" msgstr "" -#: cp/pt.c:1945 +#: cp/pt.c:2190 #, gcc-internal-format msgid "definition provided for explicit instantiation" msgstr "" -#: cp/pt.c:1953 +#: cp/pt.c:2198 #, gcc-internal-format msgid "too many template parameter lists in declaration of %qD" msgstr "" -#: cp/pt.c:1956 +#: cp/pt.c:2201 #, gcc-internal-format msgid "too few template parameter lists in declaration of %qD" msgstr "" -#: cp/pt.c:1958 +#: cp/pt.c:2203 #, gcc-internal-format msgid "explicit specialization of %qD must be introduced by %<template <>%>" msgstr "" -#: cp/pt.c:1977 +#: cp/pt.c:2222 #, gcc-internal-format msgid "function template partial specialization %qD is not allowed" msgstr "" -#: cp/pt.c:2009 +#: cp/pt.c:2254 #, gcc-internal-format msgid "default argument specified in explicit specialization" msgstr "" -#: cp/pt.c:2039 +#: cp/pt.c:2284 #, gcc-internal-format msgid "%qD is not a template function" msgstr "" -#: cp/pt.c:2047 +#: cp/pt.c:2292 #, gcc-internal-format msgid "%qD is not declared in %qD" msgstr "" @@ -33328,104 +34530,104 @@ msgstr "" #. program is ill-formed. #. #. Similar language is found in [temp.explicit]. -#: cp/pt.c:2109 +#: cp/pt.c:2354 #, gcc-internal-format msgid "specialization of implicitly-declared special member function" msgstr "" -#: cp/pt.c:2153 +#: cp/pt.c:2398 #, gcc-internal-format msgid "no member function %qD declared in %qT" msgstr "" -#: cp/pt.c:2634 +#: cp/pt.c:3000 #, gcc-internal-format msgid "base initializer expansion %<%T%> contains no parameter packs" msgstr "" -#: cp/pt.c:2693 +#: cp/pt.c:3061 #, gcc-internal-format msgid "expansion pattern %<%T%> contains no argument packs" msgstr "" -#: cp/pt.c:2695 +#: cp/pt.c:3063 #, gcc-internal-format msgid "expansion pattern %<%E%> contains no argument packs" msgstr "" -#: cp/pt.c:2736 +#: cp/pt.c:3104 #, gcc-internal-format msgid "parameter packs not expanded with %<...%>:" msgstr "" -#: cp/pt.c:2751 cp/pt.c:3372 +#: cp/pt.c:3119 cp/pt.c:3733 #, gcc-internal-format msgid " %qD" msgstr "" -#: cp/pt.c:2753 +#: cp/pt.c:3121 #, gcc-internal-format msgid " <anonymous>" msgstr "" -#: cp/pt.c:2861 +#: cp/pt.c:3229 #, gcc-internal-format msgid "declaration of %q+#D" msgstr "" -#: cp/pt.c:2862 +#: cp/pt.c:3230 #, gcc-internal-format msgid " shadows template parm %q+#D" msgstr "" -#: cp/pt.c:3368 +#: cp/pt.c:3729 #, gcc-internal-format msgid "template parameters not used in partial specialization:" msgstr "" -#: cp/pt.c:3383 +#: cp/pt.c:3744 #, gcc-internal-format msgid "partial specialization %qT does not specialize any template arguments" msgstr "" -#: cp/pt.c:3428 +#: cp/pt.c:3789 #, gcc-internal-format msgid "" "parameter pack argument %qE must be at the end of the template argument list" msgstr "" -#: cp/pt.c:3430 +#: cp/pt.c:3791 #, gcc-internal-format msgid "" "parameter pack argument %qT must be at the end of the template argument list" msgstr "" -#: cp/pt.c:3451 +#: cp/pt.c:3812 #, gcc-internal-format msgid "template argument %qE involves template parameter(s)" msgstr "" -#: cp/pt.c:3495 +#: cp/pt.c:3856 #, gcc-internal-format msgid "type %qT of template argument %qE depends on template parameter(s)" msgstr "" -#: cp/pt.c:3603 +#: cp/pt.c:3963 #, gcc-internal-format msgid "no default argument for %qD" msgstr "" -#: cp/pt.c:3624 +#: cp/pt.c:3984 #, gcc-internal-format msgid "parameter pack %qE must be at the end of the template parameter list" msgstr "" -#: cp/pt.c:3627 +#: cp/pt.c:3987 #, gcc-internal-format msgid "parameter pack %qT must be at the end of the template parameter list" msgstr "" -#: cp/pt.c:3815 +#: cp/pt.c:4176 #, gcc-internal-format msgid "template class without a name" msgstr "" @@ -33433,7 +34635,7 @@ msgstr "" #. [temp.mem] #. #. A destructor shall not be a member template. -#: cp/pt.c:3825 +#: cp/pt.c:4186 #, gcc-internal-format msgid "destructor %qD declared as member template" msgstr "" @@ -33443,72 +34645,72 @@ msgstr "" #. An allocation function can be a function #. template. ... Template allocation functions shall #. have two or more parameters. -#: cp/pt.c:3840 +#: cp/pt.c:4201 #, gcc-internal-format msgid "invalid template declaration of %qD" msgstr "" -#: cp/pt.c:3957 +#: cp/pt.c:4318 #, gcc-internal-format msgid "template definition of non-template %q#D" msgstr "" -#: cp/pt.c:4000 +#: cp/pt.c:4361 #, gcc-internal-format msgid "expected %d levels of template parms for %q#D, got %d" msgstr "" -#: cp/pt.c:4012 +#: cp/pt.c:4373 #, gcc-internal-format msgid "got %d template parameters for %q#D" msgstr "" -#: cp/pt.c:4015 +#: cp/pt.c:4376 #, gcc-internal-format msgid "got %d template parameters for %q#T" msgstr "" -#: cp/pt.c:4017 +#: cp/pt.c:4378 #, gcc-internal-format msgid " but %d required" msgstr "" -#: cp/pt.c:4035 +#: cp/pt.c:4396 #, gcc-internal-format msgid "template arguments to %qD do not match original template %qD" msgstr "" -#: cp/pt.c:4039 +#: cp/pt.c:4400 #, gcc-internal-format msgid "use template<> for an explicit specialization" msgstr "" -#: cp/pt.c:4135 +#: cp/pt.c:4496 #, gcc-internal-format msgid "%qT is not a template type" msgstr "" -#: cp/pt.c:4148 +#: cp/pt.c:4509 #, gcc-internal-format msgid "template specifiers not specified in declaration of %qD" msgstr "" -#: cp/pt.c:4158 +#: cp/pt.c:4519 #, gcc-internal-format msgid "redeclared with %d template parameter(s)" msgstr "" -#: cp/pt.c:4160 +#: cp/pt.c:4521 #, gcc-internal-format msgid "previous declaration %q+D used %d template parameter(s)" msgstr "" -#: cp/pt.c:4194 +#: cp/pt.c:4555 #, gcc-internal-format msgid "template parameter %q+#D" msgstr "" -#: cp/pt.c:4195 +#: cp/pt.c:4556 #, gcc-internal-format msgid "redeclared here as %q#D" msgstr "" @@ -33517,220 +34719,220 @@ msgstr "" #. #. A template-parameter may not be given default arguments #. by two different declarations in the same scope. -#: cp/pt.c:4205 +#: cp/pt.c:4566 #, gcc-internal-format msgid "redefinition of default argument for %q#D" msgstr "" -#: cp/pt.c:4206 +#: cp/pt.c:4568 #, gcc-internal-format -msgid "%Joriginal definition appeared here" +msgid "original definition appeared here" msgstr "" -#: cp/pt.c:4310 +#: cp/pt.c:4672 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because function %qD has " "not external linkage" msgstr "" -#: cp/pt.c:4351 +#: cp/pt.c:4713 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because string literals " "can never be used in this context" msgstr "" -#: cp/pt.c:4428 +#: cp/pt.c:4790 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is a non-" "constant expression" msgstr "" -#: cp/pt.c:4472 +#: cp/pt.c:4834 #, gcc-internal-format msgid "" "%qD is not a valid template argument because %qD is a variable, not the " "address of a variable" msgstr "" -#: cp/pt.c:4490 +#: cp/pt.c:4852 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT because %qE is not a " "variable" msgstr "" -#: cp/pt.c:4497 +#: cp/pt.c:4859 #, gcc-internal-format msgid "" "%qE is not a valid template argument of type %qT because %qD does not have " "external linkage" msgstr "" -#: cp/pt.c:4527 +#: cp/pt.c:4889 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because of conflicts in cv-" "qualification" msgstr "" -#: cp/pt.c:4534 +#: cp/pt.c:4896 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is not an lvalue" msgstr "" -#: cp/pt.c:4547 +#: cp/pt.c:4909 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because object %qD has not " "external linkage" msgstr "" -#: cp/pt.c:4579 +#: cp/pt.c:4941 #, gcc-internal-format msgid "%qE is not a valid template argument for type %qT" msgstr "" -#: cp/pt.c:4580 +#: cp/pt.c:4942 #, gcc-internal-format msgid "it must be the address of a function with external linkage" msgstr "" -#: cp/pt.c:4594 +#: cp/pt.c:4956 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is a pointer" msgstr "" -#: cp/pt.c:4596 +#: cp/pt.c:4958 #, gcc-internal-format msgid "try using %qE instead" msgstr "" -#: cp/pt.c:4631 +#: cp/pt.c:4993 #, gcc-internal-format msgid "" "%qE is not a valid template argument for type %qT because it is of type %qT" msgstr "" -#: cp/pt.c:4634 +#: cp/pt.c:4996 #, gcc-internal-format msgid "standard conversions are not allowed in this context" msgstr "" -#: cp/pt.c:4971 +#: cp/pt.c:5333 #, gcc-internal-format msgid "to refer to a type member of a template parameter, use %<typename %E%>" msgstr "" -#: cp/pt.c:4987 cp/pt.c:5006 cp/pt.c:5056 +#: cp/pt.c:5349 cp/pt.c:5368 cp/pt.c:5418 #, gcc-internal-format msgid "type/value mismatch at argument %d in template parameter list for %qD" msgstr "" -#: cp/pt.c:4991 +#: cp/pt.c:5353 #, gcc-internal-format msgid " expected a constant of type %qT, got %qT" msgstr "" -#: cp/pt.c:4995 +#: cp/pt.c:5357 #, gcc-internal-format msgid " expected a class template, got %qE" msgstr "" -#: cp/pt.c:4997 +#: cp/pt.c:5359 #, gcc-internal-format msgid " expected a type, got %qE" msgstr "" -#: cp/pt.c:5010 +#: cp/pt.c:5372 #, gcc-internal-format msgid " expected a type, got %qT" msgstr "" -#: cp/pt.c:5012 +#: cp/pt.c:5374 #, gcc-internal-format msgid " expected a class template, got %qT" msgstr "" -#: cp/pt.c:5059 +#: cp/pt.c:5421 #, gcc-internal-format msgid " expected a template of type %qD, got %qD" msgstr "" #. Not sure if this is reachable, but it doesn't hurt #. to be robust. -#: cp/pt.c:5092 +#: cp/pt.c:5454 #, gcc-internal-format msgid "type mismatch in nontype parameter pack" msgstr "" -#: cp/pt.c:5114 +#: cp/pt.c:5476 #, gcc-internal-format msgid "could not convert template argument %qE to %qT" msgstr "" -#: cp/pt.c:5170 +#: cp/pt.c:5532 #, gcc-internal-format msgid "wrong number of template arguments (%d, should be %d)" msgstr "" -#: cp/pt.c:5307 +#: cp/pt.c:5670 #, gcc-internal-format msgid "wrong number of template arguments (%d, should be %d%s)" msgstr "" -#: cp/pt.c:5311 +#: cp/pt.c:5674 #, gcc-internal-format msgid "provided for %q+D" msgstr "" -#: cp/pt.c:5376 +#: cp/pt.c:5741 #, gcc-internal-format msgid "cannot expand %<%E%> into a fixed-length argument list" msgstr "" -#: cp/pt.c:5379 +#: cp/pt.c:5744 #, gcc-internal-format msgid "cannot expand %<%T%> into a fixed-length argument list" msgstr "" -#: cp/pt.c:5395 +#: cp/pt.c:5760 #, gcc-internal-format msgid "template argument %d is invalid" msgstr "" -#: cp/pt.c:5672 +#: cp/pt.c:6042 #, gcc-internal-format msgid "non-template type %qT used as a template" msgstr "" -#: cp/pt.c:5674 +#: cp/pt.c:6044 #, gcc-internal-format msgid "for template declaration %q+D" msgstr "" -#: cp/pt.c:6377 +#: cp/pt.c:6700 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d (use -ftemplate-depth-NN " "to increase the maximum) instantiating %qD" msgstr "" -#: cp/pt.c:7611 +#: cp/pt.c:7953 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %<%T%>" msgstr "" -#: cp/pt.c:7615 +#: cp/pt.c:7957 #, gcc-internal-format msgid "mismatched argument pack lengths while expanding %<%E%>" msgstr "" -#: cp/pt.c:8587 +#: cp/pt.c:8981 #, gcc-internal-format msgid "instantiation of %q+D as type %qT" msgstr "" @@ -33748,241 +34950,226 @@ msgstr "" #. #. is an attempt to declare a variable with function #. type. -#: cp/pt.c:8727 +#: cp/pt.c:9120 #, gcc-internal-format msgid "variable %qD has function type" msgstr "" -#: cp/pt.c:8874 +#: cp/pt.c:9285 #, gcc-internal-format msgid "invalid parameter type %qT" msgstr "" -#: cp/pt.c:8876 +#: cp/pt.c:9287 #, gcc-internal-format msgid "in declaration %q+D" msgstr "" -#: cp/pt.c:8953 +#: cp/pt.c:9364 #, gcc-internal-format msgid "function returning an array" msgstr "" -#: cp/pt.c:8955 +#: cp/pt.c:9366 #, gcc-internal-format msgid "function returning a function" msgstr "" -#: cp/pt.c:8982 +#: cp/pt.c:9393 #, gcc-internal-format msgid "creating pointer to member function of non-class type %qT" msgstr "" -#: cp/pt.c:9211 -#, gcc-internal-format -msgid "array bound is not an integer constant" -msgstr "" - -#: cp/pt.c:9231 +#: cp/pt.c:9642 #, gcc-internal-format msgid "creating array with negative size (%qE)" msgstr "" -#: cp/pt.c:9480 +#: cp/pt.c:9891 #, gcc-internal-format msgid "forming reference to void" msgstr "" -#: cp/pt.c:9482 +#: cp/pt.c:9893 #, gcc-internal-format msgid "forming %s to reference type %qT" msgstr "" -#: cp/pt.c:9533 +#: cp/pt.c:9944 #, gcc-internal-format msgid "creating pointer to member of non-class type %qT" msgstr "" -#: cp/pt.c:9539 +#: cp/pt.c:9950 #, gcc-internal-format msgid "creating pointer to member reference type %qT" msgstr "" -#: cp/pt.c:9545 +#: cp/pt.c:9956 #, gcc-internal-format msgid "creating pointer to member of type void" msgstr "" -#: cp/pt.c:9612 +#: cp/pt.c:10023 #, gcc-internal-format msgid "creating array of %qT" msgstr "" -#: cp/pt.c:9618 +#: cp/pt.c:10029 #, gcc-internal-format msgid "creating array of %qT, which is an abstract class type" msgstr "" -#: cp/pt.c:9669 +#: cp/pt.c:10081 #, gcc-internal-format msgid "%qT is not a class, struct, or union type" msgstr "" -#: cp/pt.c:9704 +#: cp/pt.c:10117 #, gcc-internal-format msgid "%qT resolves to %qT, which is not an enumeration type" msgstr "" -#: cp/pt.c:9707 +#: cp/pt.c:10120 #, gcc-internal-format msgid "%qT resolves to %qT, which is is not a class type" msgstr "" -#: cp/pt.c:9813 +#: cp/pt.c:10234 #, gcc-internal-format msgid "use of %qs in template" msgstr "" -#: cp/pt.c:9950 +#: cp/pt.c:10369 +#, gcc-internal-format +msgid "qualifying type %qT does not match destructor name ~%qT" +msgstr "" + +#: cp/pt.c:10384 #, gcc-internal-format msgid "" "dependent-name %qE is parsed as a non-type, but instantiation yields a type" msgstr "" -#: cp/pt.c:9952 +#: cp/pt.c:10386 #, gcc-internal-format msgid "say %<typename %E%> if a type is meant" msgstr "" -#: cp/pt.c:10098 +#: cp/pt.c:10532 #, gcc-internal-format msgid "using invalid field %qD" msgstr "" -#: cp/pt.c:10428 cp/pt.c:11091 +#: cp/pt.c:10862 cp/pt.c:11534 #, gcc-internal-format msgid "invalid use of pack expansion expression" msgstr "" -#: cp/pt.c:10432 cp/pt.c:11095 +#: cp/pt.c:10866 cp/pt.c:11538 #, gcc-internal-format msgid "use %<...%> to expand argument pack" msgstr "" -#: cp/pt.c:10587 -#, gcc-internal-format -msgid "iteration variable %qD should not be reduction" -msgstr "" - -#: cp/pt.c:11255 +#: cp/pt.c:11698 #, gcc-internal-format msgid "" "a cast to a type other than an integral or enumeration type cannot appear in " "a constant-expression" msgstr "" -#: cp/pt.c:11723 +#: cp/pt.c:12238 #, gcc-internal-format msgid "%qT is not a class or namespace" msgstr "" -#: cp/pt.c:11726 +#: cp/pt.c:12241 #, gcc-internal-format msgid "%qD is not a class or namespace" msgstr "" -#: cp/pt.c:11946 -#, gcc-internal-format -msgid "%qT is/uses anonymous type" -msgstr "" - -#: cp/pt.c:11948 -#, gcc-internal-format -msgid "template argument for %qD uses local type %qT" -msgstr "" - -#: cp/pt.c:11958 +#: cp/pt.c:12483 #, gcc-internal-format msgid "%qT is a variably modified type" msgstr "" -#: cp/pt.c:11969 +#: cp/pt.c:12494 #, gcc-internal-format msgid "integral expression %qE is not constant" msgstr "" -#: cp/pt.c:11987 +#: cp/pt.c:12512 #, gcc-internal-format msgid " trying to instantiate %qD" msgstr "" -#: cp/pt.c:14822 +#: cp/pt.c:15507 #, gcc-internal-format msgid "ambiguous class template instantiation for %q#T" msgstr "" -#: cp/pt.c:14825 +#: cp/pt.c:15510 #, gcc-internal-format msgid "%s %+#T" msgstr "" -#: cp/pt.c:14848 cp/pt.c:14931 +#: cp/pt.c:15533 cp/pt.c:15616 #, gcc-internal-format msgid "explicit instantiation of non-template %q#D" msgstr "" -#: cp/pt.c:14863 +#: cp/pt.c:15548 #, gcc-internal-format msgid "%qD is not a static data member of a class template" msgstr "" -#: cp/pt.c:14869 cp/pt.c:14926 +#: cp/pt.c:15554 cp/pt.c:15611 #, gcc-internal-format msgid "no matching template for %qD found" msgstr "" -#: cp/pt.c:14874 +#: cp/pt.c:15559 #, gcc-internal-format msgid "" "type %qT for explicit instantiation %qD does not match declared type %qT" msgstr "" -#: cp/pt.c:14882 +#: cp/pt.c:15567 #, gcc-internal-format msgid "explicit instantiation of %q#D" msgstr "" -#: cp/pt.c:14918 +#: cp/pt.c:15603 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#D" msgstr "" -#: cp/pt.c:14941 cp/pt.c:15033 +#: cp/pt.c:15626 cp/pt.c:15718 #, gcc-internal-format msgid "ISO C++ 1998 forbids the use of %<extern%> on explicit instantiations" msgstr "" -#: cp/pt.c:14946 cp/pt.c:15050 +#: cp/pt.c:15631 cp/pt.c:15735 #, gcc-internal-format msgid "storage class %qD applied to template instantiation" msgstr "" -#: cp/pt.c:15011 +#: cp/pt.c:15696 #, gcc-internal-format msgid "explicit instantiation of non-template type %qT" msgstr "" -#: cp/pt.c:15020 +#: cp/pt.c:15705 #, gcc-internal-format msgid "explicit instantiation of %q#T before definition of template" msgstr "" -#: cp/pt.c:15038 +#: cp/pt.c:15723 #, gcc-internal-format msgid "ISO C++ forbids the use of %qE on explicit instantiations" msgstr "" -#: cp/pt.c:15084 +#: cp/pt.c:15769 #, gcc-internal-format msgid "duplicate explicit instantiation of %q#T" msgstr "" @@ -33994,12 +35181,12 @@ msgstr "" #. member function or static data member of a class template #. shall be present in every translation unit in which it is #. explicitly instantiated. -#: cp/pt.c:15534 +#: cp/pt.c:16233 #, gcc-internal-format msgid "explicit instantiation of %qD but no definition available" msgstr "" -#: cp/pt.c:15700 +#: cp/pt.c:16399 #, gcc-internal-format msgid "" "template instantiation depth exceeds maximum of %d instantiating %q+D, " @@ -34007,34 +35194,34 @@ msgid "" "the maximum)" msgstr "" -#: cp/pt.c:16055 +#: cp/pt.c:16754 #, gcc-internal-format msgid "%q#T is not a valid type for a template constant parameter" msgstr "" -#: cp/pt.c:17053 +#: cp/pt.c:17751 #, gcc-internal-format msgid "" -"deducing auto from brace-enclosed initializer list requires #include " +"deducing from brace-enclosed initializer list requires #include " "<initializer_list>" msgstr "" -#: cp/pt.c:17094 +#: cp/pt.c:17801 #, gcc-internal-format msgid "unable to deduce %qT from %qE" msgstr "" -#: cp/repo.c:111 +#: cp/repo.c:119 #, gcc-internal-format msgid "-frepo must be used with -c" msgstr "" -#: cp/repo.c:200 +#: cp/repo.c:209 #, gcc-internal-format msgid "mysterious repository information in %s" msgstr "" -#: cp/repo.c:218 +#: cp/repo.c:227 #, gcc-internal-format msgid "can't create repository information file %qs" msgstr "" @@ -34143,802 +35330,805 @@ msgstr "" msgid " since %q+#D declared in base class" msgstr "" -#: cp/semantics.c:760 +#: cp/semantics.c:761 #, gcc-internal-format msgid "suggest explicit braces around empty body in %<do%> statement" msgstr "" -#: cp/semantics.c:1284 +#: cp/semantics.c:1286 #, gcc-internal-format msgid "type of asm operand %qE could not be determined" msgstr "" -#: cp/semantics.c:1340 +#: cp/semantics.c:1344 #, gcc-internal-format msgid "__label__ declarations are only allowed in function scopes" msgstr "" -#: cp/semantics.c:1438 +#: cp/semantics.c:1442 #, gcc-internal-format msgid "invalid use of member %q+D in static member function" msgstr "" -#: cp/semantics.c:1440 +#: cp/semantics.c:1444 #, gcc-internal-format msgid "invalid use of non-static data member %q+D" msgstr "" -#: cp/semantics.c:1441 cp/semantics.c:1483 +#: cp/semantics.c:1445 cp/semantics.c:1502 #, gcc-internal-format msgid "from this location" msgstr "" -#: cp/semantics.c:1482 +#: cp/semantics.c:1501 #, gcc-internal-format msgid "object missing in reference to %q+D" msgstr "" -#: cp/semantics.c:2006 +#: cp/semantics.c:2022 #, gcc-internal-format msgid "arguments to destructor are not allowed" msgstr "" -#: cp/semantics.c:2056 +#: cp/semantics.c:2080 #, gcc-internal-format msgid "%<this%> is unavailable for static member functions" msgstr "" -#: cp/semantics.c:2062 +#: cp/semantics.c:2086 #, gcc-internal-format msgid "invalid use of %<this%> in non-member function" msgstr "" -#: cp/semantics.c:2064 +#: cp/semantics.c:2088 #, gcc-internal-format msgid "invalid use of %<this%> at top level" msgstr "" -#: cp/semantics.c:2088 +#: cp/semantics.c:2112 #, gcc-internal-format msgid "invalid qualifying scope in pseudo-destructor name" msgstr "" -#: cp/semantics.c:2093 cp/typeck.c:2130 +#: cp/semantics.c:2117 cp/typeck.c:2147 #, gcc-internal-format msgid "qualified type %qT does not match destructor name ~%qT" msgstr "" -#: cp/semantics.c:2115 +#: cp/semantics.c:2139 #, gcc-internal-format msgid "%qE is not of type %qT" msgstr "" -#: cp/semantics.c:2159 +#: cp/semantics.c:2183 #, gcc-internal-format msgid "compound literal of non-object type %qT" msgstr "" -#: cp/semantics.c:2243 +#: cp/semantics.c:2267 #, gcc-internal-format msgid "template type parameters must use the keyword %<class%> or %<typename%>" msgstr "" -#: cp/semantics.c:2284 +#: cp/semantics.c:2309 #, gcc-internal-format msgid "" "invalid use of type %qT as a default value for a template template-parameter" msgstr "" -#: cp/semantics.c:2287 +#: cp/semantics.c:2312 #, gcc-internal-format msgid "invalid default argument for a template template parameter" msgstr "" -#: cp/semantics.c:2304 +#: cp/semantics.c:2329 #, gcc-internal-format msgid "definition of %q#T inside template parameter list" msgstr "" -#: cp/semantics.c:2315 +#: cp/semantics.c:2340 #, gcc-internal-format msgid "invalid definition of qualified type %qT" msgstr "" -#: cp/semantics.c:2531 +#: cp/semantics.c:2556 #, gcc-internal-format msgid "invalid base-class specification" msgstr "" -#: cp/semantics.c:2543 +#: cp/semantics.c:2568 #, gcc-internal-format msgid "base class %qT has cv qualifiers" msgstr "" -#: cp/semantics.c:2568 +#: cp/semantics.c:2593 +#, gcc-internal-format +msgid "incomplete type %qT used in nested name specifier" +msgstr "" + +#: cp/semantics.c:2597 #, gcc-internal-format -msgid "%Hincomplete type %qT used in nested name specifier" +msgid "reference to %<%T::%D%> is ambiguous" msgstr "" -#: cp/semantics.c:2572 +#: cp/semantics.c:2602 cp/typeck.c:1947 #, gcc-internal-format -msgid "%Hreference to %<%T::%D%> is ambiguous" +msgid "%qD is not a member of %qT" msgstr "" -#: cp/semantics.c:2576 +#: cp/semantics.c:2605 #, gcc-internal-format -msgid "%H%qD is not a member of %qT" +msgid "%qD is not a member of %qD" msgstr "" -#: cp/semantics.c:2579 +#: cp/semantics.c:2607 #, gcc-internal-format -msgid "%H%qD is not a member of %qD" +msgid "%<::%D%> has not been declared" msgstr "" -#: cp/semantics.c:2581 +#: cp/semantics.c:2803 cp/semantics.c:5532 #, gcc-internal-format -msgid "%H%<::%D%> has not been declared" +msgid "%qD is not captured" msgstr "" -#: cp/semantics.c:2722 +#: cp/semantics.c:2809 #, gcc-internal-format msgid "use of %<auto%> variable from containing function" msgstr "" -#: cp/semantics.c:2724 +#: cp/semantics.c:2811 #, gcc-internal-format msgid " %q+#D declared here" msgstr "" -#: cp/semantics.c:2762 +#: cp/semantics.c:2849 #, gcc-internal-format msgid "" "template parameter %qD of type %qT is not allowed in an integral constant " "expression because it is not of integral or enumeration type" msgstr "" -#: cp/semantics.c:2926 +#: cp/semantics.c:3013 #, gcc-internal-format msgid "%qD cannot appear in a constant-expression" msgstr "" -#: cp/semantics.c:2934 +#: cp/semantics.c:3021 #, gcc-internal-format msgid "use of namespace %qD as expression" msgstr "" -#: cp/semantics.c:2939 +#: cp/semantics.c:3026 #, gcc-internal-format msgid "use of class template %qT as expression" msgstr "" #. Ambiguous reference to base members. -#: cp/semantics.c:2945 +#: cp/semantics.c:3032 #, gcc-internal-format msgid "request for member %qD is ambiguous in multiple inheritance lattice" msgstr "" -#: cp/semantics.c:3067 cp/semantics.c:4798 +#: cp/semantics.c:3154 cp/semantics.c:4917 #, gcc-internal-format msgid "type of %qE is unknown" msgstr "" -#: cp/semantics.c:3082 +#: cp/semantics.c:3169 #, gcc-internal-format msgid "cannot apply %<offsetof%> to destructor %<~%T%>" msgstr "" -#: cp/semantics.c:3093 +#: cp/semantics.c:3180 #, gcc-internal-format msgid "cannot apply %<offsetof%> to member function %qD" msgstr "" -#: cp/semantics.c:3538 +#: cp/semantics.c:3639 #, gcc-internal-format msgid "%qD is not a variable in clause %qs" msgstr "" -#: cp/semantics.c:3547 cp/semantics.c:3569 cp/semantics.c:3591 +#: cp/semantics.c:3648 cp/semantics.c:3670 cp/semantics.c:3692 #, gcc-internal-format msgid "%qD appears more than once in data clauses" msgstr "" -#: cp/semantics.c:3561 +#: cp/semantics.c:3662 #, gcc-internal-format msgid "%qD is not a variable in clause %<firstprivate%>" msgstr "" -#: cp/semantics.c:3583 +#: cp/semantics.c:3684 #, gcc-internal-format msgid "%qD is not a variable in clause %<lastprivate%>" msgstr "" -#: cp/semantics.c:3613 +#: cp/semantics.c:3714 #, gcc-internal-format msgid "num_threads expression must be integral" msgstr "" -#: cp/semantics.c:3627 +#: cp/semantics.c:3728 #, gcc-internal-format msgid "schedule chunk size expression must be integral" msgstr "" -#: cp/semantics.c:3759 +#: cp/semantics.c:3860 #, gcc-internal-format msgid "%qE has reference type for %qs" msgstr "" -#: cp/semantics.c:3830 +#: cp/semantics.c:3931 #, gcc-internal-format msgid "%<threadprivate%> %qD is not file, namespace or block scope variable" msgstr "" -#: cp/semantics.c:3844 +#: cp/semantics.c:3945 #, gcc-internal-format msgid "%<threadprivate%> %qE directive not in %qT definition" msgstr "" -#: cp/semantics.c:3979 +#: cp/semantics.c:4090 #, gcc-internal-format -msgid "%Hinvalid controlling predicate" +msgid "difference between %qE and %qD does not have integer type" msgstr "" -#: cp/semantics.c:3989 +#. Report the error. +#: cp/semantics.c:4616 #, gcc-internal-format -msgid "%Hdifference between %qE and %qD does not have integer type" +msgid "static assertion failed: %E" msgstr "" -#: cp/semantics.c:4084 +#: cp/semantics.c:4618 #, gcc-internal-format -msgid "%Hinvalid increment expression" +msgid "non-constant condition for static assertion" msgstr "" -#: cp/semantics.c:4211 cp/semantics.c:4282 +#: cp/semantics.c:4706 cp/semantics.c:4828 #, gcc-internal-format -msgid "%Hexpected iteration declaration or initialization" +msgid "argument to decltype must be an expression" msgstr "" -#: cp/semantics.c:4222 +#: cp/semantics.c:4778 #, gcc-internal-format -msgid "%Hmissing controlling predicate" +msgid "%qE refers to a set of overloaded functions" msgstr "" -#: cp/semantics.c:4228 +#: cp/semantics.c:4861 #, gcc-internal-format -msgid "%Hmissing increment expression" +msgid "unable to determine the declared type of expression %<%E%>" msgstr "" -#: cp/semantics.c:4308 +#: cp/semantics.c:5122 #, gcc-internal-format -msgid "%Hinvalid type for iteration variable %qE" +msgid "__is_convertible_to" msgstr "" -#. Report the error. -#: cp/semantics.c:4510 +#: cp/semantics.c:5163 cp/semantics.c:5173 #, gcc-internal-format -msgid "static assertion failed: %E" +msgid "incomplete type %qT not allowed" msgstr "" -#: cp/semantics.c:4512 +#: cp/semantics.c:5236 #, gcc-internal-format -msgid "non-constant condition for static assertion" +msgid "the type %qT of constexpr variable %qD is not literal" msgstr "" -#: cp/semantics.c:4604 cp/semantics.c:4721 +#: cp/semantics.c:5271 #, gcc-internal-format -msgid "argument to decltype must be an expression" +msgid "parameter %q#D is not of literal type" msgstr "" -#: cp/semantics.c:4671 +#: cp/semantics.c:5284 #, gcc-internal-format -msgid "%qE refers to a set of overloaded functions" +msgid "return type %qT of function %qD is not a literal type" msgstr "" -#: cp/semantics.c:4754 +#: cp/semantics.c:5578 #, gcc-internal-format -msgid "unable to determine the declared type of expression %<%E%>" +msgid "cannot capture %qE by reference" msgstr "" -#: cp/semantics.c:4985 +#: cp/semantics.c:5600 #, gcc-internal-format -msgid "__is_convertible_to" +msgid "already captured %<this%> in lambda expression" msgstr "" -#: cp/semantics.c:5024 cp/semantics.c:5034 +#: cp/semantics.c:5716 #, gcc-internal-format -msgid "incomplete type %qT not allowed" +msgid "%<this%> was not captured for this lambda function" msgstr "" -#: cp/tree.c:882 +#: cp/tree.c:918 #, gcc-internal-format msgid "%qV qualifiers cannot be applied to %qT" msgstr "" -#: cp/tree.c:2230 +#: cp/tree.c:2466 #, gcc-internal-format msgid "%qE attribute can only be applied to Java class definitions" msgstr "" -#: cp/tree.c:2259 +#: cp/tree.c:2495 #, gcc-internal-format msgid "%qE attribute can only be applied to class definitions" msgstr "" -#: cp/tree.c:2265 +#: cp/tree.c:2501 #, gcc-internal-format msgid "%qE is obsolete; g++ vtables are now COM-compatible by default" msgstr "" -#: cp/tree.c:2289 +#: cp/tree.c:2525 #, gcc-internal-format msgid "requested init_priority is not an integer constant" msgstr "" -#: cp/tree.c:2310 +#: cp/tree.c:2546 #, gcc-internal-format msgid "" "can only use %qE attribute on file-scope definitions of objects of class type" msgstr "" -#: cp/tree.c:2318 +#: cp/tree.c:2554 #, gcc-internal-format msgid "requested init_priority is out of range" msgstr "" -#: cp/tree.c:2328 +#: cp/tree.c:2564 #, gcc-internal-format msgid "requested init_priority is reserved for internal use" msgstr "" -#: cp/tree.c:2339 +#: cp/tree.c:2575 #, gcc-internal-format msgid "%qE attribute is not supported on this platform" msgstr "" -#: cp/typeck.c:457 cp/typeck.c:472 cp/typeck.c:574 +#: cp/tree.c:3155 +#, gcc-internal-format +msgid "lang_* check: failed in %s, at %s:%d" +msgstr "" + +#: cp/typeck.c:465 cp/typeck.c:480 cp/typeck.c:582 #, gcc-internal-format msgid "%s between distinct pointer types %qT and %qT lacks a cast" msgstr "" -#: cp/typeck.c:534 +#: cp/typeck.c:542 #, gcc-internal-format msgid "" "ISO C++ forbids %s between pointer of type %<void *%> and pointer-to-function" msgstr "" -#: cp/typeck.c:595 +#: cp/typeck.c:603 #, gcc-internal-format msgid "%s between distinct pointer-to-member types %qT and %qT lacks a cast" msgstr "" -#: cp/typeck.c:1200 +#: cp/typeck.c:1212 #, gcc-internal-format msgid "canonical types differ for identical types %T and %T" msgstr "" -#: cp/typeck.c:1207 +#: cp/typeck.c:1219 #, gcc-internal-format msgid "same canonical type node for different types %T and %T" msgstr "" -#: cp/typeck.c:1320 +#: cp/typeck.c:1332 #, gcc-internal-format msgid "invalid application of %qs to a member function" msgstr "" -#: cp/typeck.c:1388 +#: cp/typeck.c:1400 #, gcc-internal-format msgid "invalid application of %<sizeof%> to a bit-field" msgstr "" -#: cp/typeck.c:1396 +#: cp/typeck.c:1408 #, gcc-internal-format msgid "ISO C++ forbids applying %<sizeof%> to an expression of function type" msgstr "" -#: cp/typeck.c:1445 +#: cp/typeck.c:1457 #, gcc-internal-format msgid "invalid application of %<__alignof%> to a bit-field" msgstr "" -#: cp/typeck.c:1456 +#: cp/typeck.c:1468 #, gcc-internal-format msgid "" "ISO C++ forbids applying %<__alignof%> to an expression of function type" msgstr "" -#: cp/typeck.c:1514 +#: cp/typeck.c:1526 #, gcc-internal-format msgid "invalid use of non-static member function" msgstr "" -#: cp/typeck.c:1776 +#: cp/typeck.c:1793 #, gcc-internal-format msgid "deprecated conversion from string constant to %qT" msgstr "" -#: cp/typeck.c:1899 cp/typeck.c:2274 +#: cp/typeck.c:1916 cp/typeck.c:2291 #, gcc-internal-format msgid "request for member %qD in %qE, which is of non-class type %qT" msgstr "" -#: cp/typeck.c:1928 +#: cp/typeck.c:1945 #, gcc-internal-format msgid "invalid use of nonstatic data member %qE" msgstr "" -#: cp/typeck.c:1930 -#, gcc-internal-format -msgid "%qD is not a member of %qT" -msgstr "" - -#: cp/typeck.c:1983 +#: cp/typeck.c:2000 #, gcc-internal-format msgid "invalid access to non-static data member %qD of NULL object" msgstr "" -#: cp/typeck.c:1986 cp/typeck.c:2017 +#: cp/typeck.c:2003 cp/typeck.c:2034 #, gcc-internal-format msgid "(perhaps the %<offsetof%> macro was used incorrectly)" msgstr "" -#: cp/typeck.c:2014 +#: cp/typeck.c:2031 #, gcc-internal-format msgid "invalid access to non-static data member %qD of NULL object" msgstr "" -#: cp/typeck.c:2104 -#, gcc-internal-format -msgid "invalid use of %qD" -msgstr "" - -#: cp/typeck.c:2142 +#: cp/typeck.c:2159 #, gcc-internal-format msgid "object type %qT does not match destructor name ~%qT" msgstr "" -#: cp/typeck.c:2150 +#: cp/typeck.c:2167 #, gcc-internal-format msgid "the type being destroyed is %qT, but the destructor refers to %qT" msgstr "" -#: cp/typeck.c:2189 cp/typeck.c:2209 +#: cp/typeck.c:2206 cp/typeck.c:2226 #, gcc-internal-format msgid "%qD is not a template" msgstr "" -#: cp/typeck.c:2313 +#: cp/typeck.c:2330 #, gcc-internal-format msgid "%<%D::%D%> is not a member of %qT" msgstr "" -#: cp/typeck.c:2329 +#: cp/typeck.c:2346 #, gcc-internal-format msgid "%qT is not a base of %qT" msgstr "" -#: cp/typeck.c:2349 +#: cp/typeck.c:2366 #, gcc-internal-format msgid "%qD has no member named %qE" msgstr "" -#: cp/typeck.c:2365 +#: cp/typeck.c:2382 #, gcc-internal-format msgid "%qD is not a member template function" msgstr "" -#: cp/typeck.c:2509 +#: cp/typeck.c:2527 #, gcc-internal-format msgid "%qT is not a pointer-to-object type" msgstr "" -#: cp/typeck.c:2537 +#: cp/typeck.c:2555 #, gcc-internal-format msgid "invalid use of %qs on pointer to member" msgstr "" -#: cp/typeck.c:2541 +#: cp/typeck.c:2559 #, gcc-internal-format msgid "invalid type argument of %qs" msgstr "" -#: cp/typeck.c:2543 +#: cp/typeck.c:2561 #, gcc-internal-format msgid "invalid type argument" msgstr "" -#: cp/typeck.c:2570 +#: cp/typeck.c:2588 #, gcc-internal-format msgid "subscript missing in array reference" msgstr "" -#: cp/typeck.c:2650 +#: cp/typeck.c:2668 #, gcc-internal-format msgid "ISO C++ forbids subscripting non-lvalue array" msgstr "" -#: cp/typeck.c:2662 +#: cp/typeck.c:2680 #, gcc-internal-format msgid "subscripting array declared %<register%>" msgstr "" -#: cp/typeck.c:2754 +#: cp/typeck.c:2772 #, gcc-internal-format msgid "object missing in use of %qE" msgstr "" -#: cp/typeck.c:2914 +#: cp/typeck.c:2954 #, gcc-internal-format msgid "ISO C++ forbids calling %<::main%> from within program" msgstr "" -#: cp/typeck.c:2933 +#: cp/typeck.c:2973 #, gcc-internal-format msgid "" "must use %<.*%> or %<->*%> to call pointer-to-member function in %<%E (...)%" ">, e.g. %<(... ->* %E) (...)%>" msgstr "" -#: cp/typeck.c:2948 +#: cp/typeck.c:2988 #, gcc-internal-format msgid "%qE cannot be used as a function" msgstr "" -#: cp/typeck.c:3041 +#: cp/typeck.c:3079 #, gcc-internal-format msgid "too many arguments to %s %q+#D" msgstr "" -#: cp/typeck.c:3043 cp/typeck.c:3156 +#: cp/typeck.c:3081 cp/typeck.c:3194 #, gcc-internal-format msgid "at this point in file" msgstr "" -#: cp/typeck.c:3046 +#: cp/typeck.c:3084 #, gcc-internal-format msgid "too many arguments to function" msgstr "" -#: cp/typeck.c:3081 +#: cp/typeck.c:3119 #, gcc-internal-format msgid "parameter %P of %qD has incomplete type %qT" msgstr "" -#: cp/typeck.c:3084 +#: cp/typeck.c:3122 #, gcc-internal-format msgid "parameter %P has incomplete type %qT" msgstr "" -#: cp/typeck.c:3154 +#: cp/typeck.c:3192 #, gcc-internal-format msgid "too few arguments to %s %q+#D" msgstr "" -#: cp/typeck.c:3159 +#: cp/typeck.c:3197 #, gcc-internal-format msgid "too few arguments to function" msgstr "" -#: cp/typeck.c:3365 cp/typeck.c:3376 +#: cp/typeck.c:3402 cp/typeck.c:3413 #, gcc-internal-format msgid "assuming cast to type %qT from overloaded function" msgstr "" -#: cp/typeck.c:3584 +#. Some sort of arithmetic operation involving NULL was +#. performed. +#: cp/typeck.c:3456 +#, gcc-internal-format +msgid "NULL used in arithmetic" +msgstr "" + +#: cp/typeck.c:3647 #, gcc-internal-format msgid "left rotate count is negative" msgstr "" -#: cp/typeck.c:3585 +#: cp/typeck.c:3648 #, gcc-internal-format msgid "right rotate count is negative" msgstr "" -#: cp/typeck.c:3591 +#: cp/typeck.c:3654 #, gcc-internal-format msgid "left rotate count >= width of type" msgstr "" -#: cp/typeck.c:3592 +#: cp/typeck.c:3655 #, gcc-internal-format msgid "right rotate count >= width of type" msgstr "" -#: cp/typeck.c:3611 cp/typeck.c:3834 +#: cp/typeck.c:3674 cp/typeck.c:3897 #, gcc-internal-format msgid "comparison with string literal results in unspecified behaviour" msgstr "" -#: cp/typeck.c:3651 cp/typeck.c:3659 cp/typeck.c:3854 cp/typeck.c:3862 +#: cp/typeck.c:3714 cp/typeck.c:3722 cp/typeck.c:3917 cp/typeck.c:3925 #, gcc-internal-format msgid "ISO C++ forbids comparison between pointer and integer" msgstr "" -#: cp/typeck.c:3879 +#: cp/typeck.c:3942 #, gcc-internal-format msgid "unordered comparison on non-floating point argument" msgstr "" -#: cp/typeck.c:3918 +#: cp/typeck.c:3982 #, gcc-internal-format msgid "invalid operands of types %qT and %qT to binary %qO" msgstr "" -#. Some sort of arithmetic operation involving NULL was -#. performed. Note that pointer-difference and pointer-addition -#. have already been handled above, and so we don't end up here in -#. that case. -#: cp/typeck.c:4008 -#, gcc-internal-format -msgid "NULL used in arithmetic" -msgstr "" - -#: cp/typeck.c:4075 +#: cp/typeck.c:4123 #, gcc-internal-format msgid "ISO C++ forbids using pointer of type %<void *%> in subtraction" msgstr "" -#: cp/typeck.c:4077 +#: cp/typeck.c:4125 #, gcc-internal-format msgid "ISO C++ forbids using pointer to a function in subtraction" msgstr "" -#: cp/typeck.c:4079 +#: cp/typeck.c:4127 #, gcc-internal-format msgid "ISO C++ forbids using pointer to a method in subtraction" msgstr "" -#: cp/typeck.c:4092 +#: cp/typeck.c:4140 #, gcc-internal-format msgid "invalid use of a pointer to an incomplete type in pointer arithmetic" msgstr "" -#: cp/typeck.c:4152 +#: cp/typeck.c:4199 +#, gcc-internal-format +msgid "taking address of %s %qE" +msgstr "" + +#: cp/typeck.c:4212 #, gcc-internal-format msgid "invalid use of %qE to form a pointer-to-member-function" msgstr "" -#: cp/typeck.c:4155 +#: cp/typeck.c:4215 #, gcc-internal-format msgid " a qualified-id is required" msgstr "" -#: cp/typeck.c:4160 +#: cp/typeck.c:4220 #, gcc-internal-format msgid "" "parentheses around %qE cannot be used to form a pointer-to-member-function" msgstr "" -#: cp/typeck.c:4183 +#: cp/typeck.c:4243 #, gcc-internal-format msgid "taking address of temporary" msgstr "" -#: cp/typeck.c:4443 +#: cp/typeck.c:4513 #, gcc-internal-format msgid "ISO C++ forbids incrementing an enum" msgstr "" -#: cp/typeck.c:4444 +#: cp/typeck.c:4514 #, gcc-internal-format msgid "ISO C++ forbids decrementing an enum" msgstr "" -#: cp/typeck.c:4460 +#: cp/typeck.c:4530 #, gcc-internal-format msgid "cannot increment a pointer to incomplete type %qT" msgstr "" -#: cp/typeck.c:4461 +#: cp/typeck.c:4531 #, gcc-internal-format msgid "cannot decrement a pointer to incomplete type %qT" msgstr "" -#: cp/typeck.c:4472 +#: cp/typeck.c:4542 #, gcc-internal-format msgid "ISO C++ forbids incrementing a pointer of type %qT" msgstr "" -#: cp/typeck.c:4473 +#: cp/typeck.c:4543 #, gcc-internal-format msgid "ISO C++ forbids decrementing a pointer of type %qT" msgstr "" -#: cp/typeck.c:4499 +#: cp/typeck.c:4569 #, gcc-internal-format msgid "invalid use of Boolean expression as operand to %<operator--%>" msgstr "" -#: cp/typeck.c:4534 +#: cp/typeck.c:4604 #, gcc-internal-format msgid "ISO C++ forbids taking address of function %<::main%>" msgstr "" #. An expression like &memfn. -#: cp/typeck.c:4595 +#: cp/typeck.c:4665 #, gcc-internal-format msgid "" "ISO C++ forbids taking the address of an unqualified or parenthesized non-" "static member function to form a pointer to member function. Say %<&%T::%D%>" msgstr "" -#: cp/typeck.c:4600 +#: cp/typeck.c:4670 #, gcc-internal-format msgid "" "ISO C++ forbids taking the address of a bound member function to form a " "pointer to member function. Say %<&%T::%D%>" msgstr "" -#: cp/typeck.c:4629 +#: cp/typeck.c:4699 #, gcc-internal-format msgid "ISO C++ forbids taking the address of a cast to a non-lvalue expression" msgstr "" -#: cp/typeck.c:4657 +#: cp/typeck.c:4727 #, gcc-internal-format msgid "cannot create pointer to reference member %qD" msgstr "" -#: cp/typeck.c:4872 +#: cp/typeck.c:4942 #, gcc-internal-format msgid "cannot take the address of %<this%>, which is an rvalue expression" msgstr "" -#: cp/typeck.c:4895 +#: cp/typeck.c:4965 #, gcc-internal-format msgid "address of explicit register variable %qD requested" msgstr "" -#: cp/typeck.c:4900 +#: cp/typeck.c:4970 #, gcc-internal-format msgid "address requested for %qD, which is declared %<register%>" msgstr "" -#: cp/typeck.c:4967 +#: cp/typeck.c:5037 cp/typeck.c:5064 #, gcc-internal-format msgid "%s expression list treated as compound expression" msgstr "" -#: cp/typeck.c:5039 +#: cp/typeck.c:5137 #, gcc-internal-format msgid "no context to resolve type of %qE" msgstr "" -#: cp/typeck.c:5070 +#: cp/typeck.c:5168 #, gcc-internal-format msgid "cast from type %qT to type %qT casts away qualifiers" msgstr "" -#: cp/typeck.c:5075 +#: cp/typeck.c:5173 #, gcc-internal-format msgid "static_cast from type %qT to type %qT casts away qualifiers" msgstr "" -#: cp/typeck.c:5080 +#: cp/typeck.c:5178 #, gcc-internal-format msgid "reinterpret_cast from type %qT to type %qT casts away qualifiers" msgstr "" -#: cp/typeck.c:5400 +#: cp/typeck.c:5513 #, gcc-internal-format msgid "invalid static_cast from type %qT to type %qT" msgstr "" -#: cp/typeck.c:5423 +#: cp/typeck.c:5536 #, gcc-internal-format msgid "converting from %qT to %qT" msgstr "" -#: cp/typeck.c:5472 +#: cp/typeck.c:5585 #, gcc-internal-format msgid "invalid cast of an rvalue expression of type %qT to type %qT" msgstr "" -#: cp/typeck.c:5534 +#: cp/typeck.c:5652 #, gcc-internal-format msgid "cast from %qT to %qT loses precision" msgstr "" -#: cp/typeck.c:5564 +#: cp/typeck.c:5682 #, gcc-internal-format msgid "cast from %qT to %qT increases required alignment of target type" msgstr "" @@ -34947,160 +36137,172 @@ msgstr "" #. where possible, and it is necessary in some cases. DR 195 #. addresses this issue, but as of 2004/10/26 is still in #. drafting. -#: cp/typeck.c:5583 +#: cp/typeck.c:5701 #, gcc-internal-format msgid "" "ISO C++ forbids casting between pointer-to-function and pointer-to-object" msgstr "" -#: cp/typeck.c:5595 +#: cp/typeck.c:5714 #, gcc-internal-format msgid "invalid cast from type %qT to type %qT" msgstr "" -#: cp/typeck.c:5651 +#: cp/typeck.c:5770 #, gcc-internal-format msgid "" "invalid use of const_cast with type %qT, which is not a pointer, reference, " "nor a pointer-to-data-member type" msgstr "" -#: cp/typeck.c:5660 +#: cp/typeck.c:5779 #, gcc-internal-format msgid "" "invalid use of const_cast with type %qT, which is a pointer or reference to " "a function type" msgstr "" -#: cp/typeck.c:5685 +#: cp/typeck.c:5804 #, gcc-internal-format msgid "invalid const_cast of an rvalue of type %qT to type %qT" msgstr "" -#: cp/typeck.c:5734 +#: cp/typeck.c:5853 #, gcc-internal-format msgid "invalid const_cast from type %qT to type %qT" msgstr "" -#: cp/typeck.c:5811 cp/typeck.c:5819 +#: cp/typeck.c:5930 cp/typeck.c:5938 #, gcc-internal-format msgid "ISO C++ forbids casting to an array type %qT" msgstr "" -#: cp/typeck.c:5828 +#: cp/typeck.c:5947 #, gcc-internal-format msgid "invalid cast to function type %qT" msgstr "" -#: cp/typeck.c:6069 +#: cp/typeck.c:6193 #, gcc-internal-format msgid " in evaluation of %<%Q(%#T, %#T)%>" msgstr "" -#: cp/typeck.c:6120 +#: cp/typeck.c:6247 #, gcc-internal-format msgid "incompatible types in assignment of %qT to %qT" msgstr "" -#: cp/typeck.c:6133 +#: cp/typeck.c:6261 #, gcc-internal-format msgid "array used as initializer" msgstr "" -#: cp/typeck.c:6135 +#: cp/typeck.c:6263 #, gcc-internal-format msgid "invalid array assignment" msgstr "" -#: cp/typeck.c:6233 +#: cp/typeck.c:6363 #, gcc-internal-format msgid " in pointer to member function conversion" msgstr "" -#: cp/typeck.c:6244 +#: cp/typeck.c:6374 #, gcc-internal-format msgid "pointer to member conversion via virtual base %qT" msgstr "" -#: cp/typeck.c:6284 cp/typeck.c:6296 +#: cp/typeck.c:6414 cp/typeck.c:6427 #, gcc-internal-format msgid " in pointer to member conversion" msgstr "" -#: cp/typeck.c:6374 +#: cp/typeck.c:6505 #, gcc-internal-format msgid "invalid conversion to type %qT from type %qT" msgstr "" -#: cp/typeck.c:6645 +#: cp/typeck.c:6776 #, gcc-internal-format msgid "cannot convert %qT to %qT for argument %qP to %qD" msgstr "" -#: cp/typeck.c:6648 +#: cp/typeck.c:6779 #, gcc-internal-format msgid "cannot convert %qT to %qT in %s" msgstr "" -#: cp/typeck.c:6662 +#: cp/typeck.c:6793 #, gcc-internal-format msgid "%s might be a candidate for a format attribute" msgstr "" -#: cp/typeck.c:6751 cp/typeck.c:6753 +#: cp/typeck.c:6886 cp/typeck.c:6888 #, gcc-internal-format msgid "in passing argument %P of %q+D" msgstr "" -#: cp/typeck.c:6803 +#: cp/typeck.c:6943 #, gcc-internal-format msgid "returning reference to temporary" msgstr "" -#: cp/typeck.c:6810 +#: cp/typeck.c:6950 #, gcc-internal-format msgid "reference to non-lvalue returned" msgstr "" -#: cp/typeck.c:6826 +#: cp/typeck.c:6966 #, gcc-internal-format msgid "reference to local variable %q+D returned" msgstr "" -#: cp/typeck.c:6829 +#: cp/typeck.c:6969 #, gcc-internal-format msgid "address of local variable %q+D returned" msgstr "" -#: cp/typeck.c:6864 +#: cp/typeck.c:7004 #, gcc-internal-format msgid "returning a value from a destructor" msgstr "" #. If a return statement appears in a handler of the #. function-try-block of a constructor, the program is ill-formed. -#: cp/typeck.c:6872 +#: cp/typeck.c:7012 #, gcc-internal-format msgid "cannot return from a handler of a function-try-block of a constructor" msgstr "" #. You can't return a value from a constructor. -#: cp/typeck.c:6875 +#: cp/typeck.c:7015 #, gcc-internal-format msgid "returning a value from a constructor" msgstr "" -#: cp/typeck.c:6900 +#: cp/typeck.c:7033 +#, gcc-internal-format +msgid "" +"lambda return type can only be deduced when the return statement is the only " +"statement in the function body" +msgstr "" + +#: cp/typeck.c:7039 +#, gcc-internal-format +msgid "inconsistent types %qT and %qT deduced for lambda return type" +msgstr "" + +#: cp/typeck.c:7065 #, gcc-internal-format msgid "return-statement with no value, in function returning %qT" msgstr "" -#: cp/typeck.c:6921 +#: cp/typeck.c:7086 #, gcc-internal-format msgid "return-statement with a value, in function returning 'void'" msgstr "" -#: cp/typeck.c:6951 +#: cp/typeck.c:7116 #, gcc-internal-format msgid "" "%<operator new%> must not return NULL unless it is declared %<throw()%> (or -" @@ -35178,184 +36380,169 @@ msgstr "" msgid "cannot allocate an object of abstract type %qT" msgstr "" -#: cp/typeck2.c:315 +#: cp/typeck2.c:316 #, gcc-internal-format -msgid "%J because the following virtual functions are pure within %qT:" +msgid " because the following virtual functions are pure within %qT:" msgstr "" -#: cp/typeck2.c:319 +#: cp/typeck2.c:320 #, gcc-internal-format msgid "\t%+#D" msgstr "" -#: cp/typeck2.c:326 +#: cp/typeck2.c:328 #, gcc-internal-format -msgid "%J since type %qT has pure virtual functions" +msgid " since type %qT has pure virtual functions" msgstr "" -#: cp/typeck2.c:606 +#: cp/typeck2.c:608 #, gcc-internal-format msgid "constructor syntax used, but no constructor declared for type %qT" msgstr "" -#: cp/typeck2.c:620 +#: cp/typeck2.c:622 #, gcc-internal-format msgid "cannot initialize arrays using this syntax" msgstr "" -#: cp/typeck2.c:706 +#: cp/typeck2.c:708 #, gcc-internal-format msgid "narrowing conversion of %qE from %qT to %qT inside { }" msgstr "" -#: cp/typeck2.c:764 +#: cp/typeck2.c:766 #, gcc-internal-format msgid "int-array initialized from non-wide string" msgstr "" -#: cp/typeck2.c:769 +#: cp/typeck2.c:771 #, gcc-internal-format msgid "int-array initialized from incompatible wide string" msgstr "" -#: cp/typeck2.c:830 +#: cp/typeck2.c:786 +#, gcc-internal-format +msgid "initializer-string for array of chars is too long" +msgstr "" + +#: cp/typeck2.c:832 #, gcc-internal-format msgid "cannot initialize aggregate of type %qT with a compound literal" msgstr "" -#: cp/typeck2.c:839 +#: cp/typeck2.c:847 #, gcc-internal-format msgid "array must be initialized with a brace-enclosed initializer" msgstr "" -#: cp/typeck2.c:921 cp/typeck2.c:1029 +#: cp/typeck2.c:934 cp/typeck2.c:1042 #, gcc-internal-format msgid "non-trivial designated initializers not supported" msgstr "" -#: cp/typeck2.c:1053 cp/typeck2.c:1067 +#: cp/typeck2.c:1066 cp/typeck2.c:1080 #, gcc-internal-format msgid "missing initializer for member %qD" msgstr "" -#: cp/typeck2.c:1058 +#: cp/typeck2.c:1071 #, gcc-internal-format msgid "uninitialized const member %qD" msgstr "" -#: cp/typeck2.c:1060 +#: cp/typeck2.c:1073 #, gcc-internal-format msgid "member %qD with uninitialized const fields" msgstr "" -#: cp/typeck2.c:1062 +#: cp/typeck2.c:1075 #, gcc-internal-format msgid "member %qD is uninitialized reference" msgstr "" -#: cp/typeck2.c:1130 +#: cp/typeck2.c:1143 #, gcc-internal-format msgid "no field %qD found in union being initialized" msgstr "" -#: cp/typeck2.c:1139 +#: cp/typeck2.c:1152 #, gcc-internal-format msgid "index value instead of field name in union initializer" msgstr "" -#: cp/typeck2.c:1298 +#: cp/typeck2.c:1311 #, gcc-internal-format msgid "circular pointer delegation detected" msgstr "" -#: cp/typeck2.c:1311 +#: cp/typeck2.c:1324 #, gcc-internal-format msgid "base operand of %<->%> has non-pointer type %qT" msgstr "" -#: cp/typeck2.c:1335 +#: cp/typeck2.c:1348 #, gcc-internal-format msgid "result of %<operator->()%> yields non-pointer result" msgstr "" -#: cp/typeck2.c:1337 +#: cp/typeck2.c:1350 #, gcc-internal-format msgid "base operand of %<->%> is not a pointer" msgstr "" -#: cp/typeck2.c:1359 +#: cp/typeck2.c:1372 #, gcc-internal-format msgid "%qE cannot be used as a member pointer, since it is of type %qT" msgstr "" -#: cp/typeck2.c:1368 +#: cp/typeck2.c:1381 #, gcc-internal-format msgid "cannot apply member pointer %qE to %qE, which is of non-class type %qT" msgstr "" -#: cp/typeck2.c:1390 +#: cp/typeck2.c:1403 #, gcc-internal-format msgid "pointer to member type %qT incompatible with object type %qT" msgstr "" -#: cp/typeck2.c:1450 +#: cp/typeck2.c:1464 #, gcc-internal-format msgid "invalid value-initialization of reference types" msgstr "" -#: cp/typeck2.c:1637 +#: cp/typeck2.c:1655 #, gcc-internal-format msgid "call to function %qD which throws incomplete type %q#T" msgstr "" -#: cp/typeck2.c:1640 +#: cp/typeck2.c:1658 #, gcc-internal-format msgid "call to function which throws incomplete type %q#T" msgstr "" -#: fortran/f95-lang.c:208 +#: fortran/f95-lang.c:214 #, gcc-internal-format msgid "Unexpected type in truthvalue_conversion" msgstr "" -#: fortran/f95-lang.c:270 +#: fortran/f95-lang.c:273 #, gcc-internal-format msgid "can't open input file: %s" msgstr "" -#: fortran/f95-lang.c:596 -#, gcc-internal-format -msgid "global register variable %qs used in nested function" -msgstr "" - -#: fortran/f95-lang.c:600 -#, gcc-internal-format -msgid "register variable %qs used in nested function" -msgstr "" - -#: fortran/f95-lang.c:607 -#, gcc-internal-format -msgid "address of global register variable %qs requested" -msgstr "" - -#: fortran/f95-lang.c:625 -#, gcc-internal-format -msgid "address of register variable %qs requested" -msgstr "" - #: fortran/options.c:238 #, gcc-internal-format msgid "-fexcess-precision=standard for Fortran" msgstr "" -#: fortran/trans-array.c:5870 +#: fortran/trans-array.c:6018 #, gcc-internal-format msgid "" "Possible frontend bug: Deferred array size without pointer, allocatable " "attribute or derived type without allocatable components." msgstr "" -#: fortran/trans-array.c:6351 +#: fortran/trans-array.c:6504 #, gcc-internal-format msgid "bad expression type during walk (%d)" msgstr "" @@ -35365,107 +36552,107 @@ msgstr "" msgid "gfc_conv_constant_to_tree(): invalid type: %s" msgstr "" -#: fortran/trans-decl.c:1071 +#: fortran/trans-decl.c:1160 #, gcc-internal-format msgid "intrinsic variable which isn't a procedure" msgstr "" -#: fortran/trans-decl.c:3254 +#: fortran/trans-decl.c:3380 #, gcc-internal-format msgid "backend decl for module variable %s already exists" msgstr "" -#: fortran/trans-expr.c:1322 +#: fortran/trans-expr.c:1340 #, gcc-internal-format msgid "Unknown intrinsic op" msgstr "" -#: fortran/trans-intrinsic.c:734 +#: fortran/trans-intrinsic.c:738 #, gcc-internal-format msgid "Intrinsic function %s(%d) not recognized" msgstr "" -#: fortran/trans-io.c:2101 +#: fortran/trans-io.c:2121 #, gcc-internal-format msgid "Bad IO basetype (%d)" msgstr "" -#: fortran/trans-openmp.c:1632 +#: fortran/trans-openmp.c:1637 #, gcc-internal-format msgid "gfc_trans_omp_workshare(): Bad statement code" msgstr "" -#: fortran/trans-types.c:378 +#: fortran/trans-types.c:465 #, gcc-internal-format msgid "integer kind=8 not available for -fdefault-integer-8 option" msgstr "" -#: fortran/trans-types.c:401 +#: fortran/trans-types.c:488 #, gcc-internal-format msgid "real kind=8 not available for -fdefault-real-8 option" msgstr "" -#: fortran/trans-types.c:414 +#: fortran/trans-types.c:501 #, gcc-internal-format msgid "Use of -fdefault-double-8 requires -fdefault-real-8" msgstr "" -#: fortran/trans-types.c:1250 +#: fortran/trans-types.c:1345 #, gcc-internal-format msgid "Array element size too big" msgstr "" -#: fortran/trans.c:1241 +#: fortran/trans.c:1277 #, gcc-internal-format msgid "gfc_trans_code(): Bad statement code" msgstr "" -#: java/class.c:834 +#: java/class.c:836 #, gcc-internal-format msgid "bad method signature" msgstr "" -#: java/class.c:890 +#: java/class.c:893 #, gcc-internal-format msgid "misplaced ConstantValue attribute (not in any field)" msgstr "" -#: java/class.c:893 +#: java/class.c:896 #, gcc-internal-format msgid "duplicate ConstantValue attribute for field '%s'" msgstr "" -#: java/class.c:904 +#: java/class.c:907 #, gcc-internal-format msgid "ConstantValue attribute of field '%s' has wrong type" msgstr "" -#: java/class.c:1601 +#: java/class.c:1613 #, gcc-internal-format -msgid "%Jabstract method in non-abstract class" +msgid "abstract method in non-abstract class" msgstr "" -#: java/class.c:2669 +#: java/class.c:2689 #, gcc-internal-format msgid "non-static method %q+D overrides static method" msgstr "" -#: java/decl.c:1155 +#: java/decl.c:1261 #, gcc-internal-format msgid "%q+D used prior to declaration" msgstr "" -#: java/decl.c:1578 +#: java/decl.c:1687 #, gcc-internal-format msgid "In %+D: overlapped variable and exception ranges at %d" msgstr "" -#: java/decl.c:1629 +#: java/decl.c:1738 #, gcc-internal-format msgid "bad type in parameter debug info" msgstr "" -#: java/decl.c:1638 +#: java/decl.c:1747 #, gcc-internal-format msgid "bad PC range for debug info for local %q+D" msgstr "" @@ -35525,38 +36712,38 @@ msgstr "" msgid "invoke[non-static] on static method" msgstr "" -#: java/expr.c:2916 +#: java/expr.c:2918 #, gcc-internal-format msgid "missing field '%s' in '%s'" msgstr "" -#: java/expr.c:2923 +#: java/expr.c:2925 #, gcc-internal-format msgid "mismatching signature for field '%s' in '%s'" msgstr "" -#: java/expr.c:2952 +#: java/expr.c:2954 #, gcc-internal-format msgid "assignment to final field %q+D not in field's class" msgstr "" -#: java/expr.c:3175 +#: java/expr.c:3178 #, gcc-internal-format msgid "invalid PC in line number table" msgstr "" -#: java/expr.c:3225 +#: java/expr.c:3228 #, gcc-internal-format msgid "unreachable bytecode from %d to before %d" msgstr "" -#: java/expr.c:3267 +#: java/expr.c:3270 #, gcc-internal-format msgid "unreachable bytecode from %d to the end of the method" msgstr "" #. duplicate code from LOAD macro -#: java/expr.c:3574 +#: java/expr.c:3577 #, gcc-internal-format msgid "unrecogized wide sub-instruction" msgstr "" @@ -35619,7 +36806,7 @@ msgstr "" #: java/jcf-parse.c:1512 #, gcc-internal-format -msgid "%Hduplicate class will only be compiled once" +msgid "duplicate class will only be compiled once" msgstr "" #: java/jcf-parse.c:1607 @@ -35627,62 +36814,62 @@ msgstr "" msgid "missing Code attribute" msgstr "" -#: java/jcf-parse.c:1851 +#: java/jcf-parse.c:1853 #, gcc-internal-format msgid "no input file specified" msgstr "" -#: java/jcf-parse.c:1886 +#: java/jcf-parse.c:1888 #, gcc-internal-format msgid "can't close input file %s: %m" msgstr "" -#: java/jcf-parse.c:1931 +#: java/jcf-parse.c:1933 #, gcc-internal-format msgid "bad zip/jar file %s" msgstr "" -#: java/jcf-parse.c:2138 +#: java/jcf-parse.c:2135 #, gcc-internal-format msgid "error while reading %s from zip file" msgstr "" -#: java/jvspec.c:425 +#: java/jvspec.c:426 #, gcc-internal-format msgid "warning: already-compiled .class files ignored with -C" msgstr "" -#: java/lang.c:534 +#: java/lang.c:559 #, gcc-internal-format msgid "-fexcess-precision=standard for Java" msgstr "" -#: java/lang.c:545 +#: java/lang.c:570 #, gcc-internal-format msgid "-findirect-dispatch is incompatible with -freduced-reflection" msgstr "" -#: java/lang.c:548 +#: java/lang.c:573 #, gcc-internal-format msgid "-fjni is incompatible with -freduced-reflection" msgstr "" -#: java/lang.c:559 +#: java/lang.c:584 #, gcc-internal-format msgid "can't do dependency tracking with input from stdin" msgstr "" -#: java/lang.c:575 +#: java/lang.c:600 #, gcc-internal-format msgid "couldn't determine target name for dependency tracking" msgstr "" -#: java/mangle_name.c:139 java/mangle_name.c:209 +#: java/mangle_name.c:322 java/mangle_name.c:396 #, gcc-internal-format msgid "internal error - invalid Utf8 name" msgstr "" -#: java/typeck.c:490 +#: java/typeck.c:427 #, gcc-internal-format msgid "junk at end of signature string" msgstr "" @@ -35702,264 +36889,466 @@ msgstr "" msgid "bad pc in exception_table" msgstr "" -#: objc/objc-act.c:701 +#: lto/lto-elf.c:97 lto/lto-elf.c:118 +#, gcc-internal-format +msgid "could not read section header: %s" +msgstr "" + +#: lto/lto-elf.c:215 +#, gcc-internal-format +msgid "two or more sections for %s:" +msgstr "" + +#. Initialize the section header of section SCN. SH_NAME is the section name +#. as an index into the section header string table. SH_TYPE is the section +#. type, an SHT_* macro from libelf headers. +#: lto/lto-elf.c:240 +#, gcc-internal-format +msgid "elf32_getshdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:242 +#, gcc-internal-format +msgid "elf64_getshdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:276 +#, gcc-internal-format +msgid "could not create a new ELF section: %s" +msgstr "" + +#: lto/lto-elf.c:330 +#, gcc-internal-format +msgid "could not append data to ELF section: %s" +msgstr "" + +#. Validate's ELF_FILE's executable header and, if cached_file_attrs is +#. uninitialized, caches the architecture. +#: lto/lto-elf.c:379 +#, gcc-internal-format +msgid "could not read ELF header: %s" +msgstr "" + +#: lto/lto-elf.c:385 +#, gcc-internal-format +msgid "not a relocatable ELF object file" +msgstr "" + +#: lto/lto-elf.c:394 +#, gcc-internal-format +msgid "inconsistent file architecture detected" +msgstr "" + +#: lto/lto-elf.c:420 +#, gcc-internal-format +msgid "could not read ELF identification information: %s" +msgstr "" + +#: lto/lto-elf.c:439 +#, gcc-internal-format +msgid "unsupported ELF file class" +msgstr "" + +#: lto/lto-elf.c:472 +#, gcc-internal-format +msgid "could not locate ELF string table: %s" +msgstr "" + +#. Helper functions used by init_ehdr. Initialize ELF_FILE's executable +#. header using cached data from previously read files. +#: lto/lto-elf.c:496 +#, gcc-internal-format +msgid "elf32_newehdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:498 +#, gcc-internal-format +msgid "elf64_newehdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:554 +#, gcc-internal-format +msgid "could not open file %s" +msgstr "" + +#: lto/lto-elf.c:561 +#, gcc-internal-format +msgid "ELF library is older than that used when building GCC" +msgstr "" + +#: lto/lto-elf.c:570 +#, gcc-internal-format +msgid "could not open ELF file: %s" +msgstr "" + +#: lto/lto-elf.c:614 +#, gcc-internal-format +msgid "gelf_getehdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:623 +#, gcc-internal-format +msgid "elf_getscn() failed: %s" +msgstr "" + +#: lto/lto-elf.c:626 +#, gcc-internal-format +msgid "gelf_getshdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:629 +#, gcc-internal-format +msgid "gelf_update_shdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:633 +#, gcc-internal-format +msgid "gelf_update_ehdr() failed: %s" +msgstr "" + +#: lto/lto-elf.c:641 +#, gcc-internal-format +msgid "elf_update() failed: %s" +msgstr "" + +#: lto/lto-lang.c:660 +#, gcc-internal-format +msgid "-fwpa and -fltrans are mutually exclusive" +msgstr "" + +#: lto/lto.c:244 +#, gcc-internal-format +msgid "bytecode stream: garbage at the end of symbols section" +msgstr "" + +#: lto/lto.c:278 +#, gcc-internal-format +msgid "unexpected file name %s in linker resolution file. Expected %s" +msgstr "" + +#: lto/lto.c:307 +#, gcc-internal-format +msgid "tried to read past the end of the linker resolution file" +msgstr "" + +#: lto/lto.c:1002 +#, gcc-internal-format +msgid "lto_elf_file_open() failed" +msgstr "" + +#: lto/lto.c:1058 +#, gcc-internal-format +msgid "environment variable COLLECT_GCC must be set" +msgstr "" + +#: lto/lto.c:1063 +#, gcc-internal-format +msgid "environment variable COLLECT_GCC_OPTIONS must be set" +msgstr "" + +#: lto/lto.c:1072 +#, gcc-internal-format +msgid "malformed COLLECT_GCC_OPTIONS" +msgstr "" + +#: lto/lto.c:1105 +#, gcc-internal-format +msgid "opening LTRANS output list %s: %m" +msgstr "" + +#: lto/lto.c:1123 lto/lto.c:1145 +#, gcc-internal-format +msgid "writing to LTRANS output list %s: %m" +msgstr "" + +#: lto/lto.c:1157 +#, gcc-internal-format +msgid "pex_init failed: %s" +msgstr "" + +#: lto/lto.c:1165 +#, gcc-internal-format +msgid "can't get program status: %s" +msgstr "" + +#: lto/lto.c:1177 +#, gcc-internal-format +msgid "%s terminated with status %d" +msgstr "" + +#: lto/lto.c:1186 +#, gcc-internal-format +msgid "closing LTRANS output list %s: %m" +msgstr "" + +#: lto/lto.c:1699 +#, gcc-internal-format +msgid "deleting LTRANS input file %s: %m" +msgstr "" + +#: lto/lto.c:1783 +#, gcc-internal-format +msgid "could not open symbol resolution file: %s" +msgstr "" + +#: objc/objc-act.c:729 #, gcc-internal-format msgid "%<@end%> must appear in an @implementation context" msgstr "" -#: objc/objc-act.c:730 +#: objc/objc-act.c:758 #, gcc-internal-format msgid "method declaration not in @interface context" msgstr "" -#: objc/objc-act.c:741 +#: objc/objc-act.c:769 #, gcc-internal-format msgid "method definition not in @implementation context" msgstr "" -#: objc/objc-act.c:990 +#: objc/objc-act.c:1019 #, gcc-internal-format msgid "class %qs does not implement the %qE protocol" msgstr "" -#: objc/objc-act.c:993 +#: objc/objc-act.c:1022 #, gcc-internal-format msgid "type %qs does not conform to the %qE protocol" msgstr "" -#: objc/objc-act.c:1170 +#: objc/objc-act.c:1199 #, gcc-internal-format msgid "comparison of distinct Objective-C types lacks a cast" msgstr "" -#: objc/objc-act.c:1174 +#: objc/objc-act.c:1203 #, gcc-internal-format msgid "initialization from distinct Objective-C type" msgstr "" -#: objc/objc-act.c:1178 +#: objc/objc-act.c:1207 #, gcc-internal-format msgid "assignment from distinct Objective-C type" msgstr "" -#: objc/objc-act.c:1182 +#: objc/objc-act.c:1211 #, gcc-internal-format msgid "distinct Objective-C type in return" msgstr "" -#: objc/objc-act.c:1186 +#: objc/objc-act.c:1215 #, gcc-internal-format msgid "passing argument %d of %qE from distinct Objective-C type" msgstr "" -#: objc/objc-act.c:1342 +#: objc/objc-act.c:1371 #, gcc-internal-format msgid "statically allocated instance of Objective-C class %qE" msgstr "" -#: objc/objc-act.c:1419 +#: objc/objc-act.c:1448 #, gcc-internal-format msgid "protocol %qE has circular dependency" msgstr "" -#: objc/objc-act.c:1444 objc/objc-act.c:6619 +#: objc/objc-act.c:1473 objc/objc-act.c:6681 #, gcc-internal-format msgid "cannot find protocol declaration for %qE" msgstr "" -#: objc/objc-act.c:1908 objc/objc-act.c:3358 objc/objc-act.c:7234 -#: objc/objc-act.c:7568 objc/objc-act.c:7623 objc/objc-act.c:7648 +#: objc/objc-act.c:1944 objc/objc-act.c:3399 objc/objc-act.c:7297 +#: objc/objc-act.c:7631 objc/objc-act.c:7686 objc/objc-act.c:7711 #, gcc-internal-format msgid "cannot find interface declaration for %qE" msgstr "" -#: objc/objc-act.c:1912 +#: objc/objc-act.c:1948 #, gcc-internal-format msgid "interface %qE does not have valid constant string layout" msgstr "" -#: objc/objc-act.c:1917 +#: objc/objc-act.c:1953 #, gcc-internal-format msgid "cannot find reference tag for class %qE" msgstr "" -#: objc/objc-act.c:2552 +#: objc/objc-act.c:2591 #, gcc-internal-format -msgid "%Hcreating selector for nonexistent method %qE" +msgid "creating selector for nonexistent method %qE" msgstr "" -#: objc/objc-act.c:2757 +#: objc/objc-act.c:2794 #, gcc-internal-format msgid "%qE is not an Objective-C class name or alias" msgstr "" -#: objc/objc-act.c:2885 objc/objc-act.c:2916 objc/objc-act.c:7496 -#: objc/objc-act.c:7798 objc/objc-act.c:7828 +#: objc/objc-act.c:2923 objc/objc-act.c:2955 objc/objc-act.c:7559 +#: objc/objc-act.c:7861 objc/objc-act.c:7891 #, gcc-internal-format msgid "Objective-C declarations may only appear in global scope" msgstr "" -#: objc/objc-act.c:2890 +#: objc/objc-act.c:2928 #, gcc-internal-format msgid "cannot find class %qE" msgstr "" -#: objc/objc-act.c:2892 +#: objc/objc-act.c:2930 #, gcc-internal-format msgid "class %qE already exists" msgstr "" -#: objc/objc-act.c:2936 objc/objc-act.c:7537 +#: objc/objc-act.c:2975 objc/objc-act.c:7600 #, gcc-internal-format msgid "%qE redeclared as different kind of symbol" msgstr "" -#: objc/objc-act.c:3212 +#: objc/objc-act.c:3253 #, gcc-internal-format msgid "strong-cast assignment has been intercepted" msgstr "" -#: objc/objc-act.c:3254 +#: objc/objc-act.c:3295 #, gcc-internal-format msgid "strong-cast may possibly be needed" msgstr "" -#: objc/objc-act.c:3264 +#: objc/objc-act.c:3305 #, gcc-internal-format msgid "instance variable assignment has been intercepted" msgstr "" -#: objc/objc-act.c:3283 +#: objc/objc-act.c:3324 #, gcc-internal-format msgid "pointer arithmetic for garbage-collected objects not allowed" msgstr "" -#: objc/objc-act.c:3289 +#: objc/objc-act.c:3330 #, gcc-internal-format msgid "global/static variable assignment has been intercepted" msgstr "" -#: objc/objc-act.c:3471 +#: objc/objc-act.c:3819 objc/objc-act.c:3975 #, gcc-internal-format msgid "use %<-fobjc-exceptions%> to enable Objective-C exception syntax" msgstr "" -#: objc/objc-act.c:3814 +#: objc/objc-act.c:3857 #, gcc-internal-format msgid "@catch parameter is not a known Objective-C class type" msgstr "" -#: objc/objc-act.c:3830 +#: objc/objc-act.c:3873 #, gcc-internal-format msgid "exception of type %<%T%> will be caught" msgstr "" -#: objc/objc-act.c:3832 +#: objc/objc-act.c:3875 #, gcc-internal-format -msgid "%H by earlier handler for %<%T%>" +msgid " by earlier handler for %<%T%>" msgstr "" -#: objc/objc-act.c:3885 +#: objc/objc-act.c:3928 #, gcc-internal-format msgid "%<@try%> without %<@catch%> or %<@finally%>" msgstr "" -#: objc/objc-act.c:3936 +#: objc/objc-act.c:3986 #, gcc-internal-format msgid "%<@throw%> (rethrow) used outside of a @catch block" msgstr "" -#: objc/objc-act.c:4337 +#: objc/objc-act.c:4388 #, gcc-internal-format msgid "type %q+D does not have a known size" msgstr "" -#: objc/objc-act.c:4973 +#: objc/objc-act.c:5020 #, gcc-internal-format -msgid "%J%s %qs" +msgid "%s %qs" msgstr "" -#: objc/objc-act.c:4996 objc/objc-act.c:5015 +#: objc/objc-act.c:5043 objc/objc-act.c:5062 #, gcc-internal-format msgid "inconsistent instance variable specification" msgstr "" -#: objc/objc-act.c:5880 +#: objc/objc-act.c:5928 #, gcc-internal-format msgid "can not use an object as parameter to a method" msgstr "" -#: objc/objc-act.c:6107 +#: objc/objc-act.c:6156 #, gcc-internal-format msgid "multiple methods named %<%c%E%> found" msgstr "" -#: objc/objc-act.c:6110 +#: objc/objc-act.c:6159 #, gcc-internal-format -msgid "%Jusing %<%c%s%>" +msgid "using %<%c%s%>" msgstr "" -#: objc/objc-act.c:6118 +#: objc/objc-act.c:6168 #, gcc-internal-format msgid "multiple selectors named %<%c%E%> found" msgstr "" -#: objc/objc-act.c:6121 +#: objc/objc-act.c:6171 #, gcc-internal-format -msgid "%Jfound %<%c%s%>" +msgid "found %<%c%s%>" msgstr "" -#: objc/objc-act.c:6130 +#: objc/objc-act.c:6180 #, gcc-internal-format -msgid "%Jalso found %<%c%s%>" +msgid "also found %<%c%s%>" msgstr "" -#: objc/objc-act.c:6344 +#: objc/objc-act.c:6400 #, gcc-internal-format msgid "no super class declared in @interface for %qE" msgstr "" -#: objc/objc-act.c:6382 +#: objc/objc-act.c:6438 #, gcc-internal-format msgid "found %<-%E%> instead of %<+%E%> in protocol(s)" msgstr "" -#: objc/objc-act.c:6440 +#: objc/objc-act.c:6496 #, gcc-internal-format msgid "invalid receiver type %qs" msgstr "" -#: objc/objc-act.c:6455 +#: objc/objc-act.c:6511 #, gcc-internal-format msgid "%<%c%E%> not found in protocol(s)" msgstr "" -#: objc/objc-act.c:6469 +#: objc/objc-act.c:6525 #, gcc-internal-format msgid "%qE may not respond to %<%c%E%>" msgstr "" -#: objc/objc-act.c:6477 +#: objc/objc-act.c:6533 #, gcc-internal-format msgid "no %<%c%E%> method found" msgstr "" -#: objc/objc-act.c:6483 +#: objc/objc-act.c:6540 #, gcc-internal-format msgid "(Messages without a matching method signature" msgstr "" -#: objc/objc-act.c:6484 +#: objc/objc-act.c:6542 #, gcc-internal-format msgid "will be assumed to return %<id%> and accept" msgstr "" -#: objc/objc-act.c:6485 +#: objc/objc-act.c:6544 #, gcc-internal-format msgid "%<...%> as arguments.)" msgstr "" -#: objc/objc-act.c:6719 +#: objc/objc-act.c:6782 #, gcc-internal-format msgid "undeclared selector %qE" msgstr "" @@ -35973,185 +37362,210 @@ msgstr "" #. to an instance variable. It's better to catch the cases #. where this is done unknowingly than to support the above #. paradigm. -#: objc/objc-act.c:6761 +#: objc/objc-act.c:6824 #, gcc-internal-format msgid "instance variable %qE accessed in class method" msgstr "" -#: objc/objc-act.c:6995 +#: objc/objc-act.c:7058 #, gcc-internal-format msgid "duplicate declaration of method %<%c%E%>" msgstr "" -#: objc/objc-act.c:7056 +#: objc/objc-act.c:7119 #, gcc-internal-format msgid "duplicate interface declaration for category %<%E(%E)%>" msgstr "" -#: objc/objc-act.c:7083 +#: objc/objc-act.c:7146 #, gcc-internal-format msgid "illegal reference type specified for instance variable %qs" msgstr "" -#: objc/objc-act.c:7094 +#: objc/objc-act.c:7157 #, gcc-internal-format msgid "instance variable %qs has unknown size" msgstr "" -#: objc/objc-act.c:7119 +#: objc/objc-act.c:7182 #, gcc-internal-format msgid "type %qE has no default constructor to call" msgstr "" -#: objc/objc-act.c:7125 +#: objc/objc-act.c:7188 #, gcc-internal-format msgid "destructor for %qE shall not be run either" msgstr "" #. Vtable pointers are Real Bad(tm), since Obj-C cannot #. initialize them. -#: objc/objc-act.c:7137 +#: objc/objc-act.c:7200 #, gcc-internal-format msgid "type %qE has virtual member functions" msgstr "" -#: objc/objc-act.c:7138 +#: objc/objc-act.c:7201 #, gcc-internal-format msgid "illegal aggregate type %qE specified for instance variable %qs" msgstr "" -#: objc/objc-act.c:7148 +#: objc/objc-act.c:7211 #, gcc-internal-format msgid "type %qE has a user-defined constructor" msgstr "" -#: objc/objc-act.c:7150 +#: objc/objc-act.c:7213 #, gcc-internal-format msgid "type %qE has a user-defined destructor" msgstr "" -#: objc/objc-act.c:7154 +#: objc/objc-act.c:7217 #, gcc-internal-format msgid "" "C++ constructors and destructors will not be invoked for Objective-C fields" msgstr "" -#: objc/objc-act.c:7263 +#: objc/objc-act.c:7326 #, gcc-internal-format msgid "instance variable %qE is declared private" msgstr "" -#: objc/objc-act.c:7274 +#: objc/objc-act.c:7337 #, gcc-internal-format msgid "instance variable %qE is %s; this will be a hard error in the future" msgstr "" -#: objc/objc-act.c:7281 +#: objc/objc-act.c:7344 #, gcc-internal-format msgid "instance variable %qE is declared %s" msgstr "" -#: objc/objc-act.c:7307 objc/objc-act.c:7395 +#: objc/objc-act.c:7370 objc/objc-act.c:7458 #, gcc-internal-format msgid "incomplete implementation of class %qE" msgstr "" -#: objc/objc-act.c:7311 objc/objc-act.c:7399 +#: objc/objc-act.c:7374 objc/objc-act.c:7462 #, gcc-internal-format msgid "incomplete implementation of category %qE" msgstr "" -#: objc/objc-act.c:7316 objc/objc-act.c:7403 +#: objc/objc-act.c:7379 objc/objc-act.c:7466 #, gcc-internal-format msgid "method definition for %<%c%E%> not found" msgstr "" -#: objc/objc-act.c:7444 +#: objc/objc-act.c:7507 #, gcc-internal-format msgid "%s %qE does not fully implement the %qE protocol" msgstr "" -#: objc/objc-act.c:7502 objc/objc-act.c:9189 +#: objc/objc-act.c:7565 objc/objc-act.c:9256 #, gcc-internal-format msgid "%<@end%> missing in implementation context" msgstr "" -#: objc/objc-act.c:7521 +#: objc/objc-act.c:7584 #, gcc-internal-format msgid "cannot find interface declaration for %qE, superclass of %qE" msgstr "" -#: objc/objc-act.c:7551 +#: objc/objc-act.c:7614 #, gcc-internal-format msgid "reimplementation of class %qE" msgstr "" -#: objc/objc-act.c:7581 +#: objc/objc-act.c:7644 #, gcc-internal-format msgid "conflicting super class name %qE" msgstr "" -#: objc/objc-act.c:7584 +#: objc/objc-act.c:7647 #, gcc-internal-format msgid "previous declaration of %qE" msgstr "" -#: objc/objc-act.c:7586 +#: objc/objc-act.c:7649 #, gcc-internal-format msgid "previous declaration" msgstr "" -#: objc/objc-act.c:7602 objc/objc-act.c:7600 +#: objc/objc-act.c:7665 objc/objc-act.c:7663 #, gcc-internal-format msgid "duplicate interface declaration for class %qE" msgstr "" -#: objc/objc-act.c:7856 +#: objc/objc-act.c:7919 #, gcc-internal-format msgid "duplicate declaration for protocol %qE" msgstr "" -#: objc/objc-act.c:8684 +#: objc/objc-act.c:8740 #, gcc-internal-format -msgid "%Jconflicting types for %<%c%s%>" +msgid "conflicting types for %<%c%s%>" msgstr "" -#: objc/objc-act.c:8687 +#: objc/objc-act.c:8744 #, gcc-internal-format -msgid "%Jprevious declaration of %<%c%s%>" +msgid "previous declaration of %<%c%s%>" msgstr "" -#: objc/objc-act.c:8773 +#: objc/objc-act.c:8834 #, gcc-internal-format msgid "no super class declared in interface for %qE" msgstr "" -#: objc/objc-act.c:8826 +#: objc/objc-act.c:8893 #, gcc-internal-format msgid "[super ...] must appear in a method context" msgstr "" -#: objc/objc-act.c:8865 +#: objc/objc-act.c:8932 #, gcc-internal-format msgid "method possibly missing a [super dealloc] call" msgstr "" -#: objc/objc-act.c:9479 +#: objc/objc-act.c:9549 #, gcc-internal-format msgid "local declaration of %qE hides instance variable" msgstr "" -#: ada/gcc-interface/misc.c:195 +#: ada/gcc-interface/misc.c:196 #, gcc-internal-format msgid "missing argument to \"-%s\"" msgstr "" -#: ada/gcc-interface/misc.c:253 +#: ada/gcc-interface/misc.c:254 #, gcc-internal-format msgid "%<-gnat%> misspelled as %<-gant%>" msgstr "" -#: ada/gcc-interface/misc.c:311 +#: ada/gcc-interface/misc.c:312 #, gcc-internal-format msgid "-fexcess-precision=standard for Ada" msgstr "" + +#: ada/gcc-interface/utils.c:5275 +#, gcc-internal-format +msgid "%qs attribute requires prototypes with named arguments" +msgstr "" + +#: ada/gcc-interface/utils.c:5287 +#, gcc-internal-format +msgid "%qs attribute only applies to variadic functions" +msgstr "" + +#: ada/gcc-interface/utils.c:5450 +#, gcc-internal-format +msgid "invalid vector type for attribute %qs" +msgstr "" + +#: ada/gcc-interface/utils.c:5513 +#, gcc-internal-format +msgid "attribute %qs applies to array types only" +msgstr "" + +#: ada/gcc-interface/utils.c:5540 +#, gcc-internal-format +msgid "invalid element type for attribute %qs" +msgstr "" diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c index a75442eb6c7..cb3f7dae31f 100644 --- a/gcc/print-rtl.c +++ b/gcc/print-rtl.c @@ -318,6 +318,13 @@ print_rtx (const_rtx in_rtx) dump_addr (outfile, "/", (void*)val); #endif } + else if (i == 0 && GET_CODE (in_rtx) == DEBUG_EXPR) + { +#ifndef GENERATOR_FILE + fprintf (outfile, " D#%i", + DEBUG_TEMP_UID (DEBUG_EXPR_TREE_DECL (in_rtx))); +#endif + } break; case 'e': @@ -378,6 +385,22 @@ print_rtx (const_rtx in_rtx) fprintf(outfile, " %s:%i", insn_file (in_rtx), insn_line (in_rtx)); #endif } + else if (i == 6 && GET_CODE (in_rtx) == ASM_OPERANDS) + { +#ifndef GENERATOR_FILE + fprintf (outfile, " %s:%i", + locator_file (ASM_OPERANDS_SOURCE_LOCATION (in_rtx)), + locator_line (ASM_OPERANDS_SOURCE_LOCATION (in_rtx))); +#endif + } + else if (i == 1 && GET_CODE (in_rtx) == ASM_INPUT) + { +#ifndef GENERATOR_FILE + fprintf (outfile, " %s:%i", + locator_file (ASM_INPUT_SOURCE_LOCATION (in_rtx)), + locator_line (ASM_INPUT_SOURCE_LOCATION (in_rtx))); +#endif + } else if (i == 6 && NOTE_P (in_rtx)) { /* This field is only used for NOTE_INSN_DELETED_LABEL, and diff --git a/gcc/print-tree.c b/gcc/print-tree.c index f4b74d95ffc..ded9ea84308 100644 --- a/gcc/print-tree.c +++ b/gcc/print-tree.c @@ -541,7 +541,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent) && DECL_STRUCT_FUNCTION (node) != 0) { indent_to (file, indent + 4); - dump_addr (file, "saved-insns ", DECL_STRUCT_FUNCTION (node)); + dump_addr (file, "struct-function ", DECL_STRUCT_FUNCTION (node)); } if ((code == VAR_DECL || code == PARM_DECL) diff --git a/gcc/real.h b/gcc/real.h index e72723e01ea..e1fd3b07f60 100644 --- a/gcc/real.h +++ b/gcc/real.h @@ -32,6 +32,9 @@ extern tree do_mpc_arg2 (tree, tree, tree, int, int (*)(mpc_ptr, mpc_srcptr, mpc # if MPC_VERSION >= MPC_VERSION_NUM(0,6,1) # define HAVE_mpc_pow # endif +# if MPC_VERSION >= MPC_VERSION_NUM(0,7,1) +# define HAVE_mpc_arc +# endif #endif #endif #include "machmode.h" diff --git a/gcc/reginfo.c b/gcc/reginfo.c index 0f11c91a3de..96e9bd9437a 100644 --- a/gcc/reginfo.c +++ b/gcc/reginfo.c @@ -904,6 +904,9 @@ struct reg_pref run. */ static struct reg_pref *reg_pref; +/* Current size of reg_info. */ +static int reg_info_size; + /* Return the reg_class in which pseudo reg number REGNO is best allocated. This function is sometimes called before the info has been computed. When that happens, just return GENERAL_REGS, which is innocuous. */ @@ -937,9 +940,6 @@ reg_cover_class (int regno) -/* Current size of reg_info. */ -static int reg_info_size; - /* Allocate space for reg info. */ static void allocate_reg_info (void) @@ -1040,6 +1040,7 @@ setup_reg_classes (int regno, { if (reg_pref == NULL) return; + gcc_assert (reg_info_size == max_reg_num ()); reg_pref[regno].prefclass = prefclass; reg_pref[regno].altclass = altclass; reg_pref[regno].coverclass = coverclass; @@ -1321,7 +1322,7 @@ find_subregs_of_mode (rtx x) } } -static unsigned int +void init_subregs_of_mode (void) { basic_block bb; @@ -1336,8 +1337,6 @@ init_subregs_of_mode (void) FOR_BB_INSNS (bb, insn) if (INSN_P (insn)) find_subregs_of_mode (PATTERN (insn)); - - return 0; } /* Return 1 if REGNO has had an invalid mode change in CLASS from FROM @@ -1367,74 +1366,22 @@ invalid_mode_change_p (unsigned int regno, return false; } -static unsigned int +void finish_subregs_of_mode (void) { htab_delete (subregs_of_mode); subregs_of_mode = 0; - return 0; } #else -static unsigned int +void init_subregs_of_mode (void) { - return 0; } -static unsigned int +void finish_subregs_of_mode (void) { - return 0; } #endif /* CANNOT_CHANGE_MODE_CLASS */ -static bool -gate_subregs_of_mode_init (void) -{ -#ifdef CANNOT_CHANGE_MODE_CLASS - return true; -#else - return false; -#endif -} - -struct rtl_opt_pass pass_subregs_of_mode_init = -{ - { - RTL_PASS, - "subregs_of_mode_init", /* name */ - gate_subregs_of_mode_init, /* gate */ - init_subregs_of_mode, /* execute */ - NULL, /* sub */ - NULL, /* next */ - 0, /* static_pass_number */ - TV_NONE, /* tv_id */ - 0, /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - 0 /* todo_flags_finish */ - } -}; - -struct rtl_opt_pass pass_subregs_of_mode_finish = -{ - { - RTL_PASS, - "subregs_of_mode_finish", /* name */ - gate_subregs_of_mode_init, /* gate */ - finish_subregs_of_mode, /* execute */ - NULL, /* sub */ - NULL, /* next */ - 0, /* static_pass_number */ - TV_NONE, /* tv_id */ - 0, /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - 0, /* todo_flags_start */ - 0 /* todo_flags_finish */ - } -}; - - #include "gt-reginfo.h" diff --git a/gcc/regmove.c b/gcc/regmove.c index a411183c550..4d45d5d1beb 100644 --- a/gcc/regmove.c +++ b/gcc/regmove.c @@ -44,6 +44,7 @@ along with GCC; see the file COPYING3. If not see #include "timevar.h" #include "tree-pass.h" #include "df.h" +#include "ira.h" static int optimize_reg_copy_1 (rtx, rtx, rtx); static void optimize_reg_copy_2 (rtx, rtx, rtx); @@ -1226,6 +1227,9 @@ regmove_optimize (void) df_note_add_problem (); df_analyze (); + if (flag_ira_loop_pressure) + ira_set_pseudo_classes (dump_file); + regstat_init_n_sets_and_refs (); regstat_compute_ri (); @@ -1248,6 +1252,8 @@ regmove_optimize (void) } regstat_free_n_sets_and_refs (); regstat_free_ri (); + if (flag_ira_loop_pressure) + free_reg_info (); return 0; } diff --git a/gcc/reload1.c b/gcc/reload1.c index cc14673be92..5a1839944dc 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -1136,36 +1136,25 @@ reload (rtx first, int global) for (use = DF_REG_USE_CHAIN (i); use; use = next) { - rtx *loc = DF_REF_LOC (use); - rtx x = *loc; - insn = DF_REF_INSN (use); + + /* Make sure the next ref is for a different instruction, + so that we're not affected by the rescan. */ next = DF_REF_NEXT_REG (use); + while (next && DF_REF_INSN (next) == insn) + next = DF_REF_NEXT_REG (next); if (DEBUG_INSN_P (insn)) { - gcc_assert (x == reg - || (GET_CODE (x) == SUBREG - && SUBREG_REG (x) == reg)); - if (!equiv) { INSN_VAR_LOCATION_LOC (insn) = gen_rtx_UNKNOWN_VAR_LOC (); df_insn_rescan_debug_internal (insn); } else - { - if (x == reg) - *loc = copy_rtx (equiv); - else if (GET_CODE (x) == SUBREG - && SUBREG_REG (x) == reg) - *loc = simplify_gen_subreg (GET_MODE (x), equiv, - GET_MODE (reg), - SUBREG_BYTE (x)); - else - gcc_unreachable (); - *loc = wrap_constant (GET_MODE (x), *loc); - } + INSN_VAR_LOCATION_LOC (insn) + = simplify_replace_rtx (INSN_VAR_LOCATION_LOC (insn), + reg, equiv); } } } diff --git a/gcc/rtl.c b/gcc/rtl.c index feeb40bf61b..aefbbf347d9 100644 --- a/gcc/rtl.c +++ b/gcc/rtl.c @@ -164,6 +164,20 @@ rtvec_alloc (int n) return rt; } +/* Create a bitwise copy of VEC. */ + +rtvec +shallow_copy_rtvec (rtvec vec) +{ + rtvec newvec; + int n; + + n = GET_NUM_ELEM (vec); + newvec = rtvec_alloc (n); + memcpy (&newvec->elem[0], &vec->elem[0], sizeof (rtx) * n); + return newvec; +} + /* Return the number of bytes occupied by rtx value X. */ unsigned int @@ -232,6 +246,8 @@ copy_rtx (rtx orig) switch (code) { case REG: + case DEBUG_EXPR: + case VALUE: case CONST_INT: case CONST_DOUBLE: case CONST_FIXED: @@ -381,6 +397,7 @@ rtx_equal_p_cb (const_rtx x, const_rtx y, rtx_equal_p_callback_function cb) case SYMBOL_REF: return XSTR (x, 0) == XSTR (y, 0); + case DEBUG_EXPR: case VALUE: case SCRATCH: case CONST_DOUBLE: @@ -496,6 +513,7 @@ rtx_equal_p (const_rtx x, const_rtx y) case SYMBOL_REF: return XSTR (x, 0) == XSTR (y, 0); + case DEBUG_EXPR: case VALUE: case SCRATCH: case CONST_DOUBLE: diff --git a/gcc/rtl.def b/gcc/rtl.def index 2aa76b1f6c8..acb7ee915b8 100644 --- a/gcc/rtl.def +++ b/gcc/rtl.def @@ -88,6 +88,10 @@ DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*", RTX_EXTRA) DECL codes in trees. */ DEF_RTL_EXPR(VALUE, "value", "0", RTX_OBJ) +/* The RTL generated for a DEBUG_EXPR_DECL. It links back to the + DEBUG_EXPR_DECL in the first operand. */ +DEF_RTL_EXPR(DEBUG_EXPR, "debug_expr", "0", RTX_OBJ) + /* --------------------------------------------------------------------- Expressions used in constructing lists. --------------------------------------------------------------------- */ diff --git a/gcc/rtl.h b/gcc/rtl.h index a7be009b619..0f7044e5e1a 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -762,7 +762,7 @@ extern void rtl_check_failed_flag (const char *, const_rtx, const char *, #define INSN_LOCATOR(INSN) XINT (INSN, 4) /* LOCATION of an RTX if relevant. */ #define RTL_LOCATION(X) (INSN_P (X) ? \ - locator_location (INSN_LOCATOR (x)) \ + locator_location (INSN_LOCATOR (X)) \ : UNKNOWN_LOCATION) /* LOCATION of current INSN. */ #define CURR_INSN_LOCATION (locator_location (curr_insn_locator ())) @@ -930,6 +930,9 @@ extern const char * const reg_note_name[]; #define NOTE_DURING_CALL_P(RTX) \ (RTL_FLAG_CHECK1("NOTE_VAR_LOCATION_DURING_CALL_P", (RTX), NOTE)->call) +/* DEBUG_EXPR_DECL corresponding to a DEBUG_EXPR RTX. */ +#define DEBUG_EXPR_TREE_DECL(RTX) XCTREE (RTX, 0, DEBUG_EXPR) + /* Possible initialization status of a variable. When requested by the user, this information is tracked and recorded in the DWARF debug information, along with the variable's location. */ @@ -1565,6 +1568,7 @@ extern rtx rtx_alloc_stat (RTX_CODE MEM_STAT_DECL); #define rtx_alloc(c) rtx_alloc_stat (c MEM_STAT_INFO) extern rtvec rtvec_alloc (int); +extern rtvec shallow_copy_rtvec (rtvec); extern bool shared_const_p (const_rtx); extern rtx copy_rtx (rtx); extern void dump_rtx_statistics (void); @@ -1765,6 +1769,8 @@ extern rtx simplify_subreg (enum machine_mode, rtx, enum machine_mode, unsigned int); extern rtx simplify_gen_subreg (enum machine_mode, rtx, enum machine_mode, unsigned int); +extern rtx simplify_replace_fn_rtx (rtx, const_rtx, + rtx (*fn) (rtx, void *), void *); extern rtx simplify_replace_rtx (rtx, const_rtx, rtx); extern rtx simplify_rtx (const_rtx); extern rtx avoid_constant_pool_reference (rtx); @@ -1927,6 +1933,8 @@ extern void init_move_cost (enum machine_mode); extern bool resize_reg_info (void); /* Free up register info memory. */ extern void free_reg_info (void); +extern void init_subregs_of_mode (void); +extern void finish_subregs_of_mode (void); /* recog.c */ extern rtx extract_asm_operands (rtx); @@ -2404,8 +2412,6 @@ extern void invert_br_probabilities (rtx); extern bool expensive_function_p (int); /* In cfgexpand.c */ extern void add_reg_br_prob_note (rtx last, int probability); -extern rtx wrap_constant (enum machine_mode, rtx); -extern rtx unwrap_constant (rtx); /* In var-tracking.c */ extern unsigned int variable_tracking_main (void); diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index cef383a1d0e..1fd484d97aa 100644 --- a/gcc/sched-deps.c +++ b/gcc/sched-deps.c @@ -211,6 +211,16 @@ sd_debug_dep (dep_t dep) fprintf (stderr, "\n"); } +/* Determine whether DEP is a dependency link of a non-debug insn on a + debug insn. */ + +static inline bool +depl_on_debug_p (dep_link_t dep) +{ + return (DEBUG_INSN_P (DEP_LINK_PRO (dep)) + && !DEBUG_INSN_P (DEP_LINK_CON (dep))); +} + /* Functions to operate with a single link from the dependencies lists - dep_link_t. */ @@ -246,7 +256,9 @@ add_to_deps_list (dep_link_t link, deps_list_t l) { attach_dep_link (link, &DEPS_LIST_FIRST (l)); - ++DEPS_LIST_N_LINKS (l); + /* Don't count debug deps. */ + if (!depl_on_debug_p (link)) + ++DEPS_LIST_N_LINKS (l); } /* Detach dep_link L from the list. */ @@ -271,7 +283,9 @@ remove_from_deps_list (dep_link_t link, deps_list_t list) { detach_dep_link (link); - --DEPS_LIST_N_LINKS (list); + /* Don't count debug deps. */ + if (!depl_on_debug_p (link)) + --DEPS_LIST_N_LINKS (list); } /* Move link LINK from list FROM to list TO. */ @@ -668,10 +682,21 @@ sd_lists_size (const_rtx insn, sd_list_types_def list_types) } /* Return true if INSN's lists defined by LIST_TYPES are all empty. */ + bool sd_lists_empty_p (const_rtx insn, sd_list_types_def list_types) { - return sd_lists_size (insn, list_types) == 0; + while (list_types != SD_LIST_NONE) + { + deps_list_t list; + bool resolved_p; + + sd_next_list (insn, &list_types, &list, &resolved_p); + if (!deps_list_empty_p (list)) + return false; + } + + return true; } /* Initialize data for INSN. */ @@ -1201,7 +1226,6 @@ sd_add_dep (dep_t dep, bool resolved_p) rtx insn = DEP_CON (dep); gcc_assert (INSN_P (insn) && INSN_P (elem) && insn != elem); - gcc_assert (!DEBUG_INSN_P (elem) || DEBUG_INSN_P (insn)); if ((current_sched_info->flags & DO_SPECULATION) && !sched_insn_is_legitimate_for_speculation_p (insn, DEP_STATUS (dep))) @@ -1528,7 +1552,8 @@ add_insn_mem_dependence (struct deps *deps, bool read_p, { insn_list = &deps->pending_read_insns; mem_list = &deps->pending_read_mems; - deps->pending_read_list_length++; + if (!DEBUG_INSN_P (insn)) + deps->pending_read_list_length++; } else { @@ -2408,63 +2433,63 @@ sched_analyze_2 (struct deps *deps, rtx x, rtx insn) rtx pending, pending_mem; rtx t = x; - if (DEBUG_INSN_P (insn)) - { - sched_analyze_2 (deps, XEXP (x, 0), insn); - return; - } - if (sched_deps_info->use_cselib) { t = shallow_copy_rtx (t); cselib_lookup (XEXP (t, 0), Pmode, 1); XEXP (t, 0) = cselib_subst_to_values (XEXP (t, 0)); } - t = canon_rtx (t); - pending = deps->pending_read_insns; - pending_mem = deps->pending_read_mems; - while (pending) - { - if (read_dependence (XEXP (pending_mem, 0), t) - && ! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0))) - note_mem_dep (t, XEXP (pending_mem, 0), XEXP (pending, 0), - DEP_ANTI); - - pending = XEXP (pending, 1); - pending_mem = XEXP (pending_mem, 1); - } - pending = deps->pending_write_insns; - pending_mem = deps->pending_write_mems; - while (pending) + if (!DEBUG_INSN_P (insn)) { - if (true_dependence (XEXP (pending_mem, 0), VOIDmode, - t, rtx_varies_p) - && ! sched_insns_conditions_mutex_p (insn, XEXP (pending, 0))) - note_mem_dep (t, XEXP (pending_mem, 0), XEXP (pending, 0), - sched_deps_info->generate_spec_deps - ? BEGIN_DATA | DEP_TRUE : DEP_TRUE); - - pending = XEXP (pending, 1); - pending_mem = XEXP (pending_mem, 1); - } + t = canon_rtx (t); + pending = deps->pending_read_insns; + pending_mem = deps->pending_read_mems; + while (pending) + { + if (read_dependence (XEXP (pending_mem, 0), t) + && ! sched_insns_conditions_mutex_p (insn, + XEXP (pending, 0))) + note_mem_dep (t, XEXP (pending_mem, 0), XEXP (pending, 0), + DEP_ANTI); + + pending = XEXP (pending, 1); + pending_mem = XEXP (pending_mem, 1); + } - for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1)) - { - if (! JUMP_P (XEXP (u, 0))) - add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); - else if (deps_may_trap_p (x)) + pending = deps->pending_write_insns; + pending_mem = deps->pending_write_mems; + while (pending) { - if ((sched_deps_info->generate_spec_deps) - && sel_sched_p () && (spec_info->mask & BEGIN_CONTROL)) - { - ds_t ds = set_dep_weak (DEP_ANTI, BEGIN_CONTROL, - MAX_DEP_WEAK); + if (true_dependence (XEXP (pending_mem, 0), VOIDmode, + t, rtx_varies_p) + && ! sched_insns_conditions_mutex_p (insn, + XEXP (pending, 0))) + note_mem_dep (t, XEXP (pending_mem, 0), XEXP (pending, 0), + sched_deps_info->generate_spec_deps + ? BEGIN_DATA | DEP_TRUE : DEP_TRUE); + + pending = XEXP (pending, 1); + pending_mem = XEXP (pending_mem, 1); + } - note_dep (XEXP (u, 0), ds); - } - else + for (u = deps->last_pending_memory_flush; u; u = XEXP (u, 1)) + { + if (! JUMP_P (XEXP (u, 0))) add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); + else if (deps_may_trap_p (x)) + { + if ((sched_deps_info->generate_spec_deps) + && sel_sched_p () && (spec_info->mask & BEGIN_CONTROL)) + { + ds_t ds = set_dep_weak (DEP_ANTI, BEGIN_CONTROL, + MAX_DEP_WEAK); + + note_dep (XEXP (u, 0), ds); + } + else + add_dependence (insn, XEXP (u, 0), REG_DEP_ANTI); + } } } @@ -2473,7 +2498,6 @@ sched_analyze_2 (struct deps *deps, rtx x, rtx insn) if (!deps->readonly) add_insn_mem_dependence (deps, true, insn, x); - /* Take advantage of tail recursion here. */ sched_analyze_2 (deps, XEXP (x, 0), insn); if (cslr_p && sched_deps_info->finish_rhs) @@ -2773,6 +2797,9 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn) struct deps_reg *reg_last = &deps->reg_last[i]; add_dependence_list (insn, reg_last->sets, 1, REG_DEP_ANTI); add_dependence_list (insn, reg_last->clobbers, 1, REG_DEP_ANTI); + + if (!deps->readonly) + reg_last->uses = alloc_INSN_LIST (insn, reg_last->uses); } CLEAR_REG_SET (reg_pending_uses); @@ -3505,7 +3532,8 @@ remove_from_deps (struct deps *deps, rtx insn) removed = remove_from_both_dependence_lists (insn, &deps->pending_read_insns, &deps->pending_read_mems); - deps->pending_read_list_length -= removed; + if (!DEBUG_INSN_P (insn)) + deps->pending_read_list_length -= removed; removed = remove_from_both_dependence_lists (insn, &deps->pending_write_insns, &deps->pending_write_mems); deps->pending_write_list_length -= removed; diff --git a/gcc/sched-vis.c b/gcc/sched-vis.c index 89230efa34c..906e9c31f2a 100644 --- a/gcc/sched-vis.c +++ b/gcc/sched-vis.c @@ -521,6 +521,10 @@ print_value (char *buf, const_rtx x, int verbose) cur = safe_concat (buf, cur, t); cur = safe_concat (buf, cur, "]"); break; + case DEBUG_EXPR: + sprintf (t, "D#%i", DEBUG_TEMP_UID (DEBUG_EXPR_TREE_DECL (x))); + cur = safe_concat (buf, cur, t); + break; default: print_exp (t, x, verbose); cur = safe_concat (buf, cur, t); @@ -670,11 +674,18 @@ print_insn (char *buf, const_rtx x, int verbose) if (DECL_P (INSN_VAR_LOCATION_DECL (insn))) { tree id = DECL_NAME (INSN_VAR_LOCATION_DECL (insn)); + char idbuf[32]; if (id) name = IDENTIFIER_POINTER (id); + else if (TREE_CODE (INSN_VAR_LOCATION_DECL (insn)) + == DEBUG_EXPR_DECL) + { + sprintf (idbuf, "D#%i", + DEBUG_TEMP_UID (INSN_VAR_LOCATION_DECL (insn))); + name = idbuf; + } else { - char idbuf[32]; sprintf (idbuf, "D.%i", DECL_UID (INSN_VAR_LOCATION_DECL (insn))); name = idbuf; diff --git a/gcc/sdbout.c b/gcc/sdbout.c index 0553740b968..e7d52a63c70 100644 --- a/gcc/sdbout.c +++ b/gcc/sdbout.c @@ -307,6 +307,7 @@ const struct gcc_debug_hooks sdb_debug_hooks = { sdbout_init, /* init */ sdbout_finish, /* finish */ + debug_nothing_void, /* assembly_start */ debug_nothing_int_charstar, /* define */ debug_nothing_int_charstar, /* undef */ sdbout_start_source_file, /* start_source_file */ @@ -1705,6 +1706,7 @@ const struct gcc_debug_hooks sdb_debug_hooks = { 0, /* init */ 0, /* finish */ + 0, /* assembly_start */ 0, /* define */ 0, /* undef */ 0, /* start_source_file */ diff --git a/gcc/sel-sched-ir.h b/gcc/sel-sched-ir.h index 9bc90bda559..70163c36c38 100644 --- a/gcc/sel-sched-ir.h +++ b/gcc/sel-sched-ir.h @@ -1395,6 +1395,9 @@ _eligible_successor_edge_p (edge e1, succ_iterator *ip) && !(flags & SUCCS_OUT)) return false; + if (EDGE_COUNT (bb->succs) == 0) + return false; + e2 = EDGE_SUCC (bb, 0); bb = e2->dest; } diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 4e87d04abaf..926615ec86f 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -350,38 +350,50 @@ simplify_gen_relational (enum rtx_code code, enum machine_mode mode, return gen_rtx_fmt_ee (code, mode, op0, op1); } -/* Replace all occurrences of OLD_RTX in X with NEW_RTX and try to simplify the - resulting RTX. Return a new RTX which is as simplified as possible. */ +/* Replace all occurrences of OLD_RTX in X with FN (X', DATA), where X' + is an expression in X that is equal to OLD_RTX. Canonicalize and + simplify the result. + + If FN is null, assume FN (X', DATA) == copy_rtx (DATA). */ rtx -simplify_replace_rtx (rtx x, const_rtx old_rtx, rtx new_rtx) +simplify_replace_fn_rtx (rtx x, const_rtx old_rtx, + rtx (*fn) (rtx, void *), void *data) { enum rtx_code code = GET_CODE (x); enum machine_mode mode = GET_MODE (x); enum machine_mode op_mode; - rtx op0, op1, op2; + const char *fmt; + rtx op0, op1, op2, newx, op; + rtvec vec, newvec; + int i, j; - /* If X is OLD_RTX, return NEW_RTX. Otherwise, if this is an expression, try - to build a new expression substituting recursively. If we can't do - anything, return our input. */ + /* If X is OLD_RTX, return FN (X, DATA), with a null FN. Otherwise, + if this is an expression, try to build a new expression, substituting + recursively. If we can't do anything, return our input. */ if (rtx_equal_p (x, old_rtx)) - return copy_rtx (new_rtx); + { + if (fn) + return fn (x, data); + else + return copy_rtx ((rtx) data); + } switch (GET_RTX_CLASS (code)) { case RTX_UNARY: op0 = XEXP (x, 0); op_mode = GET_MODE (op0); - op0 = simplify_replace_rtx (op0, old_rtx, new_rtx); + op0 = simplify_replace_fn_rtx (op0, old_rtx, fn, data); if (op0 == XEXP (x, 0)) return x; return simplify_gen_unary (code, mode, op0, op_mode); case RTX_BIN_ARITH: case RTX_COMM_ARITH: - op0 = simplify_replace_rtx (XEXP (x, 0), old_rtx, new_rtx); - op1 = simplify_replace_rtx (XEXP (x, 1), old_rtx, new_rtx); + op0 = simplify_replace_fn_rtx (XEXP (x, 0), old_rtx, fn, data); + op1 = simplify_replace_fn_rtx (XEXP (x, 1), old_rtx, fn, data); if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1)) return x; return simplify_gen_binary (code, mode, op0, op1); @@ -391,8 +403,8 @@ simplify_replace_rtx (rtx x, const_rtx old_rtx, rtx new_rtx) op0 = XEXP (x, 0); op1 = XEXP (x, 1); op_mode = GET_MODE (op0) != VOIDmode ? GET_MODE (op0) : GET_MODE (op1); - op0 = simplify_replace_rtx (op0, old_rtx, new_rtx); - op1 = simplify_replace_rtx (op1, old_rtx, new_rtx); + op0 = simplify_replace_fn_rtx (op0, old_rtx, fn, data); + op1 = simplify_replace_fn_rtx (op1, old_rtx, fn, data); if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1)) return x; return simplify_gen_relational (code, mode, op_mode, op0, op1); @@ -401,9 +413,9 @@ simplify_replace_rtx (rtx x, const_rtx old_rtx, rtx new_rtx) case RTX_BITFIELD_OPS: op0 = XEXP (x, 0); op_mode = GET_MODE (op0); - op0 = simplify_replace_rtx (op0, old_rtx, new_rtx); - op1 = simplify_replace_rtx (XEXP (x, 1), old_rtx, new_rtx); - op2 = simplify_replace_rtx (XEXP (x, 2), old_rtx, new_rtx); + op0 = simplify_replace_fn_rtx (op0, old_rtx, fn, data); + op1 = simplify_replace_fn_rtx (XEXP (x, 1), old_rtx, fn, data); + op2 = simplify_replace_fn_rtx (XEXP (x, 2), old_rtx, fn, data); if (op0 == XEXP (x, 0) && op1 == XEXP (x, 1) && op2 == XEXP (x, 2)) return x; if (op_mode == VOIDmode) @@ -411,10 +423,9 @@ simplify_replace_rtx (rtx x, const_rtx old_rtx, rtx new_rtx) return simplify_gen_ternary (code, mode, op_mode, op0, op1, op2); case RTX_EXTRA: - /* The only case we try to handle is a SUBREG. */ if (code == SUBREG) { - op0 = simplify_replace_rtx (SUBREG_REG (x), old_rtx, new_rtx); + op0 = simplify_replace_fn_rtx (SUBREG_REG (x), old_rtx, fn, data); if (op0 == SUBREG_REG (x)) return x; op0 = simplify_gen_subreg (GET_MODE (x), op0, @@ -427,15 +438,15 @@ simplify_replace_rtx (rtx x, const_rtx old_rtx, rtx new_rtx) case RTX_OBJ: if (code == MEM) { - op0 = simplify_replace_rtx (XEXP (x, 0), old_rtx, new_rtx); + op0 = simplify_replace_fn_rtx (XEXP (x, 0), old_rtx, fn, data); if (op0 == XEXP (x, 0)) return x; return replace_equiv_address_nv (x, op0); } else if (code == LO_SUM) { - op0 = simplify_replace_rtx (XEXP (x, 0), old_rtx, new_rtx); - op1 = simplify_replace_rtx (XEXP (x, 1), old_rtx, new_rtx); + op0 = simplify_replace_fn_rtx (XEXP (x, 0), old_rtx, fn, data); + op1 = simplify_replace_fn_rtx (XEXP (x, 1), old_rtx, fn, data); /* (lo_sum (high x) x) -> x */ if (GET_CODE (op0) == HIGH && rtx_equal_p (XEXP (op0, 0), op1)) @@ -450,7 +461,53 @@ simplify_replace_rtx (rtx x, const_rtx old_rtx, rtx new_rtx) default: break; } - return x; + + newx = x; + fmt = GET_RTX_FORMAT (code); + for (i = 0; fmt[i]; i++) + switch (fmt[i]) + { + case 'E': + vec = XVEC (x, i); + newvec = XVEC (newx, i); + for (j = 0; j < GET_NUM_ELEM (vec); j++) + { + op = simplify_replace_fn_rtx (RTVEC_ELT (vec, j), + old_rtx, fn, data); + if (op != RTVEC_ELT (vec, j)) + { + if (newvec == vec) + { + newvec = shallow_copy_rtvec (vec); + if (x == newx) + newx = shallow_copy_rtx (x); + XVEC (newx, i) = newvec; + } + RTVEC_ELT (newvec, j) = op; + } + } + break; + + case 'e': + op = simplify_replace_fn_rtx (XEXP (x, i), old_rtx, fn, data); + if (op != XEXP (x, i)) + { + if (x == newx) + newx = shallow_copy_rtx (x); + XEXP (newx, i) = op; + } + break; + } + return newx; +} + +/* Replace all occurrences of OLD_RTX in X with NEW_RTX and try to simplify the + resulting RTX. Return a new RTX which is as simplified as possible. */ + +rtx +simplify_replace_rtx (rtx x, const_rtx old_rtx, rtx new_rtx) +{ + return simplify_replace_fn_rtx (x, old_rtx, 0, new_rtx); } /* Try to simplify a unary operation CODE whose output mode is to be @@ -462,9 +519,6 @@ simplify_unary_operation (enum rtx_code code, enum machine_mode mode, { rtx trueop, tem; - if (GET_CODE (op) == CONST) - op = XEXP (op, 0); - trueop = avoid_constant_pool_reference (op); tem = simplify_const_unary_operation (code, mode, trueop, op_mode); @@ -1245,6 +1299,7 @@ simplify_const_unary_operation (enum rtx_code code, enum machine_mode mode, case US_TRUNCATE: case SS_NEG: case US_NEG: + case SS_ABS: return 0; default: diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 5967fb5770f..d070b10e3dc 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -1118,7 +1118,8 @@ place_field (record_layout_info rli, tree field) /* No, we need to skip space before this field. Bump the cumulative size to multiple of field alignment. */ - warning (OPT_Wpadded, "padding struct to align %q+D", field); + if (DECL_SOURCE_LOCATION (field) != BUILTINS_LOCATION) + warning (OPT_Wpadded, "padding struct to align %q+D", field); /* If the alignment is still within offset_align, just align the bit position. */ @@ -1483,7 +1484,8 @@ finalize_record_size (record_layout_info rli) = round_up_loc (input_location, unpadded_size_unit, TYPE_ALIGN_UNIT (rli->t)); if (TREE_CONSTANT (unpadded_size) - && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0) + && simple_cst_equal (unpadded_size, TYPE_SIZE (rli->t)) == 0 + && input_location != BUILTINS_LOCATION) warning (OPT_Wpadded, "padding struct size to alignment boundary"); if (warn_packed && TREE_CODE (rli->t) == RECORD_TYPE diff --git a/gcc/target.h b/gcc/target.h index c65063cbfc6..2c7fa4a6aa9 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -908,7 +908,7 @@ struct gcc_target /* Return the rtx for the result of a libcall of mode MODE, calling the function FN_NAME. */ - rtx (*libcall_value) (enum machine_mode, rtx); + rtx (*libcall_value) (enum machine_mode, const_rtx); /* Return an rtx for the argument pointer incoming to the current function. */ diff --git a/gcc/targhooks.c b/gcc/targhooks.c index dd52da98638..8614a4ff669 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -603,14 +603,19 @@ default_function_value (const_tree ret_type ATTRIBUTE_UNUSED, #ifdef FUNCTION_VALUE return FUNCTION_VALUE (ret_type, fn_decl_or_type); #else - return NULL_RTX; + gcc_unreachable (); #endif } rtx -default_libcall_value (enum machine_mode mode, rtx fun ATTRIBUTE_UNUSED) +default_libcall_value (enum machine_mode mode ATTRIBUTE_UNUSED, + const_rtx fun ATTRIBUTE_UNUSED) { +#ifdef LIBCALL_VALUE return LIBCALL_VALUE (mode); +#else + gcc_unreachable (); +#endif } rtx diff --git a/gcc/targhooks.h b/gcc/targhooks.h index 490d4ceeb91..3680b9bb63f 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -98,7 +98,7 @@ extern const char *hook_invalid_arg_for_unprototyped_fn (const_tree, const_tree, const_tree); extern bool hook_bool_const_rtx_commutative_p (const_rtx, int); extern rtx default_function_value (const_tree, const_tree, bool); -extern rtx default_libcall_value (enum machine_mode, rtx); +extern rtx default_libcall_value (enum machine_mode, const_rtx); extern rtx default_internal_arg_pointer (void); extern rtx default_static_chain (const_tree, bool); extern void default_trampoline_init (rtx, tree, rtx); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 11da3e73dd7..4d6eb811876 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,472 @@ +2009-10-23 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/lambda/lambda-nested2.C: New. + + Core issue 899 + * g++.dg/cpp0x/explicit4.C: New. + +2009-10-23 Joseph Myers <joseph@codesourcery.com> + + * g++.dg/abi/rtti3.C, g++.dg/abi/thunk4.C: Skip for *-*-mingw* and + *-*-cygwin. + * g++.dg/cpp0x/lambda/lambda-mangle.C: Disable weak symbols tests + for *-*-mingw* and *-*-cygwin. + * g++.dg/opt/vt1.C: Skip for *-*-mingw* and *-*_cygwin. + * g++.dg/template/spec35.C: Disable weak symbol test for + *-*-mingw* and *-*-cygwin. + + PR testsuite/31342 + * gcc.target/i386/pic-1.c: Skip for *-*-mingw* and *-*-cygwin. + +2009-10-23 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41800 + * gfortran.dg/class_10.f03: New test. + +2009-10-22 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/41787 + * gcc.target/powerpc/vsx-vrsave.c: New file. + +2009-10-23 Joseph Myers <joseph@codesourcery.com> + + PR c/41673 + * gcc.dg/Wstrict-aliasing-bogus-vla-1.c: New test. + +2009-10-23 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/41778 + * gcc.dg/tree-ssa/ssa-pre-26.c: New testcase. + +2009-10-22 Richard Guenther <rguenther@suse.de> + + PR lto/41791 + * g++.dg/lto/20091022-2_0.C: New testcase. + +2009-10-22 Richard Guenther <rguenther@suse.de> + + PR lto/41730 + * g++.dg/lto/20091022-1_0.C: New testcase. + +2009-10-22 Jan Hubicka <jh@suse.cz> + + * gcc.c-torture/compile/pr40556.c: New testcase. + +2009-10-22 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41781 + * gfortran.dg/goto_8.f90: New test case. + +2009-10-21 Sebastian Pop <sebastian.pop@amd.com> + + PR tree-optimization/41497 + * gcc.dg/tree-ssa/pr41497.c: New. + +2009-10-21 Steve Ellcey <sje@cup.hp.com> + + * g++.dg/tree-ssa/copyprop.C: Use include to define free(). + +2009-10-21 Joseph Myers <joseph@codesourcery.com> + + * gcc.dg/tls/pie-1.c: New test. + +2009-10-21 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/abi/mangle33.C: New test. + +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/discr22.adb: New test. + +2009-10-21 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/loop_optimization7.ad[sb]: New test. + * gnat.dg/loop_optimization7_pkg.ads: New helper. + +2009-10-21 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41706 + PR fortran/41766 + * gfortran.dg/class_9.f03: Extended test case. + * gfortran.dg/select_type_7.f03: New test case. + +2009-10-20 Richard Guenther <rguenther@suse.de> + + * gcc.dg/lto/20091020-3_0.c: New testcase. + +2009-10-20 Richard Guenther <rguenther@suse.de> + + PR lto/41761 + * gcc.dg/lto/20091020-1_0.c: New testcase. + * gcc.dg/lto/20091020-1_1.c: Likewise. + * gcc.dg/lto/20091020-2_0.c: Likewise. + * gcc.dg/lto/20091020-2_1.c: Likewise. + +2009-10-20 Jakub Jelinek <jakub@redhat.com> + + PR debug/41340 + * gcc.dg/pr41340.c: New test. + +2009-10-20 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/discr21.ad[sb]: New test. + * gnat.dg/discr21_pkg.ads: New helper. + +2009-10-20 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41706 + * gfortran.dg/class_9 : New test. + +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/raw-string-1.c: New test. + * gcc.dg/raw-string-2.c: New test. + * gcc.dg/raw-string-3.c: New test. + * gcc.dg/raw-string-4.c: New test. + * gcc.dg/raw-string-5.c: New test. + * gcc.dg/raw-string-6.c: New test. + * gcc.dg/raw-string-7.c: New test. + * gcc.dg/utf8-1.c: New test. + * gcc.dg/utf8-2.c: New test. + * gcc.dg/utf-badconcat2.c: New test. + * gcc.dg/utf-dflt2.c: New test. + * gcc.dg/cpp/include6.c: New test. + * g++.dg/ext/raw-string-1.C: New test. + * g++.dg/ext/raw-string-2.C: New test. + * g++.dg/ext/raw-string-3.C: New test. + * g++.dg/ext/raw-string-4.C: New test. + * g++.dg/ext/raw-string-5.C: New test. + * g++.dg/ext/raw-string-6.C: New test. + * g++.dg/ext/raw-string-7.C: New test. + * g++.dg/ext/utf8-1.C: New test. + * g++.dg/ext/utf8-2.C: New test. + * g++.dg/ext/utf-badconcat2.C: New test. + * g++.dg/ext/utf-dflt2.C: New test. + + * gcc.dg/cleanup-13.c: New test. + +2009-10-19 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41586 + * gfortran.dg/auto_dealloc_1.f90: New test case. + +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + Port from redhat/gcc-4_4-branch: + 2009-10-08 Jakub Jelinek <jakub@redhat.com> + * gcc.dg/debug/vta-2.c: New test. + + 2009-09-30 Alexandre Oliva <aoliva@redhat.com> + * gcc.dg/debug/vta-1.c: New. + +2009-10-19 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/noreturn2.ad[sb]: New test. + +2009-10-19 Tobias Burnus <burnus@net-b.de> + + PR fortran/41755 + * gfortran.dg/equiv_8.f90: New test. + * gfortran.dg/class_allocate_1.f03: Remove obsolete FIXME. + +2009-10-19 Joseph Myers <joseph@codesourcery.com> + + * gcc.target/arm/neon-thumb2-move.c: New test. + +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/debug/vta-3.c: New test. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/nested_proc.adb: Rename into... + * gnat.dg/nested_proc1.adb: ...this. + * gnat.dg/nested_proc2.adb: New test. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/noreturn1.ad[sb]: New test. + +2009-10-17 Janus Weil <janus@gcc.gnu.org> + Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41629 + * gfortran.dg/class_6.f90: New test. + + PR fortran/41608 + PR fortran/41587 + * gfortran.dg/class_7.f90: New test. + + PR fortran/41618 + * gfortran.dg/class_8.f90: New test. + +2009-10-17 Richard Guenther <rguenther@suse.de> + + * gcc.dg/lto/20091017-1_0.c: New testcase. + * gcc.dg/lto/20091017-1_1.c: Likewise. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/unchecked_convert4.adb: Add missing rep clause. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/aggr11.adb: New test. + * gnat.dg/aggr11_pkg.ads: New helper. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/slice8.adb: New test. + * gnat.dg/slice8_pkg1.ads: New helper. + * gnat.dg/slice8_pkg2.ads: Likewise. + * gnat.dg/slice8_pkg3.ad[sb]: Likewise. + +2009-10-17 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/unchecked_convert4.adb: New test. + +2009-10-15 Jason Merrill <jason@redhat.com> + + PR c++/38798 + * g++.dg/cpp0x/trailing5.C: New. + + * g++.dg/cpp0x/auto6.C: Rename to trailing1.C. + * g++.dg/cpp0x/auto8.C: Rename to trailing2.C. + * g++.dg/cpp0x/auto12.C: Rename to trailing3.C. + * g++.dg/cpp0x/auto13.C: Rename to trailing4.C. + +2009-10-16 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41719 + * gfortran.dg/class_5.f03: New test case. + * gfortran.dg/typebound_operator_2.f03: Fixing invalid test case. + * gfortran.dg/typebound_operator_4.f03: Ditto. + +2009-10-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * g++.dg/ipa/iinline-1.C: Use dg-add-options bind_pic_locally. + * g++.dg/other/first-global.C: Likewise. + * g++.dg/parse/attr-externally-visible-1.C: Likewise. + * g++.dg/torture/pr40323.C: Likewise. + * g++.dg/tree-ssa/nothrow-1.C: Likewise. + * gcc.dg/inline-33.c: Likewise. + * gcc.dg/ipa/ipa-1.c: Likewise. + * gcc.dg/ipa/ipa-2.c: Likewise. + * gcc.dg/ipa/ipa-3.c: Likewise. + * gcc.dg/ipa/ipa-4.c: Likewise. + * gcc.dg/ipa/ipa-5.c: Likewise. + * gcc.dg/ipa/ipa-7.c: Likewise. + * gcc.dg/ipa/ipacost-2.c: Likewise. + * gcc.dg/tree-ssa/inline-3.c: Likewise. + * gcc.dg/tree-ssa/local-pure-const.c: Likewise. + * gfortran.dg/whole_file_5.f90: Likewise. + * gfortran.dg/whole_file_6.f90: Likewise. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/41728 + * gcc.c-torture/compile/pr41728.c: New testcase. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR lto/41598 + * gcc.dg/lto/20091016-1_0.c: New testcase. + * gcc.dg/lto/20091016-1_1.c: Likewise. + * gcc.dg/lto/20091016-1_a.h: Likewise. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR lto/41715 + * gfortran.dg/lto/20091015-1_0.f: New testcase. + * gfortran.dg/lto/20091015-1_1.f: Likewise. + * gfortran.dg/lto/20091015-1_2.f: Likewise. + +2009-10-16 Richard Guenther <rguenther@suse.de> + + PR lto/41713 + * gfortran.dg/lto/20091016-1_0.f90: New testcase. + +2009-10-15 Jakub Jelinek <jakub@redhat.com> + + PR debug/41717 + * gcc.dg/debug/pr41717.c: New test. + +2009-10-16 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/41648 + * gfortran.dg/dynamic_dispatch_4.f03 : New test. + + PR fortran/41656 + * gfortran.dg/dynamic_dispatch_5.f03 : New test. + +2009-10-15 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/23983 + * gcc.target/powerpc/altivec-4.c (b): Make sure altivec builtin + result used. + * g++.dg/ext/altivec-2.C (main): Ditto. + +2009-10-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * lib/target-supports.exp (add_options_for_bind_pic_locally): New. + * gcc.dg/tree-ssa/ipa-cp-1.c: Bind pic locally. + +2009-10-15 Richard Guenther <rguenther@suse.de> + + PR lto/41669 + * gcc.dg/lto/20091015-1_0.c: New testcase. + * gcc.dg/lto/20091015-1_1.c: Likewise. + * gcc.dg/lto/20091015-1_2.c: Likewise. + * gcc.dg/lto/20091015-1_a.h: Likewise. + * gcc.dg/lto/20091015-1_b.h: Likewise. + +2009-10-15 Steve Ellcey <sje@cup.hp.com> + + * gcc.dg/torture/pr41555.c: Add -std=c99 option. + +2009-10-14 Daniel Gutson <dgutson@codesourcery.com> + + * gcc.target/arm/neon/vfp-shift-a2t2.c: New test case. + +2009-10-14 Jakub Jelinek <jakub@redhat.com> + + * obj-c++.dg/layout-1.mm: Don't xfail dg-bogus on lp64, change + line from 1 to 0. + * obj-c++.dg/bitfield-1.mm: Likewise. + * obj-c++.dg/bitfield-4.mm: Likewise. + +2009-10-14 Richard Guenther <rguenther@suse.de> + + PR lto/41173 + * gcc.dg/lto/20091014-1_0.c: New testcase. + +2009-10-14 Jakub Jelinek <jakub@redhat.com> + + PR testsuite/41707 + * g++.dg/plugin/attribute_plugin-test-1.C: Expect the first + warning on line 0 instead of 1. + +2009-10-14 Richard Guenther <rguenther@suse.de> + + PR lto/41521 + * gfortran.dg/lto/pr41521_0.f90: New testcase. + * gfortran.dg/lto/pr41521_1.f90: Likewise. + +2009-10-14 Jakub Jelinek <jakub@redhat.com> + + PR preprocessor/41543 + * gcc.dg/debug/dwarf2/pr41543.c: New test. + + PR debug/41695 + * gcc.dg/debug/dwarf2/pr41695.c: New test. + +2009-10-14 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/i386.exp (check_effective_target_ms_hook_prologue): + New procedure. + * gcc.target/i386/ms_hook_prologue.c: Check for ms_hook_prologue + effective target. + +2009-10-14 Jason Merrill <jason@redhat.com> + + PR c++/39866 + * g++.dg/cpp0x/defaulted14.C: New. + +2009-10-14 Larry Evans <cppljevans@suddenlink.net> + + * g++.dg/cpp0x/vt-40092.C: New. + +2009-10-14 Alexandre Oliva <aoliva@redhat.com> + + * gcc.dg/guality/pr41616-1.c: Drop -O2. + * gcc.dg/guality/pr41447-1.c: Likewise. Name main. + +2009-10-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * gfortran.dg/complex_intrinsic_8.f90: New test. + +2009-10-13 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> + + * gcc.dg/torture/builtin-math-6.c: Test complex "arc" functions. + * lib/target-supports.exp (check_effective_target_mpc_arc): New. + +2009-10-14 Hans-Peter Nilsson <hp@axis.com> + + PR target/38948 + * gcc.dg/torture/pr38948.c: New test. + +2009-10-13 Steve Ellcey <sje@cup.hp.com> + + * gfortran.dg/vect/fast-math-pr38968.f90: Add timeout. + +2009-10-13 Janus Weil <janus@gcc.gnu.org> + + PR fortran/41581 + * gfortran.dg/class_allocate_2.f03: Modified. + * gfortran.dg/class_allocate_3.f03: New test case. + +2009-10-13 Richard Guenther <rguenther@suse.de> + + PR lto/41668 + * gcc.dg/lto/20091006-2_0.c: New testcase. + * gcc.dg/lto/20091006-2_1.c: Likewise. + * gcc.dg/lto/20091006-2_2.c: Likewise. + * gcc.dg/lto/20091013-1_0.c: Likewise. + * gcc.dg/lto/20091013-1_1.c: Likewise. + * gcc.dg/lto/20091013-1_2.c: Likewise. + +2009-10-13 Martin Jambor <mjambor@suse.cz> + + * gcc.c-torture/compile/pr41661.c: New test. + +2009-10-12 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/41683 + * gfortran.dg/fmt_error_9.f: Add check for repeat count after P. + +2009-10-12 Jason Merrill <jason@redhat.com> + + PR c++/37875 + * g++.dg/cpp0x/decltype18.C: New. + + PR c++/37766 + * g++.dg/cpp0x/fntmpdefarg1.C: New. + +2009-10-12 Janis Johnson <janis187@us.ibm.com> + + * gcc.dg/lto/20090914-2.c: Fix typos in test directives. + +2009-10-12 Alexandre Oliva <aoliva@redhat.com> + + PR debug/41343 + PR debug/41447 + PR debug/41264 + PR debug/41338 + * gcc.dg/guality/pr41447-1.c: New. + * gcc.dg/debug/pr41264-1.c: New. + * gcc.dg/debug/pr41343-1.c: New. + +2009-10-12 Hans-Peter Nilsson <hp@axis.com> + + PR target/26515 + * gcc.dg/torture/pr26515.c: New test. + +2009-10-12 Janis Johnson <janis187@us.ibm.com> + + PR testsuite/41659 + * gcc.dg/lto/20090914-2.c: Use dg-skip-if to skip test. + * lib/lto.exp (lto-get-options-main): Report error for using "target" + or "xfail" with dg-lto-do. + +2009-10-12 Stefan Dösinger <stefan@codeweavers.com> + + * gcc.target/i386/ms_hook_prologue.c: New testcase. + +2009-10-12 Michael Matz <matz@suse.de> + + * gcc.dg/plugin/one_time_plugin.c: Update test to use the cfg + pass. + 2009-10-12 Jakub Jelinek <jakub@redhat.com> PR target/41680 @@ -6,7 +475,7 @@ 2009-10-12 Dodji Seketeli <dodji@redhat.com> PR c++/41570 - * gcc/testsuite/g++.dg/debug/dwarf2/template-params-7.C: New test. + * g++.dg/debug/dwarf2/template-params-7.C: New test. 2009-10-12 Alexandre Oliva <aoliva@redhat.com> @@ -681,56 +1150,55 @@ 2009-09-29 Harsha Jagasia <harsha.jagasia@amd.com> - * gcc.target/i386/fma4-check.h - * gcc.target/i386/fma4-fma.c - * gcc.target/i386/fma4-maccXX.c - * gcc.target/i386/fma4-msubXX.c - * gcc.target/i386/fma4-nmaccXX.c - * gcc.target/i386/fma4-nmsubXX.c - * gcc.target/i386/fma4-vector.c - * gcc.target/i386/fma4-256-maccXX.c - * gcc.target/i386/fma4-256-msubXX.c - * gcc.target/i386/fma4-256-nmaccXX.c - * gcc.target/i386/fma4-256-nmsubXX.c - * gcc.target/i386/fma4-256-vector.c - * gcc.target/i386/funcspec-2.c: New file. - - * gcc.target/i386/funcspec-4.c: Test error conditions - related to FMA4. - - * gcc.target/i386/funcspec-5.c - * gcc.target/i386/funcspec-6.c - * gcc.target/i386/funcspec-8.c: Add FMA4. + * gcc.target/i386/fma4-check.h: New file. + * gcc.target/i386/fma4-fma.c: Ditto. + * gcc.target/i386/fma4-maccXX.c: Ditto. + * gcc.target/i386/fma4-msubXX.c: Ditto. + * gcc.target/i386/fma4-nmaccXX.c: Ditto. + * gcc.target/i386/fma4-nmsubXX.c: Ditto. + * gcc.target/i386/fma4-vector.c: Ditto. + * gcc.target/i386/fma4-256-maccXX.c: Ditto. + * gcc.target/i386/fma4-256-msubXX.c: Ditto. + * gcc.target/i386/fma4-256-nmaccXX.c: Ditto. + * gcc.target/i386/fma4-256-nmsubXX.c: Ditto. + * gcc.target/i386/fma4-256-vector.c: Ditto. + * gcc.target/i386/funcspec-2.c: Ditto. + + * gcc.target/i386/funcspec-4.c: Test error conditions related to FMA4. + + * gcc.target/i386/funcspec-5.c: Add FMA4. + * gcc.target/i386/funcspec-6.c: Ditto. + * gcc.target/i386/funcspec-8.c: Ditto. * gcc.target/i386/funcspec-9.c: New file. * gcc.target/i386/i386.exp: Add check_effective_target_fma4. - * gcc.target/i386/isa-10.c - * gcc.target/i386/isa-11.c - * gcc.target/i386/isa-12.c - * gcc.target/i386/isa-13.c - * gcc.target/i386/isa-2.c - * gcc.target/i386/isa-3.c - * gcc.target/i386/isa-4.c - * gcc.target/i386/isa-7.c - * gcc.target/i386/isa-8.c - * gcc.target/i386/isa-9.c: New file. - - * gcc.target/i386/isa-14.c - * gcc.target/i386/isa-1.c - * gcc.target/i386/isa-5.c - * gcc.target/i386/isa-6.c: Add FMA4. - - * gcc.target/i386/sse-12.c - * gcc.target/i386/sse-13.c - * gcc.target/i386/sse-14.c - * gcc.target/i386/sse-22.c: New file. - - * g++.dg/other/i386-2.C - * g++.dg/other/i386-3.C - * g++.dg/other/i386-5.C - * g++.dg/other/i386-6.C: Add -mfma4 in dg-options. + * gcc.target/i386/isa-10.c: New file. + * gcc.target/i386/isa-11.c: Ditto. + * gcc.target/i386/isa-12.c: Ditto. + * gcc.target/i386/isa-13.c: Ditto. + * gcc.target/i386/isa-2.c: Ditto. + * gcc.target/i386/isa-3.c: Ditto. + * gcc.target/i386/isa-4.c: Ditto. + * gcc.target/i386/isa-7.c: Ditto. + * gcc.target/i386/isa-8.c: Ditto. + * gcc.target/i386/isa-9.c: Ditto. + + * gcc.target/i386/isa-14.c: Add FMA4. + * gcc.target/i386/isa-1.c: Ditto. + * gcc.target/i386/isa-5.c: Ditto. + * gcc.target/i386/isa-6.c: Ditto. + + * gcc.target/i386/sse-12.c: New file. + * gcc.target/i386/sse-13.c: Ditto. + * gcc.target/i386/sse-14.c: Ditto. + * gcc.target/i386/sse-22.c: Ditto. + + * g++.dg/other/i386-2.C: Add -mfma4 to dg-options. + * g++.dg/other/i386-3.C: Ditto. + * g++.dg/other/i386-5.C: Ditto. + * g++.dg/other/i386-6.C: Ditto. 2009-09-29 H.J. Lu <hongjiu.lu@intel.com> @@ -753,13 +1221,14 @@ 2009-09-29 Harsha Jagasia <harsha.jagasia@amd.com> * gcc.target/i386/i386.exp: Remove check_effective_target_sse5. - * gcc.target/i386/isa-1.c - * gcc.target/i386/isa-5.c - * gcc.target/i386/isa-6.c: Remove SSE5. - * gcc.target/i386/funcspec-4.c: Remove error conditions related to SSE5. - * gcc.target/i386/avx-1.c - * gcc.target/i386/avx-2.c - * gcc.target/i386/sse-23.c: Remove comments to mmintrin-common.h. + * gcc.target/i386/isa-1.c: Remove SSE5. + * gcc.target/i386/isa-5.c: Ditto. + * gcc.target/i386/isa-6.c: Ditto. + * gcc.target/i386/funcspec-4.c: Remove error conditions + related to SSE5. + * gcc.target/i386/avx-1.c: Remove comments to mmintrin-common.h. + * gcc.target/i386/avx-2.c: Ditto. + * gcc.target/i386/sse-23.c: Ditto. * gcc.target/i386/funcspec-9.c: Delete. 2009-09-29 Jakub Jelinek <jakub@redhat.com> @@ -826,7 +1295,7 @@ 2009-09-27 Richard Henderson <rth@redhat.com> * gcc.c-torture/compile/pr41469.c: Add -fexceptions. - * testsuite/gcc.dg/tree-ssa/pr41469-1.c: New. + * gcc.dg/tree-ssa/pr41469-1.c: New. 2009-09-26 Andreas Schwab <schwab@linux-m68k.org> diff --git a/gcc/testsuite/g++.dg/abi/mangle33.C b/gcc/testsuite/g++.dg/abi/mangle33.C new file mode 100644 index 00000000000..f0a4e5012d3 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/mangle33.C @@ -0,0 +1,19 @@ +// Testcase for mangling very long names. + +#define N \ +abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm + +namespace N { + int i; +} + +#undef N +#define N \ +abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk + +namespace N { + int j; +} + +// { dg-final { scan-assembler "_ZN4043abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm1iE" } } +// { dg-final { scan-assembler "_ZN4041abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk1jE" } } diff --git a/gcc/testsuite/g++.dg/abi/rtti3.C b/gcc/testsuite/g++.dg/abi/rtti3.C index ee562adac59..c03e4611c0b 100644 --- a/gcc/testsuite/g++.dg/abi/rtti3.C +++ b/gcc/testsuite/g++.dg/abi/rtti3.C @@ -2,6 +2,7 @@ // necessarily the type info object // { dg-require-weak "" } +// { dg-skip-if "Linkonce not weak" { *-*-mingw* *-*-cygwin } { "*" } { "" } } // { dg-final { scan-assembler ".weak\[ \t\]_?_ZTSPP1A" { target { ! { *-*-darwin* } } } } } // { dg-final { scan-assembler-not ".weak\[ \t\]_?_ZTIPP1A" { target { ! { *-*-darwin* } } } } } // { dg-final { scan-assembler ".weak_definition\[ \t\]_?_ZTSPP1A" { target { *-*-darwin* } } } } diff --git a/gcc/testsuite/g++.dg/abi/thunk4.C b/gcc/testsuite/g++.dg/abi/thunk4.C index 79af6624d56..fa5fbd43277 100644 --- a/gcc/testsuite/g++.dg/abi/thunk4.C +++ b/gcc/testsuite/g++.dg/abi/thunk4.C @@ -1,4 +1,5 @@ // { dg-require-weak "" } +// { dg-skip-if "Linkonce not weak" { *-*-mingw* *-*-cygwin } { "*" } { "" } } // { dg-final { scan-assembler ".weak\[ \t\]_?_ZThn._N7Derived3FooEv" { target { ! { *-*-darwin* } } } } } // { dg-final { scan-assembler ".weak_definition\[ \t\]_?_ZThn._N7Derived3FooEv" { target { *-*-darwin* } } } } diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype18.C b/gcc/testsuite/g++.dg/cpp0x/decltype18.C new file mode 100644 index 00000000000..0d44586e9d2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype18.C @@ -0,0 +1,5 @@ +// PR c++/37875 +// { dg-options "-std=c++0x" } + +template <typename> struct X {}; +X<decltype(1 > 2)> x; diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted14.C b/gcc/testsuite/g++.dg/cpp0x/defaulted14.C new file mode 100644 index 00000000000..235e646780a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted14.C @@ -0,0 +1,18 @@ +// PR c++/39866 +// { dg-options "-std=c++0x" } + +struct A { + A& operator=(const A&) = delete; // { dg-bogus "" } + + void operator=(int) {} // { dg-message "" } + void operator=(char) {} // { dg-message "" } +}; + +struct B {}; + +int main() +{ + A a; + a = B(); // { dg-error "no match" } + a = 1.0; // { dg-error "ambiguous" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/explicit4.C b/gcc/testsuite/g++.dg/cpp0x/explicit4.C new file mode 100644 index 00000000000..74726a99cad --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/explicit4.C @@ -0,0 +1,17 @@ +// Negative explicit conv test. +// { dg-options "-std=c++0x" } + +struct A { + A(const A&, int = 0); // { dg-message "candidates" } +}; +struct B +{ + explicit operator A(); +}; + +int main() +{ + B b; + (A(b)); // OK + (A(b,1)); // { dg-error "no match" } +} diff --git a/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C b/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C new file mode 100644 index 00000000000..25192ad8672 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C @@ -0,0 +1,7 @@ +// PR c++/37766 +// { dg-options -std=c++0x } + +int a = 1; +template<int& b = a> void f() { + f<>(); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C index dc89d2388fb..9f7d5f3b2a9 100644 --- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-mangle.C @@ -10,7 +10,7 @@ inline void g(int n) { // The call operator of that type is _ZZ1giENKUlvE_clEv. // { dg-final { scan-assembler "_ZZ1giENKUlvE_clEv" } } -// { dg-final { scan-assembler "weak\[ \t\]*_?_ZZ1giENKUlvE_clEv" { target { ! { *-*-darwin* } } } } } +// { dg-final { scan-assembler "weak\[ \t\]*_?_ZZ1giENKUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } } algo([=]{return n+bef();}); // The captured entities do not participate in <lambda-sig> @@ -32,7 +32,7 @@ struct S { // Type: ZN1S1fEiiEd0_UlvE_ // Operator: _ZZN1S1fEiiEd0_NKUlvE_clEv // { dg-final { scan-assembler "_ZZN1S1fEiiEd0_NKUlvE_clEv" } } -// { dg-final { scan-assembler "weak\[ \t\]*_?_ZZN1S1fEiiEd0_NKUlvE_clEv" { target { ! { *-*-darwin* } } } } } +// { dg-final { scan-assembler "weak\[ \t\]*_?_ZZN1S1fEiiEd0_NKUlvE_clEv" { target { ! { *-*-darwin* *-*-mingw* *-*-cygwin } } } } } []{return 1;}() // Type: ZN1S1fEiiEd0_UlvE0_ // Operator: _ZZN1S1fEiiEd0_NKUlvE0_clEv @@ -53,7 +53,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 "_ZNK1RIiE1xMUlvE_clEv" } } -// { dg-final { scan-assembler "weak\[ \t\]*_?_ZNK1RIiE1xMUlvE_clEv" } } +// { dg-final { scan-assembler "weak\[ \t\]*_?_ZNK1RIiE1xMUlvE_clEv" { target { ! { *-*-mingw* *-*-cygwin } } } } } void bar() { diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested2.C new file mode 100644 index 00000000000..b7887485595 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nested2.C @@ -0,0 +1,31 @@ +// Testcase from N2998 +// { dg-options -std=c++0x } + +void f1(int i) { + int const N = 20; + auto m1 = [=]{ + int const M = 30; + auto m2 = [i]{ + int x[N][M]; // OK: N and M are not "used" + x[0][0] = i; // OK: i is explicitly captured by m2 + // and implicitly captured by m1 + }; + }; + struct s1 { + int f; + int work(int n) { + int m = n*n; + int j = 40; + auto m3 = [this,m]{ + /*auto m4=*/[&,j]{ // { dg-error "j. is not captured" } + int x = n; // { dg-error "n. is not captured" } + x += m; // OK: m implicitly captured by m4 + // and explicitly captured by m3 + x += i; // { dg-error "i. is not captured" } + x += f; // OK: this captured implicitly by m4 + // and explicitly by m3 + }; + }; + } + }; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/auto6.C b/gcc/testsuite/g++.dg/cpp0x/trailing1.C index 11e73d2e716..11e73d2e716 100644 --- a/gcc/testsuite/g++.dg/cpp0x/auto6.C +++ b/gcc/testsuite/g++.dg/cpp0x/trailing1.C diff --git a/gcc/testsuite/g++.dg/cpp0x/auto8.C b/gcc/testsuite/g++.dg/cpp0x/trailing2.C index e45204fe715..e45204fe715 100644 --- a/gcc/testsuite/g++.dg/cpp0x/auto8.C +++ b/gcc/testsuite/g++.dg/cpp0x/trailing2.C diff --git a/gcc/testsuite/g++.dg/cpp0x/auto12.C b/gcc/testsuite/g++.dg/cpp0x/trailing3.C index 82d36f0d0d2..82d36f0d0d2 100644 --- a/gcc/testsuite/g++.dg/cpp0x/auto12.C +++ b/gcc/testsuite/g++.dg/cpp0x/trailing3.C diff --git a/gcc/testsuite/g++.dg/cpp0x/auto13.C b/gcc/testsuite/g++.dg/cpp0x/trailing4.C index dc7e35aabaa..dc7e35aabaa 100644 --- a/gcc/testsuite/g++.dg/cpp0x/auto13.C +++ b/gcc/testsuite/g++.dg/cpp0x/trailing4.C diff --git a/gcc/testsuite/g++.dg/cpp0x/trailing5.C b/gcc/testsuite/g++.dg/cpp0x/trailing5.C new file mode 100644 index 00000000000..b97d362be2f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/trailing5.C @@ -0,0 +1,10 @@ +// PR c++/38798, DR 770 +// { dg-options -std=c++0x } + +struct A {}; +auto foo() -> struct A {} + +enum B {}; +auto bar() -> enum B {} + +auto baz() -> struct C {} {} // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-40092.C b/gcc/testsuite/g++.dg/cpp0x/vt-40092.C new file mode 100644 index 00000000000..063ed7e16eb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/vt-40092.C @@ -0,0 +1,21 @@ +// { dg-do "compile" } +// { dg-options "-std=c++0x" } + +template <typename... Types> struct package {}; + +template <int ArgGen> struct wrapper_gen {}; + +template <int ArgNest> struct wrapper_nest +{ + typedef wrapper_gen<ArgNest> type_nest; +}; + +template <int... ArgPack> +struct wrapper_pack +{ + typedef package<wrapper_gen <ArgPack>...> type_pack; + // incorrect error: expansion pattern 'wrapper_gen<ArgNest>' + // contains no argument packs +}; + + diff --git a/gcc/testsuite/g++.dg/ext/altivec-2.C b/gcc/testsuite/g++.dg/ext/altivec-2.C index 299693694f6..1185a79e5ec 100644 --- a/gcc/testsuite/g++.dg/ext/altivec-2.C +++ b/gcc/testsuite/g++.dg/ext/altivec-2.C @@ -7,6 +7,8 @@ #include <altivec.h> +vector unsigned char use_lvsl; + int main (int argc, const char * argv[]) { int i = 0; @@ -17,7 +19,7 @@ int main (int argc, const char * argv[]) vec_dst(&cv, i, 0); v = vec_ld(0, &cv); v = vec_lde(0, &cf); - vec_lvsl(0, &cf); + use_lvsl = vec_lvsl(0, &cf); return 0; } diff --git a/gcc/testsuite/g++.dg/ext/raw-string-1.C b/gcc/testsuite/g++.dg/ext/raw-string-1.C new file mode 100644 index 00000000000..0e8abf8b498 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/raw-string-1.C @@ -0,0 +1,96 @@ +// { dg-do run } +// { dg-options "-std=c++0x" } + +const char s0[] = R"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char s1[] = "a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char s2[] = R"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char s3[] = "ab\nc]\"\nc]*|\"\nc"; + +const char t0[] = u8R"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char t1[] = u8"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char t2[] = u8R"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char t3[] = u8"ab\nc]\"\nc]*|\"\nc"; + +const char16_t u0[] = uR"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char16_t u1[] = u"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char16_t u2[] = uR"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char16_t u3[] = u"ab\nc]\"\nc]*|\"\nc"; + +const char32_t U0[] = UR"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char32_t U1[] = U"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char32_t U2[] = UR"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char32_t U3[] = U"ab\nc]\"\nc]*|\"\nc"; + +const wchar_t L0[] = LR"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const wchar_t L1[] = L"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const wchar_t L2[] = LR"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const wchar_t L3[] = L"ab\nc]\"\nc]*|\"\nc"; + +int +main (void) +{ + if (sizeof (s0) != sizeof (s1) + || __builtin_memcmp (s0, s1, sizeof (s0)) != 0) + __builtin_abort (); + if (sizeof (s2) != sizeof (s3) + || __builtin_memcmp (s2, s3, sizeof (s2)) != 0) + __builtin_abort (); + if (sizeof (t0) != sizeof (t1) + || __builtin_memcmp (t0, t1, sizeof (t0)) != 0) + __builtin_abort (); + if (sizeof (t2) != sizeof (t3) + || __builtin_memcmp (t2, t3, sizeof (t2)) != 0) + __builtin_abort (); + if (sizeof (u0) != sizeof (u1) + || __builtin_memcmp (u0, u1, sizeof (u0)) != 0) + __builtin_abort (); + if (sizeof (u2) != sizeof (u3) + || __builtin_memcmp (u2, u3, sizeof (u2)) != 0) + __builtin_abort (); + if (sizeof (U0) != sizeof (U1) + || __builtin_memcmp (U0, U1, sizeof (U0)) != 0) + __builtin_abort (); + if (sizeof (U2) != sizeof (U3) + || __builtin_memcmp (U2, U3, sizeof (U2)) != 0) + __builtin_abort (); + if (sizeof (L0) != sizeof (L1) + || __builtin_memcmp (L0, L1, sizeof (L0)) != 0) + __builtin_abort (); + if (sizeof (L2) != sizeof (L3) + || __builtin_memcmp (L2, L3, sizeof (L2)) != 0) + __builtin_abort (); + if (sizeof (R"*[]*") != 1 + || __builtin_memcmp (R"*[]*", "", 1) != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/ext/raw-string-2.C b/gcc/testsuite/g++.dg/ext/raw-string-2.C new file mode 100644 index 00000000000..c7eb602afec --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/raw-string-2.C @@ -0,0 +1,104 @@ +// { dg-do run } +// { dg-options "-std=c++0x" } + +#define R +#define u +#define uR +#define U +#define UR +#define u8 +#define u8R +#define L +#define LR + +const char s00[] = R"[a]" "[b]"; +const char s01[] = "[a]" R"*[b]*"; +const char s02[] = R"[a]" R"[b]"; +const char s03[] = R"-[a]-" u8"[b]"; +const char s04[] = "[a]" u8R"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const char s05[] = R"[a]" u8R"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const char s06[] = u8R";([a];(" "[b]"; +const char s07[] = u8"[a]" R"[b]"; +const char s08[] = u8R"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const char s09[] = u8R"/^&|~!=,"'\[a]/^&|~!=,"'\" u8"[b]"; +const char s10[] = u8"[a]" u8R"0123456789abcdef[b]0123456789abcdef"; +const char s11[] = u8R"ghijklmnopqrstuv[a]ghijklmnopqrstuv" u8R"w[b]w"; + +const char16_t u03[] = R"-[a]-" u"[b]"; +const char16_t u04[] = "[a]" uR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const char16_t u05[] = R"[a]" uR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const char16_t u06[] = uR";([a];(" "[b]"; +const char16_t u07[] = u"[a]" R"[b]"; +const char16_t u08[] = uR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const char16_t u09[] = uR"/^&|~!=,"'\[a]/^&|~!=,"'\" u"[b]"; +const char16_t u10[] = u"[a]" uR"0123456789abcdef[b]0123456789abcdef"; +const char16_t u11[] = uR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" uR"w[b]w"; + +const char32_t U03[] = R"-[a]-" U"[b]"; +const char32_t U04[] = "[a]" UR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const char32_t U05[] = R"[a]" UR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const char32_t U06[] = UR";([a];(" "[b]"; +const char32_t U07[] = U"[a]" R"[b]"; +const char32_t U08[] = UR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const char32_t U09[] = UR"/^&|~!=,"'\[a]/^&|~!=,"'\" U"[b]"; +const char32_t U10[] = U"[a]" UR"0123456789abcdef[b]0123456789abcdef"; +const char32_t U11[] = UR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" UR"w[b]w"; + +const wchar_t L03[] = R"-[a]-" L"[b]"; +const wchar_t L04[] = "[a]" LR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const wchar_t L05[] = R"[a]" LR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const wchar_t L06[] = LR";([a];(" "[b]"; +const wchar_t L07[] = L"[a]" R"[b]"; +const wchar_t L08[] = LR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const wchar_t L09[] = LR"/^&|~!=,"'\[a]/^&|~!=,"'\" L"[b]"; +const wchar_t L10[] = L"[a]" LR"0123456789abcdef[b]0123456789abcdef"; +const wchar_t L11[] = LR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" LR"w[b]w"; + +int +main (void) +{ +#define TEST(str, val) \ + if (sizeof (str) != sizeof (val) \ + || __builtin_memcmp (str, val, sizeof (str)) != 0) \ + __builtin_abort () + TEST (s00, "a[b]"); + TEST (s01, "[a]b"); + TEST (s02, "ab"); + TEST (s03, "a[b]"); + TEST (s04, "[a]b"); + TEST (s05, "ab"); + TEST (s06, "a[b]"); + TEST (s07, "[a]b"); + TEST (s08, "ab"); + TEST (s09, "a[b]"); + TEST (s10, "[a]b"); + TEST (s11, "ab"); + TEST (u03, u"a[b]"); + TEST (u04, u"[a]b"); + TEST (u05, u"ab"); + TEST (u06, u"a[b]"); + TEST (u07, u"[a]b"); + TEST (u08, u"ab"); + TEST (u09, u"a[b]"); + TEST (u10, u"[a]b"); + TEST (u11, u"ab"); + TEST (U03, U"a[b]"); + TEST (U04, U"[a]b"); + TEST (U05, U"ab"); + TEST (U06, U"a[b]"); + TEST (U07, U"[a]b"); + TEST (U08, U"ab"); + TEST (U09, U"a[b]"); + TEST (U10, U"[a]b"); + TEST (U11, U"ab"); + TEST (L03, L"a[b]"); + TEST (L04, L"[a]b"); + TEST (L05, L"ab"); + TEST (L06, L"a[b]"); + TEST (L07, L"[a]b"); + TEST (L08, L"ab"); + TEST (L09, L"a[b]"); + TEST (L10, L"[a]b"); + TEST (L11, L"ab"); + return 0; +} diff --git a/gcc/testsuite/g++.dg/ext/raw-string-3.C b/gcc/testsuite/g++.dg/ext/raw-string-3.C new file mode 100644 index 00000000000..46c48620905 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/raw-string-3.C @@ -0,0 +1,58 @@ +// If c++98, the {,u,u8,U,L}R prefix should be parsed as separate +// token. +// { dg-do compile } +// { dg-options "-std=c++98" } + +const void *s0 = R"[a]"; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 6 } +const void *s1 = uR"[a]"; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 8 } +const void *s2 = UR"[a]"; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 10 } +const void *s3 = u8R"[a]"; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 12 } +const void *s4 = LR"[a]"; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 14 } + +const int i0 = R'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 17 } +const int i1 = uR'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 19 } +const int i2 = UR'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 21 } +const int i3 = u8R'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 23 } +const int i4 = LR'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 25 } + +#define R "a" +#define uR "b" +#define UR "c" +#define u8R "d" +#define LR "e" + +const void *s5 = R"[a]"; +const void *s6 = uR"[a]"; +const void *s7 = UR"[a]"; +const void *s8 = u8R"[a]"; +const void *s9 = LR"[a]"; + +#undef R +#undef uR +#undef UR +#undef u8R +#undef LR + +#define R 1 + +#define uR 2 + +#define UR 3 + +#define u8R 4 + +#define LR 5 + + +const int i5 = R'a'; +const int i6 = uR'a'; +const int i7 = UR'a'; +const int i8 = u8R'a'; +const int i9 = LR'a'; + +int main () {} diff --git a/gcc/testsuite/g++.dg/ext/raw-string-4.C b/gcc/testsuite/g++.dg/ext/raw-string-4.C new file mode 100644 index 00000000000..03179befac8 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/raw-string-4.C @@ -0,0 +1,28 @@ +// R is not applicable for character literals. +// { dg-do compile } +// { dg-options "-std=c++0x" } + +const int i0 = R'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 5 } +const int i1 = uR'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 7 } +const int i2 = UR'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 9 } +const int i3 = u8R'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 11 } +const int i4 = LR'a'; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 13 } + +#define R 1 + +#define uR 2 + +#define UR 3 + +#define u8R 4 + +#define LR 5 + + +const int i5 = R'a'; +const int i6 = uR'a'; +const int i7 = UR'a'; +const int i8 = u8R'a'; +const int i9 = LR'a'; + +int main () {} diff --git a/gcc/testsuite/g++.dg/ext/raw-string-5.C b/gcc/testsuite/g++.dg/ext/raw-string-5.C new file mode 100644 index 00000000000..b815eb23b16 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/raw-string-5.C @@ -0,0 +1,23 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +const void *s0 = R"0123456789abcdefg[]0123456789abcdefg"; + // { dg-error "raw string delimiter longer" "" { target *-*-* } 4 } + // { dg-error "stray" "" { target *-*-* } 4 } +const void *s1 = R" [] "; + // { dg-error "invalid character" "" { target *-*-* } 7 } + // { dg-error "stray" "" { target *-*-* } 7 } +const void *s2 = R" [] "; + // { dg-error "invalid character" "" { target *-*-* } 10 } + // { dg-error "stray" "" { target *-*-* } 10 } +const void *s3 = R"][]]"; + // { dg-error "invalid character" "" { target *-*-* } 13 } + // { dg-error "stray" "" { target *-*-* } 13 } +const void *s4 = R"@[]@"; + // { dg-error "invalid character" "" { target *-*-* } 16 } + // { dg-error "stray" "" { target *-*-* } 16 } +const void *s5 = R"$[]$"; + // { dg-error "invalid character" "" { target *-*-* } 19 } + // { dg-error "stray" "" { target *-*-* } 19 } + +int main () {} diff --git a/gcc/testsuite/g++.dg/ext/raw-string-6.C b/gcc/testsuite/g++.dg/ext/raw-string-6.C new file mode 100644 index 00000000000..a97d95d5693 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/raw-string-6.C @@ -0,0 +1,5 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +const void *s0 = R"ouch[]ouCh"; // { dg-error "at end of input" } + // { dg-error "unterminated raw string" "" { target *-*-* } 4 } diff --git a/gcc/testsuite/g++.dg/ext/raw-string-7.C b/gcc/testsuite/g++.dg/ext/raw-string-7.C new file mode 100644 index 00000000000..0f479193433 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/raw-string-7.C @@ -0,0 +1,23 @@ +// The trailing whitespace after \ and before newline extension +// breaks full compliance for raw strings. +// { dg-do run { xfail *-*-* } } +// { dg-options "-std=c++0x" } + +// Note, there is a single space after \ on the following line. +const char *s0 = R"[\ +]"; +// { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 7 } + +// Note, there is a single tab after \ on the following line. +const char *s1 = R"[\ +]"; +// { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 12 } + +int +main (void) +{ + if (__builtin_strcmp (s0, "\\ \n") != 0 + || __builtin_strcmp (s1, "\\\t\n") != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/ext/utf-badconcat2.C b/gcc/testsuite/g++.dg/ext/utf-badconcat2.C new file mode 100644 index 00000000000..499b323fc19 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/utf-badconcat2.C @@ -0,0 +1,15 @@ +// Test unsupported concatenation of UTF-8 string literals. +// { dg-do compile } +// { dg-options "-std=c++0x" } + +const void *s0 = u8"a" "b"; +const void *s1 = "a" u8"b"; +const void *s2 = u8"a" u8"b"; +const void *s3 = u8"a" u"b"; // { dg-error "non-standard concatenation" } +const void *s4 = u"a" u8"b"; // { dg-error "non-standard concatenation" } +const void *s5 = u8"a" U"b"; // { dg-error "non-standard concatenation" } +const void *s6 = U"a" u8"b"; // { dg-error "non-standard concatenation" } +const void *s7 = u8"a" L"b"; // { dg-error "non-standard concatenation" } +const void *s8 = L"a" u8"b"; // { dg-error "non-standard concatenation" } + +int main () {} diff --git a/gcc/testsuite/g++.dg/ext/utf-dflt2.C b/gcc/testsuite/g++.dg/ext/utf-dflt2.C new file mode 100644 index 00000000000..fd2222f672e --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/utf-dflt2.C @@ -0,0 +1,12 @@ +// In C++0x, the u8 prefix should be parsed as separate tokens. +// { dg-do compile } +// { dg-options "-std=c++98" } + +const void *s0 = u8"a"; // { dg-error "was not declared" } + // { dg-error "expected ',' or ';'" "" { target *-*-* } 5 } + +#define u8 "a" + +const void *s1 = u8"a"; + +int main () {} diff --git a/gcc/testsuite/g++.dg/ext/utf8-1.C b/gcc/testsuite/g++.dg/ext/utf8-1.C new file mode 100644 index 00000000000..203b326af79 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/utf8-1.C @@ -0,0 +1,45 @@ +// { dg-do run } +// { dg-require-iconv "ISO-8859-2" } +// { dg-options "-std=c++0x -fexec-charset=ISO-8859-2" } + +const char *str1 = "h\u00e1\U0000010Dky "; +const char *str2 = "\u010d\u00E1rky\n"; +const char *str3 = u8"h\u00e1\U0000010Dky "; +const char *str4 = u8"\u010d\u00E1rky\n"; +const char *str5 = "h\u00e1\U0000010Dky " "\u010d\u00E1rky\n"; +const char *str6 = u8"h\u00e1\U0000010Dky " "\u010d\u00E1rky\n"; +const char *str7 = "h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n"; +#define u8 +const char *str8 = u8"h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n"; + +const char latin2_1[] = "\x68\xe1\xe8\x6b\x79\x20"; +const char latin2_2[] = "\xe8\xe1\x72\x6b\x79\n"; +const char utf8_1[] = "\x68\xc3\xa1\xc4\x8d\x6b\x79\x20"; +const char utf8_2[] = "\xc4\x8d\xc3\xa1\x72\x6b\x79\n"; + +int +main (void) +{ + if (__builtin_strcmp (str1, latin2_1) != 0 + || __builtin_strcmp (str2, latin2_2) != 0 + || __builtin_strcmp (str3, utf8_1) != 0 + || __builtin_strcmp (str4, utf8_2) != 0 + || __builtin_strncmp (str5, latin2_1, sizeof (latin2_1) - 1) != 0 + || __builtin_strcmp (str5 + sizeof (latin2_1) - 1, latin2_2) != 0 + || __builtin_strncmp (str6, utf8_1, sizeof (utf8_1) - 1) != 0 + || __builtin_strcmp (str6 + sizeof (utf8_1) - 1, utf8_2) != 0 + || __builtin_strncmp (str7, utf8_1, sizeof (utf8_1) - 1) != 0 + || __builtin_strcmp (str7 + sizeof (utf8_1) - 1, utf8_2) != 0 + || __builtin_strncmp (str8, utf8_1, sizeof (utf8_1) - 1) != 0 + || __builtin_strcmp (str8 + sizeof (utf8_1) - 1, utf8_2) != 0) + __builtin_abort (); + if (sizeof ("a" u8"b"[0]) != 1 + || sizeof (u8"a" "b"[0]) != 1 + || sizeof (u8"a" u8"b"[0]) != 1 + || sizeof ("a" "\u010d") != 3 + || sizeof ("a" u8"\u010d") != 4 + || sizeof (u8"a" "\u010d") != 4 + || sizeof (u8"a" "\u010d") != 4) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/g++.dg/ext/utf8-2.C b/gcc/testsuite/g++.dg/ext/utf8-2.C new file mode 100644 index 00000000000..417a8bfdc1e --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/utf8-2.C @@ -0,0 +1,21 @@ +// { dg-do compile } +// { dg-options "-std=c++0x" } + +const char s0[] = u8"ab"; +const char16_t s1[] = u8"ab"; // { dg-error "from non-wide" } +const char32_t s2[] = u8"ab"; // { dg-error "from non-wide" } +const wchar_t s3[] = u8"ab"; // { dg-error "from non-wide" } + +const char t0[0] = u8"ab"; // { dg-error "chars is too long" } +const char t1[1] = u8"ab"; // { dg-error "chars is too long" } +const char t2[2] = u8"ab"; // { dg-error "chars is too long" } +const char t3[3] = u8"ab"; +const char t4[4] = u8"ab"; + +const char u0[0] = u8"\u2160."; // { dg-error "chars is too long" } +const char u1[1] = u8"\u2160."; // { dg-error "chars is too long" } +const char u2[2] = u8"\u2160."; // { dg-error "chars is too long" } +const char u3[3] = u8"\u2160."; // { dg-error "chars is too long" } +const char u4[4] = u8"\u2160."; // { dg-error "chars is too long" } +const char u5[5] = u8"\u2160."; +const char u6[6] = u8"\u2160."; diff --git a/gcc/testsuite/g++.dg/ipa/iinline-1.C b/gcc/testsuite/g++.dg/ipa/iinline-1.C index 1453c7e4658..6419ac3e8cd 100644 --- a/gcc/testsuite/g++.dg/ipa/iinline-1.C +++ b/gcc/testsuite/g++.dg/ipa/iinline-1.C @@ -2,7 +2,7 @@ inlining.. */ /* { dg-do compile } */ /* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining" } */ -/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fpie" { target { ! nonpic } } } */ +/* { dg-add-options bind_pic_locally } */ extern void non_existent (const char *, int); diff --git a/gcc/testsuite/g++.dg/lto/20091022-1_0.C b/gcc/testsuite/g++.dg/lto/20091022-1_0.C new file mode 100644 index 00000000000..cb3f20a4ed2 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/20091022-1_0.C @@ -0,0 +1,13 @@ +// { dg-lto-do link } +// { dg-extra-ld-options "-fwhole-program" } + +template <int dim> +struct AutoDerivativeFunction { + virtual void gradient_list (void); +}; +template <int dim> +void AutoDerivativeFunction<dim>::gradient_list (void) +{ +} +template class AutoDerivativeFunction<1>; +int main() {} diff --git a/gcc/testsuite/g++.dg/lto/20091022-2_0.C b/gcc/testsuite/g++.dg/lto/20091022-2_0.C new file mode 100644 index 00000000000..29ed9b6b0a0 --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/20091022-2_0.C @@ -0,0 +1,12 @@ +// { dg-lto-do link } +// { dg-lto-options {{-O3 -flto -Winline}} } + +#include <string> + +int +main() +{ + std::string i; + i = "abc"; +} + diff --git a/gcc/testsuite/g++.dg/opt/eh5.C b/gcc/testsuite/g++.dg/opt/eh5.C new file mode 100644 index 00000000000..3557ab2aa54 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/eh5.C @@ -0,0 +1,43 @@ +// PR 41377 +// { dg-do compile } +// { dg-options "-O3" } + +struct A +{ + bool foo(int*) const; +} a; + +struct B {}; + +struct B1 : B +{ + bool (A::*pmf)(int*) const; + const A* pa; + + B1() : pmf(&A::foo), pa(&a) {} + bool operator()() const { return (pa->*pmf)(new int); } +}; + +struct B2 : B +{ + B1 b1; + + B2(const B1& _b1) : b1(_b1) {} + bool operator()() const { return b1(); } +}; + +template<int> struct C +{ + void bar(B2 b2) { while (b2()) ; } + C() { bar(B2(B1())); } +}; + +void baz(int i) +{ + switch(i) + { + case 0: new C<0>; + case 1: new C<1>; + case 2: new C<2>; + } +} diff --git a/gcc/testsuite/g++.dg/opt/vt1.C b/gcc/testsuite/g++.dg/opt/vt1.C index ea74f52126f..ba871fba2d8 100644 --- a/gcc/testsuite/g++.dg/opt/vt1.C +++ b/gcc/testsuite/g++.dg/opt/vt1.C @@ -2,6 +2,7 @@ // { dg-do compile { target fpic } } // { dg-options "-O2 -fpic -fno-rtti" } // { dg-skip-if "requires unsupported run-time relocation" { spu-*-* } { "*" } { "" } } +// { dg-skip-if "No Windows PIC" { *-*-mingw* *-*-cygwin } { "*" } { "" } } // Origin: Jakub Jelinek <jakub@redhat.com> struct S diff --git a/gcc/testsuite/g++.dg/other/first-global.C b/gcc/testsuite/g++.dg/other/first-global.C index a993a9d5175..0f39a8abb73 100644 --- a/gcc/testsuite/g++.dg/other/first-global.C +++ b/gcc/testsuite/g++.dg/other/first-global.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-fpie" { target { ! nonpic } } } */ +/* { dg-add-options bind_pic_locally } */ /* { dg-final { scan-assembler "_GLOBAL__I(_|_65535_0_)foobar" } } */ struct foo { foo (); }; diff --git a/gcc/testsuite/g++.dg/parse/attr-externally-visible-1.C b/gcc/testsuite/g++.dg/parse/attr-externally-visible-1.C index dbdab88af2d..845d873aacb 100644 --- a/gcc/testsuite/g++.dg/parse/attr-externally-visible-1.C +++ b/gcc/testsuite/g++.dg/parse/attr-externally-visible-1.C @@ -1,6 +1,6 @@ // { dg-do compile } // { dg-options "-O3 -fwhole-program" } -// { dg-options "-O3 -fwhole-program -fpie" { target { ! nonpic } } } +// { dg-add-options bind_pic_locally } // { dg-final { scan-assembler "foo1" } } // { dg-final { scan-assembler "foo2" } } // { dg-final { scan-assembler "foo3" } } diff --git a/gcc/testsuite/g++.dg/plugin/attribute_plugin-test-1.C b/gcc/testsuite/g++.dg/plugin/attribute_plugin-test-1.C index abb1328670a..1ca321d1fde 100644 --- a/gcc/testsuite/g++.dg/plugin/attribute_plugin-test-1.C +++ b/gcc/testsuite/g++.dg/plugin/attribute_plugin-test-1.C @@ -1,4 +1,4 @@ -// { dg-warning "Callback to register attributes" } +// { dg-warning "Callback to register attributes" "" { target *-*-* } 0 } void normal_func (char c, char c2); void normal_func (char __attribute__((user("param"))) c, char); diff --git a/gcc/testsuite/g++.dg/template/spec35.C b/gcc/testsuite/g++.dg/template/spec35.C index cae33ed3d1f..709ece5dd90 100644 --- a/gcc/testsuite/g++.dg/template/spec35.C +++ b/gcc/testsuite/g++.dg/template/spec35.C @@ -24,6 +24,6 @@ void instantiator () // { dg-final { scan-assembler-not ".glob(a|)l\[\t \]*_?_Z2f1IiEvT_" } } f1(0); // Expected to have static linkage - // { dg-final { scan-assembler ".weak(_definition)?\[\t \]*_?_Z2f2IiEvT_" } } + // { dg-final { scan-assembler ".weak(_definition)?\[\t \]*_?_Z2f2IiEvT_" { target { ! { *-*-mingw* *-*-cygwin } } } } } f2(0); // Expected to have weak global linkage } diff --git a/gcc/testsuite/g++.dg/torture/pr40323.C b/gcc/testsuite/g++.dg/torture/pr40323.C index adecf7fe5f3..c7ffcb5d3f1 100644 --- a/gcc/testsuite/g++.dg/torture/pr40323.C +++ b/gcc/testsuite/g++.dg/torture/pr40323.C @@ -1,7 +1,7 @@ /* Testcase for PR 40323. */ /* { dg-do compile } */ /* { dg-options "-fno-early-inlining" } */ -/* { dg-options "-fno-early-inlining -fpie" { target { ! nonpic } } } */ +/* { dg-add-options bind_pic_locally } */ extern void do_something (const char *, int); diff --git a/gcc/testsuite/g++.dg/tree-ssa/copyprop.C b/gcc/testsuite/g++.dg/tree-ssa/copyprop.C index e785755eb07..5ba193618dd 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/copyprop.C +++ b/gcc/testsuite/g++.dg/tree-ssa/copyprop.C @@ -7,8 +7,8 @@ #include <map> #include <vector> #include <iostream> +#include <cstdlib> using namespace std; -extern void free (void *); template<typename _FIter, typename _Tp> _FIter lower_bound(_FIter, _FIter, _Tp&); template<class _Key> struct hash { }; template<class _Val> struct _Hashtable_node { diff --git a/gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C b/gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C index 4bb71589de3..33462946aed 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C +++ b/gcc/testsuite/g++.dg/tree-ssa/nothrow-1.C @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O1 -fdump-tree-cfg" } */ -/* { dg-skip-if "" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */ +/* { dg-add-options bind_pic_locally } */ + double a; void t() { diff --git a/gcc/testsuite/gcc.c-torture/compile/pr40556.c b/gcc/testsuite/gcc.c-torture/compile/pr40556.c new file mode 100644 index 00000000000..625175d7788 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr40556.c @@ -0,0 +1,11 @@ +struct A {}; + +struct A foo() +{ + return foo(); +} + +void bar() +{ + foo(); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr41661.c b/gcc/testsuite/gcc.c-torture/compile/pr41661.c new file mode 100644 index 00000000000..658e4288b8d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr41661.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/41661 */ +/* { dg-do compile } */ +/* { dg-options "-fno-early-inlining" } */ + +int g; + +void foo (int x) +{ + g = x; +} + +void bar (double d) +{ + foo (d == 1); +} + +void baz (int a) +{ + bar (1); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr41728.c b/gcc/testsuite/gcc.c-torture/compile/pr41728.c new file mode 100644 index 00000000000..df379d93010 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr41728.c @@ -0,0 +1,12 @@ +int a[8]; +int s244(void) +{ + int lrc, j; + lrc = 0; + for (j=0; j<7; j++) + if(a[j] != a[j+1]) + lrc = 1; + if (lrc != 0) + return 0; + return 1; +} diff --git a/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-vla-1.c b/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-vla-1.c new file mode 100644 index 00000000000..e9f63d36872 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-vla-1.c @@ -0,0 +1,10 @@ +/* PR 41673: bogus -Wstrict-aliasing warning from VLA dereference. */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99 -O2 -Wall" } */ + +int main(int argc, char *argv[]) +{ + float x[argc]; + float y[argc]; + return 0 == __builtin_memcpy(y, x, argc * sizeof(*x)); +} diff --git a/gcc/testsuite/gcc.dg/autopar/outer-1.c b/gcc/testsuite/gcc.dg/autopar/outer-1.c new file mode 100644 index 00000000000..913d390f684 --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/outer-1.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-optimized" } */ + +void abort (void); + +void parloop (int N) +{ + int i, j; + int x[10000][10000]; + + for (i = 0; i < N; i++) + for (j = 0; j < N; j++) + x[i][j] = i + j + 3; + + for (i = 0; i < N; i++) + for (j = 0; j < N; j++) + if (x[i][j] != i + j + 3) + abort (); +} + +int main(void) +{ + parloop(10000); + + return 0; +} + + +/* Check that outer loop is parallelized. */ +/* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops" } } */ +/* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "parloops" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/autopar/outer-2.c b/gcc/testsuite/gcc.dg/autopar/outer-2.c new file mode 100644 index 00000000000..351b3499e89 --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/outer-2.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-optimized" } */ + +void abort (void); + +void parloop (int N) +{ + int i, j,ii; + int x[400][10][400]; + +for (ii = 0; ii < N; ii++) + for (i = 0; i < N; i++) + for (j = 0; j < N; j++) + x[i][j][ii] = ii+i + j + 3; + +for (ii = 0; ii < N; ii++) + for (i = 0; i < N;i++) + for (j = 0; j < N; j++) + if (x[i][j][ii] != ii+i + j + 3) + abort (); +} + +int main(void) +{ + parloop(400); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops" } } */ +/* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "parloops" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/autopar/outer-3.c b/gcc/testsuite/gcc.dg/autopar/outer-3.c new file mode 100644 index 00000000000..2f1033f9830 --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/outer-3.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-optimized" } */ + +void abort (void); + +void parloop (int N) +{ + int i, j; + int x[500][500]; + + for (i = 0; i < N; i++) + for (j = 0; j < i; j++) + x[i][j] = i + j + 3; + + for (i = 0; i < N; i++) + for (j = 0; j < i; j++) + if (x[i][j] != i + j + 3) + abort (); +} + +int main(void) +{ + parloop(500); + + return 0; +} + + +/* Check that outer loop is parallelized. */ +/* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops" } } */ +/* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "parloops" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/autopar/outer-4.c b/gcc/testsuite/gcc.dg/autopar/outer-4.c new file mode 100644 index 00000000000..56f6123385d --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/outer-4.c @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-optimized" } */ + +void abort (void); + +int g_sum=0; +int x[500][500]; + +__attribute__((noinline)) +void parloop (int N) +{ + int i, j; + int sum; + + /* Double reduction is currently not supported, outer loop is not + parallelized. Inner reduction is detected, inner loop is + parallelized. */ + sum = 0; + for (i = 0; i < N; i++) + for (j = 0; j < N; j++) + sum += x[i][j]; + + g_sum = sum; +} + +int main(void) +{ + parloop(500); + + return 0; +} + + +/* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "parloops" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/autopar/outer-5.c b/gcc/testsuite/gcc.dg/autopar/outer-5.c new file mode 100644 index 00000000000..3a542988c26 --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/outer-5.c @@ -0,0 +1,50 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-optimized" } */ + +void abort (void); + +int x[500][500]; +int y[500]; +int g_sum=0; + +__attribute__((noinline)) +void init (int i, int j) +{ + x[i][j]=1; +} + +__attribute__((noinline)) +void parloop (int N) +{ + int i, j; + int sum; + + /* Inner cycle is currently not supported, outer loop is not + parallelized. Inner reduction is detected, inner loop is + parallelized. */ + for (i = 0; i < N; i++) + { + sum = 0; + for (j = 0; j < N; j++) + sum += x[i][j]; + y[i]=sum; + } + g_sum = sum; +} + +int main(void) +{ + int i,j; + for (i = 0; i < 500; i++) + for (j = 0; j < 500; j++) + init(i, j); + + parloop(500); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops" { xfail *-*-* } } } */ +/* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "parloops" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/autopar/outer-6.c b/gcc/testsuite/gcc.dg/autopar/outer-6.c new file mode 100644 index 00000000000..6e027d2f69a --- /dev/null +++ b/gcc/testsuite/gcc.dg/autopar/outer-6.c @@ -0,0 +1,51 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops-details -fdump-tree-optimized" } */ + +void abort (void); + +int x[500][500]; +int y[500]; +int g_sum=0; + +__attribute__((noinline)) +void init (int i, int j) +{ + x[i][j]=1; +} + +__attribute__((noinline)) +void parloop (int N) +{ + int i, j; + int sum; + + /* Outer loop reduction, outerloop is parallelized. */ + sum=0; + for (i = 0; i < N; i++) + { + for (j = 0; j < N; j++) + y[i]=x[i][j]; + sum += y[i]; + } + g_sum = sum; +} + +int main(void) +{ + int i,j; + for (i = 0; i < 500; i++) + for (j = 0; j < 500; j++) + init(i, j); + + parloop(500); + + return 0; +} + + +/* Check that outer loop is parallelized. */ +/* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops" } } */ +/* { dg-final { scan-tree-dump-times "parallelizing inner loop" 0 "parloops" } } */ +/* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */ +/* { dg-final { cleanup-tree-dump "parloops" } } */ +/* { dg-final { cleanup-tree-dump "optimized" } } */ diff --git a/gcc/testsuite/gcc.dg/cleanup-13.c b/gcc/testsuite/gcc.dg/cleanup-13.c new file mode 100644 index 00000000000..0a5a9e9153e --- /dev/null +++ b/gcc/testsuite/gcc.dg/cleanup-13.c @@ -0,0 +1,319 @@ +/* HP-UX libunwind.so doesn't provide _UA_END_OF_STACK */ +/* { dg-do run } */ +/* { dg-options "-fexceptions" } */ +/* { dg-skip-if "" { "ia64-*-hpux11.*" } { "*" } { "" } } */ +/* Verify DW_OP_* handling in the unwinder. */ + +#include <unwind.h> +#include <stdlib.h> +#include <string.h> + +/* #define OP_addr(x) 0x06, ... */ +#define OP_deref 0x06, +#define SLEB128(x) (x)&0x7f /* Assume here the value is -0x40 ... 0x3f. */ +#define ULEB128(x) (x)&0x7f /* Assume here the value is 0 ... 0x7f. */ +#define VAL1(x) (x)&0xff +#if defined (__BIG_ENDIAN__) +#define VAL2(x) ((x)>>8)&0xff,(x)&0xff +#define VAL4(x) ((x)>>24)&0xff,((x)>>16)&0xff,((x)>>8)&0xff,(x)&0xff +#define VAL8(x) ((x)>>56)&0xff,((x)>>48)&0xff,((x)>>40)&0xff,((x)>>32)&0xff,((x)>>24)&0xff,((x)>>16)&0xff,((x)>>8)&0xff,(x)&0xff +#elif defined(__LITTLE_ENDIAN__) || defined(__x86_64__) || defined(__i386__) +#define VAL2(x) (x)&0xff,((x)>>8)&0xff +#define VAL4(x) (x)&0xff,((x)>>8)&0xff,((x)>>16)&0xff,((x)>>24)&0xff +#define VAL8(x) (x)&0xff,((x)>>8)&0xff,((x)>>16)&0xff,((x)>>24)&0xff,((x)>>32)&0xff,((x)>>40)&0xff,((x)>>48)&0xff,((x)>>56)&0xff +#endif +#define OP_const1u(x) 0x08,VAL1(x), +#define OP_const1s(x) 0x09,VAL1(x), +#define OP_const2u(x) 0x0a,VAL2(x), +#define OP_const2s(x) 0x0b,VAL2(x), +#define OP_const4u(x) 0x0c,VAL4(x), +#define OP_const4s(x) 0x0d,VAL4(x), +#define OP_const8u(x) 0x0e,VAL8(x), +#define OP_const8s(x) 0x0f,VAL8(x), +#define OP_constu(x) 0x10,ULEB128(x), +#define OP_consts(x) 0x11,SLEB128(x), +#define OP_dup 0x12, +#define OP_drop 0x13, +#define OP_over 0x14, +#define OP_pick(x) 0x15,VAL1(x), +#define OP_swap 0x16, +#define OP_rot 0x17, +#define OP_xderef 0x18, +#define OP_abs 0x19, +#define OP_and 0x1a, +#define OP_div 0x1b, +#define OP_minus 0x1c, +#define OP_mod 0x1d, +#define OP_mul 0x1e, +#define OP_neg 0x1f, +#define OP_not 0x20, +#define OP_or 0x21, +#define OP_plus 0x22, +#define OP_plus_uconst(x) 0x23,ULEB128(x), +#define OP_shl 0x24, +#define OP_shr 0x25, +#define OP_shra 0x26, +#define OP_xor 0x27, +#define OP_bra(x) 0x28,VAL2(x), +#define OP_eq 0x29, +#define OP_ge 0x2a, +#define OP_gt 0x2b, +#define OP_le 0x2c, +#define OP_lt 0x2d, +#define OP_ne 0x2e, +#define OP_skip(x) 0x2f,VAL2(x), +#define OP_lit0 0x30, +#define OP_lit1 0x31, +#define OP_lit2 0x32, +#define OP_lit3 0x33, +#define OP_lit4 0x34, +#define OP_lit5 0x35, +#define OP_lit6 0x36, +#define OP_lit7 0x37, +#define OP_lit8 0x38, +#define OP_lit9 0x39, +#define OP_lit10 0x3a, +#define OP_lit11 0x3b, +#define OP_lit12 0x3c, +#define OP_lit13 0x3d, +#define OP_lit14 0x3e, +#define OP_lit15 0x3f, +#define OP_lit16 0x40, +#define OP_lit17 0x41, +#define OP_lit18 0x42, +#define OP_lit19 0x43, +#define OP_lit20 0x44, +#define OP_lit21 0x45, +#define OP_lit22 0x46, +#define OP_lit23 0x47, +#define OP_lit24 0x48, +#define OP_lit25 0x49, +#define OP_lit26 0x4a, +#define OP_lit27 0x4b, +#define OP_lit28 0x4c, +#define OP_lit29 0x4d, +#define OP_lit30 0x4e, +#define OP_lit31 0x4f, +#define OP_reg0 0x50, +#define OP_reg1 0x51, +#define OP_reg2 0x52, +#define OP_reg3 0x53, +#define OP_reg4 0x54, +#define OP_reg5 0x55, +#define OP_reg6 0x56, +#define OP_reg7 0x57, +#define OP_reg8 0x58, +#define OP_reg9 0x59, +#define OP_reg10 0x5a, +#define OP_reg11 0x5b, +#define OP_reg12 0x5c, +#define OP_reg13 0x5d, +#define OP_reg14 0x5e, +#define OP_reg15 0x5f, +#define OP_reg16 0x60, +#define OP_reg17 0x61, +#define OP_reg18 0x62, +#define OP_reg19 0x63, +#define OP_reg20 0x64, +#define OP_reg21 0x65, +#define OP_reg22 0x66, +#define OP_reg23 0x67, +#define OP_reg24 0x68, +#define OP_reg25 0x69, +#define OP_reg26 0x6a, +#define OP_reg27 0x6b, +#define OP_reg28 0x6c, +#define OP_reg29 0x6d, +#define OP_reg30 0x6e, +#define OP_reg31 0x6f, +#define OP_breg0(x) 0x70,SLEB128(x), +#define OP_breg1(x) 0x71,SLEB128(x), +#define OP_breg2(x) 0x72,SLEB128(x), +#define OP_breg3(x) 0x73,SLEB128(x), +#define OP_breg4(x) 0x74,SLEB128(x), +#define OP_breg5(x) 0x75,SLEB128(x), +#define OP_breg6(x) 0x76,SLEB128(x), +#define OP_breg7(x) 0x77,SLEB128(x), +#define OP_breg8(x) 0x78,SLEB128(x), +#define OP_breg9(x) 0x79,SLEB128(x), +#define OP_breg10(x) 0x7a,SLEB128(x), +#define OP_breg11(x) 0x7b,SLEB128(x), +#define OP_breg12(x) 0x7c,SLEB128(x), +#define OP_breg13(x) 0x7d,SLEB128(x), +#define OP_breg14(x) 0x7e,SLEB128(x), +#define OP_breg15(x) 0x7f,SLEB128(x), +#define OP_breg16(x) 0x80,SLEB128(x), +#define OP_breg17(x) 0x81,SLEB128(x), +#define OP_breg18(x) 0x82,SLEB128(x), +#define OP_breg19(x) 0x83,SLEB128(x), +#define OP_breg20(x) 0x84,SLEB128(x), +#define OP_breg21(x) 0x85,SLEB128(x), +#define OP_breg22(x) 0x86,SLEB128(x), +#define OP_breg23(x) 0x87,SLEB128(x), +#define OP_breg24(x) 0x88,SLEB128(x), +#define OP_breg25(x) 0x89,SLEB128(x), +#define OP_breg26(x) 0x8a,SLEB128(x), +#define OP_breg27(x) 0x8b,SLEB128(x), +#define OP_breg28(x) 0x8c,SLEB128(x), +#define OP_breg29(x) 0x8d,SLEB128(x), +#define OP_breg30(x) 0x8e,SLEB128(x), +#define OP_breg31(x) 0x8f,SLEB128(x), +#define OP_regx(x) 0x90,SLEB128(x), +#define OP_fbreg(x) 0x91,SLEB128(x), +#define OP_bregx(x,y) 0x92,ULEB128(x),SLEB128(y), +#define OP_piece(x) 0x93,ULEB128(x), +#define OP_deref_size(x) 0x94,VAL1(x), +#define OP_xderef_size(x) 0x95,VAL1(x), +#define OP_nop 0x96, +#define OP_nop_termination 0x96 +#define OP_push_object_address 0x97, +#define OP_call2(x) 0x98,VAL2(x), +#define OP_call4(x) 0x99,VAL4(x), +/* #define OP_call_ref(x) 0x9a,... */ +#define OP_form_tls_address(x) 0x9b, +#define OP_call_frame_cfa 0x9c, +#define OP_bit_piece(x) 0x9d,ULEB128(x), +/* #define OP_implicit_value(x...) 0x9e,... */ +#define OP_stack_value 0x9f, +#define OP_GNU_push_tls_address 0xe0, +/* #define OP_GNU_encoded_addr(x...) 0xf1, */ + +#define ASSERT_TOS_NON0 OP_bra(3) OP_skip(-3) +#define ASSERT_TOS_0 OP_lit0 OP_eq ASSERT_TOS_NON0 + +/* Initially there is CFA value on the stack, we want to + keep it there at the end. */ +#define CFI_PROGRAM \ +OP_lit0 OP_nop ASSERT_TOS_0 \ +OP_lit1 ASSERT_TOS_NON0 \ +OP_lit1 OP_const1u(1) OP_eq ASSERT_TOS_NON0 \ +OP_lit16 OP_const2u(16) OP_eq ASSERT_TOS_NON0 \ +OP_lit31 OP_const4u(31) OP_ne ASSERT_TOS_0 \ +OP_lit1 OP_neg OP_const1s(-1) OP_eq ASSERT_TOS_NON0 \ +OP_lit16 OP_neg OP_const2s(-16) OP_ne ASSERT_TOS_0 \ +OP_lit31 OP_const4s(-31) OP_neg OP_ne ASSERT_TOS_0 \ +OP_lit7 OP_dup OP_plus_uconst(2) OP_lit9 OP_eq ASSERT_TOS_NON0 \ + OP_lit7 OP_eq ASSERT_TOS_NON0 \ +OP_lit20 OP_lit1 OP_drop OP_lit20 OP_eq ASSERT_TOS_NON0 \ +OP_lit17 OP_lit19 OP_over OP_lit17 OP_eq ASSERT_TOS_NON0 \ + OP_lit19 OP_eq ASSERT_TOS_NON0 OP_lit17 OP_eq ASSERT_TOS_NON0 \ +OP_lit1 OP_lit2 OP_lit3 OP_lit4 OP_pick(2) OP_lit2 OP_eq ASSERT_TOS_NON0\ + OP_lit4 OP_eq ASSERT_TOS_NON0 OP_lit3 OP_eq ASSERT_TOS_NON0 \ + OP_pick(0) OP_lit2 OP_eq ASSERT_TOS_NON0 \ + OP_lit2 OP_eq ASSERT_TOS_NON0 OP_lit1 OP_eq ASSERT_TOS_NON0 \ +OP_lit6 OP_lit12 OP_swap OP_lit6 OP_eq ASSERT_TOS_NON0 \ + OP_lit12 OP_eq ASSERT_TOS_NON0 \ +OP_lit7 OP_lit8 OP_lit9 OP_rot OP_lit8 OP_eq ASSERT_TOS_NON0 \ + OP_lit7 OP_eq ASSERT_TOS_NON0 OP_lit9 OP_eq ASSERT_TOS_NON0 \ +OP_lit7 OP_abs OP_lit7 OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-123) OP_abs OP_const1u(123) OP_eq ASSERT_TOS_NON0 \ +OP_lit3 OP_lit6 OP_and OP_lit2 OP_eq ASSERT_TOS_NON0 \ +OP_lit3 OP_lit6 OP_or OP_lit7 OP_eq ASSERT_TOS_NON0 \ +OP_lit17 OP_lit2 OP_minus OP_lit15 OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-6) OP_const1s(-2) OP_div OP_lit3 OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-6) OP_const1s(-4) OP_mod OP_const1s(-2) \ + OP_eq ASSERT_TOS_NON0 \ +OP_lit16 OP_lit31 OP_plus_uconst(1) OP_mul OP_const2u(512) \ + OP_eq ASSERT_TOS_NON0 \ +OP_lit5 OP_not OP_lit31 OP_and OP_lit26 OP_eq ASSERT_TOS_NON0 \ +OP_lit12 OP_lit31 OP_plus OP_const1u(43) OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-6) OP_lit2 OP_plus OP_const1s(-4) OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-6) OP_plus_uconst(3) OP_const1s(-3) OP_eq ASSERT_TOS_NON0 \ +OP_lit16 OP_lit4 OP_shl OP_const2u(256) OP_eq ASSERT_TOS_NON0 \ +OP_lit16 OP_lit3 OP_shr OP_lit2 OP_eq ASSERT_TOS_NON0 \ +OP_const1s(-16) OP_lit3 OP_shra OP_const1s(-2) OP_eq ASSERT_TOS_NON0 \ +OP_lit3 OP_lit6 OP_xor OP_lit5 OP_eq ASSERT_TOS_NON0 \ +OP_lit3 OP_lit6 OP_le ASSERT_TOS_NON0 \ +OP_lit3 OP_lit3 OP_le ASSERT_TOS_NON0 \ +OP_lit6 OP_lit3 OP_le ASSERT_TOS_0 \ +OP_lit3 OP_lit6 OP_lt ASSERT_TOS_NON0 \ +OP_lit3 OP_lit3 OP_lt ASSERT_TOS_0 \ +OP_lit6 OP_lit3 OP_lt ASSERT_TOS_0 \ +OP_lit3 OP_lit6 OP_ge ASSERT_TOS_0 \ +OP_lit3 OP_lit3 OP_ge ASSERT_TOS_NON0 \ +OP_lit6 OP_lit3 OP_ge ASSERT_TOS_NON0 \ +OP_lit3 OP_lit6 OP_gt ASSERT_TOS_0 \ +OP_lit3 OP_lit3 OP_gt ASSERT_TOS_0 \ +OP_lit6 OP_lit3 OP_gt ASSERT_TOS_NON0 \ +OP_const1s(-6) OP_lit1 OP_shr OP_lit0 OP_gt ASSERT_TOS_NON0 \ +OP_const1s(-6) OP_lit1 OP_shra OP_lit0 OP_lt ASSERT_TOS_NON0 + +#define CFI_ESCAPE_VAL_2(VALUES...) #VALUES +#define CFI_ESCAPE_VAL_1(VALUES...) CFI_ESCAPE_VAL_2(VALUES) +#define CFI_ESCAPE_VAL(VALUES...) CFI_ESCAPE_VAL_1(VALUES) +#define CFI_ESCAPE do { } while (0) +#define CFI_ARCH_PROGRAM OP_nop_termination +#ifdef __GCC_HAVE_DWARF2_CFI_ASM +#if defined (__x86_64__) +#undef CFI_ESCAPE +#undef CFI_ARCH_PROGRAM +#define CFI_ARCH_PROGRAM CFI_PROGRAM OP_lit8 OP_minus OP_nop_termination +unsigned char cfi_arch_program[] = { CFI_ARCH_PROGRAM }; +extern char verify_it[sizeof (cfi_arch_program) - 0x80 < 0x3f80 ? 1 : -1]; +/* DW_CFA_expression %rip, uleb128(l2-l1), l1: program DW_OP_lit8 DW_OP_minus DW_OP_nop l2: */ +#define CFI_ESCAPE \ + asm volatile (".cfi_escape 0x10, 0x10, (%P0&0x7f)+0x80, %P0>>7, " \ + CFI_ESCAPE_VAL (CFI_ARCH_PROGRAM) \ + : : "i" (sizeof (cfi_arch_program))) +#elif defined (__i386__) +#undef CFI_ESCAPE +#undef CFI_ARCH_PROGRAM +#define CFI_ARCH_PROGRAM CFI_PROGRAM OP_lit4 OP_minus OP_nop_termination +unsigned char cfi_arch_program[] = { CFI_ARCH_PROGRAM }; +extern char verify_it[sizeof (cfi_arch_program) - 0x80 < 0x3f80 ? 1 : -1]; +/* DW_CFA_expression %eip, uleb128(l2-l1), l1: program DW_OP_lit4 DW_OP_minus DW_OP_nop l2: */ +#define CFI_ESCAPE \ + asm volatile (".cfi_escape 0x10, 8, (%P0&0x7f)+0x80, %P0>>7, " \ + CFI_ESCAPE_VAL (CFI_ARCH_PROGRAM) \ + : : "i" (sizeof (cfi_arch_program))) +#endif +#endif +static _Unwind_Reason_Code +force_unwind_stop (int version, _Unwind_Action actions, + _Unwind_Exception_Class exc_class, + struct _Unwind_Exception *exc_obj, + struct _Unwind_Context *context, + void *stop_parameter) +{ + if (actions & _UA_END_OF_STACK) + abort (); + return _URC_NO_REASON; +} + +static void force_unwind () +{ + struct _Unwind_Exception *exc = malloc (sizeof (*exc)); + memset (&exc->exception_class, 0, sizeof (exc->exception_class)); + exc->exception_cleanup = 0; + +#ifndef __USING_SJLJ_EXCEPTIONS__ + _Unwind_ForcedUnwind (exc, force_unwind_stop, 0); +#else + _Unwind_SjLj_ForcedUnwind (exc, force_unwind_stop, 0); +#endif + + abort (); +} + +static void handler (void *p __attribute__((unused))) +{ + exit (0); +} + +__attribute__((noinline)) static void callme () +{ + CFI_ESCAPE; + force_unwind (); +} + +__attribute__((noinline)) static void doit () +{ + char dummy __attribute__((cleanup (handler))); + callme (); +} + +int main() +{ + doit (); + abort (); +} diff --git a/gcc/testsuite/gcc.dg/cpp/include6.c b/gcc/testsuite/gcc.dg/cpp/include6.c new file mode 100644 index 00000000000..2bb1320daa2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/include6.c @@ -0,0 +1,14 @@ +/* { dg-do preprocess } */ +/* { dg-options "-std=gnu99" } */ + +#include <stddef.h> +#include "stddef.h" +#include L"stddef.h" /* { dg-error "include expects" } */ +#include u"stddef.h" /* { dg-error "include expects" } */ +#include U"stddef.h" /* { dg-error "include expects" } */ +#include u8"stddef.h" /* { dg-error "include expects" } */ +#include R"[stddef.h]" /* { dg-error "include expects" } */ +#include LR"[stddef.h]" /* { dg-error "include expects" } */ +#include uR"[stddef.h]" /* { dg-error "include expects" } */ +#include UR"[stddef.h]" /* { dg-error "include expects" } */ +#include u8R"[stddef.h]" /* { dg-error "include expects" } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c new file mode 100644 index 00000000000..02683960bdb --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41543.c @@ -0,0 +1,14 @@ +/* PR preprocessor/41543 */ +/* { dg-do compile } */ +/* { dg-options "-save-temps -g -O0 -dA -fno-merge-debug-strings" } */ + +#include <stdarg.h> + +int +foo (va_list ap) +{ + return va_arg (ap, int); +} + +/* { dg-final { scan-assembler-not "DW_AT_decl_file\[^\\r\\n\]*\(pr41543\.i\)" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c new file mode 100644 index 00000000000..d61b5a293f5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr41695.c @@ -0,0 +1,18 @@ +/* PR debug/41695 */ +/* { dg-do compile } */ +/* { dg-options "-g -O2 -dA -fno-merge-debug-strings" } */ + +int bar (int); + +void +foo (void) +{ + int b = 0; + b = bar (b); + b = bar (b); + b = bar (b); + b = bar (b); + bar (b); +} + +/* { dg-final { scan-assembler-not "LVL(\[0-9\]+)-\[^1\]\[^\\r\\n\]*Location list begin address\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*LVL\\1-1-" } } */ diff --git a/gcc/testsuite/gcc.dg/debug/pr41264-1.c b/gcc/testsuite/gcc.dg/debug/pr41264-1.c new file mode 100644 index 00000000000..b5555b554ba --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/pr41264-1.c @@ -0,0 +1,36 @@ +/* { dg-do compile } */ + +typedef unsigned int hashval_t; +static hashval_t __attribute__((always_inline)) +iterative_hash_host_wide_int (long val, hashval_t val2) +{ + hashval_t a = (hashval_t) val; + int zero = 0; + hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero)); + + a -= b; a -= val2; a ^= (val2>>13); + b -= val2; b -= a; b ^= (a<< 8); + val2 -= a; val2 -= b; val2 ^= ((b&0xffffffff)>>13); + a -= b; a -= val2; a ^= ((val2&0xffffffff)>>12); + b -= val2; b -= a; b = (b ^ (a<<16)) & 0xffffffff; + val2 -= a; val2 -= b; val2 = (val2 ^ (b>> 5)) & 0xffffffff; + a -= b; a -= val2; a = (a ^ (val2>> 3)) & 0xffffffff; + b -= val2; b -= a; b = (b ^ (a<<10)) & 0xffffffff; + val2 -= a; val2 -= b; val2 = (val2 ^ (b>>15)) & 0xffffffff; + return val2; +} + +hashval_t +bla (int nunits, int mode) +{ + hashval_t hashcode = 0; + + + hashcode = iterative_hash_host_wide_int (14, hashcode); + hashcode = iterative_hash_host_wide_int (nunits, hashcode); + hashcode = iterative_hash_host_wide_int (mode, hashcode); + if (nunits) + return 0; + else + return hashcode; +} diff --git a/gcc/testsuite/gcc.dg/debug/pr41343-1.c b/gcc/testsuite/gcc.dg/debug/pr41343-1.c new file mode 100644 index 00000000000..6d56380383d --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/pr41343-1.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +#define X(new,old) int i ## new = i ## old + i ## old; +#define Y(pfx) X(pfx ## 1, pfx) \ + X(pfx ## 2, pfx ## 1) \ + X(pfx ## 3, pfx ## 2) \ + X(pfx ## 4, pfx ## 3) \ + X(pfx ## 5, pfx ## 4) \ + X(pfx ## 6, pfx ## 5) \ + X(pfx ## 7, pfx ## 6) \ + X(pfx ## 8, pfx ## 7) \ + X(pfx ## 9, pfx ## 8) + +void foo (int i1) +{ + Y(1) + Y(11) + Y(111) + asm ("" : : "X" (i1)); +} diff --git a/gcc/testsuite/gcc.dg/debug/pr41717.c b/gcc/testsuite/gcc.dg/debug/pr41717.c new file mode 100644 index 00000000000..21250883a11 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/pr41717.c @@ -0,0 +1,10 @@ +/* PR debug/41717 */ +/* { dg-do compile } */ + +void +foo (void) +{ + _Complex float v[1], w; + v[1] = 0.0f + 0.8fi; + w = __builtin_conjf (v[1] * v[1]); +} diff --git a/gcc/testsuite/gcc.dg/debug/vta-1.c b/gcc/testsuite/gcc.dg/debug/vta-1.c new file mode 100644 index 00000000000..414083a09c0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/vta-1.c @@ -0,0 +1,34 @@ +/* https://bugzilla.redhat.com/show_bug.cgi?id=521991#c5 + + Distilled from Linux XFS source code. foo, inlined into bar, ends + up with debug stmts referencing the addressable variable b. + Optimization made it non-addressable, and then completely optimized + away, before we got a chance to rename (and discard) the occurrence + in the debug stmt. When we did, we crashed, attempting to rename + an unreference variable. */ + +/* { dg-do compile } */ + +static inline int +foo (void *x, unsigned y) +{ + unsigned z = *(unsigned long *) x % y; + *(unsigned long *) x = *(unsigned long *) x / y; + return z; +} + +struct S +{ + unsigned t; +}; + +void +bar (struct S *x, int *y) +{ + int a = 0; + unsigned long b = x->t; + foo (&b, x->t); + for (;; a++) + if (b) + *y = 1; +} diff --git a/gcc/testsuite/gcc.dg/debug/vta-2.c b/gcc/testsuite/gcc.dg/debug/vta-2.c new file mode 100644 index 00000000000..5d44262ec76 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/vta-2.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ + +static int +bar (void *a, unsigned int b, int n) +{ + int c = *(unsigned long *) a % b; + *(unsigned long *) a = (int) (*(unsigned long *) a) / b; + return c; +} + +int +foo (unsigned long x, int *y, int z) +{ + int level; + for (level = 0; level < *y; level++) + { + bar (&x, z, sizeof (x)); + if (x) + return *y - 1; + } +} diff --git a/gcc/testsuite/gcc.dg/debug/vta-3.c b/gcc/testsuite/gcc.dg/debug/vta-3.c new file mode 100644 index 00000000000..7d014f1bc1e --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/vta-3.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ + +int +foo (void) +{ + union { char e[8]; int i; } a, b; + char *c, *d; + unsigned int i; + c = a.e; + d = &b.e[sizeof (int) - 1]; + for (i = 0; i < sizeof (int); i++) + { + *d = *c++; + --d; + } + return b.i; +} diff --git a/gcc/testsuite/gcc.dg/guality/pr41447-1.c b/gcc/testsuite/gcc.dg/guality/pr41447-1.c new file mode 100644 index 00000000000..9bb28abe37c --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr41447-1.c @@ -0,0 +1,26 @@ +/* { dg-do run { xfail *-*-* } } */ +/* { dg-options "-g" } */ + +#include "guality.h" + +int a; + +int +main (int argc, char *argv[]) +{ + int tmp = a; + int tmp2 = a; + int tmp3; + int res; + GUALCHKVAL (a); + GUALCHKVAL (tmp); + GUALCHKVAL (tmp2); + a = 0; + tmp3 = tmp2; + GUALCHKVAL (a); + GUALCHKVAL (tmp); + GUALCHKVAL (tmp2); + GUALCHKVAL (tmp3); + res = tmp - tmp2 + 1; + return res; +} diff --git a/gcc/testsuite/gcc.dg/guality/pr41616-1.c b/gcc/testsuite/gcc.dg/guality/pr41616-1.c index c38d76b7c9e..24f64ab083d 100644 --- a/gcc/testsuite/gcc.dg/guality/pr41616-1.c +++ b/gcc/testsuite/gcc.dg/guality/pr41616-1.c @@ -1,5 +1,5 @@ /* { dg-do run { xfail *-*-* } } */ -/* { dg-options "-g -O2" } */ +/* { dg-options "-g" } */ #include "guality.h" diff --git a/gcc/testsuite/gcc.dg/inline-33.c b/gcc/testsuite/gcc.dg/inline-33.c index ac577e3cb88..d82ff71545b 100644 --- a/gcc/testsuite/gcc.dg/inline-33.c +++ b/gcc/testsuite/gcc.dg/inline-33.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fdump-tree-optimized" } */ -/* { dg-options "-O3 -fdump-tree-optimized -fpie" { target { ! nonpic } } } */ +/* { dg-add-options bind_pic_locally } */ int i; diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-1.c b/gcc/testsuite/gcc.dg/ipa/ipa-1.c index 76ef9a643d6..65c0a0caae3 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-1.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ -/* { dg-skip-if "PR 25442" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */ +/* { dg-add-options bind_pic_locally } */ #include <stdio.h> int g (int b, int c) diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-2.c b/gcc/testsuite/gcc.dg/ipa/ipa-2.c index 454927a2c19..1b94bbb7bc0 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-2.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-2.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ -/* { dg-skip-if "PR 25442" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */ +/* { dg-add-options bind_pic_locally } */ #include <stdio.h> int g (int b, int c) diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-3.c b/gcc/testsuite/gcc.dg/ipa/ipa-3.c index 6eb3da40a6f..57200a9ca5d 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-3.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-3.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ -/* { dg-skip-if "PR 25442" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */ +/* { dg-add-options bind_pic_locally } */ /* Double constants. */ diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-4.c b/gcc/testsuite/gcc.dg/ipa/ipa-4.c index c162b2385f2..12af6a4f4d3 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-4.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-4.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ -/* { dg-skip-if "PR 25442" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */ +/* { dg-add-options bind_pic_locally } */ #include <stdio.h> int g (int b, int c) diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-5.c b/gcc/testsuite/gcc.dg/ipa/ipa-5.c index 9e8006a2fef..0ca6ba21dce 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-5.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-5.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ -/* { dg-skip-if "PR 25442" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */ +/* { dg-add-options bind_pic_locally } */ /* Float & short constants. */ diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-7.c b/gcc/testsuite/gcc.dg/ipa/ipa-7.c index 1c4a1709df6..b3ab0f532e4 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipa-7.c +++ b/gcc/testsuite/gcc.dg/ipa/ipa-7.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining" } */ -/* { dg-skip-if "PR 25442" { "*-*-*" } { "-fpic" "-fPIC" } { "" } } */ +/* { dg-add-options bind_pic_locally } */ #include <stdio.h> void send_addr (int *); diff --git a/gcc/testsuite/gcc.dg/ipa/ipacost-2.c b/gcc/testsuite/gcc.dg/ipa/ipacost-2.c index 958059c73e6..d06c9b8a48c 100644 --- a/gcc/testsuite/gcc.dg/ipa/ipacost-2.c +++ b/gcc/testsuite/gcc.dg/ipa/ipacost-2.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining -fdump-tree-optimized" } */ -/* { dg-options "-O3 -fipa-cp -fipa-cp-clone -fdump-ipa-cp -fno-early-inlining -fdump-tree-optimized -fpie" { target { ! nonpic } } } */ +/* { dg-add-options bind_pic_locally } */ int array[100]; diff --git a/gcc/testsuite/gcc.dg/lto/20090914-2_0.c b/gcc/testsuite/gcc.dg/lto/20090914-2_0.c index f78ecf8899f..906b3c44196 100644 --- a/gcc/testsuite/gcc.dg/lto/20090914-2_0.c +++ b/gcc/testsuite/gcc.dg/lto/20090914-2_0.c @@ -1,4 +1,5 @@ -/* { dg-lto-do run { target x86_64-*-* i?86-*-* } } */ +/* { dg-lto-do run } */ +/* { dg-skip-if "x86 only" { ! { x86_64-*-* i?86-*-* } } { "*" } { "" } } */ /* Doesn't work without this dummy function with -fwhopr. */ int foo(void) { } diff --git a/gcc/testsuite/gcc.dg/lto/20091006-2_0.c b/gcc/testsuite/gcc.dg/lto/20091006-2_0.c new file mode 100644 index 00000000000..f8189920cfd --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091006-2_0.c @@ -0,0 +1,4 @@ +/* { dg-lto-do link } */ + +extern int a[10]; +int main() { return 0; } diff --git a/gcc/testsuite/gcc.dg/lto/20091006-2_1.c b/gcc/testsuite/gcc.dg/lto/20091006-2_1.c new file mode 100644 index 00000000000..581839344c1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091006-2_1.c @@ -0,0 +1 @@ +int a[16]; diff --git a/gcc/testsuite/gcc.dg/lto/20091006-2_2.c b/gcc/testsuite/gcc.dg/lto/20091006-2_2.c new file mode 100644 index 00000000000..a610b2b1292 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091006-2_2.c @@ -0,0 +1 @@ +extern int a[14]; diff --git a/gcc/testsuite/gcc.dg/lto/20091013-1_0.c b/gcc/testsuite/gcc.dg/lto/20091013-1_0.c new file mode 100644 index 00000000000..e1a7dc86b6b --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091013-1_0.c @@ -0,0 +1,21 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options {{-fPIC -shared -flto} {-fPIC -shared -O2 -flto}} } */ + +void * HeapAlloc(void*,unsigned int,unsigned long); + +typedef struct tagGdiFont GdiFont; + +typedef struct tagDC { + int xunused; + GdiFont *gdiFont; + unsigned int font_code_page; +} DC; + +DC *alloc_dc_ptr( void *funcs, unsigned short magic ) +{ + DC *dc; + if (!(dc = HeapAlloc( 0, 0, sizeof(*dc) ))) return ((void *)0); + dc->gdiFont = 0; + return dc; +} + diff --git a/gcc/testsuite/gcc.dg/lto/20091013-1_1.c b/gcc/testsuite/gcc.dg/lto/20091013-1_1.c new file mode 100644 index 00000000000..68294fa62cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091013-1_1.c @@ -0,0 +1,111 @@ +typedef struct HDC__ { int unused; } *HDC; +typedef struct HFONT__ { int unused; } *HFONT; + +typedef struct +{ + unsigned int ciACP; +} CHARSETINFO, *PCHARSETINFO, *LPCHARSETINFO; + +typedef struct tagTEXTMETRICW +{ + int tmCharSet; +} TEXTMETRICW, *LPTEXTMETRICW, *PTEXTMETRICW; + +struct gdi_obj_funcs +{ + void* (*pSelectObject)( void* handle, void* hdc ); +}; + +typedef struct tagGdiFont GdiFont; + +typedef struct tagDC +{ + int xunused; + GdiFont *gdiFont; + unsigned int font_code_page; +} DC; + +extern GdiFont* WineEngCreateFontInstance(DC*, HFONT); +extern unsigned int WineEngGetTextCharsetInfo(GdiFont *font, void* fs, unsigned int flags); +extern int WineEngGetTextMetrics(GdiFont*, LPTEXTMETRICW); +extern void* alloc_gdi_handle( void *obj, unsigned short type, const struct gdi_obj_funcs *funcs ); + +enum __wine_debug_class +{ + __WINE_DBCL_FIXME, + __WINE_DBCL_ERR, + __WINE_DBCL_WARN, + __WINE_DBCL_TRACE, + + __WINE_DBCL_INIT = 7 +}; + +struct __wine_debug_channel +{ + unsigned char flags; + char name[15]; +}; + +extern int wine_dbg_log( enum __wine_debug_class cls, struct __wine_debug_channel *ch, const char *func, + const char *format, ... ) __attribute__((format (printf,4,5))); + +static struct __wine_debug_channel __wine_dbch_font = { ~0, "font" }; +static struct __wine_debug_channel * const __wine_dbch___default = &__wine_dbch_font; + +static void* FONT_SelectObject( void* handle, void* hdc ); + +static const struct gdi_obj_funcs font_funcs = +{ + FONT_SelectObject, +}; + +HFONT CreateFontIndirectW( const void *plf ) +{ + return alloc_gdi_handle( 0, 6, &font_funcs ); +} + +static void update_font_code_page( DC *dc ) +{ + CHARSETINFO csi; + int charset = (unsigned char)1; + + if (dc->gdiFont) + charset = WineEngGetTextCharsetInfo( dc->gdiFont, ((void *)0), 0 ); + + if (TranslateCharsetInfo( ((void *)(unsigned long)((unsigned long)charset)), &csi, 1) ) + dc->font_code_page = csi.ciACP; + else { + switch(charset) { + case (unsigned char)1: + dc->font_code_page = GetACP(); + break; + + case (unsigned char)246: + dc->font_code_page = 0; + break; + + default: + do { if((((__wine_dbch___default))->flags & (1 << __WINE_DBCL_FIXME))) { struct __wine_debug_channel * const __dbch = (__wine_dbch___default); const enum __wine_debug_class __dbcl = __WINE_DBCL_FIXME; wine_dbg_log( __dbcl, __dbch, __FUNCTION__, "Can't find codepage for charset %d\n", charset); } } while(0); + dc->font_code_page = 0; + break; + } + } + + do { if((((__wine_dbch___default))->flags & (1 << __WINE_DBCL_TRACE))) { struct __wine_debug_channel * const __dbch = (__wine_dbch___default); const enum __wine_debug_class __dbcl = __WINE_DBCL_TRACE; wine_dbg_log( __dbcl, __dbch, __FUNCTION__, "charset %d => cp %d\n", charset, dc->font_code_page); } } while(0); +} + +static void* FONT_SelectObject( void* handle, void* hdc ) +{ + DC *dc; + + dc->gdiFont = WineEngCreateFontInstance( dc, handle ); + update_font_code_page( dc ); + return 0; +} + +int GetTextMetricsW( HDC hdc, TEXTMETRICW *metrics ) +{ + DC * dc; + return WineEngGetTextMetrics(dc->gdiFont, metrics); +} + diff --git a/gcc/testsuite/gcc.dg/lto/20091013-1_2.c b/gcc/testsuite/gcc.dg/lto/20091013-1_2.c new file mode 100644 index 00000000000..55f8ca1b46d --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091013-1_2.c @@ -0,0 +1,220 @@ +typedef struct HDC__ { int unused; } *HDC; +typedef struct HFONT__ { int unused; } *HFONT; + +void* HeapAlloc(void*,unsigned int,unsigned long); + +typedef struct tagLOGFONTW +{ + int lfPitchAndFamily; + unsigned short lfFaceName[32]; +} LOGFONTW, *PLOGFONTW, *LPLOGFONTW; + +typedef struct tagGdiFont GdiFont; +typedef struct tagDC DC; + +extern unsigned int WineEngGetFontData(GdiFont*, unsigned int, unsigned int, void*, unsigned int); + +struct list +{ + struct list *next; + struct list *prev; +}; + +typedef struct FT_FaceRec_ +{ + signed long face_flags; +} FT_FaceRec, *FT_Face; + +typedef struct { } GM; + +typedef struct { } FMAT2; + +typedef struct { + unsigned int hash; + LOGFONTW lf; + int can_use_bitmap; +} FONT_DESC; + + + +typedef struct tagHFONTLIST { + struct list entry; + HFONT hfont; +} HFONTLIST; + +typedef struct { + struct list entry; + void *face; + GdiFont *font; +} CHILD_FONT; + + +struct tagGdiFont { + struct list entry; + GM **gm; + struct list hfontlist; + struct list child_fonts; + + FT_Face ft_face; + FONT_DESC font_desc; + long ppem; +}; + + + +static struct list gdi_font_list = { &(gdi_font_list), &(gdi_font_list) }; + + + + +static int get_glyph_index_linked(GdiFont *font, unsigned int c, GdiFont **linked_font, unsigned int *glyph); +static long load_VDMX(GdiFont*, long); + +extern int f1(void*,int); + +static FT_Face OpenFontFace(GdiFont *font, void *face, long width, long height) +{ + FT_Face ft_face; + + font->ppem = load_VDMX(font, height); + if(font->ppem == 0) + font->ppem = f1(ft_face, height); + return ft_face; +} + + +static GdiFont *alloc_font(void) +{ + GdiFont *ret = HeapAlloc(0, 0x00000008, sizeof(*ret)); + ret->gm = HeapAlloc(0, 0x00000008, sizeof(GM*)); + return ret; +} + + +static long load_VDMX(GdiFont *font,long height) +{ + unsigned short hdr[3]; + + WineEngGetFontData(font, 0x42424242, 0, hdr, 6); + return 0; +} + +static int fontcmp(const GdiFont *font, FONT_DESC *fd) +{ + if(font->font_desc.hash != fd->hash) return 1; + if(memcmp(&font->font_desc.lf, &fd->lf, __builtin_offsetof (LOGFONTW, lfFaceName))) return 1; + if(!font->font_desc.can_use_bitmap != !fd->can_use_bitmap) return 1; + return strcmpiW(font->font_desc.lf.lfFaceName, fd->lf.lfFaceName); +} + +static GdiFont *find_in_cache(HFONT hfont, const LOGFONTW *plf, const FMAT2 *pmat, int can_use_bitmap) +{ + GdiFont *ret; + FONT_DESC fd; + HFONTLIST *hflist; + struct list *font_elem_ptr, *hfontlist_elem_ptr; + + fd.lf = *plf; + fd.can_use_bitmap = can_use_bitmap; + + + for ((font_elem_ptr) = (&gdi_font_list)->next; (font_elem_ptr) != (&gdi_font_list); (font_elem_ptr) = (font_elem_ptr)->next) { + ret = ((struct tagGdiFont *)((char *)(font_elem_ptr) - (unsigned long)(&((struct tagGdiFont *)0)->entry))); + if(!fontcmp(ret, &fd)) { + if(!can_use_bitmap && !( ret->ft_face->face_flags & ( 1L << 0 ) )) continue; + for ((hfontlist_elem_ptr) = (&ret->hfontlist)->next; (hfontlist_elem_ptr) != (&ret->hfontlist); (hfontlist_elem_ptr) = (hfontlist_elem_ptr)->next) { + hflist = ((struct tagHFONTLIST *)((char *)(hfontlist_elem_ptr) - (unsigned long)(&((struct tagHFONTLIST *)0)->entry))); + if(hflist->hfont == hfont) + return ret; + } + hflist = HeapAlloc(0, 0, sizeof(*hflist)); + hflist->hfont = hfont; + return ret; + } + } + + while(font_elem_ptr) { + ret = ((struct tagGdiFont *)((char *)(font_elem_ptr) - (unsigned long)(&((struct tagGdiFont *)0)->entry))); + if(!fontcmp(ret, &fd)) { + if(!can_use_bitmap && !( ret->ft_face->face_flags & ( 1L << 0 ) )) continue; + hflist = HeapAlloc(0, 0, sizeof(*hflist)); + hflist->hfont = hfont; + return ret; + } + } + return ((void *)0); +} + + + + +GdiFont *WineEngCreateFontInstance(DC *dc, HFONT hfont) +{ + GdiFont *ret; + int can_use_bitmap; + LOGFONTW lf; + FMAT2 dcmat; + + if((ret = find_in_cache(hfont, &lf, &dcmat, can_use_bitmap)) != ((void *)0)) + return ret; + return alloc_font(); +} + +extern unsigned int f(void*,unsigned int g); + +static unsigned int get_glyph_index(void*font, unsigned int glyph) +{ + return f(font, glyph); +} + +unsigned int WineEngGetGlyphOutline(GdiFont *incoming_font, unsigned int glyph, unsigned int format, + void* lpgm, unsigned int buflen, void* buf, + const void* lpmat) +{ + unsigned int glyph_index; + + get_glyph_index_linked(incoming_font, glyph, &incoming_font, &glyph_index); + return 0; +} + +static int load_child_font(GdiFont *font, CHILD_FONT *child) +{ + child->font = alloc_font(); + child->font->ft_face = OpenFontFace(child->font, child->face, 0, -font->ppem); + if(!child->font->ft_face) + return 0; + return 1; +} + +static int get_glyph_index_linked(GdiFont *font, unsigned int c, GdiFont **linked_font, unsigned int *glyph) +{ + unsigned int g; + CHILD_FONT *child_font; + + for ((child_font) = ((CHILD_FONT *)((char *)((&font->child_fonts)->next) - (unsigned long)(&((CHILD_FONT *)0)->entry))); &(child_font)->entry != (&font->child_fonts); (child_font) = ((CHILD_FONT *)((char *)((child_font)->entry.next) - (unsigned long)(&((CHILD_FONT *)0)->entry)))) + { + if(!load_child_font(font, child_font)) + continue; + + g = get_glyph_index(child_font->font, c); + if(g) { + *glyph = g; + *linked_font = child_font->font; + return 1; + } + } + return 0; +} + +unsigned int WineEngGetFontData(GdiFont *font, unsigned int table, unsigned int offset, void* buf, + unsigned int cbData) +{ + unsigned long len; + load_sfnt_table(font->ft_face, table, offset, buf, &len); + return len; +} + +int WineEngGetLinkedHFont(DC *dc, unsigned short c, HFONT *new_hfont, unsigned int *glyph) { + return get_glyph_index_linked(0, 0, 0, 0); +} + diff --git a/gcc/testsuite/gcc.dg/lto/20091014-1_0.c b/gcc/testsuite/gcc.dg/lto/20091014-1_0.c new file mode 100644 index 00000000000..241dddbf81f --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091014-1_0.c @@ -0,0 +1,4 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options {{-fPIC -shared -flto}} } */ + +/* Empty file. See PR41173. */ diff --git a/gcc/testsuite/gcc.dg/lto/20091015-1_0.c b/gcc/testsuite/gcc.dg/lto/20091015-1_0.c new file mode 100644 index 00000000000..f60e7d16a7e --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091015-1_0.c @@ -0,0 +1,5 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options {{-fPIC -shared -O2 -flto} {-fPIC -shared -O2 -fwhopr}} } */ + +#include "20091015-1_b.h" +void diagnostic_initialize (FILE **stream) { *stream = stderr; } diff --git a/gcc/testsuite/gcc.dg/lto/20091015-1_1.c b/gcc/testsuite/gcc.dg/lto/20091015-1_1.c new file mode 100644 index 00000000000..c000518f45d --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091015-1_1.c @@ -0,0 +1,4 @@ +#include "20091015-1_a.h" +#include "20091015-1_b.h" +void ggc_print_common_statistics (FILE *stream) { +} diff --git a/gcc/testsuite/gcc.dg/lto/20091015-1_2.c b/gcc/testsuite/gcc.dg/lto/20091015-1_2.c new file mode 100644 index 00000000000..fd10680866a --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091015-1_2.c @@ -0,0 +1,5 @@ +#include "20091015-1_a.h" +#include "20091015-1_b.h" +void debug_optab_libfuncs (void) { +foo (stderr, 4 ); +} diff --git a/gcc/testsuite/gcc.dg/lto/20091015-1_a.h b/gcc/testsuite/gcc.dg/lto/20091015-1_a.h new file mode 100644 index 00000000000..61e56c9a95f --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091015-1_a.h @@ -0,0 +1,2 @@ +struct _IO_FILE { int _flags; +}; diff --git a/gcc/testsuite/gcc.dg/lto/20091015-1_b.h b/gcc/testsuite/gcc.dg/lto/20091015-1_b.h new file mode 100644 index 00000000000..88139027467 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091015-1_b.h @@ -0,0 +1,2 @@ +typedef struct _IO_FILE FILE; +extern struct _IO_FILE *stderr; diff --git a/gcc/testsuite/gcc.dg/lto/20091016-1_0.c b/gcc/testsuite/gcc.dg/lto/20091016-1_0.c new file mode 100644 index 00000000000..942c5c6c0a4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091016-1_0.c @@ -0,0 +1,13 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options {{-fPIC -shared -O2 -flto}} } */ + +typedef struct VEC_constructor_elt_gc { } VEC_constructor_elt_gc; +#include "20091016-1_a.h" +struct stmt_tree_s { + tree x_cur_stmt_list; +}; +void *add_stmt (struct stmt_tree_s *x) +{ + return &x->x_cur_stmt_list; +} + diff --git a/gcc/testsuite/gcc.dg/lto/20091016-1_1.c b/gcc/testsuite/gcc.dg/lto/20091016-1_1.c new file mode 100644 index 00000000000..06389b8e309 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091016-1_1.c @@ -0,0 +1,18 @@ +typedef struct VEC_constructor_elt_gcx { } VEC_constructor_elt_gc; +#include "20091016-1_a.h" +struct gcc_target { + void (* builtin_vec_perm) (tree*); +}; +extern struct gcc_target targetm; +void dwarf2out_begin_prologue (tree t) +{ + (*targetm.builtin_vec_perm) (&t); +} +struct die_arg_entry_struct { + tree arg; +}; +void *gt_pch_p_20VEC_die_arg_entry_gc (struct die_arg_entry_struct *vec) +{ + return &(vec->arg); +} + diff --git a/gcc/testsuite/gcc.dg/lto/20091016-1_a.h b/gcc/testsuite/gcc.dg/lto/20091016-1_a.h new file mode 100644 index 00000000000..8eefed5cfad --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091016-1_a.h @@ -0,0 +1,6 @@ +typedef union tree_node *tree; +union tree_node { + tree * use; + VEC_constructor_elt_gc *elts; +}; + diff --git a/gcc/testsuite/gcc.dg/lto/20091017-1_0.c b/gcc/testsuite/gcc.dg/lto/20091017-1_0.c new file mode 100644 index 00000000000..ec4c62e4d7c --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091017-1_0.c @@ -0,0 +1,15 @@ +/* { dg-lto-do run } */ + +struct X { + int i; +}; +extern void foo (void *); +extern void abort (void); +int main () +{ + struct X *p; + foo(&p); + if (p != (struct X *)0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/lto/20091017-1_1.c b/gcc/testsuite/gcc.dg/lto/20091017-1_1.c new file mode 100644 index 00000000000..23e5992bde6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091017-1_1.c @@ -0,0 +1,6 @@ +struct X; +void foo (void *q) +{ + struct X **p = (struct X **)q; + *p = (struct X *)0; +} diff --git a/gcc/testsuite/gcc.dg/lto/20091020-1_0.c b/gcc/testsuite/gcc.dg/lto/20091020-1_0.c new file mode 100644 index 00000000000..ef61e98b4cc --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091020-1_0.c @@ -0,0 +1,8 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options {{-fPIC -shared -flto}} } */ + +typedef struct { + int NumPackStreams; +} CSzAr; +void cli_7unz (CSzAr db) { } + diff --git a/gcc/testsuite/gcc.dg/lto/20091020-1_1.c b/gcc/testsuite/gcc.dg/lto/20091020-1_1.c new file mode 100644 index 00000000000..899183a2459 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091020-1_1.c @@ -0,0 +1,15 @@ +typedef struct { + int NumPackStreams; +} CSzAr; +typedef struct { + CSzAr db; +} CSzArEx; +int SzArEx_Init(CSzArEx *p) +{ + return p->db.NumPackStreams; +} +int SzArEx_GetFolderFullPackSize(const CSzArEx *p) +{ + return p->db.NumPackStreams; +} + diff --git a/gcc/testsuite/gcc.dg/lto/20091020-2_0.c b/gcc/testsuite/gcc.dg/lto/20091020-2_0.c new file mode 100644 index 00000000000..7dcbb2da2ca --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091020-2_0.c @@ -0,0 +1,18 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options {{-fPIC -shared -flto}} } */ + +typedef struct { + int NumPackStreams; +} CSzAr; +typedef struct { + CSzAr db; +} CSzArEx; +int SzArEx_Init(CSzArEx *p) +{ + return p->db.NumPackStreams; +} +int SzArEx_GetFolderFullPackSize(const CSzArEx *p) +{ + return p->db.NumPackStreams; +} + diff --git a/gcc/testsuite/gcc.dg/lto/20091020-2_1.c b/gcc/testsuite/gcc.dg/lto/20091020-2_1.c new file mode 100644 index 00000000000..9174f26c35c --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091020-2_1.c @@ -0,0 +1,5 @@ +typedef struct { + int NumPackStreams; +} CSzAr; +void cli_7unz (CSzAr db) { } + diff --git a/gcc/testsuite/gcc.dg/lto/20091020-3_0.c b/gcc/testsuite/gcc.dg/lto/20091020-3_0.c new file mode 100644 index 00000000000..441a7b91a7f --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20091020-3_0.c @@ -0,0 +1,20 @@ +/* { dg-lto-do assemble } */ + +typedef __SIZE_TYPE__ size_t; +static int stack_dir; +static void find_stack_direction () +{ + static char *addr = ((void *)0); + auto char dummy; + if (addr == ((void *)0)) + { + addr = &(dummy); + find_stack_direction (); + } +} +void * C_alloca (size_t size) +{ + if (stack_dir == 0) + find_stack_direction (); +} + diff --git a/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c b/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c index ee805174aea..4a6a8a61969 100644 --- a/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c +++ b/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c @@ -31,7 +31,7 @@ struct gimple_opt_pass one_pass = { { GIMPLE_PASS, - "useless", /* name */ + "cfg", /* name */ one_pass_gate, /* gate */ one_pass_exec, /* execute */ NULL, /* sub */ @@ -53,7 +53,7 @@ int plugin_init (struct plugin_name_args *plugin_info, struct register_pass_info p; p.pass = &one_pass.pass; - p.reference_pass_name = "useless"; + p.reference_pass_name = "cfg"; p.ref_pass_instance_number = 1; p.pos_op = PASS_POS_INSERT_AFTER; diff --git a/gcc/testsuite/gcc.dg/pr41340.c b/gcc/testsuite/gcc.dg/pr41340.c new file mode 100644 index 00000000000..bafa61f5185 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr41340.c @@ -0,0 +1,68 @@ +/* PR debug/41340 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -g -fcompare-debug" } */ +/* { dg-options "-O3 -g -fcompare-debug -march=i686" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ + +typedef struct { int t; } *T; +struct S1 { unsigned s1; }; +struct S2 { struct S1 s2; }; +struct S3 { unsigned s3; struct S2 **s4; }; +struct S5 { struct S2 *s5; }; + +extern void fn0 (void) __attribute__ ((__noreturn__)); +T fn6 (struct S3); +void fn7 (void); + +static inline __attribute__((always_inline)) int +fn1 (const struct S1 *x) +{ + return x->s1; +} + +static inline __attribute__((always_inline)) int +fn2 (const struct S1 *x, unsigned y) +{ + if (y >= x->s1) + fn0 (); + return 0; +} + +static inline __attribute__((always_inline)) int +fn3 (struct S3 x) +{ + return (x.s3 == fn1 (*x.s4 ? &(*x.s4)->s2 : 0)); +} + +static inline __attribute__((always_inline)) int +fn4 (struct S3 x) +{ + return fn2 (&(*x.s4)->s2, x.s3); +} + +int +fn5 (struct S3 x, T *y) +{ + if (!fn3 (x)) + { + *y = (T) (long) fn4 (x); + return 1; + } + return 0; +} + +void +test (struct S5 *x) +{ + struct S3 a; + T b; + unsigned char c = 0; + a.s4 = &x->s5; + while (fn5 (a, &b)) + if (!(b->t & 8)) + c = 1; + a.s4 = &x->s5; + while ((b = fn6 (a))) + ; + if (!c) + fn7 (); +} diff --git a/gcc/testsuite/gcc.dg/raw-string-1.c b/gcc/testsuite/gcc.dg/raw-string-1.c new file mode 100644 index 00000000000..b499e5cce69 --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-1.c @@ -0,0 +1,101 @@ +/* { dg-do run } */ +/* { dg-options "-std=gnu99" } */ + +#include <wchar.h> + +typedef __CHAR16_TYPE__ char16_t; +typedef __CHAR32_TYPE__ char32_t; + +const char s0[] = R"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char s1[] = "a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char s2[] = R"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char s3[] = "ab\nc]\"\nc]*|\"\nc"; + +const char t0[] = u8R"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char t1[] = u8"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char t2[] = u8R"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char t3[] = u8"ab\nc]\"\nc]*|\"\nc"; + +const char16_t u0[] = uR"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char16_t u1[] = u"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char16_t u2[] = uR"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char16_t u3[] = u"ab\nc]\"\nc]*|\"\nc"; + +const char32_t U0[] = UR"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const char32_t U1[] = U"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const char32_t U2[] = UR"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const char32_t U3[] = U"ab\nc]\"\nc]*|\"\nc"; + +const wchar_t L0[] = LR"[a\ +\u010d\U0000010D\\\'\"\?\a\b\f\n\r\t\v\0\00\000\xa\xabb +c]"; +const wchar_t L1[] = L"a\U0000010d\u010d\\\\\\'\\\"\\?\\a\\b\\f\\n\\r\\t\\v\\0\\00\\000\\xa\\xabb\nc"; +const wchar_t L2[] = LR"*|*[a\ +b +c]" +c]*|" +c]*|*"; +const wchar_t L3[] = L"ab\nc]\"\nc]*|\"\nc"; + +int +main (void) +{ + if (sizeof (s0) != sizeof (s1) + || __builtin_memcmp (s0, s1, sizeof (s0)) != 0) + __builtin_abort (); + if (sizeof (s2) != sizeof (s3) + || __builtin_memcmp (s2, s3, sizeof (s2)) != 0) + __builtin_abort (); + if (sizeof (t0) != sizeof (t1) + || __builtin_memcmp (t0, t1, sizeof (t0)) != 0) + __builtin_abort (); + if (sizeof (t2) != sizeof (t3) + || __builtin_memcmp (t2, t3, sizeof (t2)) != 0) + __builtin_abort (); + if (sizeof (u0) != sizeof (u1) + || __builtin_memcmp (u0, u1, sizeof (u0)) != 0) + __builtin_abort (); + if (sizeof (u2) != sizeof (u3) + || __builtin_memcmp (u2, u3, sizeof (u2)) != 0) + __builtin_abort (); + if (sizeof (U0) != sizeof (U1) + || __builtin_memcmp (U0, U1, sizeof (U0)) != 0) + __builtin_abort (); + if (sizeof (U2) != sizeof (U3) + || __builtin_memcmp (U2, U3, sizeof (U2)) != 0) + __builtin_abort (); + if (sizeof (L0) != sizeof (L1) + || __builtin_memcmp (L0, L1, sizeof (L0)) != 0) + __builtin_abort (); + if (sizeof (L2) != sizeof (L3) + || __builtin_memcmp (L2, L3, sizeof (L2)) != 0) + __builtin_abort (); + if (sizeof (R"*[]*") != 1 + || __builtin_memcmp (R"*[]*", "", 1) != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/raw-string-2.c b/gcc/testsuite/gcc.dg/raw-string-2.c new file mode 100644 index 00000000000..533abe2bc89 --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-2.c @@ -0,0 +1,109 @@ +/* { dg-do run } */ +/* { dg-options "-std=gnu99" } */ + +#include <wchar.h> + +typedef __CHAR16_TYPE__ char16_t; +typedef __CHAR32_TYPE__ char32_t; + +#define R +#define u +#define uR +#define U +#define UR +#define u8 +#define u8R +#define L +#define LR + +const char s00[] = R"[a]" "[b]"; +const char s01[] = "[a]" R"*[b]*"; +const char s02[] = R"[a]" R"[b]"; +const char s03[] = R"-[a]-" u8"[b]"; +const char s04[] = "[a]" u8R"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const char s05[] = R"[a]" u8R"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const char s06[] = u8R";([a];(" "[b]"; +const char s07[] = u8"[a]" R"[b]"; +const char s08[] = u8R"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const char s09[] = u8R"/^&|~!=,"'\[a]/^&|~!=,"'\" u8"[b]"; +const char s10[] = u8"[a]" u8R"0123456789abcdef[b]0123456789abcdef"; +const char s11[] = u8R"ghijklmnopqrstuv[a]ghijklmnopqrstuv" u8R"w[b]w"; + +const char16_t u03[] = R"-[a]-" u"[b]"; +const char16_t u04[] = "[a]" uR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const char16_t u05[] = R"[a]" uR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const char16_t u06[] = uR";([a];(" "[b]"; +const char16_t u07[] = u"[a]" R"[b]"; +const char16_t u08[] = uR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const char16_t u09[] = uR"/^&|~!=,"'\[a]/^&|~!=,"'\" u"[b]"; +const char16_t u10[] = u"[a]" uR"0123456789abcdef[b]0123456789abcdef"; +const char16_t u11[] = uR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" uR"w[b]w"; + +const char32_t U03[] = R"-[a]-" U"[b]"; +const char32_t U04[] = "[a]" UR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const char32_t U05[] = R"[a]" UR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const char32_t U06[] = UR";([a];(" "[b]"; +const char32_t U07[] = U"[a]" R"[b]"; +const char32_t U08[] = UR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const char32_t U09[] = UR"/^&|~!=,"'\[a]/^&|~!=,"'\" U"[b]"; +const char32_t U10[] = U"[a]" UR"0123456789abcdef[b]0123456789abcdef"; +const char32_t U11[] = UR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" UR"w[b]w"; + +const wchar_t L03[] = R"-[a]-" L"[b]"; +const wchar_t L04[] = "[a]" LR"MNOPQRSTUVWXYZ[b]MNOPQRSTUVWXYZ"; +const wchar_t L05[] = R"[a]" LR"wxyzABCDEFGHIJKL[b]wxyzABCDEFGHIJKL"; +const wchar_t L06[] = LR";([a];(" "[b]"; +const wchar_t L07[] = L"[a]" R"[b]"; +const wchar_t L08[] = LR"[a]" R"_{}#()<>%:;.?*+-[b]_{}#()<>%:;.?*+-"; +const wchar_t L09[] = LR"/^&|~!=,"'\[a]/^&|~!=,"'\" L"[b]"; +const wchar_t L10[] = L"[a]" LR"0123456789abcdef[b]0123456789abcdef"; +const wchar_t L11[] = LR"ghijklmnopqrstuv[a]ghijklmnopqrstuv" LR"w[b]w"; + +int +main (void) +{ +#define TEST(str, val) \ + if (sizeof (str) != sizeof (val) \ + || __builtin_memcmp (str, val, sizeof (str)) != 0) \ + __builtin_abort () + TEST (s00, "a[b]"); + TEST (s01, "[a]b"); + TEST (s02, "ab"); + TEST (s03, "a[b]"); + TEST (s04, "[a]b"); + TEST (s05, "ab"); + TEST (s06, "a[b]"); + TEST (s07, "[a]b"); + TEST (s08, "ab"); + TEST (s09, "a[b]"); + TEST (s10, "[a]b"); + TEST (s11, "ab"); + TEST (u03, u"a[b]"); + TEST (u04, u"[a]b"); + TEST (u05, u"ab"); + TEST (u06, u"a[b]"); + TEST (u07, u"[a]b"); + TEST (u08, u"ab"); + TEST (u09, u"a[b]"); + TEST (u10, u"[a]b"); + TEST (u11, u"ab"); + TEST (U03, U"a[b]"); + TEST (U04, U"[a]b"); + TEST (U05, U"ab"); + TEST (U06, U"a[b]"); + TEST (U07, U"[a]b"); + TEST (U08, U"ab"); + TEST (U09, U"a[b]"); + TEST (U10, U"[a]b"); + TEST (U11, U"ab"); + TEST (L03, L"a[b]"); + TEST (L04, L"[a]b"); + TEST (L05, L"ab"); + TEST (L06, L"a[b]"); + TEST (L07, L"[a]b"); + TEST (L08, L"ab"); + TEST (L09, L"a[b]"); + TEST (L10, L"[a]b"); + TEST (L11, L"ab"); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/raw-string-3.c b/gcc/testsuite/gcc.dg/raw-string-3.c new file mode 100644 index 00000000000..9226411d2e0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-3.c @@ -0,0 +1,53 @@ +/* If not gnu99, the {,u,u8,U,L}R prefix should be parsed as separate + token. */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +const void *s0 = R"[a]"; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 6 } */ +const void *s1 = uR"[a]"; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 8 } */ +const void *s2 = UR"[a]"; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 10 } */ +const void *s3 = u8R"[a]"; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 12 } */ +const void *s4 = LR"[a]"; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 14 } */ + +const int i0 = R'a'; /* { dg-error "expected ',' or ';'" } */ +const int i1 = uR'a'; /* { dg-error "expected ',' or ';'" } */ +const int i2 = UR'a'; /* { dg-error "expected ',' or ';'" } */ +const int i3 = u8R'a'; /* { dg-error "expected ',' or ';'" } */ +const int i4 = LR'a'; /* { dg-error "expected ',' or ';'" } */ + +#define R "a" +#define uR "b" +#define UR "c" +#define u8R "d" +#define LR "e" + +const void *s5 = R"[a]"; +const void *s6 = uR"[a]"; +const void *s7 = UR"[a]"; +const void *s8 = u8R"[a]"; +const void *s9 = LR"[a]"; + +#undef R +#undef uR +#undef UR +#undef u8R +#undef LR + +#define R 1 + +#define uR 2 + +#define UR 3 + +#define u8R 4 + +#define LR 5 + + +const int i5 = R'a'; +const int i6 = uR'a'; +const int i7 = UR'a'; +const int i8 = u8R'a'; +const int i9 = LR'a'; + +int main () {} diff --git a/gcc/testsuite/gcc.dg/raw-string-4.c b/gcc/testsuite/gcc.dg/raw-string-4.c new file mode 100644 index 00000000000..24d56ed7464 --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-4.c @@ -0,0 +1,28 @@ +/* R is not applicable for character literals. */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +const int i0 = R'a'; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 5 } */ +const int i1 = uR'a'; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 7 } */ +const int i2 = UR'a'; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 9 } */ +const int i3 = u8R'a'; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 11 } */ +const int i4 = LR'a'; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 13 } */ + +#define R 1 + +#define uR 2 + +#define UR 3 + +#define u8R 4 + +#define LR 5 + + +const int i5 = R'a'; +const int i6 = uR'a'; +const int i7 = UR'a'; +const int i8 = u8R'a'; +const int i9 = LR'a'; + +int main () {} diff --git a/gcc/testsuite/gcc.dg/raw-string-5.c b/gcc/testsuite/gcc.dg/raw-string-5.c new file mode 100644 index 00000000000..3dbf97ded90 --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-5.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +const void *s0 = R"0123456789abcdefg[]0123456789abcdefg"; + /* { dg-error "raw string delimiter longer" "" { target *-*-* } 4 } */ + /* { dg-error "stray" "" { target *-*-* } 4 } */ +const void *s1 = R" [] "; + /* { dg-error "invalid character" "" { target *-*-* } 7 } */ + /* { dg-error "stray" "" { target *-*-* } 7 } */ +const void *s2 = R" [] "; + /* { dg-error "invalid character" "" { target *-*-* } 10 } */ + /* { dg-error "stray" "" { target *-*-* } 10 } */ +const void *s3 = R"][]]"; + /* { dg-error "invalid character" "" { target *-*-* } 13 } */ + /* { dg-error "stray" "" { target *-*-* } 13 } */ +const void *s4 = R"@[]@"; + /* { dg-error "invalid character" "" { target *-*-* } 16 } */ + /* { dg-error "stray" "" { target *-*-* } 16 } */ +const void *s5 = R"$[]$"; + /* { dg-error "invalid character" "" { target *-*-* } 19 } */ + /* { dg-error "stray" "" { target *-*-* } 19 } */ + +int main () {} diff --git a/gcc/testsuite/gcc.dg/raw-string-6.c b/gcc/testsuite/gcc.dg/raw-string-6.c new file mode 100644 index 00000000000..338087a25fd --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-6.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +const void *s0 = R"ouch[]ouCh"; /* { dg-error "expected expression at end of input" } */ + /* { dg-error "unterminated raw string" "" { target *-*-* } 4 } */ diff --git a/gcc/testsuite/gcc.dg/raw-string-7.c b/gcc/testsuite/gcc.dg/raw-string-7.c new file mode 100644 index 00000000000..5bb4bec2085 --- /dev/null +++ b/gcc/testsuite/gcc.dg/raw-string-7.c @@ -0,0 +1,23 @@ +/* The trailing whitespace after \ and before newline extension + breaks full compliance for raw strings. */ +/* { dg-do run { xfail *-*-* } } */ +/* { dg-options "-std=gnu99" } */ + +/* Note, there is a single space after \ on the following line. */ +const void *s0 = R"[\ +]"; +/* { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 7 } */ + +/* Note, there is a single tab after \ on the following line. */ +const void *s1 = R"[\ +]"; +/* { dg-bogus "backslash and newline separated by space" "" { xfail *-*-* } 12 } */ + +int +main (void) +{ + if (__builtin_strcmp (s0, "\\ \n") != 0 + || __builtin_strcmp (s1, "\\\t\n") != 0) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tls/pie-1.c b/gcc/testsuite/gcc.dg/tls/pie-1.c new file mode 100644 index 00000000000..07eb5f1ad25 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tls/pie-1.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-fpie" } */ +/* { dg-require-effective-target tls } */ + +__thread int a; int b; int main() { return a = b; } diff --git a/gcc/testsuite/gcc.dg/torture/builtin-math-6.c b/gcc/testsuite/gcc.dg/torture/builtin-math-6.c index 1bf367a5deb..097a8c25d37 100644 --- a/gcc/testsuite/gcc.dg/torture/builtin-math-6.c +++ b/gcc/testsuite/gcc.dg/torture/builtin-math-6.c @@ -6,7 +6,7 @@ Origin: Kaveh R. Ghazi, January 28, 2009. */ /* { dg-do link } */ -/* { dg-require-effective-target mpc_pow } */ +/* { dg-require-effective-target mpc_arc } */ /* All references to link_error should go away at compile-time. The first number is the line number and the second is the value number @@ -180,9 +180,48 @@ extern void link_error(int, int); int main (void) { + TESTIT_COMPLEX (1, cacos, 1, CONJ(0)); + TESTIT_COMPLEX_R (1, cacos, -1, CONJ(3.141593F)); + TESTIT_COMPLEX (1, cacos, CONJ(1), 0); + TESTIT_COMPLEX_R (1, cacos, CONJ(-1), 3.141593F); + TESTIT_COMPLEX_R_ALLNEG (cacos, 3.45678F + 2.34567FI, + 0.60971F - 2.11780FI, 2.531875F - 2.117800FI, + 0.60971F + 2.11780FI, 2.531875F + 2.117800FI); + + TESTIT_COMPLEX_ALLNEG (casin, 0, + 0, -CONJ(0), CONJ(0), CONJ(-0.F)); + TESTIT_COMPLEX_R_ALLNEG (casin, 3.45678F + 2.34567FI, + 0.96107F + 2.11780FI, -0.96107F + 2.11780FI, + 0.96107F - 2.11780FI, -0.96107F - 2.11780FI); + + TESTIT_COMPLEX_ALLNEG (catan, 0, + 0, -CONJ(0), CONJ(0), CONJ(-0.F)); + TESTIT_COMPLEX_R_ALLNEG (catan, 3.45678F + 2.34567FI, + 1.37188F + 0.12997FI, -1.37188F + 0.12997FI, + 1.37188F - 0.12997FI, -1.37188F - 0.12997FI); + + TESTIT_COMPLEX (1, cacosh, 1, 0); + TESTIT_COMPLEX_R (1, cacosh, -1, 3.141593FI); + TESTIT_COMPLEX (1, cacosh, CONJ(1), CONJ(0)); + TESTIT_COMPLEX_R (1, cacosh, CONJ(-1), CONJ(3.141593FI)); + TESTIT_COMPLEX_R_ALLNEG (cacosh, 3.45678F + 2.34567FI, + 2.11780F + 0.60971FI, 2.11780F + 2.531875FI, + 2.11780F - 0.60971FI, 2.11780F - 2.531875FI); + + TESTIT_COMPLEX_ALLNEG (casinh, 0, + 0, -CONJ(0), CONJ(0), CONJ(-0.F)); + TESTIT_COMPLEX_R_ALLNEG (casinh, 3.45678F + 2.34567FI, + 2.12836F + 0.58310FI, -2.12836F + 0.58310FI, + 2.12836F - 0.58310FI, -2.12836F - 0.58310FI); + + TESTIT_COMPLEX_ALLNEG (catanh, 0, + 0, -CONJ(0), CONJ(0), CONJ(-0.F)); + TESTIT_COMPLEX_R_ALLNEG (catanh, 3.45678F + 2.34567FI, + 0.19693F + 1.43190FI, -0.19693F + 1.43190FI, + 0.19693F - 1.43190FI, -0.19693F - 1.43190FI); + TESTIT_COMPLEX_ALLNEG (csin, 0, - 0, -0.F, - CONJ(0), CONJ(-0.F)); + 0, -0.F, CONJ(0), CONJ(-0.F)); TESTIT_COMPLEX_R_ALLNEG (csin, 3.45678F + 2.34567FI, -1.633059F - 4.917448FI, 1.633059F - 4.917448FI, -1.633059F + 4.917448FI, 1.633059F + 4.917448FI); @@ -219,8 +258,8 @@ int main (void) TESTIT_COMPLEX (1, clog, 1, 0); TESTIT_COMPLEX_R (1, clog, -1, 3.141593FI); - TESTIT_COMPLEX (1, clog, CONJ(1), CONJ(0)); /* Fails with mpc-0.6. */ - TESTIT_COMPLEX_R (1, clog, CONJ(-1), CONJ(3.141593FI)); /* Fails with mpc-0.6. */ + TESTIT_COMPLEX (1, clog, CONJ(1), CONJ(0)); + TESTIT_COMPLEX_R (1, clog, CONJ(-1), CONJ(3.141593FI)); TESTIT_COMPLEX_R_ALLNEG (clog, 3.45678F + 2.34567FI, 1.429713F + 0.596199FI, 1.429713F + 2.545394FI, 1.429713F - 0.596199FI, 1.429713F - 2.545394FI); diff --git a/gcc/testsuite/gcc.dg/torture/pr26515.c b/gcc/testsuite/gcc.dg/torture/pr26515.c new file mode 100644 index 00000000000..a051e2e53c4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr26515.c @@ -0,0 +1,27 @@ +/* { dg-options "-march=v10" { target cris*-*-* } } */ +struct i +{ + long long i_size; + struct a *i_mapping; +}; +struct p +{ + struct a *mapping; + long index; +}; +extern void b (struct p*, unsigned); +extern void u (struct p*); +void +block_page_mkwrite (struct i *i, struct p *p) +{ + unsigned end = 0; + long long size = 0; + size = i->i_size; + if ((p->mapping != i->i_mapping)) + goto out_unlock; + if (((p->index + 1) << 13) > size) + end = size & ~(~(((1UL) << 13) - 1)); + b (p, end); +out_unlock: + u (p); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr38948.c b/gcc/testsuite/gcc.dg/torture/pr38948.c new file mode 100644 index 00000000000..98ed493cbd7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr38948.c @@ -0,0 +1,101 @@ +/* { dg-options "-fno-tree-sra" } */ +/* { dg-options "-fno-tree-sra -march=v32" { target cris-*-* } } */ +typedef unsigned char byte; +typedef unsigned int uint; +typedef int bool; +typedef struct gs_const_string_s +{ + const byte *data; +} +gs_const_string; +struct gs_matrix_s +{ + float xx, xy, yx, yy, tx, ty; +}; +typedef struct gs_matrix_s gs_matrix; +typedef long fixed; +typedef struct gs_fixed_point_s +{ + fixed x, y; +} +gs_fixed_point; +typedef struct gs_matrix_fixed_s +{ + int x; +} +gs_matrix_fixed; +static int +append_simple (const byte * glyph, const gs_matrix_fixed * pmat, void * ppath) +{ + int numContours = + (int) (((((uint) ((glyph)[0]) << 8) + (glyph)[1]) ^ 0x8000) - 0x8000); + const byte *pends = glyph + 10; + int code = 0; + { + uint i = 0; + uint np = 0; + gs_fixed_point pt = {0}; + uint reps = 0; + for (i = 0, np = 0; i < numContours; ++i) + { + bool move = ((bool) 1); + uint last_point = + (((uint) ((pends + i * 2)[0]) << 8) + (pends + i * 2)[1]); + int off_curve = 0; + gs_fixed_point cpoints[3]; + for (; np <= last_point; --reps, ++np) + { + if (move) + { + cpoints[0] = pt; + move = ((bool) 0); + } + else + { + switch (off_curve++) + { + default: + cpoints[2].x = ((cpoints[1].x + pt.x) / 2); + cpoints[2].y = ((cpoints[1].y + pt.y) / 2); + code = + gx_path_add_curve_notes (ppath, + ((cpoints[0].x + + 2 * cpoints[1].x) / 3), + ((cpoints[0].y + + 2 * cpoints[1].y) / 3), + ((2 * cpoints[1].x + + cpoints[2].x) / 3), + ((2 * cpoints[1].y + + cpoints[2].y) / 3), + cpoints[2].x, cpoints[2].y, + 0); + cpoints[0] = cpoints[2]; + case 0: + cpoints[1] = pt; + } + } + } + } + } +} +int +append_outline (uint glyph_index, const gs_matrix_fixed *pmat, void *ppath) +{ + gs_const_string glyph_string = {0}; + int numContours = 0; + numContours = + (int) (((((uint) ((glyph_string.data)[0]) << 8) + + (glyph_string.data)[1]) ^ 0x8000) - 0x8000); + if (numContours >= 0) + return append_simple (glyph_string.data, pmat, ppath); + { + uint flags = 0; + do + { + gs_matrix_fixed mat = {0}; + gs_matrix scale_mat = {0}; + gs_matrix_multiply (&scale_mat, (const gs_matrix *) &mat, (gs_matrix *) & mat); + } + while (flags & 32); + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr41555.c b/gcc/testsuite/gcc.dg/torture/pr41555.c index 219b34275b7..c201fda0cea 100644 --- a/gcc/testsuite/gcc.dg/torture/pr41555.c +++ b/gcc/testsuite/gcc.dg/torture/pr41555.c @@ -1,4 +1,5 @@ /* { dg-do run } */ +/* { dg-options "-std=c99" } */ #include <stdint.h> #include <limits.h> diff --git a/gcc/testsuite/gcc.dg/tree-ssa/inline-3.c b/gcc/testsuite/gcc.dg/tree-ssa/inline-3.c index 13e27c307a4..511cc9e2562 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/inline-3.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/inline-3.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-einline2" } */ -/* { dg-options "-O2 -fdump-tree-einline2 -fpie" { target { ! nonpic } } } */ +/* { dg-add-options bind_pic_locally } */ + extern void inlined (); void inline_me_too (void); void inline_through_me (void (*ptr)(void)); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c index 5f126363124..b9c67a62609 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ipa-cp-1.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O3 -fdump-tree-optimized -fno-inline" } */ +/* { dg-add-options bind_pic_locally } */ + int very_long_function(int a) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/local-pure-const.c b/gcc/testsuite/gcc.dg/tree-ssa/local-pure-const.c index 065d212cb5f..afb7ca4b0df 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/local-pure-const.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/local-pure-const.c @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O1 -fdump-tree-local-pure-const1" } */ -/* { dg-options "-O1 -fdump-tree-local-pure-const1 -fpie" { target { ! nonpic } } } */ +/* { dg-add-options bind_pic_locally } */ + t(int a, int b, int c) { int *p; diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr41497.c b/gcc/testsuite/gcc.dg/tree-ssa/pr41497.c new file mode 100644 index 00000000000..e66ee846491 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr41497.c @@ -0,0 +1,27 @@ +/* { dg-do run } */ +/* { dg-options "-Os" } */ + +extern void abort (void); + +unsigned int a; +int b, c; + +void +foo (void) +{ + b = 0; + do { + for (a = -13; a == 0; a = (unsigned short)a) + c = 1; + b++; + } while (b == 0); +} + +int +main () +{ + foo (); + if (a != -13) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c new file mode 100644 index 00000000000..978b7abab3a --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-26.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -fdump-tree-pre-details" } */ + +typedef union +{ + int* data; +} SA; + +typedef struct +{ + int reserved; + char* array; +}SB; + +typedef struct +{ + int status; +}SC; + +void foo(SA* pResult, SB* method, SC* self) +{ + if (method->array[0] == 'L' && !self->status && pResult->data != 0) + pResult->data = pResult->data; +} + +/* { dg-final { scan-tree-dump "Deleted redundant store" "pre" } } */ +/* { dg-final { cleanup-tree-dump "pre" } } */ diff --git a/gcc/testsuite/gcc.dg/utf-badconcat2.c b/gcc/testsuite/gcc.dg/utf-badconcat2.c new file mode 100644 index 00000000000..ea71a7f6857 --- /dev/null +++ b/gcc/testsuite/gcc.dg/utf-badconcat2.c @@ -0,0 +1,15 @@ +/* Test unsupported concatenation of UTF-8 string literals. */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +void *s0 = u8"a" "b"; +void *s1 = "a" u8"b"; +void *s2 = u8"a" u8"b"; +void *s3 = u8"a" u"b"; /* { dg-error "non-standard concatenation" } */ +void *s4 = u"a" u8"b"; /* { dg-error "non-standard concatenation" } */ +void *s5 = u8"a" U"b"; /* { dg-error "non-standard concatenation" } */ +void *s6 = U"a" u8"b"; /* { dg-error "non-standard concatenation" } */ +void *s7 = u8"a" L"b"; /* { dg-error "non-standard concatenation" } */ +void *s8 = L"a" u8"b"; /* { dg-error "non-standard concatenation" } */ + +int main () {} diff --git a/gcc/testsuite/gcc.dg/utf-dflt2.c b/gcc/testsuite/gcc.dg/utf-dflt2.c new file mode 100644 index 00000000000..ab101f45b78 --- /dev/null +++ b/gcc/testsuite/gcc.dg/utf-dflt2.c @@ -0,0 +1,12 @@ +/* If not gnu99, the u8 prefix should be parsed as separate tokens. */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +const void *s0 = u8"a"; /* { dg-error "undeclared" } */ + /* { dg-error "expected ',' or ';'" "" { target *-*-* } 5 } */ + +#define u8 "a" + +const void *s1 = u8"a"; + +int main () {} diff --git a/gcc/testsuite/gcc.dg/utf8-1.c b/gcc/testsuite/gcc.dg/utf8-1.c new file mode 100644 index 00000000000..e287e065688 --- /dev/null +++ b/gcc/testsuite/gcc.dg/utf8-1.c @@ -0,0 +1,45 @@ +/* { dg-do run } */ +/* { dg-require-iconv "ISO-8859-2" } */ +/* { dg-options "-std=gnu99 -fexec-charset=ISO-8859-2" } */ + +const char *str1 = "h\u00e1\U0000010Dky "; +const char *str2 = "\u010d\u00E1rky\n"; +const char *str3 = u8"h\u00e1\U0000010Dky "; +const char *str4 = u8"\u010d\u00E1rky\n"; +const char *str5 = "h\u00e1\U0000010Dky " "\u010d\u00E1rky\n"; +const char *str6 = u8"h\u00e1\U0000010Dky " "\u010d\u00E1rky\n"; +const char *str7 = "h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n"; +#define u8 +const char *str8 = u8"h\u00e1\U0000010Dky " u8"\u010d\u00E1rky\n"; + +const char latin2_1[] = "\x68\xe1\xe8\x6b\x79\x20"; +const char latin2_2[] = "\xe8\xe1\x72\x6b\x79\n"; +const char utf8_1[] = "\x68\xc3\xa1\xc4\x8d\x6b\x79\x20"; +const char utf8_2[] = "\xc4\x8d\xc3\xa1\x72\x6b\x79\n"; + +int +main (void) +{ + if (__builtin_strcmp (str1, latin2_1) != 0 + || __builtin_strcmp (str2, latin2_2) != 0 + || __builtin_strcmp (str3, utf8_1) != 0 + || __builtin_strcmp (str4, utf8_2) != 0 + || __builtin_strncmp (str5, latin2_1, sizeof (latin2_1) - 1) != 0 + || __builtin_strcmp (str5 + sizeof (latin2_1) - 1, latin2_2) != 0 + || __builtin_strncmp (str6, utf8_1, sizeof (utf8_1) - 1) != 0 + || __builtin_strcmp (str6 + sizeof (utf8_1) - 1, utf8_2) != 0 + || __builtin_strncmp (str7, utf8_1, sizeof (utf8_1) - 1) != 0 + || __builtin_strcmp (str7 + sizeof (utf8_1) - 1, utf8_2) != 0 + || __builtin_strncmp (str8, utf8_1, sizeof (utf8_1) - 1) != 0 + || __builtin_strcmp (str8 + sizeof (utf8_1) - 1, utf8_2) != 0) + __builtin_abort (); + if (sizeof ("a" u8"b"[0]) != 1 + || sizeof (u8"a" "b"[0]) != 1 + || sizeof (u8"a" u8"b"[0]) != 1 + || sizeof ("a" "\u010d") != 3 + || sizeof ("a" u8"\u010d") != 4 + || sizeof (u8"a" "\u010d") != 4 + || sizeof (u8"a" "\u010d") != 4) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/utf8-2.c b/gcc/testsuite/gcc.dg/utf8-2.c new file mode 100644 index 00000000000..9c0442fde3f --- /dev/null +++ b/gcc/testsuite/gcc.dg/utf8-2.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +#include <wchar.h> + +typedef __CHAR16_TYPE__ char16_t; +typedef __CHAR32_TYPE__ char32_t; + +const char s0[] = u8"ab"; +const char16_t s1[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char32_t s2[] = u8"ab"; /* { dg-error "from non-wide" } */ +const wchar_t s3[] = u8"ab"; /* { dg-error "from non-wide" } */ + +const char t0[0] = u8"ab"; /* { dg-warning "chars is too long" } */ +const char t1[1] = u8"ab"; /* { dg-warning "chars is too long" } */ +const char t2[2] = u8"ab"; +const char t3[3] = u8"ab"; +const char t4[4] = u8"ab"; + +const char u0[0] = u8"\u2160."; /* { dg-warning "chars is too long" } */ +const char u1[1] = u8"\u2160."; /* { dg-warning "chars is too long" } */ +const char u2[2] = u8"\u2160."; /* { dg-warning "chars is too long" } */ +const char u3[3] = u8"\u2160."; /* { dg-warning "chars is too long" } */ +const char u4[4] = u8"\u2160."; +const char u5[5] = u8"\u2160."; +const char u6[6] = u8"\u2160."; diff --git a/gcc/testsuite/gcc.target/arm/neon-thumb2-move.c b/gcc/testsuite/gcc.target/arm/neon-thumb2-move.c new file mode 100644 index 00000000000..88228513130 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-thumb2-move.c @@ -0,0 +1,98 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-O2 -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon" } */ + +#include <arm_neon.h> +#include <stddef.h> + +void * +memset (DST, C, LENGTH) + void *DST; + int C; + size_t LENGTH; +{ + void* DST0 = DST; + unsigned char C_BYTE = C; + + + if (__builtin_expect(LENGTH < 4, 1)) { + size_t i = 0; + while (i < LENGTH) { + ((char*)DST)[i] = C_BYTE; + i++; + } + return DST; + } + + const char* DST_end = (char*)DST + LENGTH; + + + while ((uintptr_t)DST % 4 != 0) { + *(char*) (DST++) = C_BYTE; + } + + + uint32_t C_SHORTWORD = (uint32_t)(unsigned char)(C_BYTE) * 0x01010101; + + + if (__builtin_expect(DST_end - (char*)DST >= 16, 0)) { + while ((uintptr_t)DST % 16 != 0) { + *((uint32_t*)((char*)(DST) + (0))) = C_SHORTWORD; + DST += 4; + } + + + uint8x16_t C_WORD = vdupq_n_u8(C_BYTE); + + + + + + size_t i = 0; + LENGTH = DST_end - (char*)DST; + while (i + 16 * 16 <= LENGTH) { + *((uint8x16_t*)((char*)(DST) + (i))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 1))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 2))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 3))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 4))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 5))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 6))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 7))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 8))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 9))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 10))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 11))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 12))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 13))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 14))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 15))) = C_WORD; + i += 16 * 16; + } + while (i + 16 * 4 <= LENGTH) { + *((uint8x16_t*)((char*)(DST) + (i))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 1))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 2))) = C_WORD; + *((uint8x16_t*)((char*)(DST) + (i + 16 * 3))) = C_WORD; + i += 16 * 4; + } + while (i + 16 <= LENGTH) { + *((uint8x16_t*)((char*)(DST) + (i))) = C_WORD; + i += 16; + } + DST += i; + } + + while (4 <= DST_end - (char*)DST) { + *((uint32_t*)((char*)(DST) + (0))) = C_SHORTWORD; + DST += 4; + } + + + while ((char*)DST < DST_end) { + *((char*)DST) = C_BYTE; + DST++; + } + + return DST0; +} diff --git a/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c b/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c new file mode 100644 index 00000000000..2541df84169 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c @@ -0,0 +1,27 @@ +/* Check that NEON vector shifts support immediate values == size. /* + +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-save-temps -mfpu=neon -mfloat-abi=softfp" } */ + +#include <arm_neon.h> + +uint16x8_t test_vshll_n_u8 (uint8x8_t a) +{ + return vshll_n_u8(a, 8); +} + +uint32x4_t test_vshll_n_u16 (uint16x4_t a) +{ + return vshll_n_u16(a, 16); +} + +uint64x2_t test_vshll_n_u32 (uint32x2_t a) +{ + return vshll_n_u32(a, 32); +} + +/* { dg-final { scan-assembler "vshll\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vshll\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vshll\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/i386/i386.exp b/gcc/testsuite/gcc.target/i386/i386.exp index c7c6e12d1f4..3bfac8d6f71 100644 --- a/gcc/testsuite/gcc.target/i386/i386.exp +++ b/gcc/testsuite/gcc.target/i386/i386.exp @@ -24,6 +24,18 @@ if { ![istarget i?86*-*-*] && ![istarget x86_64-*-*] } then { # Load support procs. load_lib gcc-dg.exp +# Return 1 if attribute ms_hook_prologue is supported. +proc check_effective_target_ms_hook_prologue { } { + if { [check_effective_target_ilp32] + && [check_no_compiler_messages ms_hook_prologue object { + void __attribute__ ((__ms_hook_prologue__)) foo (); + } ""] } { + return 1 + } else { + return 0 + } +} + # Return 1 if ssse3 instructions can be compiled. proc check_effective_target_ssse3 { } { return [check_no_compiler_messages ssse3 object { diff --git a/gcc/testsuite/gcc.target/i386/ms_hook_prologue.c b/gcc/testsuite/gcc.target/i386/ms_hook_prologue.c new file mode 100644 index 00000000000..f945492dfde --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/ms_hook_prologue.c @@ -0,0 +1,29 @@ +/* Test that the ms_hook_prologue attribute generates the correct code. */ + +/* { dg-do run } */ +/* { dg-require-effective-target ms_hook_prologue } */ +/* { dg-options "-O2 -fomit-frame-pointer" } */ + +int __attribute__ ((__ms_hook_prologue__)) foo () +{ + unsigned char *ptr = (unsigned char *) foo; + + /* The NOP mov must not be optimized away by optimizations. + The push %ebp, mov %esp, %ebp must not be removed by + -fomit-frame-pointer */ + + /* movl.s %edi, %edi */ + if(*ptr++ != 0x8b) return 1; + if(*ptr++ != 0xff) return 1; + /* push %ebp */ + if(*ptr++ != 0x55) return 1; + /* movl.s %esp, %ebp */ + if(*ptr++ != 0x8b) return 1; + if(*ptr++ != 0xec) return 1; + return 0; +} + +int main () +{ + return foo(); +} diff --git a/gcc/testsuite/gcc.target/i386/pic-1.c b/gcc/testsuite/gcc.target/i386/pic-1.c index bc11de90b41..bdf6267c7d8 100644 --- a/gcc/testsuite/gcc.target/i386/pic-1.c +++ b/gcc/testsuite/gcc.target/i386/pic-1.c @@ -2,6 +2,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target ilp32 } */ /* { dg-require-effective-target fpic } */ +/* { dg-skip-if "No Windows PIC" { *-*-mingw* *-*-cygwin } { "*" } { "" } } */ /* { dg-options "-fPIC" } */ int foo () diff --git a/gcc/testsuite/gcc.target/powerpc/altivec-4.c b/gcc/testsuite/gcc.target/powerpc/altivec-4.c index a5617e25b8a..2c78f6586d6 100644 --- a/gcc/testsuite/gcc.target/powerpc/altivec-4.c +++ b/gcc/testsuite/gcc.target/powerpc/altivec-4.c @@ -4,7 +4,7 @@ #define vector __attribute__((vector_size(16))) -static int vector x, y; +static int vector x, y, z; static vector signed int i,j; static vector signed short s,t; @@ -20,7 +20,7 @@ static int int1, int2; void b() { - __builtin_altivec_vadduwm (x, y); + z = __builtin_altivec_vadduwm (x, y); /* Make sure the predicates accept correct argument types. */ diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-1.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c index 2538ad987d2..2538ad987d2 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-1.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-1.c diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-2.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c index e558f413c92..e558f413c92 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-2.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-2.c diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-3.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c index b99bcca49f4..b99bcca49f4 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-3.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-3.c diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-4.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c index a3bd7e69674..a3bd7e69674 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-4.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-4.c diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-5.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c index 32d05b29829..32d05b29829 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-5.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-5.c diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-6.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c index c46c8a74711..c46c8a74711 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-6.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-6.c diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-7.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c index 3c57f937fc0..3c57f937fc0 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-7.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c diff --git a/gcc/testsuite/gcc.target/vsx-vectorize-8.c b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c index af671ee79cb..af671ee79cb 100644 --- a/gcc/testsuite/gcc.target/vsx-vectorize-8.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-vrsave.c b/gcc/testsuite/gcc.target/powerpc/vsx-vrsave.c new file mode 100644 index 00000000000..83125f67fcc --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/vsx-vrsave.c @@ -0,0 +1,20 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2 -mcpu=power7" } */ +/* { dg-final { scan-assembler-times "mtvrsave" 2 } } */ + +/* Check whether VRSAVE is set to non-zero if VSX vector operations were + used, but it should not be set if there are no vector operations. */ + +void +generates_vrsave (vector double *a, vector double *b, vector double *c) +{ + *a = *b + *c; +} + +void +no_vrsave (double *a, double *b, double *c) +{ + *a = *b + *c; +} diff --git a/gcc/testsuite/gfortran.dg/auto_dealloc_1.f90 b/gcc/testsuite/gfortran.dg/auto_dealloc_1.f90 new file mode 100644 index 00000000000..176f87a3d34 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/auto_dealloc_1.f90 @@ -0,0 +1,59 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR 41586: Allocatable _scalars_ are never auto-deallocated +! +! Contributed by Tobias Burnus <burnus@gcc.gnu.org> + +module automatic_deallocation + + type t0 + integer :: i + end type + + type t1 + real :: pi = 3.14 + integer, allocatable :: j + end type + + type t2 + class(t0), allocatable :: k + end type t2 + +contains + + ! (1) simple allocatable scalars + subroutine a + integer, allocatable :: m + allocate (m) + m = 42 + end subroutine + + ! (2) allocatable scalar CLASS variables + subroutine b + class(t0), allocatable :: m + allocate (t0 :: m) + m%i = 43 + end subroutine + + ! (3) allocatable scalar components + subroutine c + type(t1) :: m + allocate (m%j) + m%j = 44 + end subroutine + + ! (4) allocatable scalar CLASS components + subroutine d + type(t2) :: m + allocate (t0 :: m%k) + m%k%i = 45 + end subroutine + +end module + + +! { dg-final { scan-tree-dump-times "__builtin_free" 5 "original" } } + +! { dg-final { cleanup-modules "automatic_deallocation" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/class_10.f03 b/gcc/testsuite/gfortran.dg/class_10.f03 new file mode 100644 index 00000000000..f238a597a65 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_10.f03 @@ -0,0 +1,32 @@ +! { dg-do compile } +! +! PR 41800: [OOP] ICE in fold_convert_loc, at fold-const.c:2789 +! +! Contributed by Harald Anlauf <anlauf@gmx.de> + +module abstract_gradient + + implicit none + private + + type, public, abstract :: gradient_class + contains + procedure, nopass :: inner_product + end type + +contains + + function inner_product () + class(gradient_class), pointer :: inner_product + inner_product => NULL() + end function + +end module + + + use abstract_gradient + class(gradient_class), pointer :: g_initial, ip_save + ip_save => g_initial%inner_product() ! ICE +end + +! { dg-final { cleanup-modules "abstract_gradient" } } diff --git a/gcc/testsuite/gfortran.dg/class_5.f03 b/gcc/testsuite/gfortran.dg/class_5.f03 new file mode 100644 index 00000000000..087d745aec7 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_5.f03 @@ -0,0 +1,31 @@ +! { dg-do compile } +! +! PR 41719: [OOP] invalid: Intrinsic assignment involving polymorphic variables +! +! Contributed by Tobias Burnus <burnus@gcc.gnu.org> + + implicit none + + type t1 + integer :: a + end type + + type, extends(t1) :: t2 + integer :: b + end type + + class(t1),pointer :: cp + type(t2) :: x + + x = t2(45,478) + allocate(t2 :: cp) + + cp = x ! { dg-error "Variable must not be polymorphic" } + + select type (cp) + type is (t2) + print *, cp%a, cp%b + end select + +end +
\ No newline at end of file diff --git a/gcc/testsuite/gfortran.dg/class_6.f03 b/gcc/testsuite/gfortran.dg/class_6.f03 new file mode 100644 index 00000000000..2f3ff62a6fa --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_6.f03 @@ -0,0 +1,21 @@ +! { dg-do run } +! +! PR 41629: [OOP] gimplification error on valid code +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + + type t1 + integer :: comp + end type + + type(t1), target :: a + + class(t1) :: x + pointer :: x ! This is valid + + a%comp = 3 + x => a + print *,x%comp + if (x%comp/=3) call abort() + +end diff --git a/gcc/testsuite/gfortran.dg/class_7.f03 b/gcc/testsuite/gfortran.dg/class_7.f03 new file mode 100644 index 00000000000..ed4eeba9340 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_7.f03 @@ -0,0 +1,21 @@ +! { dg-do compile } +! Test fixes for PR41587 and PR41608. +! +! Contributed by Tobias Burnus <burnus@gcc.gnu.org> +! +! PR41587: used to accept the declaration of component 'foo' + type t0 + integer :: j = 42 + end type t0 + type t + integer :: i + class(t0), allocatable :: foo(3) ! { dg-error "deferred shape" } + end type t + +! PR41608: Would ICE on missing type decl + class(t1), pointer :: c ! { dg-error "before it is defined" } + + select type (c) ! { dg-error "shall be polymorphic" } + type is (t1) ! { dg-error "Unexpected" } + end select ! { dg-error "Expecting END PROGRAM" } +end diff --git a/gcc/testsuite/gfortran.dg/class_8.f03 b/gcc/testsuite/gfortran.dg/class_8.f03 new file mode 100644 index 00000000000..78f10ebe2bd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_8.f03 @@ -0,0 +1,16 @@ +! { dg-do compile } +! Test fixes for PR41618. +! +! Contributed by Janus Weil <janus@gcc.gnu.org> +! + type t1 + integer :: comp + class(t1),pointer :: cc + end type + + class(t1) :: x ! { dg-error "must be dummy, allocatable or pointer" } + + x%comp = 3 + print *,x%comp + +end diff --git a/gcc/testsuite/gfortran.dg/class_9.f03 b/gcc/testsuite/gfortran.dg/class_9.f03 new file mode 100644 index 00000000000..5dbd4597abd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_9.f03 @@ -0,0 +1,68 @@ +! { dg-do run } +! Test the fix for PR41706, in which arguments of class methods that +! were themselves class methods did not work. +! +! Contributed by Janus Weil <janus@gcc.gnu.org> +! +module m +type :: t + real :: v = 1.5 +contains + procedure, nopass :: a + procedure, nopass :: b + procedure, pass :: c + procedure, nopass :: d +end type + +contains + + real function a (x) + real :: x + a = 2.*x + end function + + real function b (x) + real :: x + b = 3.*x + end function + + real function c (x) + class (t) :: x + c = 4.*x%v + end function + + subroutine d (x) + real :: x + if (abs(x-3.0)>1E-3) call abort() + end subroutine + + subroutine s (x) + class(t) :: x + real :: r + r = x%a (1.1) ! worked + if (r .ne. a (1.1)) call abort + + r = x%a (b (1.2)) ! worked + if (r .ne. a(b (1.2))) call abort + + r = b ( x%a (1.3)) ! worked + if (r .ne. b(a (1.3))) call abort + + r = x%a(x%b (1.4)) ! failed + if (r .ne. a(b (1.4))) call abort + + r = x%a(x%c ()) ! failed + if (r .ne. a(c (x))) call abort + + call x%d (x%a(1.5)) ! failed + + end subroutine + +end + + use m + class(t),allocatable :: x + allocate(x) + call s (x) +end +! { dg-final { cleanup-modules "m" } } diff --git a/gcc/testsuite/gfortran.dg/class_allocate_1.f03 b/gcc/testsuite/gfortran.dg/class_allocate_1.f03 index 719d90cf8f9..67c8065794b 100644 --- a/gcc/testsuite/gfortran.dg/class_allocate_1.f03 +++ b/gcc/testsuite/gfortran.dg/class_allocate_1.f03 @@ -68,8 +68,7 @@ i = 0 allocate(t2 :: cp2) -! FIXME: Not yet supported: source=<class> -! allocate(cp, source = cp2) + allocate(cp, source = cp2) allocate(t2 :: cp3) allocate(cp, source=cp3) select type (cp) diff --git a/gcc/testsuite/gfortran.dg/class_allocate_2.f03 b/gcc/testsuite/gfortran.dg/class_allocate_2.f03 index d6a5d78bd75..754faa9a9f4 100644 --- a/gcc/testsuite/gfortran.dg/class_allocate_2.f03 +++ b/gcc/testsuite/gfortran.dg/class_allocate_2.f03 @@ -7,7 +7,7 @@ type :: t end type t class(t), allocatable :: c,d allocate(t :: d) -allocate(c,source=d) ! { dg-error "not supported yet" } +allocate(c,source=d) end type, abstract :: t diff --git a/gcc/testsuite/gfortran.dg/class_allocate_3.f03 b/gcc/testsuite/gfortran.dg/class_allocate_3.f03 new file mode 100644 index 00000000000..c6128a8ab51 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_allocate_3.f03 @@ -0,0 +1,39 @@ +! { dg-do run } +! +! PR 41581: [OOP] Allocation of a CLASS with SOURCE=<class> does not work +! +! Contributed by Tobias Burnus <burnus@gcc.gnu.org> + + type t + end type t + + type,extends(t) :: t2 + integer :: i = 54 + real :: r = 384.02 + end type t2 + + class(t), allocatable :: m1, m2 + + allocate(t2 :: m2) + select type(m2) + type is (t2) + print *, m2%i, m2%r + if (m2%i/=54) call abort() + if (abs(m2%r-384.02)>1E-3) call abort() + m2%i = 42 + m2%r = -4.0 + class default + call abort() + end select + + allocate(m1, source=m2) + select type(m1) + type is (t2) + print *, m1%i, m1%r + if (m1%i/=42) call abort() + if (abs(m1%r+4.0)>1E-3) call abort() + class default + call abort() + end select + +end diff --git a/gcc/testsuite/gfortran.dg/complex_intrinsic_8.f90 b/gcc/testsuite/gfortran.dg/complex_intrinsic_8.f90 new file mode 100644 index 00000000000..f9529a52334 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/complex_intrinsic_8.f90 @@ -0,0 +1,50 @@ +! { dg-do link } +! { dg-require-effective-target mpc_arc } +! +! PR fortran/33197 +! +! Fortran complex trigonometric functions: acos, asin, atan, acosh, asinh, atanh +! +! Compile-time simplifications +! +implicit none +real(4), parameter :: pi = 2*acos(0.0_4) +real(8), parameter :: pi8 = 2*acos(0.0_8) +real(4), parameter :: eps = 10*epsilon(0.0_4) +real(8), parameter :: eps8 = 10*epsilon(0.0_8) +complex(4), parameter :: z0_0 = cmplx(0.0_4, 0.0_4, kind=4) +complex(4), parameter :: z1_1 = cmplx(1.0_4, 1.0_4, kind=4) +complex(8), parameter :: z80_0 = cmplx(0.0_8, 0.0_8, kind=8) +complex(8), parameter :: z81_1 = cmplx(1.0_8, 1.0_8, kind=8) + +if (abs(acos(z0_0) - cmplx(pi/2,-0.0,4)) > eps) call link_error() +if (abs(acos(z1_1) - cmplx(0.904556894, -1.06127506,4)) > eps) call link_error() +if (abs(acos(z80_0) - cmplx(pi8/2,-0.0_8,8)) > eps8) call link_error() +if (abs(acos(z81_1) - cmplx(0.90455689430238140_8, -1.0612750619050357_8,8)) > eps8) call link_error() + +if (abs(asin(z0_0) - cmplx(0.0,0.0,4)) > eps) call link_error() +if (abs(asin(z1_1) - cmplx(0.66623943, 1.06127506,4)) > eps) call link_error() +if (abs(asin(z80_0) - cmplx(0.0_8,0.0_8,8)) > eps8) call link_error() +if (abs(asin(z81_1) - cmplx(0.66623943249251527_8, 1.0612750619050357_8,8)) > eps8) call link_error() + +if (abs(atan(z0_0) - cmplx(0.0,0.0,4)) > eps) call link_error() +if (abs(atan(z1_1) - cmplx(1.01722196, 0.40235947,4)) > eps) call link_error() +if (abs(atan(z80_0) - cmplx(0.0_8,0.0_8,8)) > eps8) call link_error() +if (abs(atan(z81_1) - cmplx(1.0172219678978514_8, 0.40235947810852507_8,8)) > eps8) call link_error() + +if (abs(acosh(z0_0) - cmplx(0.0,pi/2,4)) > eps) call link_error() +if (abs(acosh(z1_1) - cmplx(1.06127506, 0.90455689,4)) > eps) call link_error() +if (abs(acosh(z80_0) - cmplx(0.0_8,pi8/2,8)) > eps8) call link_error() +if (abs(acosh(z81_1) - cmplx(1.0612750619050357_8, 0.90455689430238140_8,8)) > eps8) call link_error() + +if (abs(asinh(z0_0) - cmplx(0.0,0.0,4)) > eps) call link_error() +if (abs(asinh(z1_1) - cmplx(1.06127506, 0.66623943,4)) > eps) call link_error() +if (abs(asinh(z80_0) - cmplx(0.0_8,0.0_8,8)) > eps8) call link_error() +if (abs(asinh(z81_1) - cmplx(1.0612750619050357_8, 0.66623943249251527_8,8)) > eps8) call link_error() + +if (abs(atanh(z0_0) - cmplx(0.0,0.0,4)) > eps) call link_error() +if (abs(atanh(z1_1) - cmplx(0.40235947, 1.01722196,4)) > eps) call link_error() +if (abs(atanh(z80_0) - cmplx(0.0_8,0.0_8,8)) > eps8) call link_error() +if (abs(atanh(z81_1) - cmplx(0.40235947810852507_8, 1.0172219678978514_8,8)) > eps8) call link_error() + +end diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_4.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_4.f03 new file mode 100644 index 00000000000..b72819acc4c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_4.f03 @@ -0,0 +1,96 @@ +! { dg-do run } +! Tests the fix for PR41648 in which the reference a%a%getit () was wrongly +! identified as a recursive call to getit. +! +! Contributed by Salvatore Filippone <sfilippone@uniroma2.it> +! +module foo_mod + type foo + integer :: i + contains + procedure, pass(a) :: doit + procedure, pass(a) :: getit + end type foo + + private doit,getit +contains + subroutine doit(a) + class(foo) :: a + + a%i = 1 + end subroutine doit + function getit(a) result(res) + class(foo) :: a + integer :: res + + res = a%i + end function getit + +end module foo_mod + +module s_bar_mod + use foo_mod + type, extends(foo) :: s_bar + type(foo), allocatable :: a + contains + procedure, pass(a) :: doit + procedure, pass(a) :: getit + end type s_bar + private doit,getit + +contains + subroutine doit(a) + class(s_bar) :: a + allocate (a%a) + call a%a%doit() + end subroutine doit + function getit(a) result(res) + class(s_bar) :: a + integer :: res + + res = a%a%getit () * 2 + end function getit +end module s_bar_mod + +module a_bar_mod + use foo_mod + type, extends(foo) :: a_bar + type(foo), allocatable :: a(:) + contains + procedure, pass(a) :: doit + procedure, pass(a) :: getit + end type a_bar + private doit,getit + +contains + subroutine doit(a) + class(a_bar) :: a + allocate (a%a(1)) + call a%a(1)%doit () + end subroutine doit + function getit(a) result(res) + class(a_bar) :: a + integer :: res + + res = a%a(1)%getit () * 3 + end function getit +end module a_bar_mod + + use s_bar_mod + use a_bar_mod + type(foo), target :: b + type(s_bar), target :: c + type(a_bar), target :: d + class(foo), pointer :: a + a => b + call a%doit + if (a%getit () .ne. 1) call abort + a => c + call a%doit + if (a%getit () .ne. 2) call abort + a => d + call a%doit + if (a%getit () .ne. 3) call abort +end +! { dg-final { cleanup-modules "foo_mod s_bar_mod a_bar_mod" } } + diff --git a/gcc/testsuite/gfortran.dg/dynamic_dispatch_5.f03 b/gcc/testsuite/gfortran.dg/dynamic_dispatch_5.f03 new file mode 100644 index 00000000000..8533508bcdc --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dynamic_dispatch_5.f03 @@ -0,0 +1,185 @@ +! { dg-do compile } +! Tests the fix for PR4164656 in which the call to a%a%scal failed to compile. +! +! Contributed by Salvatore Filippone <sfilippone@uniroma2.it> +! +module const_mod + integer, parameter :: longndig=12 + integer, parameter :: long_int_k_ = selected_int_kind(longndig) + integer, parameter :: dpk_ = kind(1.d0) + integer, parameter :: spk_ = kind(1.e0) +end module const_mod + +module base_mat_mod + use const_mod + type :: base_sparse_mat + integer, private :: m, n + integer, private :: state, duplicate + logical, private :: triangle, unitd, upper, sorted + contains + procedure, pass(a) :: get_nzeros + end type base_sparse_mat + private :: get_nzeros +contains + function get_nzeros(a) result(res) + implicit none + class(base_sparse_mat), intent(in) :: a + integer :: res + integer :: err_act + character(len=20) :: name='base_get_nzeros' + logical, parameter :: debug=.false. + res = -1 + end function get_nzeros +end module base_mat_mod + +module s_base_mat_mod + use base_mat_mod + type, extends(base_sparse_mat) :: s_base_sparse_mat + contains + procedure, pass(a) :: s_scals + procedure, pass(a) :: s_scal + generic, public :: scal => s_scals, s_scal + end type s_base_sparse_mat + private :: s_scals, s_scal + + type, extends(s_base_sparse_mat) :: s_coo_sparse_mat + + integer :: nnz + integer, allocatable :: ia(:), ja(:) + real(spk_), allocatable :: val(:) + contains + procedure, pass(a) :: get_nzeros => s_coo_get_nzeros + procedure, pass(a) :: s_scals => s_coo_scals + procedure, pass(a) :: s_scal => s_coo_scal + end type s_coo_sparse_mat + private :: s_coo_scals, s_coo_scal, s_coo_get_nzeros +contains + subroutine s_scals(d,a,info) + implicit none + class(s_base_sparse_mat), intent(in) :: a + real(spk_), intent(in) :: d + integer, intent(out) :: info + + Integer :: err_act + character(len=20) :: name='s_scals' + logical, parameter :: debug=.false. + + ! This is the base version. If we get here + ! it means the derived class is incomplete, + ! so we throw an error. + info = 700 + end subroutine s_scals + + + subroutine s_scal(d,a,info) + implicit none + class(s_base_sparse_mat), intent(in) :: a + real(spk_), intent(in) :: d(:) + integer, intent(out) :: info + + Integer :: err_act + character(len=20) :: name='s_scal' + logical, parameter :: debug=.false. + + ! This is the base version. If we get here + ! it means the derived class is incomplete, + ! so we throw an error. + info = 700 + end subroutine s_scal + + function s_coo_get_nzeros(a) result(res) + implicit none + class(s_coo_sparse_mat), intent(in) :: a + integer :: res + res = a%nnz + end function s_coo_get_nzeros + + + subroutine s_coo_scal(d,a,info) + use const_mod + implicit none + class(s_coo_sparse_mat), intent(inout) :: a + real(spk_), intent(in) :: d(:) + integer, intent(out) :: info + + Integer :: err_act,mnm, i, j, m + character(len=20) :: name='scal' + logical, parameter :: debug=.false. + info = 0 + do i=1,a%get_nzeros() + j = a%ia(i) + a%val(i) = a%val(i) * d(j) + enddo + end subroutine s_coo_scal + + subroutine s_coo_scals(d,a,info) + use const_mod + implicit none + class(s_coo_sparse_mat), intent(inout) :: a + real(spk_), intent(in) :: d + integer, intent(out) :: info + + Integer :: err_act,mnm, i, j, m + character(len=20) :: name='scal' + logical, parameter :: debug=.false. + + info = 0 + do i=1,a%get_nzeros() + a%val(i) = a%val(i) * d + enddo + end subroutine s_coo_scals +end module s_base_mat_mod + +module s_mat_mod + use s_base_mat_mod + type :: s_sparse_mat + class(s_base_sparse_mat), pointer :: a + contains + procedure, pass(a) :: s_scals + procedure, pass(a) :: s_scal + generic, public :: scal => s_scals, s_scal + end type s_sparse_mat + interface scal + module procedure s_scals, s_scal + end interface +contains + subroutine s_scal(d,a,info) + use const_mod + implicit none + class(s_sparse_mat), intent(inout) :: a + real(spk_), intent(in) :: d(:) + integer, intent(out) :: info + integer :: err_act + character(len=20) :: name='csnmi' + logical, parameter :: debug=.false. + print *, "s_scal" + call a%a%scal(d,info) + return + end subroutine s_scal + + subroutine s_scals(d,a,info) + use const_mod + implicit none + class(s_sparse_mat), intent(inout) :: a + real(spk_), intent(in) :: d + integer, intent(out) :: info + integer :: err_act + character(len=20) :: name='csnmi' + logical, parameter :: debug=.false. + print *, "s_scals" + call a%a%scal(d,info) + return + end subroutine s_scals +end module s_mat_mod + + use s_mat_mod + class (s_sparse_mat), pointer :: a + type (s_sparse_mat), target :: b + type (s_base_sparse_mat), target :: c + integer info + b%a => c + a => b + call a%scal (1.0_spk_, info) +end +! { dg-final { cleanup-modules "const_mod base_mat_mod s_base_mat_mod s_mat_mod" } } + diff --git a/gcc/testsuite/gfortran.dg/equiv_8.f90 b/gcc/testsuite/gfortran.dg/equiv_8.f90 new file mode 100644 index 00000000000..a2ed7f0349e --- /dev/null +++ b/gcc/testsuite/gfortran.dg/equiv_8.f90 @@ -0,0 +1,7 @@ +! { dg-do compile } +! +! PR fortran/41755 +! + common /uno/ aa + equivalence (aa,aaaaa) (bb,cc) ! { dg-error "Expecting a comma in EQUIVALENCE" } + end diff --git a/gcc/testsuite/gfortran.dg/fmt_error_9.f b/gcc/testsuite/gfortran.dg/fmt_error_9.f index 0f2b63b6d32..d8abb851210 100644 --- a/gcc/testsuite/gfortran.dg/fmt_error_9.f +++ b/gcc/testsuite/gfortran.dg/fmt_error_9.f @@ -22,4 +22,8 @@ write (line,'(1pd24.15e11.3)') 1.0d0, 1.234 if (line.ne." 1.000000000000000D+00 1.234E+00") call abort + str = '(1p2d24.15)' + msg = " 1.000000000000000D+00 1.233999967575073D+00That's it!" + write (line,'(1p2d24.15a)') 1.0d0, 1.234, "That's it!" + if (line.ne.msg) print *, msg end diff --git a/gcc/testsuite/gfortran.dg/goto_8.f90 b/gcc/testsuite/gfortran.dg/goto_8.f90 new file mode 100644 index 00000000000..a5f1f7f07b9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goto_8.f90 @@ -0,0 +1,31 @@ +! { dg-do compile } +! +! PR 41781: [OOP] bogus undefined label error with SELECT TYPE. +! +! Contributed by Salvatore Filippone <sfilippone@uniroma2.it> +! and Tobias Burnus >burnus@gcc.gnu.org> + +! 1st example: jumping out of SELECT TYPE (valid) +type bar + integer :: i +end type bar +class(bar), pointer :: var +select type(var) +class default + goto 9999 +end select +9999 continue + +! 2nd example: jumping out of BLOCK (valid) +block + goto 88 +end block +88 continue + +! 3rd example: jumping into BLOCK (invalid) +goto 99 ! { dg-error "is not in the same block" } +block + 99 continue ! { dg-error "is not in the same block" } +end block + +end diff --git a/gcc/testsuite/gfortran.dg/lto/20091015-1_0.f b/gcc/testsuite/gfortran.dg/lto/20091015-1_0.f new file mode 100644 index 00000000000..f47e1a4ac6c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/20091015-1_0.f @@ -0,0 +1,8 @@ +! { dg-lto-do link } +! We expect some warnings about mismatched symbol types +! { dg-extra-ld-options "-w" } + + subroutine dalie6s(iqmod6,nz,wx,cor6d) + common/dascr/iscrda(100),rscrri(100),iscrri(100),idao + call daall(iscrda,100,'$$IS ',no,nv) + end diff --git a/gcc/testsuite/gfortran.dg/lto/20091015-1_1.f b/gcc/testsuite/gfortran.dg/lto/20091015-1_1.f new file mode 100644 index 00000000000..7a64ffa6786 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/20091015-1_1.f @@ -0,0 +1,4 @@ + SUBROUTINE DAALL(IC,L,CCC,NO,NV) + COMMON /main1/ eps + END + diff --git a/gcc/testsuite/gfortran.dg/lto/20091015-1_2.f b/gcc/testsuite/gfortran.dg/lto/20091015-1_2.f new file mode 100644 index 00000000000..5bfd02227fa --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/20091015-1_2.f @@ -0,0 +1,5 @@ + program test + common/main1/ eps(2) + dimension cor6d(2,2) + call dalie6s(iqmod6,1,wx,cor6d) + end diff --git a/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 b/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 new file mode 100644 index 00000000000..c26ad90fbe2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/20091016-1_0.f90 @@ -0,0 +1,12 @@ +! { dg-lto-do link } +! { dg-lto-options {{-flto -g -fPIC -shared} {-O -flto -g -fPIC -shared}} } + + FUNCTION makenumberstring(x) + IMPLICIT NONE + REAL, INTENT(IN) :: x + CHARACTER(len=20) :: makenumberstring + INTEGER :: xx + xx = x**2 ! << ICE + makenumberstring = '' + END FUNCTION + diff --git a/gcc/testsuite/gfortran.dg/lto/pr41521_0.f90 b/gcc/testsuite/gfortran.dg/lto/pr41521_0.f90 new file mode 100644 index 00000000000..d882779263d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/pr41521_0.f90 @@ -0,0 +1,9 @@ +! { dg-lto-do link } +! { dg-lto-options {{-g -flto} {-g -O -flto}} } +program species +integer spk(2) +real eval(2) +spk = 2 +call atom(1.1,spk,eval) +end program + diff --git a/gcc/testsuite/gfortran.dg/lto/pr41521_1.f90 b/gcc/testsuite/gfortran.dg/lto/pr41521_1.f90 new file mode 100644 index 00000000000..897e7aded0a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/lto/pr41521_1.f90 @@ -0,0 +1,9 @@ +subroutine atom(sol,k,eval) +real, intent(in) :: sol +integer, intent(in) :: k(2) +real, intent(out) :: eval(2) +real t1 + t1=sqrt(dble(k(1)**2)-(sol)**2) + eval(1)=sol**2/sqrt(t1)-sol**2 +end subroutine + diff --git a/gcc/testsuite/gfortran.dg/select_type_7.f03 b/gcc/testsuite/gfortran.dg/select_type_7.f03 new file mode 100644 index 00000000000..554b6cd122d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/select_type_7.f03 @@ -0,0 +1,40 @@ +! { dg-do run } +! +! PR 41766: [OOP] SELECT TYPE selector as actual argument with INTENT(INOUT) +! +! Contributed by Janus Weil <janus@gcc.gnu.org> + + implicit none + + type t1 + integer :: a + end type + + type, extends(t1) :: t2 + integer :: b + end type + + class(t1),allocatable :: cp + + allocate(t2 :: cp) + + select type (cp) + type is (t2) + cp%a = 98 + cp%b = 76 + call s(cp) + print *,cp%a,cp%b + if (cp%a /= cp%b) call abort() + class default + call abort() + end select + +contains + + subroutine s(f) + type(t2), intent(inout) :: f + f%a = 3 + f%b = 3 + end subroutine + +end diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_2.f03 b/gcc/testsuite/gfortran.dg/typebound_operator_2.f03 index 57b34486313..b8dc5c9d104 100644 --- a/gcc/testsuite/gfortran.dg/typebound_operator_2.f03 +++ b/gcc/testsuite/gfortran.dg/typebound_operator_2.f03 @@ -50,7 +50,6 @@ CONTAINS LOGICAL FUNCTION func (me, b) ! { dg-error "must be a SUBROUTINE" } CLASS(t), INTENT(OUT) :: me CLASS(t), INTENT(IN) :: b - me = t () func = .TRUE. END FUNCTION func diff --git a/gcc/testsuite/gfortran.dg/typebound_operator_4.f03 b/gcc/testsuite/gfortran.dg/typebound_operator_4.f03 index 1ce2b97a0d7..835ceb63ff0 100644 --- a/gcc/testsuite/gfortran.dg/typebound_operator_4.f03 +++ b/gcc/testsuite/gfortran.dg/typebound_operator_4.f03 @@ -37,7 +37,7 @@ CONTAINS PURE SUBROUTINE assign_int (dest, from) CLASS(myint), INTENT(OUT) :: dest INTEGER, INTENT(IN) :: from - dest = myint (from) + dest%value = from END SUBROUTINE assign_int TYPE(myreal) FUNCTION add_real (a, b) @@ -49,7 +49,7 @@ CONTAINS SUBROUTINE assign_real (dest, from) CLASS(myreal), INTENT(OUT) :: dest REAL, INTENT(IN) :: from - dest = myreal (from) + dest%value = from END SUBROUTINE assign_real SUBROUTINE in_module () diff --git a/gcc/testsuite/gfortran.dg/vect/fast-math-pr38968.f90 b/gcc/testsuite/gfortran.dg/vect/fast-math-pr38968.f90 index abb3c5f10df..3b8ac9defc3 100644 --- a/gcc/testsuite/gfortran.dg/vect/fast-math-pr38968.f90 +++ b/gcc/testsuite/gfortran.dg/vect/fast-math-pr38968.f90 @@ -1,3 +1,4 @@ +! { dg-timeout-factor 4.0 } program mymatmul implicit none integer, parameter :: kp = 4 diff --git a/gcc/testsuite/gfortran.dg/whole_file_5.f90 b/gcc/testsuite/gfortran.dg/whole_file_5.f90 index 07ba4411c4c..c6ad9e1b448 100644 --- a/gcc/testsuite/gfortran.dg/whole_file_5.f90 +++ b/gcc/testsuite/gfortran.dg/whole_file_5.f90 @@ -1,6 +1,6 @@ ! { dg-do "compile" } ! { dg-options "-O3 -fwhole-file -fdump-tree-optimized" } -! { dg-options "-O3 -fwhole-file -fdump-tree-optimized -fpie" { target { ! nonpic } } } +! { dg-add-options bind_pic_locally } ! ! Check that inlining of functions declared BEFORE usage works. ! If yes, then the dump does not contain a call to F(). diff --git a/gcc/testsuite/gfortran.dg/whole_file_6.f90 b/gcc/testsuite/gfortran.dg/whole_file_6.f90 index f903c7aefc5..274b8a99c6c 100644 --- a/gcc/testsuite/gfortran.dg/whole_file_6.f90 +++ b/gcc/testsuite/gfortran.dg/whole_file_6.f90 @@ -1,6 +1,6 @@ ! { dg-do "compile" } ! { dg-options "-O3 -fwhole-file -fdump-tree-optimized" } -! { dg-options "-O3 -fwhole-file -fdump-tree-optimized -fpie" { target { ! nonpic } } } +! { dg-add-options bind_pic_locally } ! ! Check that inlining of functions declared AFTER usage works. ! If yes, then the dump does not contain a call to F(). diff --git a/gcc/testsuite/gnat.dg/aggr11.adb b/gcc/testsuite/gnat.dg/aggr11.adb new file mode 100644 index 00000000000..1771d62cacb --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr11.adb @@ -0,0 +1,17 @@ +-- { dg-do compile }
+-- { dg-options "-O" }
+
+with Aggr11_Pkg; use Aggr11_Pkg;
+
+procedure Aggr11 is
+
+ A : Arr := ((1 => (Kind => No_Error, B => True),
+ 2 => (Kind => Error),
+ 3 => (Kind => Error),
+ 4 => (Kind => No_Error, B => True),
+ 5 => (Kind => No_Error, B => True),
+ 6 => (Kind => No_Error, B => True)));
+
+begin
+ null;
+end;
diff --git a/gcc/testsuite/gnat.dg/aggr11_pkg.ads b/gcc/testsuite/gnat.dg/aggr11_pkg.ads new file mode 100644 index 00000000000..37008605a30 --- /dev/null +++ b/gcc/testsuite/gnat.dg/aggr11_pkg.ads @@ -0,0 +1,14 @@ +package Aggr11_Pkg is
+
+ type Error_Type is (No_Error, Error);
+
+ type Rec (Kind : Error_Type := No_Error) is record
+ case Kind is
+ when Error => null;
+ when others => B : Boolean;
+ end case;
+ end record;
+
+ type Arr is array (1..6) of Rec;
+
+end Aggr11_Pkg;
diff --git a/gcc/testsuite/gnat.dg/discr21.adb b/gcc/testsuite/gnat.dg/discr21.adb new file mode 100644 index 00000000000..5c105cdb25c --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr21.adb @@ -0,0 +1,34 @@ +-- { dg-do compile } +-- { dg-options "-gnatws -O3" } + +with Discr21_Pkg; use Discr21_Pkg; + +package body Discr21 is + + type Index is new Natural range 0 .. 100; + + type Arr is array (Index range <> ) of Position; + + type Rec(Size : Index := 1) is record + A : Arr(1 .. Size); + end record; + + Data : Rec; + + function To_V(pos : Position) return VPosition is + begin + return To_Position(pos.x, pos.y, pos.z); + end; + + procedure Read(Data : Rec) is + pos : VPosition := To_V (Data.A(1)); + begin + null; + end; + + procedure Test is + begin + Read (Data); + end; + +end Discr21; diff --git a/gcc/testsuite/gnat.dg/discr21.ads b/gcc/testsuite/gnat.dg/discr21.ads new file mode 100644 index 00000000000..8de8ed08b76 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr21.ads @@ -0,0 +1,5 @@ +package Discr21 is + + procedure Test; + +end Discr21; diff --git a/gcc/testsuite/gnat.dg/discr21_pkg.ads b/gcc/testsuite/gnat.dg/discr21_pkg.ads new file mode 100644 index 00000000000..d156df62517 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr21_pkg.ads @@ -0,0 +1,19 @@ +package Discr21_Pkg is + + type Position is record + x,y,z : Float; + end record; + + type Dim is (Two, Three); + + type VPosition (D: Dim := Three) is record + x, y : Float; + case D is + when Two => null; + when Three => z : Float; + end case; + end record; + + function To_Position (x, y, z : Float) return VPosition; + +end Discr21_Pkg; diff --git a/gcc/testsuite/gnat.dg/discr22.adb b/gcc/testsuite/gnat.dg/discr22.adb new file mode 100644 index 00000000000..af4f9ab7899 --- /dev/null +++ b/gcc/testsuite/gnat.dg/discr22.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } +-- { dg-options "-gnatws" } + +procedure Discr22 is + + subtype Precision is Integer range 1 .. 5; + + type Rec(D1 : Precision; D2 : Integer) is record + case D1 is + when 1 => I : Integer; + when others => null; + end case; + end record; + for Rec use record + D1 at 0 range 0 .. 7; + end record; + + P : Precision; + X : Rec(P, 0); + +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/loop_optimization7.adb b/gcc/testsuite/gnat.dg/loop_optimization7.adb new file mode 100644 index 00000000000..16683949465 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization7.adb @@ -0,0 +1,16 @@ +-- { dg-do compile } +-- { dg-options "-O3" } +-- { dg-options "-O3 -msse" { target i?86-*-* x86_64-*-* } } + +package body Loop_Optimization7 is + + function Conv (A : Arr) return Arr is + Result : Arr; + begin + for I in A'Range loop + Result (I) := Conv (A (I)); + end loop; + return Result; + end; + +end Loop_Optimization7; diff --git a/gcc/testsuite/gnat.dg/loop_optimization7.ads b/gcc/testsuite/gnat.dg/loop_optimization7.ads new file mode 100644 index 00000000000..ab0a165ea90 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization7.ads @@ -0,0 +1,9 @@ +with Loop_Optimization7_Pkg; use Loop_Optimization7_Pkg; + +package Loop_Optimization7 is + + type Arr is array (1..8) of Rec; + + function Conv (A : Arr) return Arr; + +end Loop_Optimization7; diff --git a/gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads b/gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads new file mode 100644 index 00000000000..0eaefa1b0f3 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization7_pkg.ads @@ -0,0 +1,10 @@ +package Loop_Optimization7_Pkg is + pragma Pure; + + type Rec is record + F : Float; + end record; + + function Conv (Trig : Rec) return Rec; + +end Loop_Optimization7_Pkg; diff --git a/gcc/testsuite/gnat.dg/nested_proc.adb b/gcc/testsuite/gnat.dg/nested_proc1.adb index 144533c2832..b3abf262578 100644 --- a/gcc/testsuite/gnat.dg/nested_proc.adb +++ b/gcc/testsuite/gnat.dg/nested_proc1.adb @@ -2,7 +2,7 @@ -- Test that a static link is correctly passed to a subprogram which is -- indirectly called through an aggregate. -procedure Nested_Proc is +procedure Nested_Proc1 is I : Integer := 0; diff --git a/gcc/testsuite/gnat.dg/nested_proc2.adb b/gcc/testsuite/gnat.dg/nested_proc2.adb new file mode 100644 index 00000000000..b5349563a99 --- /dev/null +++ b/gcc/testsuite/gnat.dg/nested_proc2.adb @@ -0,0 +1,30 @@ +-- { dg-do compile } +-- { dg-options "-gnatws" } + +procedure Nested_Proc2 is + + type Arr is array(1..2) of Integer; + + type Rec is record + Data : Arr; + end record; + + From : Rec; + Index : Integer; + + function F (X : Arr) return Integer is + begin + return 0; + end; + + procedure Test is + begin + Index := F (From.Data); + If Index /= 0 then + raise Program_Error; + end if; + end; + +begin + Test; +end; diff --git a/gcc/testsuite/gnat.dg/noreturn1.adb b/gcc/testsuite/gnat.dg/noreturn1.adb new file mode 100644 index 00000000000..83eafe7f364 --- /dev/null +++ b/gcc/testsuite/gnat.dg/noreturn1.adb @@ -0,0 +1,15 @@ +-- { dg-compile } + +package body Noreturn1 is + + procedure Error (E : in Exception_Occurrence) is + Occurrence_Message : constant String := Exception_Message (E); + begin + if Occurrence_Message = "$" then + raise Program_Error; + else + raise Constraint_Error; + end if; + end; + +end Noreturn1; diff --git a/gcc/testsuite/gnat.dg/noreturn1.ads b/gcc/testsuite/gnat.dg/noreturn1.ads new file mode 100644 index 00000000000..c63e4399907 --- /dev/null +++ b/gcc/testsuite/gnat.dg/noreturn1.ads @@ -0,0 +1,8 @@ +with Ada.Exceptions; use Ada.Exceptions; + +package Noreturn1 is + + procedure Error (E : in Exception_Occurrence); + pragma No_Return (Error); + +end Noreturn1; diff --git a/gcc/testsuite/gnat.dg/noreturn2.adb b/gcc/testsuite/gnat.dg/noreturn2.adb new file mode 100644 index 00000000000..5caf222f29b --- /dev/null +++ b/gcc/testsuite/gnat.dg/noreturn2.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } + +package body Noreturn2 is + + procedure Raise_Exception_No_Defer (Message : String); + pragma No_Return (Raise_Exception_No_Defer); + + procedure Raise_From (X : Exception_Occurrence) is + Occurrence_Message : constant String := Exception_Message (X); + begin + if Occurrence_Message = "$" then + Raise_Exception_No_Defer (Occurrence_Message); + else + Raise_Exception_No_Defer ("::" & Occurrence_Message); + end if; + end; + + procedure Raise_Exception_No_Defer (Message : String) is + begin + raise Program_Error; + end; + +end Noreturn2; diff --git a/gcc/testsuite/gnat.dg/noreturn2.ads b/gcc/testsuite/gnat.dg/noreturn2.ads new file mode 100644 index 00000000000..1aaf4e97446 --- /dev/null +++ b/gcc/testsuite/gnat.dg/noreturn2.ads @@ -0,0 +1,8 @@ +with Ada.Exceptions; use Ada.Exceptions; + +package Noreturn2 is + + procedure Raise_From (X : Exception_Occurrence); + pragma No_Return (Raise_From); + +end Noreturn2; diff --git a/gcc/testsuite/gnat.dg/slice8.adb b/gcc/testsuite/gnat.dg/slice8.adb new file mode 100644 index 00000000000..b05829d0f7b --- /dev/null +++ b/gcc/testsuite/gnat.dg/slice8.adb @@ -0,0 +1,13 @@ +-- { dg-do compile } +-- { dg-options "-gnatws" } + +with Slice8_Pkg1; +with Slice8_Pkg3; + +procedure Slice8 is + + package Bp is new Slice8_Pkg3 (Slice8_Pkg1); + +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/slice8_pkg1.ads b/gcc/testsuite/gnat.dg/slice8_pkg1.ads new file mode 100644 index 00000000000..3f433fdfb26 --- /dev/null +++ b/gcc/testsuite/gnat.dg/slice8_pkg1.ads @@ -0,0 +1,3 @@ +with Slice8_Pkg2; + +package Slice8_Pkg1 is new Slice8_Pkg2 (Line_Length => 132, Max_Lines => 1000); diff --git a/gcc/testsuite/gnat.dg/slice8_pkg2.ads b/gcc/testsuite/gnat.dg/slice8_pkg2.ads new file mode 100644 index 00000000000..a6eafc6aa18 --- /dev/null +++ b/gcc/testsuite/gnat.dg/slice8_pkg2.ads @@ -0,0 +1,23 @@ +generic + + Line_Length : Natural; + Max_Lines : Natural; + +package Slice8_Pkg2 is + + Subtype Index is Natural Range 0..Line_length; + Subtype Line_Count is Natural Range 0..Max_Lines; + + Type Line (Size : Index := 0) is + Record + Data : String (1..Size); + End Record; + + Type Lines is Array (Line_Count Range <>) of Line; + + Type Paragraph (Size : Line_Count) is + Record + Data : Lines (1..Size); + End Record; + +end Slice8_Pkg2; diff --git a/gcc/testsuite/gnat.dg/slice8_pkg3.adb b/gcc/testsuite/gnat.dg/slice8_pkg3.adb new file mode 100644 index 00000000000..3524de1f0f5 --- /dev/null +++ b/gcc/testsuite/gnat.dg/slice8_pkg3.adb @@ -0,0 +1,17 @@ +-- { dg-do compile } +-- { dg-options "-gnatws" } + +package body Slice8_Pkg3 is + + Current : Str.Lines (Str.Line_Count); + Last : Natural := 0; + + function Get return Str.Paragraph is + Result : constant Str.Paragraph := (Size => Last, + Data => Current (1..Last)); + begin + Last := 0; + return Result; + end Get; + +end Slice8_Pkg3; diff --git a/gcc/testsuite/gnat.dg/slice8_pkg3.ads b/gcc/testsuite/gnat.dg/slice8_pkg3.ads new file mode 100644 index 00000000000..a802cb72d9b --- /dev/null +++ b/gcc/testsuite/gnat.dg/slice8_pkg3.ads @@ -0,0 +1,11 @@ +with Slice8_Pkg2; + +generic + + with package Str is new Slice8_Pkg2 (<>); + +package Slice8_Pkg3 is + + function Get return Str.Paragraph; + +end Slice8_Pkg3; diff --git a/gcc/testsuite/gnat.dg/unchecked_convert4.adb b/gcc/testsuite/gnat.dg/unchecked_convert4.adb new file mode 100644 index 00000000000..8f3a1aa4efe --- /dev/null +++ b/gcc/testsuite/gnat.dg/unchecked_convert4.adb @@ -0,0 +1,24 @@ +-- { dg-do compile } + +with Unchecked_Conversion; + +procedure Unchecked_Convert4 is + + type Uint32 is mod 2**32; + + type Rec is record + I : Uint32; + end record; + for Rec'Size use 32; + pragma Atomic (Rec); + + function Conv is new Unchecked_Conversion (Uint32, Rec); + + function F return Uint32; + pragma Import (Ada, F); + + procedure Proc (R : Rec) is begin null; end; + +begin + Proc (Conv (F or 1)); +end; diff --git a/gcc/testsuite/lib/lto.exp b/gcc/testsuite/lib/lto.exp index 7f2d7ecec83..cccd64220bc 100644 --- a/gcc/testsuite/lib/lto.exp +++ b/gcc/testsuite/lib/lto.exp @@ -191,6 +191,16 @@ proc lto-get-options-main { src } { || ![string compare "dg-options" $cmd] } { warning "lto.exp does not support $cmd in primary source file" } elseif { ![string compare "dg-lto-do" $cmd] } { + if { [llength $op] > 3 } { + set kw [lindex [lindex $op 3] 0] + if [string match "target" $kw] { + perror "$src: dg-lto-do does not support \"target\"" + } elseif [string match "xfail" $kw] { + perror "$src: dg-lto-do does not support \"xfail\"" + } else { + perror "$src: dg-lto-do takes a single argument" + } + } set dgdo [lindex $op 2] verbose "dg-lto-do command for \"$op\" is $dgdo" if { ![string compare "assemble" $dgdo] } { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 26ef7b7038e..f8e83ec0988 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2984,6 +2984,28 @@ proc add_options_for_ieee { flags } { return $flags } +# Add to FLAGS the flags needed to enable functions to bind locally +# when using pic/PIC passes in the testsuite. + +proc add_options_for_bind_pic_locally { flags } { + if {[check_no_compiler_messages using_pic2 assembly { + #if __PIC__ != 2 + #error FOO + #endif + }]} { + return "$flags -fPIE" + } + if {[check_no_compiler_messages using_pic1 assembly { + #if __PIC__ != 1 + #error FOO + #endif + }]} { + return "$flags -fpie" + } + + return $flags +} + # Return 1 if the target provides a full C99 runtime. proc check_effective_target_c99_runtime { } { @@ -3127,6 +3149,29 @@ proc check_effective_target_mpc_pow { } { }] } +# Return 1 if the MPC library with "arc" functions is integrated with GCC, 0 otherwise. + +proc check_effective_target_mpc_arc { } { + return [check_no_compiler_messages mpc_arc executable { + extern void link_error(void); + int main () + { + if (__builtin_cacos(1) != 0) + link_error(); + if (__builtin_casin(0) != 0) + link_error(); + if (__builtin_catan(0) != 0) + link_error(); + if (__builtin_cacosh(1) != 0) + link_error(); + if (__builtin_casinh(0) != 0) + link_error(); + if (__builtin_catanh(0) != 0) + link_error(); + } + }] +} + # Return 1 if the language for the compiler under test is C. proc check_effective_target_c { } { diff --git a/gcc/testsuite/obj-c++.dg/bitfield-1.mm b/gcc/testsuite/obj-c++.dg/bitfield-1.mm index d9b65a4f453..f17d9f0baca 100644 --- a/gcc/testsuite/obj-c++.dg/bitfield-1.mm +++ b/gcc/testsuite/obj-c++.dg/bitfield-1.mm @@ -115,7 +115,7 @@ int main(void) } /* { dg-prune-output "In file included from" } Ignore this message. */ -/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 1 } */ +/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */ /* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 42 } */ /* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 45 } */ /* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 59 } */ diff --git a/gcc/testsuite/obj-c++.dg/bitfield-4.mm b/gcc/testsuite/obj-c++.dg/bitfield-4.mm index 72c1396d706..a2c2173085a 100644 --- a/gcc/testsuite/obj-c++.dg/bitfield-4.mm +++ b/gcc/testsuite/obj-c++.dg/bitfield-4.mm @@ -50,7 +50,7 @@ int main(void) } /* { dg-prune-output "In file included from" } Ignore this message. */ -/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 1 } */ +/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */ /* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 28 } */ /* { dg-bogus "padding struct size" "PR23610" { xfail lp64 } 34 } */ diff --git a/gcc/testsuite/obj-c++.dg/layout-1.mm b/gcc/testsuite/obj-c++.dg/layout-1.mm index 35ffa49da3b..bc99e758f8c 100644 --- a/gcc/testsuite/obj-c++.dg/layout-1.mm +++ b/gcc/testsuite/obj-c++.dg/layout-1.mm @@ -14,4 +14,4 @@ @end /* { dg-prune-output "In output included from" } Ignore this message. */ -/* { dg-bogus "padding struct to align" "PR23610" { xfail lp64 } 1 } */ +/* { dg-bogus "padding struct to align" "PR23610" { target *-*-* } 0 } */ diff --git a/gcc/toplev.h b/gcc/toplev.h index cca68675f87..88ab7e8ecf0 100644 --- a/gcc/toplev.h +++ b/gcc/toplev.h @@ -142,6 +142,7 @@ extern int flag_unroll_all_loops; extern int flag_unswitch_loops; extern int flag_cprop_registers; extern int time_report; +extern int flag_ira_loop_pressure; extern int flag_ira_coalesce; extern int flag_ira_move_spills; extern int flag_ira_share_save_slots; diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 1c820a3e3c5..4a34cefd2a4 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -4850,6 +4850,31 @@ gimple_duplicate_bb (basic_block bb) return new_bb; } +/* Add phi arguments to the phi nodes in E_COPY->dest according to + the phi arguments coming from the equivalent edge at + the phi nodes of DEST. */ + +static void +add_phi_args_after_redirect (edge e_copy, edge orig_e) +{ + gimple_stmt_iterator psi, psi_copy; + gimple phi, phi_copy; + tree def; + + for (psi = gsi_start_phis (orig_e->dest), + psi_copy = gsi_start_phis (e_copy->dest); + !gsi_end_p (psi); + gsi_next (&psi), gsi_next (&psi_copy)) + { + + phi = gsi_stmt (psi); + phi_copy = gsi_stmt (psi_copy); + def = PHI_ARG_DEF_FROM_EDGE (phi, orig_e); + add_phi_arg (phi_copy, def, e_copy, + gimple_phi_arg_location_from_edge (phi, orig_e)); + } +} + /* Adds phi node arguments for edge E_COPY after basic block duplication. */ static void @@ -5131,9 +5156,14 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, edge exit ATTRIBUTE_UNU int total_freq = 0, exit_freq = 0; gcov_type total_count = 0, exit_count = 0; edge exits[2], nexits[2], e; - gimple_stmt_iterator gsi; + gimple_stmt_iterator gsi,gsi1; gimple cond_stmt; - edge sorig, snew; + edge sorig, snew, orig_e; + basic_block exit_bb; + edge_iterator ei; + VEC (edge, heap) *redirect_edges; + basic_block iters_bb, orig_src; + tree new_rhs; gcc_assert (EDGE_COUNT (exit->src->succs) == 2); exits[0] = exit; @@ -5149,17 +5179,13 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, edge exit ATTRIBUTE_UNU it will work, but the resulting code will not be correct. */ for (i = 0; i < n_region; i++) { - /* We do not handle subloops, i.e. all the blocks must belong to the - same loop. */ - if (region[i]->loop_father != orig_loop) - return false; - if (region[i] == orig_loop->latch) return false; } initialize_original_copy_tables (); set_loop_copy (orig_loop, loop); + duplicate_subloops (orig_loop, loop); if (!region_copy) { @@ -5225,8 +5251,36 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, edge exit ATTRIBUTE_UNU cond_stmt = last_stmt (exit->src); gcc_assert (gimple_code (cond_stmt) == GIMPLE_COND); cond_stmt = gimple_copy (cond_stmt); + + /* If the block consisting of the exit condition has the latch as + successor, then the body of the loop is executed before + the exit condition is tested. In such case, moving the + condition to the entry, causes that the loop will iterate + one less iteration (which is the wanted outcome, since we + peel out the last iteration). If the body is executed after + the condition, moving the condition to the entry requires + decrementing one iteration. */ + if (exits[1]->dest == orig_loop->latch) + new_rhs = gimple_cond_rhs (cond_stmt); + else + { + new_rhs = fold_build2 (MINUS_EXPR, TREE_TYPE (gimple_cond_rhs (cond_stmt)), + gimple_cond_rhs (cond_stmt), + build_int_cst (TREE_TYPE (gimple_cond_rhs (cond_stmt)), 1)); + + if (TREE_CODE (gimple_cond_rhs (cond_stmt)) == SSA_NAME) + { + iters_bb = gimple_bb (SSA_NAME_DEF_STMT (gimple_cond_rhs (cond_stmt))); + for (gsi1 = gsi_start_bb (iters_bb); !gsi_end_p (gsi1); gsi_next (&gsi1)) + if (gsi_stmt (gsi1) == SSA_NAME_DEF_STMT (gimple_cond_rhs (cond_stmt))) + break; + + new_rhs = force_gimple_operand_gsi (&gsi1, new_rhs, true, + NULL_TREE,false,GSI_CONTINUE_LINKING); + } + } + gimple_cond_set_rhs (cond_stmt, unshare_expr (new_rhs)); gimple_cond_set_lhs (cond_stmt, unshare_expr (gimple_cond_lhs (cond_stmt))); - gimple_cond_set_rhs (cond_stmt, unshare_expr (gimple_cond_rhs (cond_stmt))); gsi_insert_after (&gsi, cond_stmt, GSI_NEW_STMT); sorig = single_succ_edge (switch_bb); @@ -5238,13 +5292,74 @@ gimple_duplicate_sese_tail (edge entry ATTRIBUTE_UNUSED, edge exit ATTRIBUTE_UNU /* Add the PHI node arguments. */ add_phi_args_after_copy (region_copy, n_region, snew); - + /* Get rid of now superfluous conditions and associated edges (and phi node arguments). */ + exit_bb = exit->dest; + e = redirect_edge_and_branch (exits[0], exits[1]->dest); PENDING_STMT (e) = NULL; - e = redirect_edge_and_branch (nexits[1], nexits[0]->dest); - PENDING_STMT (e) = NULL; + + /* If the block consisting of the exit condition has the latch as + successor, then the body of the loop is executed before + the exit condition is tested. + + { body } + { cond } (exit[0]) -> { latch } + | + V (exit[1]) + + { exit_bb } + + + In such case, the equivalent copied edge nexits[1] + (for the peeled iteration) needs to be redirected to exit_bb. + + Otherwise, + + { cond } (exit[0]) -> { body } + | + V (exit[1]) + + { exit_bb } + + + exit[0] is pointing to the body of the loop, + and the equivalent nexits[0] needs to be redirected to + the copied body (of the peeled iteration). */ + + if (exits[1]->dest == orig_loop->latch) + e = redirect_edge_and_branch (nexits[1], nexits[0]->dest); + else + e = redirect_edge_and_branch (nexits[0], nexits[1]->dest); + PENDING_STMT (e) = NULL; + + redirect_edges = VEC_alloc (edge, heap, 10); + + for (i = 0; i < n_region; i++) + region_copy[i]->flags |= BB_DUPLICATED; + + /* Iterate all incoming edges to latch. All those coming from + copied bbs will be redirected to exit_bb. */ + FOR_EACH_EDGE (e, ei, orig_loop->latch->preds) + { + if (e->src->flags & BB_DUPLICATED) + VEC_safe_push (edge, heap, redirect_edges, e); + } + + for (i = 0; i < n_region; i++) + region_copy[i]->flags &= ~BB_DUPLICATED; + + for (i = 0; VEC_iterate (edge, redirect_edges, i, e); ++i) + { + e = redirect_edge_and_branch (e, exit_bb); + PENDING_STMT (e) = NULL; + orig_src = get_bb_original (e->src); + orig_e = find_edge (orig_src, orig_loop->latch); + add_phi_args_after_redirect (e, orig_e); + } + + VEC_free (edge, heap, redirect_edges); /* Anything that is outside of the region, but was dominated by something inside needs to update dominance info. */ diff --git a/gcc/tree-chrec.h b/gcc/tree-chrec.h index f21aa74d795..545db38a730 100644 --- a/gcc/tree-chrec.h +++ b/gcc/tree-chrec.h @@ -115,6 +115,7 @@ no_evolution_in_loop_p (tree chrec, unsigned loop_num, bool *res) || chrec_contains_symbols_defined_in_loop (chrec, loop_num)) return false; + STRIP_NOPS (chrec); scev = hide_evolution_in_other_loops_than_loop (chrec, loop_num); *res = !tree_is_chrec (scev); return true; diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c index 61ccc6ce792..7b7a85f5082 100644 --- a/gcc/tree-dump.c +++ b/gcc/tree-dump.c @@ -511,6 +511,10 @@ dequeue_and_dump (dump_info_p di) dump_child ("cnst", DECL_INITIAL (t)); break; + case DEBUG_EXPR_DECL: + dump_int (di, "-uid", DEBUG_TEMP_UID (t)); + /* Fall through. */ + case VAR_DECL: case PARM_DECL: case FIELD_DECL: diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index e782738b6d2..56b1b941683 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -1192,12 +1192,11 @@ lower_try_finally_copy (struct leh_state *state, struct leh_tf_state *tf) if (tf->may_throw) { - emit_post_landing_pad (&eh_seq, tf->region); - seq = lower_try_finally_dup_block (finally, state); lower_eh_constructs_1 (state, seq); - gimple_seq_add_seq (&eh_seq, seq); + emit_post_landing_pad (&eh_seq, tf->region); + gimple_seq_add_seq (&eh_seq, seq); emit_resx (&eh_seq, tf->region); } @@ -3381,12 +3380,31 @@ unsplit_eh (eh_landing_pad lp) if (find_edge (e_in->src, e_out->dest)) return false; - /* ??? I can't imagine there would be PHI nodes, since by nature - of critical edge splitting this block should never have been - a dominance frontier. If cfg cleanups somehow confuse this, - due to single edges in and out we ought to have degenerate PHIs - and can easily propagate the PHI arguments. */ - gcc_assert (gimple_seq_empty_p (phi_nodes (bb))); + /* ??? We can get degenerate phis due to cfg cleanups. I would have + thought this should have been cleaned up by a phicprop pass, but + that doesn't appear to handle virtuals. Propagate by hand. */ + if (!gimple_seq_empty_p (phi_nodes (bb))) + { + for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); ) + { + gimple use_stmt, phi = gsi_stmt (gsi); + tree lhs = gimple_phi_result (phi); + tree rhs = gimple_phi_arg_def (phi, 0); + use_operand_p use_p; + imm_use_iterator iter; + + FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs) + { + FOR_EACH_IMM_USE_ON_STMT (use_p, iter) + SET_USE (use_p, rhs); + } + + if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs)) + SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs) = 1; + + remove_phi_node (&gsi, true); + } + } if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Unsplit EH landing pad %d to block %i.\n", @@ -3431,7 +3449,7 @@ unsplit_all_eh (void) static bool cleanup_empty_eh_merge_phis (basic_block new_bb, basic_block old_bb, - edge old_bb_out) + edge old_bb_out, bool change_region) { gimple_stmt_iterator ngsi, ogsi; edge_iterator ei; @@ -3531,7 +3549,7 @@ cleanup_empty_eh_merge_phis (basic_block new_bb, basic_block old_bb, for (ei = ei_start (old_bb->preds); (e = ei_safe_edge (ei)); ) if (e->flags & EDGE_EH) { - redirect_eh_edge_1 (e, new_bb, true); + redirect_eh_edge_1 (e, new_bb, change_region); redirect_edge_succ (e, new_bb); flush_pending_stmts (e); } @@ -3583,10 +3601,9 @@ cleanup_empty_eh_move_lp (basic_block bb, edge e_out, multiple incoming edges and phis are involved. */ static bool -cleanup_empty_eh_unsplit (basic_block bb, edge e_out, eh_landing_pad olp) +cleanup_empty_eh_unsplit (basic_block bb, edge e_out, eh_landing_pad lp) { gimple_stmt_iterator gsi; - eh_landing_pad nlp; tree lab; /* We really ought not have totally lost everything following @@ -3594,35 +3611,30 @@ cleanup_empty_eh_unsplit (basic_block bb, edge e_out, eh_landing_pad olp) be a successor. */ gcc_assert (e_out != NULL); - /* Look for an EH label in the successor block. */ + /* The destination block must not already have a landing pad + for a different region. */ lab = NULL; for (gsi = gsi_start_bb (e_out->dest); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple stmt = gsi_stmt (gsi); + int lp_nr; + if (gimple_code (stmt) != GIMPLE_LABEL) break; lab = gimple_label_label (stmt); - if (EH_LANDING_PAD_NR (lab)) - goto found; + lp_nr = EH_LANDING_PAD_NR (lab); + if (lp_nr && get_eh_region_from_lp_number (lp_nr) != lp->region) + return false; } - return false; - found: - - /* The other label had better be part of the same EH region. Given that - we've not lowered RESX, there should be no way to have a totally empty - landing pad that crosses to another EH region. */ - nlp = get_eh_landing_pad_from_number (EH_LANDING_PAD_NR (lab)); - gcc_assert (nlp->region == olp->region); /* Attempt to move the PHIs into the successor block. */ - if (cleanup_empty_eh_merge_phis (e_out->dest, bb, e_out)) + if (cleanup_empty_eh_merge_phis (e_out->dest, bb, e_out, false)) { if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, - "Unsplit EH landing pad %d to block %d via lp %d.\n", - olp->index, e_out->dest->index, nlp->index); - - remove_eh_landing_pad (olp); + "Unsplit EH landing pad %d to block %i " + "(via cleanup_empty_eh).\n", + lp->index, e_out->dest->index); return true; } @@ -3725,7 +3737,7 @@ cleanup_empty_eh (eh_landing_pad lp) landing pad block. If the merge succeeds, we'll already have redirected all the EH edges. The handler itself will go unreachable if there were no normal edges. */ - if (cleanup_empty_eh_merge_phis (e_out->dest, bb, e_out)) + if (cleanup_empty_eh_merge_phis (e_out->dest, bb, e_out, true)) goto succeed; /* Finally, if all input edges are EH edges, then we can (potentially) diff --git a/gcc/tree-flow.h b/gcc/tree-flow.h index 8e790aec784..85f1f5ef60a 100644 --- a/gcc/tree-flow.h +++ b/gcc/tree-flow.h @@ -637,10 +637,8 @@ typedef bool (*walk_use_def_chains_fn) (tree, gimple, void *); extern void walk_use_def_chains (tree, walk_use_def_chains_fn, void *, bool); -void propagate_defs_into_debug_stmts (gimple, basic_block, - const gimple_stmt_iterator *); -void propagate_var_def_into_debug_stmts (tree, basic_block, - const gimple_stmt_iterator *); +void insert_debug_temps_for_defs (gimple_stmt_iterator *); +void insert_debug_temp_for_var_def (gimple_stmt_iterator *, tree); void release_defs_bitset (bitmap toremove); /* In tree-into-ssa.c */ diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c index 706571c59ec..0b5e7321b16 100644 --- a/gcc/tree-nested.c +++ b/gcc/tree-nested.c @@ -1307,6 +1307,12 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, *handled_ops_p = false; return NULL_TREE; + case GIMPLE_COND: + wi->val_only = true; + wi->is_lhs = false; + *handled_ops_p = false; + return NULL_TREE; + default: /* For every other statement that we are not interested in handling here, let the walker traverse the operands. */ @@ -1707,6 +1713,12 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, info, gimple_omp_body (stmt)); break; + case GIMPLE_COND: + wi->val_only = true; + wi->is_lhs = false; + *handled_ops_p = false; + return NULL_TREE; + default: /* For every other statement that we are not interested in handling here, let the walker traverse the operands. */ diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index 12b4ac0171a..61e372a54c3 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -255,7 +255,13 @@ loop_parallel_p (struct loop *loop) bool ret = false; if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "\nConsidering loop %d\n", loop->num); + { + fprintf (dump_file, "Considering loop %d\n", loop->num); + if (!loop->inner) + fprintf (dump_file, "loop is innermost\n"); + else + fprintf (dump_file, "loop NOT innermost\n"); + } /* Check for problems with dependences. If the loop can be reversed, the iterations are independent. */ @@ -715,6 +721,8 @@ separate_decls_in_region_debug_bind (gimple stmt, void **slot, **dslot; var = gimple_debug_bind_get_var (stmt); + if (TREE_CODE (var) == DEBUG_EXPR_DECL) + return true; gcc_assert (DECL_P (var) && SSA_VAR_P (var)); ielt.uid = DECL_UID (var); dslot = htab_find_slot_with_hash (decl_copies, &ielt, ielt.uid, NO_INSERT); @@ -1287,8 +1295,9 @@ transform_to_exit_first_loop (struct loop *loop, htab_t reduction_list, tree nit bool ok; edge exit = single_dom_exit (loop), hpred; tree control, control_name, res, t; - gimple phi, nphi, cond_stmt, stmt; + gimple phi, nphi, cond_stmt, stmt, cond_nit; gimple_stmt_iterator gsi; + tree nit_1; split_block_after_labels (loop->header); orig_header = single_succ (loop->header); @@ -1306,7 +1315,6 @@ transform_to_exit_first_loop (struct loop *loop, htab_t reduction_list, tree nit res = PHI_RESULT (phi); t = make_ssa_name (SSA_NAME_VAR (res), phi); SET_PHI_RESULT (phi, t); - nphi = create_phi_node (res, orig_header); SSA_NAME_DEF_STMT (res) = nphi; add_phi_arg (nphi, t, hpred, UNKNOWN_LOCATION); @@ -1318,10 +1326,11 @@ transform_to_exit_first_loop (struct loop *loop, htab_t reduction_list, tree nit control = t; } } - bbs = get_loop_body_in_dom_order (loop); - for (n = 0; bbs[n] != exit->src; n++) + + for (n = 0; bbs[n] != loop->latch; n++) continue; + n--; nbbs = XNEWVEC (basic_block, n); ok = gimple_duplicate_sese_tail (single_succ_edge (loop->header), exit, bbs + 1, n, nbbs); @@ -1356,7 +1365,6 @@ transform_to_exit_first_loop (struct loop *loop, htab_t reduction_list, tree nit struct reduction_info *red; tree val = PHI_ARG_DEF_FROM_EDGE (phi, exit); - red = reduction_phi (reduction_list, SSA_NAME_DEF_STMT (val)); if (red) { @@ -1372,12 +1380,15 @@ transform_to_exit_first_loop (struct loop *loop, htab_t reduction_list, tree nit } gcc_assert (control_name != NULL_TREE); - /* Initialize the control variable to NIT. */ + /* Initialize the control variable to number of iterations + according to the rhs of the exit condition. */ gsi = gsi_after_labels (ex_bb); - nit = force_gimple_operand_gsi (&gsi, - fold_convert (TREE_TYPE (control_name), nit), + cond_nit = last_stmt (exit->src); + nit_1 = gimple_cond_rhs (cond_nit); + nit_1 = force_gimple_operand_gsi (&gsi, + fold_convert (TREE_TYPE (control_name), nit_1), false, NULL_TREE, false, GSI_SAME_STMT); - stmt = gimple_build_assign (control_name, nit); + stmt = gimple_build_assign (control_name, nit_1); gsi_insert_before (&gsi, stmt, GSI_NEW_STMT); SSA_NAME_DEF_STMT (control_name) = stmt; } @@ -1738,7 +1749,7 @@ gather_scalar_reductions (loop_p loop, htab_t reduction_list) && simple_loop_info) { gimple reduc_stmt = vect_is_simple_reduction (simple_loop_info, phi, true, &double_reduc); - if (reduc_stmt) + if (reduc_stmt && !double_reduc) build_new_reduction (reduction_list, reduc_stmt, phi); } } @@ -1888,15 +1899,32 @@ parallelize_loops (void) FOR_EACH_LOOP (li, loop, 0) { htab_empty (reduction_list); - - /* If we use autopar in graphite pass, we use it's marked dependency + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "Trying loop %d as candidate\n",loop->num); + if (loop->inner) + fprintf (dump_file, "loop %d is not innermost\n",loop->num); + else + fprintf (dump_file, "loop %d is innermost\n",loop->num); + } + + /* If we use autopar in graphite pass, we use its marked dependency checking results. */ if (flag_loop_parallelize_all && !loop->can_be_parallel) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "loop is not parallel according to graphite\n"); continue; + } - /* FIXME: Only consider innermost loops with just one exit. */ - if (loop->inner || !single_dom_exit (loop)) + if (!single_dom_exit (loop)) + { + + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "loop is !single_dom_exit\n"); + continue; + } if (/* And of course, the loop must be parallelizable. */ !can_duplicate_loop_p (loop) @@ -1913,7 +1941,7 @@ parallelize_loops (void) /* Do not bother with loops in cold areas. */ || optimize_loop_nest_for_size_p (loop))) continue; - + if (!try_get_loop_niter (loop, &niter_desc)) continue; @@ -1924,6 +1952,14 @@ parallelize_loops (void) continue; changed = true; + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "parallelizing "); + if (loop->inner) + fprintf (dump_file, "outer loop\n"); + else + fprintf (dump_file, "inner loop\n"); + } gen_parallel_loop (loop, reduction_list, n_threads, &niter_desc); verify_flow_info (); diff --git a/gcc/tree-pass.h b/gcc/tree-pass.h index b829cee08b3..8b8b3c4816f 100644 --- a/gcc/tree-pass.h +++ b/gcc/tree-pass.h @@ -497,8 +497,6 @@ extern struct rtl_opt_pass pass_cse2; extern struct rtl_opt_pass pass_df_initialize_opt; extern struct rtl_opt_pass pass_df_initialize_no_opt; extern struct rtl_opt_pass pass_reginfo_init; -extern struct rtl_opt_pass pass_subregs_of_mode_init; -extern struct rtl_opt_pass pass_subregs_of_mode_finish; extern struct rtl_opt_pass pass_inc_dec; extern struct rtl_opt_pass pass_stack_ptr_mod; extern struct rtl_opt_pass pass_initialize_regs; diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c index a325d75d914..cfc20a178ea 100644 --- a/gcc/tree-pretty-print.c +++ b/gcc/tree-pretty-print.c @@ -183,6 +183,8 @@ dump_decl_name (pretty_printer *buffer, tree node, int flags) { if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1) pp_printf (buffer, "L.%d", (int) LABEL_DECL_UID (node)); + else if (TREE_CODE (node) == DEBUG_EXPR_DECL) + pp_printf (buffer, "D#%i", DEBUG_TEMP_UID (node)); else { char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D'; @@ -1051,6 +1053,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags, case VAR_DECL: case PARM_DECL: case FIELD_DECL: + case DEBUG_EXPR_DECL: case NAMESPACE_DECL: dump_decl_name (buffer, node, flags); break; diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 02a4eed646e..70af0fda610 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -1492,18 +1492,29 @@ analyze_evolution_in_loop (gimple loop_phi_node, bb = gimple_phi_arg_edge (loop_phi_node, i)->src; if (!flow_bb_inside_loop_p (loop, bb)) continue; - + if (TREE_CODE (arg) == SSA_NAME) { + bool val = false; + ssa_chain = SSA_NAME_DEF_STMT (arg); /* Pass in the initial condition to the follow edge function. */ ev_fn = init_cond; res = follow_ssa_edge (loop, ssa_chain, loop_phi_node, &ev_fn, 0); + + /* If ev_fn has no evolution in the inner loop, and the + init_cond is not equal to ev_fn, then we have an + ambiguity between two possible values, as we cannot know + the number of iterations at this point. */ + if (TREE_CODE (ev_fn) != POLYNOMIAL_CHREC + && no_evolution_in_loop_p (ev_fn, loop->num, &val) && val + && !operand_equal_p (init_cond, ev_fn, 0)) + ev_fn = chrec_dont_know; } else res = t_false; - + /* When it is impossible to go back on the same loop_phi_node by following the ssa edges, the evolution is represented by a peeled chrec, i.e. the diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 3922c22d824..86246688680 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1231,7 +1231,8 @@ build_ref_for_offset_1 (tree *res, tree type, HOST_WIDE_INT offset, case UNION_TYPE: case QUAL_UNION_TYPE: case RECORD_TYPE: - /* Some ADA records are half-unions, treat all of them the same. */ + /* ??? Some records used to be half-unions in Ada so the code treats + the 3 container types the same. This has been fixed in Ada. */ for (fld = TYPE_FIELDS (type); fld; fld = TREE_CHAIN (fld)) { HOST_WIDE_INT pos, size; @@ -1242,7 +1243,10 @@ build_ref_for_offset_1 (tree *res, tree type, HOST_WIDE_INT offset, pos = int_bit_position (fld); gcc_assert (TREE_CODE (type) == RECORD_TYPE || pos == 0); - size = tree_low_cst (DECL_SIZE (fld), 1); + tr_size = DECL_SIZE (fld); + if (!tr_size || !host_integerp (tr_size, 1)) + continue; + size = tree_low_cst (tr_size, 1); if (pos > offset || (pos + size) <= offset) continue; diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index 67d0472cc59..f0135a9c42d 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -325,7 +325,13 @@ mark_stmt_if_obviously_necessary (gimple stmt, bool aggressive) break; case GIMPLE_DEBUG: - mark_stmt_necessary (stmt, false); + /* Debug temps without a value are not useful. ??? If we could + easily locate the debug temp bind stmt for a use thereof, + would could refrain from marking all debug temps here, and + mark them only if they're used. */ + if (gimple_debug_bind_has_value_p (stmt) + || TREE_CODE (gimple_debug_bind_get_var (stmt)) != DEBUG_EXPR_DECL) + mark_stmt_necessary (stmt, false); return; case GIMPLE_GOTO: @@ -1071,7 +1077,7 @@ eliminate_unnecessary_stmts (void) { bool something_changed = false; basic_block bb; - gimple_stmt_iterator gsi; + gimple_stmt_iterator gsi, psi; gimple stmt; tree call; VEC (basic_block, heap) *h; @@ -1111,25 +1117,21 @@ eliminate_unnecessary_stmts (void) bb = VEC_pop (basic_block, h); /* Remove dead statements. */ - for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi);) + for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi); gsi = psi) { stmt = gsi_stmt (gsi); + psi = gsi; + gsi_prev (&psi); + stats.total++; /* If GSI is not necessary then remove it. */ if (!gimple_plf (stmt, STMT_NECESSARY)) { + if (!is_gimple_debug (stmt)) + something_changed = true; remove_dead_stmt (&gsi, bb); - something_changed = true; - - /* If stmt was the last stmt in the block, we want to - move gsi to the stmt that became the last stmt, but - gsi_prev would crash. */ - if (gsi_end_p (gsi)) - gsi = gsi_last_bb (bb); - else - gsi_prev (&gsi); } else if (is_gimple_call (stmt)) { @@ -1159,10 +1161,7 @@ eliminate_unnecessary_stmts (void) } notice_special_calls (stmt); } - gsi_prev (&gsi); } - else - gsi_prev (&gsi); } } diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 1e2c8f23ce8..6e861b15e4c 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -2099,6 +2099,7 @@ optimize_stmt (basic_block bb, gimple_stmt_iterator si) if (fold_stmt (&si)) { stmt = gsi_stmt (si); + gimple_set_modified (stmt, true); if (dump_file && (dump_flags & TDF_DETAILS)) { diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c index 87795a28223..6ba800d8288 100644 --- a/gcc/tree-ssa-forwprop.c +++ b/gcc/tree-ssa-forwprop.c @@ -939,7 +939,6 @@ forward_propagate_addr_expr (tree name, tree rhs) gimple use_stmt; bool all = true; bool single_use_p = has_single_use (name); - bool debug = false; FOR_EACH_IMM_USE_STMT (use_stmt, iter, name) { @@ -950,9 +949,7 @@ forward_propagate_addr_expr (tree name, tree rhs) there is nothing we can do. */ if (gimple_code (use_stmt) != GIMPLE_ASSIGN) { - if (is_gimple_debug (use_stmt)) - debug = true; - else + if (!is_gimple_debug (use_stmt)) all = false; continue; } @@ -995,9 +992,6 @@ forward_propagate_addr_expr (tree name, tree rhs) } } - if (all && debug) - propagate_var_def_into_debug_stmts (name, NULL, NULL); - return all; } diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index 738249445b0..6c6a9f17a1d 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -764,6 +764,7 @@ rewrite_reciprocal (gimple_stmt_iterator *bsi) gimple stmt, stmt1, stmt2; tree var, name, lhs, type; tree real_one; + gimple_stmt_iterator gsi; stmt = gsi_stmt (*bsi); lhs = gimple_assign_lhs (stmt); @@ -798,8 +799,9 @@ rewrite_reciprocal (gimple_stmt_iterator *bsi) /* Replace division stmt with reciprocal and multiply stmts. The multiply stmt is not invariant, so update iterator and avoid rescanning. */ - gsi_replace (bsi, stmt1, true); - gsi_insert_after (bsi, stmt2, GSI_NEW_STMT); + gsi = *bsi; + gsi_insert_before (bsi, stmt1, GSI_NEW_STMT); + gsi_replace (&gsi, stmt2, true); /* Continue processing with invariant reciprocal statement. */ return stmt1; @@ -858,6 +860,8 @@ rewrite_bittest (gimple_stmt_iterator *bsi) if (outermost_invariant_loop (b, loop_containing_stmt (stmt1)) != NULL && outermost_invariant_loop (a, loop_containing_stmt (stmt1)) == NULL) { + gimple_stmt_iterator rsi; + /* 1 << B */ var = create_tmp_var (TREE_TYPE (a), "shifttmp"); add_referenced_var (var); @@ -878,9 +882,14 @@ rewrite_bittest (gimple_stmt_iterator *bsi) SET_USE (use, name); gimple_cond_set_rhs (use_stmt, build_int_cst_type (TREE_TYPE (name), 0)); - gsi_insert_before (bsi, stmt1, GSI_SAME_STMT); - propagate_defs_into_debug_stmts (gsi_stmt (*bsi), NULL, NULL); - gsi_replace (bsi, stmt2, true); + /* Don't use gsi_replace here, none of the new assignments sets + the variable originally set in stmt. Move bsi to stmt1, and + then remove the original stmt, so that we get a chance to + retain debug info for it. */ + rsi = *bsi; + gsi_insert_before (bsi, stmt1, GSI_NEW_STMT); + gsi_insert_before (&rsi, stmt2, GSI_SAME_STMT); + gsi_remove (&rsi, true); return stmt1; } @@ -1060,7 +1069,6 @@ move_computations_stmt (struct dom_walk_data *dw_data ATTRIBUTE_UNUSED, mark_virtual_ops_for_renaming (stmt); gsi_insert_on_edge (loop_preheader_edge (level), stmt); - propagate_defs_into_debug_stmts (gsi_stmt (bsi), NULL, NULL); gsi_remove (&bsi, false); } } diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c index 28e6ec65826..6af31a437ea 100644 --- a/gcc/tree-ssa-operands.c +++ b/gcc/tree-ssa-operands.c @@ -894,6 +894,10 @@ get_expr_operands (gimple stmt, tree *expr_p, int flags) add_stmt_operand (expr_p, stmt, flags); return; + case DEBUG_EXPR_DECL: + gcc_assert (gimple_debug_bind_p (stmt)); + return; + case MISALIGNED_INDIRECT_REF: get_expr_operands (stmt, &TREE_OPERAND (expr, 1), flags); /* fall through */ diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 5da6c63b400..6ae05b5a866 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3405,6 +3405,7 @@ do_regular_insertion (basic_block block, basic_block dom) pre_expr eprime = NULL; edge_iterator ei; pre_expr edoubleprime = NULL; + bool do_insertion = false; val = get_expr_value_id (expr); if (bitmap_set_contains_value (PHI_GEN (block), val)) @@ -3456,6 +3457,10 @@ do_regular_insertion (basic_block block, basic_block dom) { avail[bprime->index] = edoubleprime; by_some = true; + /* We want to perform insertions to remove a redundancy on + a path in the CFG we want to optimize for speed. */ + if (optimize_edge_for_speed_p (pred)) + do_insertion = true; if (first_s == NULL) first_s = edoubleprime; else if (!pre_expr_eq (first_s, edoubleprime)) @@ -3466,7 +3471,8 @@ do_regular_insertion (basic_block block, basic_block dom) already existing along every predecessor, and it's defined by some predecessor, it is partially redundant. */ - if (!cant_insert && !all_same && by_some && dbg_cnt (treepre_insert)) + if (!cant_insert && !all_same && by_some && do_insertion + && dbg_cnt (treepre_insert)) { if (insert_into_preds_of_block (block, get_expression_id (expr), avail)) @@ -4526,11 +4532,11 @@ fini_pre (bool do_fre) only wants to do full redundancy elimination. */ static unsigned int -execute_pre (bool do_fre ATTRIBUTE_UNUSED) +execute_pre (bool do_fre) { unsigned int todo = 0; - do_partial_partial = optimize > 2; + do_partial_partial = optimize > 2 && optimize_function_for_speed_p (cfun); /* This has to happen before SCCVN runs because loop_optimizer_init may create new phis, etc. */ @@ -4615,8 +4621,7 @@ do_pre (void) static bool gate_pre (void) { - /* PRE tends to generate bigger code. */ - return flag_tree_pre != 0 && optimize_function_for_speed_p (cfun); + return flag_tree_pre != 0; } struct gimple_opt_pass pass_pre = diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 55ce2f65a4f..5136aee5d32 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -1405,7 +1405,6 @@ rewrite_expr_tree (gimple stmt, unsigned int opindex, { stmt2 = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt1)); gsirhs1 = gsi_for_stmt (stmt2); - propagate_defs_into_debug_stmts (stmt2, gimple_bb (stmt), &gsinow); gsi_move_before (&gsirhs1, &gsinow); gsi_prev (&gsinow); stmt1 = stmt2; @@ -1452,7 +1451,6 @@ linearize_expr (gimple stmt) gsinow = gsi_for_stmt (stmt); gsirhs = gsi_for_stmt (binrhs); - propagate_defs_into_debug_stmts (binrhs, gimple_bb (stmt), &gsinow); gsi_move_before (&gsirhs, &gsinow); gimple_assign_set_rhs2 (stmt, gimple_assign_rhs1 (binrhs)); diff --git a/gcc/tree-ssa-sink.c b/gcc/tree-ssa-sink.c index a9b4b67679b..be3fb7145fd 100644 --- a/gcc/tree-ssa-sink.c +++ b/gcc/tree-ssa-sink.c @@ -385,9 +385,6 @@ statement_sink_location (gimple stmt, basic_block frombb, *togsi = gsi_after_labels (commondom); - if (debug_stmts) - propagate_defs_into_debug_stmts (stmt, commondom, togsi); - return true; } @@ -406,8 +403,6 @@ statement_sink_location (gimple stmt, basic_block frombb, *togsi = gsi_for_stmt (use); - propagate_defs_into_debug_stmts (stmt, sinkbb, togsi); - return true; } @@ -441,8 +436,6 @@ statement_sink_location (gimple stmt, basic_block frombb, *togsi = gsi_after_labels (sinkbb); - propagate_defs_into_debug_stmts (stmt, sinkbb, togsi); - return true; } diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 9015d19c189..9858b109d03 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -295,152 +295,198 @@ find_released_ssa_name (tree *tp, int *walk_subtrees, void *data_) return NULL_TREE; } -/* Given a VAR whose definition STMT is to be moved to the iterator - position TOGSIP in the TOBB basic block, verify whether we're - moving it across any of the debug statements that use it, and - adjust them as needed. If TOBB is NULL, then the definition is - understood as being removed, and TOGSIP is unused. */ +/* Insert a DEBUG BIND stmt before the DEF of VAR if VAR is referenced + by other DEBUG stmts, and replace uses of the DEF with the + newly-created debug temp. */ + void -propagate_var_def_into_debug_stmts (tree var, - basic_block tobb, - const gimple_stmt_iterator *togsip) +insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var) { imm_use_iterator imm_iter; - gimple stmt; use_operand_p use_p; + gimple stmt; + gimple def_stmt = NULL; + int usecount = 0; tree value = NULL; - bool no_value = false; if (!MAY_HAVE_DEBUG_STMTS) return; - FOR_EACH_IMM_USE_STMT (stmt, imm_iter, var) + /* First of all, check whether there are debug stmts that reference + this variable and, if there are, decide whether we should use a + debug temp. */ + FOR_EACH_IMM_USE_FAST (use_p, imm_iter, var) { - basic_block bb; - gimple_stmt_iterator si; + stmt = USE_STMT (use_p); - if (!is_gimple_debug (stmt)) + if (!gimple_debug_bind_p (stmt)) continue; - if (tobb) + if (usecount++) + break; + + if (gimple_debug_bind_get_value (stmt) != var) { - bb = gimple_bb (stmt); + /* Count this as an additional use, so as to make sure we + use a temp unless VAR's definition has a SINGLE_RHS that + can be shared. */ + usecount++; + break; + } + } - if (bb != tobb) - { - gcc_assert (dom_info_available_p (CDI_DOMINATORS)); - if (dominated_by_p (CDI_DOMINATORS, bb, tobb)) - continue; - } - else - { - si = *togsip; + if (!usecount) + return; - if (gsi_end_p (si)) - continue; + if (gsi) + def_stmt = gsi_stmt (*gsi); + else + def_stmt = SSA_NAME_DEF_STMT (var); - do - { - gsi_prev (&si); - if (gsi_end_p (si)) - break; - } - while (gsi_stmt (si) != stmt); + /* If we didn't get an insertion point, and the stmt has already + been removed, we won't be able to insert the debug bind stmt, so + we'll have to drop debug information. */ + if (is_gimple_assign (def_stmt)) + { + bool no_value = false; - if (gsi_end_p (si)) - continue; - } + if (!dom_info_available_p (CDI_DOMINATORS)) + { + struct walk_stmt_info wi; + + memset (&wi, 0, sizeof (wi)); + + /* When removing blocks without following reverse dominance + order, we may sometimes encounter SSA_NAMEs that have + already been released, referenced in other SSA_DEFs that + we're about to release. Consider: + + <bb X>: + v_1 = foo; + + <bb Y>: + w_2 = v_1 + bar; + # DEBUG w => w_2 + + If we deleted BB X first, propagating the value of w_2 + won't do us any good. It's too late to recover their + original definition of v_1: when it was deleted, it was + only referenced in other DEFs, it couldn't possibly know + it should have been retained, and propagating every + single DEF just in case it might have to be propagated + into a DEBUG STMT would probably be too wasteful. + + When dominator information is not readily available, we + check for and accept some loss of debug information. But + if it is available, there's no excuse for us to remove + blocks in the wrong order, so we don't even check for + dead SSA NAMEs. SSA verification shall catch any + errors. */ + if ((!gsi && !gimple_bb (def_stmt)) + || !walk_gimple_op (def_stmt, find_released_ssa_name, + &wi)) + no_value = true; } - /* Here we compute (lazily) the value assigned to VAR, but we - remember if we tried before and failed, so that we don't try - again. */ - if (!value && !no_value) + if (!no_value) + value = gimple_assign_rhs_to_tree (def_stmt); + } + + if (value) + { + /* If there's a single use of VAR, and VAR is the entire debug + expression (usecount would have been incremented again + otherwise), and the definition involves only constants and + SSA names, then we can propagate VALUE into this single use, + avoiding the temp. + + We can also avoid using a temp if VALUE can be shared and + propagated into all uses, without generating expressions that + wouldn't be valid gimple RHSs. + + Other cases that would require unsharing or non-gimple RHSs + are deferred to a debug temp, although we could avoid temps + at the expense of duplication of expressions. */ + + if (CONSTANT_CLASS_P (value) + || (usecount == 1 + && (!gimple_assign_single_p (def_stmt) + || is_gimple_min_invariant (value))) + || is_gimple_reg (value)) + value = unshare_expr (value); + else { - gimple def_stmt = SSA_NAME_DEF_STMT (var); + gimple def_temp; + tree vexpr = make_node (DEBUG_EXPR_DECL); - if (is_gimple_assign (def_stmt)) - { - if (!dom_info_available_p (CDI_DOMINATORS)) - { - struct walk_stmt_info wi; - - memset (&wi, 0, sizeof (wi)); - - /* When removing blocks without following reverse - dominance order, we may sometimes encounter SSA_NAMEs - that have already been released, referenced in other - SSA_DEFs that we're about to release. Consider: - - <bb X>: - v_1 = foo; - - <bb Y>: - w_2 = v_1 + bar; - # DEBUG w => w_2 - - If we deleted BB X first, propagating the value of - w_2 won't do us any good. It's too late to recover - their original definition of v_1: when it was - deleted, it was only referenced in other DEFs, it - couldn't possibly know it should have been retained, - and propagating every single DEF just in case it - might have to be propagated into a DEBUG STMT would - probably be too wasteful. - - When dominator information is not readily - available, we check for and accept some loss of - debug information. But if it is available, - there's no excuse for us to remove blocks in the - wrong order, so we don't even check for dead SSA - NAMEs. SSA verification shall catch any - errors. */ - if (!walk_gimple_op (def_stmt, find_released_ssa_name, &wi)) - no_value = true; - } + def_temp = gimple_build_debug_bind (vexpr, + unshare_expr (value), + def_stmt); + + DECL_ARTIFICIAL (vexpr) = 1; + TREE_TYPE (vexpr) = TREE_TYPE (value); + if (DECL_P (value)) + DECL_MODE (vexpr) = DECL_MODE (value); + else + DECL_MODE (vexpr) = TYPE_MODE (TREE_TYPE (value)); - if (!no_value) - value = gimple_assign_rhs_to_tree (def_stmt); + if (gsi) + gsi_insert_before (gsi, def_temp, GSI_SAME_STMT); + else + { + gimple_stmt_iterator ngsi = gsi_for_stmt (def_stmt); + gsi_insert_before (&ngsi, def_temp, GSI_SAME_STMT); } - if (!value) - no_value = true; + value = vexpr; } + } - if (no_value) - gimple_debug_bind_reset_value (stmt); - else + FOR_EACH_IMM_USE_STMT (stmt, imm_iter, var) + { + if (!gimple_debug_bind_p (stmt)) + continue; + + if (value) FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter) - SET_USE (use_p, unshare_expr (value)); + /* unshare_expr is not needed here. vexpr is either a + SINGLE_RHS, that can be safely shared, some other RHS + that was unshared when we found it had a single debug + use, or a DEBUG_EXPR_DECL, that can be safely + shared. */ + SET_USE (use_p, value); + else + gimple_debug_bind_reset_value (stmt); update_stmt (stmt); } } -/* Given a STMT to be moved to the iterator position TOBSIP in the - TOBB basic block, verify whether we're moving it across any of the - debug statements that use it. If TOBB is NULL, then the definition - is understood as being removed, and TOBSIP is unused. */ +/* Insert a DEBUG BIND stmt before STMT for each DEF referenced by + other DEBUG stmts, and replace uses of the DEF with the + newly-created debug temp. */ void -propagate_defs_into_debug_stmts (gimple def, basic_block tobb, - const gimple_stmt_iterator *togsip) +insert_debug_temps_for_defs (gimple_stmt_iterator *gsi) { + gimple stmt; ssa_op_iter op_iter; def_operand_p def_p; if (!MAY_HAVE_DEBUG_STMTS) return; - FOR_EACH_SSA_DEF_OPERAND (def_p, def, op_iter, SSA_OP_DEF) + stmt = gsi_stmt (*gsi); + + FOR_EACH_SSA_DEF_OPERAND (def_p, stmt, op_iter, SSA_OP_DEF) { tree var = DEF_FROM_PTR (def_p); if (TREE_CODE (var) != SSA_NAME) continue; - propagate_var_def_into_debug_stmts (var, tobb, togsip); + insert_debug_temp_for_var_def (gsi, var); } } diff --git a/gcc/tree-ssanames.c b/gcc/tree-ssanames.c index 45183218a2c..bb0880260ff 100644 --- a/gcc/tree-ssanames.c +++ b/gcc/tree-ssanames.c @@ -206,7 +206,7 @@ release_ssa_name (tree var) use_operand_p imm = &(SSA_NAME_IMM_USE_NODE (var)); if (MAY_HAVE_DEBUG_STMTS) - propagate_var_def_into_debug_stmts (var, NULL, NULL); + insert_debug_temp_for_var_def (NULL, var); #ifdef ENABLE_CHECKING verify_imm_links (stderr, var); diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index ddaee818310..fb4a5bf5dd7 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -172,13 +172,13 @@ exist_non_indexing_operands_for_use_p (tree use, gimple stmt) { tree operand; stmt_vec_info stmt_info = vinfo_for_stmt (stmt); - + /* USE corresponds to some operand in STMT. If there is no data reference in STMT, then any operand that corresponds to USE is not indexing an array. */ if (!STMT_VINFO_DATA_REF (stmt_info)) return true; - + /* STMT has a data_ref. FORNOW this means that its of one of the following forms: -1- ARRAY_REF = var @@ -191,14 +191,12 @@ exist_non_indexing_operands_for_use_p (tree use, gimple stmt) Therefore, all we need to check is if STMT falls into the first case, and whether var corresponds to USE. */ - - if (TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME) - return false; if (!gimple_assign_copy_p (stmt)) return false; + if (TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME) + return false; operand = gimple_assign_rhs1 (stmt); - if (TREE_CODE (operand) != SSA_NAME) return false; diff --git a/gcc/tree.c b/gcc/tree.c index 4c3f52bd7b7..5da346c52f8 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -59,6 +59,7 @@ along with GCC; see the file COPYING3. If not see #include "timevar.h" #include "except.h" #include "debug.h" +#include "intl.h" /* Tree code classes. */ @@ -152,6 +153,9 @@ static const char * const tree_node_kind_names[] = { static GTY(()) int next_decl_uid; /* Unique id for next type created. */ static GTY(()) int next_type_uid = 1; +/* Unique id for next debug decl created. Use negative numbers, + to catch erroneous uses. */ +static GTY(()) int next_debug_decl_uid; /* Since we cannot rehash a type after it is in the table, we have to keep the hash code. */ @@ -284,6 +288,8 @@ tree_node_structure_for_code (enum tree_code code) return TS_LABEL_DECL; case RESULT_DECL: return TS_RESULT_DECL; + case DEBUG_EXPR_DECL: + return TS_DECL_WRTL; case CONST_DECL: return TS_CONST_DECL; case TYPE_DECL: @@ -667,6 +673,8 @@ tree_code_size (enum tree_code code) return sizeof (struct tree_type_decl); case FUNCTION_DECL: return sizeof (struct tree_function_decl); + case DEBUG_EXPR_DECL: + return sizeof (struct tree_decl_with_rtl); default: return sizeof (struct tree_decl_non_common); } @@ -872,7 +880,10 @@ make_node_stat (enum tree_code code MEM_STAT_DECL) DECL_ALIGN (t) = 1; } DECL_SOURCE_LOCATION (t) = input_location; - DECL_UID (t) = next_decl_uid++; + if (TREE_CODE (t) == DEBUG_EXPR_DECL) + DECL_UID (t) = --next_debug_decl_uid; + else + DECL_UID (t) = next_decl_uid++; if (TREE_CODE (t) == LABEL_DECL) LABEL_DECL_UID (t) = -1; @@ -948,7 +959,10 @@ copy_node_stat (tree node MEM_STAT_DECL) if (TREE_CODE_CLASS (code) == tcc_declaration) { - DECL_UID (t) = next_decl_uid++; + if (code == DEBUG_EXPR_DECL) + DECL_UID (t) = --next_debug_decl_uid; + else + DECL_UID (t) = next_decl_uid++; if ((TREE_CODE (node) == PARM_DECL || TREE_CODE (node) == VAR_DECL) && DECL_HAS_VALUE_EXPR_P (node)) { @@ -3939,9 +3953,9 @@ expanded_location expand_location (source_location loc) { expanded_location xloc; - if (loc == 0) + if (loc <= BUILTINS_LOCATION) { - xloc.file = NULL; + xloc.file = loc == UNKNOWN_LOCATION ? NULL : _("<built-in>"); xloc.line = 0; xloc.column = 0; xloc.sysp = 0; @@ -4388,6 +4402,10 @@ free_lang_data_in_decl (tree 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) + DECL_FCONTEXT (decl) = NULL_TREE; } else if (TREE_CODE (decl) == FUNCTION_DECL) { diff --git a/gcc/tree.def b/gcc/tree.def index c1ba96aa966..01d91b76a6f 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -351,6 +351,10 @@ DEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0) DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0) DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0) +/* A "declaration" of a debug temporary. It should only appear in + DEBUG stmts. */ +DEFTREECODE (DEBUG_EXPR_DECL, "debug_expr_decl", tcc_declaration, 0) + /* A namespace declaration. Namespaces appear in DECL_CONTEXT of other _DECLs, providing a hierarchy of names. */ DEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0) diff --git a/gcc/tree.h b/gcc/tree.h index 20463b4a18b..2487a1ce9fe 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -2455,6 +2455,10 @@ struct function; /* Every ..._DECL node gets a unique number. */ #define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid) +/* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous + uses. */ +#define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL))) + /* These two fields describe where in the source code the declaration was. If the declaration appears in several places (as for a C function that is declared first and then defined later), this diff --git a/gcc/unwind-dw2.c b/gcc/unwind-dw2.c index a86c21b7129..82958b0086a 100644 --- a/gcc/unwind-dw2.c +++ b/gcc/unwind-dw2.c @@ -789,22 +789,22 @@ execute_stack_op (const unsigned char *op_ptr, const unsigned char *op_end, result = second ^ first; break; case DW_OP_le: - result = (_Unwind_Sword) first <= (_Unwind_Sword) second; + result = (_Unwind_Sword) second <= (_Unwind_Sword) first; break; case DW_OP_ge: - result = (_Unwind_Sword) first >= (_Unwind_Sword) second; + result = (_Unwind_Sword) second >= (_Unwind_Sword) first; break; case DW_OP_eq: - result = (_Unwind_Sword) first == (_Unwind_Sword) second; + result = (_Unwind_Sword) second == (_Unwind_Sword) first; break; case DW_OP_lt: - result = (_Unwind_Sword) first < (_Unwind_Sword) second; + result = (_Unwind_Sword) second < (_Unwind_Sword) first; break; case DW_OP_gt: - result = (_Unwind_Sword) first > (_Unwind_Sword) second; + result = (_Unwind_Sword) second > (_Unwind_Sword) first; break; case DW_OP_ne: - result = (_Unwind_Sword) first != (_Unwind_Sword) second; + result = (_Unwind_Sword) second != (_Unwind_Sword) first; break; default: diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index bdd3bdee34e..cfcc839b96c 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -732,6 +732,7 @@ dv_is_decl_p (decl_or_value dv) case (int)PARM_DECL: case (int)RESULT_DECL: case (int)FUNCTION_DECL: + case (int)DEBUG_EXPR_DECL: case (int)COMPONENT_REF: return true; @@ -2222,7 +2223,7 @@ dataflow_set_union (dataflow_set *dst, dataflow_set *src) /* Whether the value is currently being expanded. */ #define VALUE_RECURSED_INTO(x) \ - (RTL_FLAG_CHECK1 ("VALUE_RECURSED_INTO", (x), VALUE)->used) + (RTL_FLAG_CHECK2 ("VALUE_RECURSED_INTO", (x), VALUE, DEBUG_EXPR)->used) /* Whether the value is in changed_variables hash table. */ #define VALUE_CHANGED(x) \ (RTL_FLAG_CHECK1 ("VALUE_CHANGED", (x), VALUE)->frame_related) @@ -4112,6 +4113,9 @@ track_expr_p (tree expr, bool need_rtl) rtx decl_rtl; tree realdecl; + if (TREE_CODE (expr) == DEBUG_EXPR_DECL) + return DECL_RTL_SET_P (expr); + /* If EXPR is not a parameter or a variable do not track it. */ if (TREE_CODE (expr) != VAR_DECL && TREE_CODE (expr) != PARM_DECL) return 0; @@ -6242,24 +6246,6 @@ delete_variable_part (dataflow_set *set, rtx loc, decl_or_value dv, slot = delete_slot_part (set, loc, slot, offset); } -/* Wrap result in CONST:MODE if needed to preserve the mode. */ - -static rtx -check_wrap_constant (enum machine_mode mode, rtx result) -{ - if (!result || GET_MODE (result) == mode) - return result; - - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, " wrapping result in const to preserve mode %s\n", - GET_MODE_NAME (mode)); - - result = wrap_constant (mode, result); - gcc_assert (GET_MODE (result) == mode); - - return result; -} - /* Callback for cselib_expand_value, that looks for expressions holding the value in the var-tracking hash tables. Return X for standard processing, anything else is to be used as-is. */ @@ -6271,11 +6257,12 @@ vt_expand_loc_callback (rtx x, bitmap regs, int max_depth, void *data) decl_or_value dv; variable var; location_chain loc; - rtx result; + rtx result, subreg, xret; - if (GET_CODE (x) == SUBREG) + switch (GET_CODE (x)) { - rtx subreg = SUBREG_REG (x); + case SUBREG: + subreg = SUBREG_REG (x); if (GET_CODE (SUBREG_REG (x)) != VALUE) return x; @@ -6297,22 +6284,31 @@ vt_expand_loc_callback (rtx x, bitmap regs, int max_depth, void *data) result = gen_rtx_raw_SUBREG (GET_MODE (x), subreg, SUBREG_BYTE (x)); return result; - } - if (GET_CODE (x) != VALUE) - return x; + case DEBUG_EXPR: + dv = dv_from_decl (DEBUG_EXPR_TREE_DECL (x)); + xret = NULL; + break; + + case VALUE: + dv = dv_from_value (x); + xret = x; + break; + + default: + return x; + } if (VALUE_RECURSED_INTO (x)) - return x; + return NULL; - dv = dv_from_value (x); var = (variable) htab_find_with_hash (vars, dv, dv_htab_hash (dv)); if (!var) - return x; + return xret; if (var->n_var_parts == 0) - return x; + return xret; gcc_assert (var->n_var_parts == 1); @@ -6323,7 +6319,6 @@ vt_expand_loc_callback (rtx x, bitmap regs, int max_depth, void *data) { result = cselib_expand_value_rtx_cb (loc->loc, regs, max_depth, vt_expand_loc_callback, vars); - result = check_wrap_constant (GET_MODE (loc->loc), result); if (result) break; } @@ -6332,7 +6327,7 @@ vt_expand_loc_callback (rtx x, bitmap regs, int max_depth, void *data) if (result) return result; else - return x; + return xret; } /* Expand VALUEs in LOC, using VARS as well as cselib's equivalence @@ -6341,14 +6336,11 @@ vt_expand_loc_callback (rtx x, bitmap regs, int max_depth, void *data) static rtx vt_expand_loc (rtx loc, htab_t vars) { - rtx newloc; - if (!MAY_HAVE_DEBUG_INSNS) return loc; - newloc = cselib_expand_value_rtx_cb (loc, scratch_regs, 5, - vt_expand_loc_callback, vars); - loc = check_wrap_constant (GET_MODE (loc), newloc); + loc = cselib_expand_value_rtx_cb (loc, scratch_regs, 5, + vt_expand_loc_callback, vars); if (loc && MEM_P (loc)) loc = targetm.delegitimize_address (loc); @@ -6382,6 +6374,9 @@ emit_note_insn_var_location (void **varp, void *data) decl = dv_as_decl (var->dv); + if (TREE_CODE (decl) == DEBUG_EXPR_DECL) + goto clear; + gcc_assert (decl); complete = true; diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c index 0fab5e73ae2..b16e76e61c0 100644 --- a/gcc/vmsdbgout.c +++ b/gcc/vmsdbgout.c @@ -168,6 +168,7 @@ static int write_srccorrs (int); static void vmsdbgout_init (const char *); static void vmsdbgout_finish (const char *); +static void vmsdbgout_assembly_start (void); static void vmsdbgout_define (unsigned int, const char *); static void vmsdbgout_undef (unsigned int, const char *); static void vmsdbgout_start_source_file (unsigned int, const char *); @@ -190,6 +191,7 @@ static void vmsdbgout_abstract_function (tree); const struct gcc_debug_hooks vmsdbg_debug_hooks = {vmsdbgout_init, vmsdbgout_finish, + vmsdbgout_assembly_start, vmsdbgout_define, vmsdbgout_undef, vmsdbgout_start_source_file, @@ -1618,6 +1620,15 @@ vmsdbgout_init (const char *main_input_filename) /* Not implemented in VMS Debug. */ static void +vmsdbgout_assembly_start (void) +{ + if (write_symbols == VMS_AND_DWARF2_DEBUG) + (*dwarf2_debug_hooks.assembly_start) (); +} + +/* Not implemented in VMS Debug. */ + +static void vmsdbgout_define (unsigned int lineno, const char *buffer) { if (write_symbols == VMS_AND_DWARF2_DEBUG) diff --git a/include/ChangeLog b/include/ChangeLog index d084bda3250..6cff29517f6 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,19 @@ +2009-10-23 Kai Tietz <kai.tietz@onevision.com> + + * splay-tree.h (libi_uhostptr_t): Add gcc specific + __extension__ for long long type case to silent cX9. + (libi_shostptr_t): Likewise. + +2009-10-19 Rafael Avila de Espindola <espindola@google.com> + + PR40790 + * plugin-api.h: Don't include stdint.h unconditionally. + +2009-10-15 Jakub Jelinek <jakub@redhat.com> + + * include/dwarf2.h (DW_LANG_Python): Add comment that it is + a DWARF 4 addition. + 2009-10-09 Rafael Espindola <espindola@google.com> * plugin-api.h (ld_plugin_add_input_library): Change argument name to diff --git a/include/dwarf2.h b/include/dwarf2.h index 385ab2256fa..7a8e030a2bf 100644 --- a/include/dwarf2.h +++ b/include/dwarf2.h @@ -858,6 +858,7 @@ enum dwarf_source_language DW_LANG_ObjC_plus_plus = 0x0011, DW_LANG_UPC = 0x0012, DW_LANG_D = 0x0013, + /* DWARF 4. */ DW_LANG_Python = 0x0014, DW_LANG_lo_user = 0x8000, /* Implementation-defined range start. */ diff --git a/include/plugin-api.h b/include/plugin-api.h index a026e7a004b..572621fc374 100644 --- a/include/plugin-api.h +++ b/include/plugin-api.h @@ -26,8 +26,16 @@ #ifndef PLUGIN_API_H #define PLUGIN_API_H +#ifdef HAVE_STDINT_H #include <stdint.h> +#elif defined(HAVE_INTTYPES_H) +#include <inttypes.h> +#endif #include <sys/types.h> +#if !defined(HAVE_STDINT_H) && !defined(HAVE_INTTYPES_H) && \ + !defined(UINT64_MAX) && !defined(uint64_t) +#error can not find uint64_t type +#endif #ifdef __cplusplus extern "C" diff --git a/include/splay-tree.h b/include/splay-tree.h index 8a56a20cdc3..57a96c4a3de 100644 --- a/include/splay-tree.h +++ b/include/splay-tree.h @@ -41,7 +41,13 @@ extern "C" { typedef unsigned long int libi_uhostptr_t; typedef long int libi_shostptr_t; #else +#ifdef __GNUC__ + __extension__ +#endif typedef unsigned long long libi_uhostptr_t; +#ifdef __GNUC__ + __extension__ +#endif typedef long long libi_shostptr_t; #endif diff --git a/intl/ChangeLog b/intl/ChangeLog index 83a74febece..20aaed376b0 100644 --- a/intl/ChangeLog +++ b/intl/ChangeLog @@ -1,3 +1,9 @@ +2009-10-15 Jim Blandy <jimb@red-bean.com> + + * libgnuintl.h (_INTL_MAY_RETURN_STRING_ARG, gettext, dgettext) + (dcgettext, ngettext, dngettext, dcngettext): Backport changes + from current gettext to provide GCC format_arg attributes. + 2009-08-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * configure.ac (AC_PREREQ): Bump to 2.64. diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h index f6138affb59..acc9093a9de 100644 --- a/intl/libgnuintl.h +++ b/intl/libgnuintl.h @@ -112,11 +112,21 @@ extern "C" { # define _INTL_ASM(cname) #endif +/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return + its n-th argument literally. This enables GCC to warn for example about + printf (gettext ("foo %y")). */ +#if __GNUC__ >= 3 && !(__APPLE_CC__ > 1 && defined __cplusplus) +# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n))) +#else +# define _INTL_MAY_RETURN_STRING_ARG(n) +#endif + /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ #ifdef _INTL_REDIRECT_INLINE -extern char *libintl_gettext (const char *__msgid); +extern char *libintl_gettext (const char *__msgid) + _INTL_MAY_RETURN_STRING_ARG (1); static inline char *gettext (const char *__msgid) { return libintl_gettext (__msgid); @@ -126,13 +136,15 @@ static inline char *gettext (const char *__msgid) # define gettext libintl_gettext #endif extern char *gettext _INTL_PARAMS ((const char *__msgid)) - _INTL_ASM (libintl_gettext); + _INTL_ASM (libintl_gettext) + _INTL_MAY_RETURN_STRING_ARG (1); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ #ifdef _INTL_REDIRECT_INLINE -extern char *libintl_dgettext (const char *__domainname, const char *__msgid); +extern char *libintl_dgettext (const char *__domainname, const char *__msgid) + _INTL_MAY_RETURN_STRING_ARG (2); static inline char *dgettext (const char *__domainname, const char *__msgid) { return libintl_dgettext (__domainname, __msgid); @@ -143,14 +155,16 @@ static inline char *dgettext (const char *__domainname, const char *__msgid) #endif extern char *dgettext _INTL_PARAMS ((const char *__domainname, const char *__msgid)) - _INTL_ASM (libintl_dgettext); + _INTL_ASM (libintl_dgettext) + _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcgettext (const char *__domainname, const char *__msgid, - int __category); + int __category) + _INTL_MAY_RETURN_STRING_ARG (2); static inline char *dcgettext (const char *__domainname, const char *__msgid, int __category) { @@ -163,7 +177,8 @@ static inline char *dcgettext (const char *__domainname, const char *__msgid, extern char *dcgettext _INTL_PARAMS ((const char *__domainname, const char *__msgid, int __category)) - _INTL_ASM (libintl_dcgettext); + _INTL_ASM (libintl_dcgettext) + _INTL_MAY_RETURN_STRING_ARG (2); #endif @@ -171,7 +186,8 @@ extern char *dcgettext _INTL_PARAMS ((const char *__domainname, number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2, - unsigned long int __n); + unsigned long int __n) + _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2); static inline char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) { @@ -184,14 +200,16 @@ static inline char *ngettext (const char *__msgid1, const char *__msgid2, extern char *ngettext _INTL_PARAMS ((const char *__msgid1, const char *__msgid2, unsigned long int __n)) - _INTL_ASM (libintl_ngettext); + _INTL_ASM (libintl_ngettext) + _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Similar to `dgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dngettext (const char *__domainname, const char *__msgid1, - const char *__msgid2, unsigned long int __n); + const char *__msgid2, unsigned long int __n) + _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); static inline char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) { @@ -205,7 +223,8 @@ extern char *dngettext _INTL_PARAMS ((const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n)) - _INTL_ASM (libintl_dngettext); + _INTL_ASM (libintl_dngettext) + _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); #endif /* Similar to `dcgettext' but select the plural form corresponding to the @@ -213,7 +232,8 @@ extern char *dngettext _INTL_PARAMS ((const char *__domainname, #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, - unsigned long int __n, int __category); + unsigned long int __n, int __category) + _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); static inline char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) @@ -229,7 +249,8 @@ extern char *dcngettext _INTL_PARAMS ((const char *__domainname, const char *__msgid2, unsigned long int __n, int __category)) - _INTL_ASM (libintl_dcngettext); + _INTL_ASM (libintl_dcngettext) + _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); #endif diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 9d9556ee0ad..5946b29dc56 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,28 @@ +2009-10-19 Jakub Jelinek <jakub@redhat.com> + + * charset.c (cpp_init_iconv): Initialize utf8_cset_desc. + (_cpp_destroy_iconv): Destroy utf8_cset_desc, char16_cset_desc + and char32_cset_desc. + (converter_for_type): Handle CPP_UTF8STRING. + (cpp_interpret_string): Handle CPP_UTF8STRING and raw-strings. + * directives.c (get__Pragma_string): Handle CPP_UTF8STRING. + (parse_include): Reject raw strings. + * include/cpplib.h (CPP_UTF8STRING): New token type. + * internal.h (struct cpp_reader): Add utf8_cset_desc field. + * lex.c (lex_raw_string): New function. + (lex_string): Handle u8 string literals, call lex_raw_string + for raw string literals. + (_cpp_lex_direct): Call lex_string even for u8" and {,u,U,L,u8}R" + sequences. + * macro.c (stringify_arg): Handle CPP_UTF8STRING. + +2009-10-14 Jakub Jelinek <jakub@redhat.com> + + PR preprocessor/41543 + * include/line-map.h (RESERVED_LOCATION_COUNT): Define. + * line-map.c (linemap_init): Initialize highest_location and + highest_line to RESERVED_LOCATION_COUNT-1 instead of 0. + 2009-10-09 Jason Merrill <jason@redhat.com> * charset.c (_cpp_valid_ucn): Update C++0x restrictions. diff --git a/libcpp/charset.c b/libcpp/charset.c index bd24ec2490d..837ccd77aab 100644 --- a/libcpp/charset.c +++ b/libcpp/charset.c @@ -721,6 +721,8 @@ cpp_init_iconv (cpp_reader *pfile) pfile->narrow_cset_desc = init_iconv_desc (pfile, ncset, SOURCE_CHARSET); pfile->narrow_cset_desc.width = CPP_OPTION (pfile, char_precision); + pfile->utf8_cset_desc = init_iconv_desc (pfile, "UTF-8", SOURCE_CHARSET); + pfile->utf8_cset_desc.width = CPP_OPTION (pfile, char_precision); pfile->char16_cset_desc = init_iconv_desc (pfile, be ? "UTF-16BE" : "UTF-16LE", SOURCE_CHARSET); @@ -741,6 +743,12 @@ _cpp_destroy_iconv (cpp_reader *pfile) { if (pfile->narrow_cset_desc.func == convert_using_iconv) iconv_close (pfile->narrow_cset_desc.cd); + if (pfile->utf8_cset_desc.func == convert_using_iconv) + iconv_close (pfile->utf8_cset_desc.cd); + if (pfile->char16_cset_desc.func == convert_using_iconv) + iconv_close (pfile->char16_cset_desc.cd); + if (pfile->char32_cset_desc.func == convert_using_iconv) + iconv_close (pfile->char32_cset_desc.cd); if (pfile->wide_cset_desc.func == convert_using_iconv) iconv_close (pfile->wide_cset_desc.cd); } @@ -1339,6 +1347,8 @@ converter_for_type (cpp_reader *pfile, enum cpp_ttype type) { default: return pfile->narrow_cset_desc; + case CPP_UTF8STRING: + return pfile->utf8_cset_desc; case CPP_CHAR16: case CPP_STRING16: return pfile->char16_cset_desc; @@ -1373,7 +1383,47 @@ cpp_interpret_string (cpp_reader *pfile, const cpp_string *from, size_t count, for (i = 0; i < count; i++) { p = from[i].text; - if (*p == 'L' || *p == 'u' || *p == 'U') p++; + if (*p == 'u') + { + if (*++p == '8') + p++; + } + else if (*p == 'L' || *p == 'U') p++; + if (*p == 'R') + { + const uchar *prefix; + + /* Skip over 'R"'. */ + p += 2; + prefix = p; + while (*p != '[') + p++; + p++; + limit = from[i].text + from[i].len; + if (limit >= p + (p - prefix) + 1) + limit -= (p - prefix) + 1; + + for (;;) + { + base = p; + while (p < limit && (*p != '\\' || (p[1] != 'u' && p[1] != 'U'))) + p++; + if (p > base) + { + /* We have a run of normal characters; these can be fed + directly to convert_cset. */ + if (!APPLY_CONVERSION (cvt, base, p - base, &tbuf)) + goto fail; + } + if (p == limit) + break; + + p = convert_ucn (pfile, p + 1, limit, &tbuf, cvt); + } + + continue; + } + p++; /* Skip leading quote. */ limit = from[i].text + from[i].len - 1; /* Skip trailing quote. */ diff --git a/libcpp/directives.c b/libcpp/directives.c index f9dba539ea2..01bb599e266 100644 --- a/libcpp/directives.c +++ b/libcpp/directives.c @@ -697,7 +697,8 @@ parse_include (cpp_reader *pfile, int *pangle_brackets, /* Allow macro expansion. */ header = get_token_no_padding (pfile); *location = header->src_loc; - if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME) + if ((header->type == CPP_STRING && header->val.str.text[0] != 'R') + || header->type == CPP_HEADER_NAME) { fname = XNEWVEC (char, header->val.str.len - 1); memcpy (fname, header->val.str.text + 1, header->val.str.len - 2); @@ -1537,7 +1538,8 @@ get__Pragma_string (cpp_reader *pfile) if (string->type == CPP_EOF) _cpp_backup_tokens (pfile, 1); if (string->type != CPP_STRING && string->type != CPP_WSTRING - && string->type != CPP_STRING32 && string->type != CPP_STRING16) + && string->type != CPP_STRING32 && string->type != CPP_STRING16 + && string->type != CPP_UTF8STRING) return NULL; paren = get_token_no_padding (pfile); diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index df04668dda0..e95f01a412a 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -127,6 +127,7 @@ struct _cpp_file; TK(WSTRING, LITERAL) /* L"string" */ \ TK(STRING16, LITERAL) /* u"string" */ \ TK(STRING32, LITERAL) /* U"string" */ \ + TK(UTF8STRING, LITERAL) /* u8"string" */ \ TK(OBJC_STRING, LITERAL) /* @"string" - Objective-C */ \ TK(HEADER_NAME, LITERAL) /* <stdio.h> in #include */ \ \ @@ -728,10 +729,10 @@ extern const unsigned char *cpp_macro_definition (cpp_reader *, extern void _cpp_backup_tokens (cpp_reader *, unsigned int); extern const cpp_token *cpp_peek_token (cpp_reader *, int); -/* Evaluate a CPP_CHAR or CPP_WCHAR token. */ +/* Evaluate a CPP_*CHAR* token. */ extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *, unsigned int *, int *); -/* Evaluate a vector of CPP_STRING or CPP_WSTRING tokens. */ +/* Evaluate a vector of CPP_*STRING* tokens. */ extern bool cpp_interpret_string (cpp_reader *, const cpp_string *, size_t, cpp_string *, enum cpp_ttype); diff --git a/libcpp/include/line-map.h b/libcpp/include/line-map.h index 31ac8e5d4c3..9e31a6ae3b9 100644 --- a/libcpp/include/line-map.h +++ b/libcpp/include/line-map.h @@ -143,6 +143,11 @@ extern const struct line_map *linemap_add extern const struct line_map *linemap_lookup (struct line_maps *, source_location); +/* source_location values from 0 to RESERVED_LOCATION_COUNT-1 will + be reserved for libcpp user as special values, no token from libcpp + will contain any of those locations. */ +#define RESERVED_LOCATION_COUNT 2 + /* Converts a map and a source_location to source line. */ #define SOURCE_LINE(MAP, LOC) \ ((((LOC) - (MAP)->start_location) >> (MAP)->column_bits) + (MAP)->to_line) diff --git a/libcpp/internal.h b/libcpp/internal.h index 21e51c6553c..aaa231c2ab1 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -397,6 +397,10 @@ struct cpp_reader struct cset_converter narrow_cset_desc; /* Descriptor for converting from the source character set to the + UTF-8 execution character set. */ + struct cset_converter utf8_cset_desc; + + /* Descriptor for converting from the source character set to the UTF-16 execution character set. */ struct cset_converter char16_cset_desc; diff --git a/libcpp/lex.c b/libcpp/lex.c index bab14a4baa3..55bffa9a326 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -617,12 +617,192 @@ create_literal (cpp_reader *pfile, cpp_token *token, const uchar *base, token->val.str.text = dest; } +/* Lexes a raw string. The stored string contains the spelling, including + double quotes, delimiter string, '[' and ']', any leading + 'L', 'u', 'U' or 'u8' and 'R' modifier. It returns the type of the + literal, or CPP_OTHER if it was not properly terminated. + + The spelling is NUL-terminated, but it is not guaranteed that this + is the first NUL since embedded NULs are preserved. */ + +static void +lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base, + const uchar *cur) +{ + source_location saw_NUL = 0; + const uchar *raw_prefix; + unsigned int raw_prefix_len = 0; + enum cpp_ttype type; + size_t total_len = 0; + _cpp_buff *first_buff = NULL, *last_buff = NULL; + + type = (*base == 'L' ? CPP_WSTRING : + *base == 'U' ? CPP_STRING32 : + *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16) + : CPP_STRING); + + raw_prefix = cur + 1; + while (raw_prefix_len < 16) + { + switch (raw_prefix[raw_prefix_len]) + { + case ' ': case '[': case ']': case '\t': + case '\v': case '\f': case '\n': default: + break; + /* Basic source charset except the above chars. */ + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case '_': case '{': case '}': case '#': case '(': case ')': + case '<': case '>': case '%': case ':': case ';': case '.': + case '?': case '*': case '+': case '-': case '/': case '^': + case '&': case '|': case '~': case '!': case '=': case ',': + case '\\': case '"': case '\'': + raw_prefix_len++; + continue; + } + break; + } + + if (raw_prefix[raw_prefix_len] != '[') + { + int col = CPP_BUF_COLUMN (pfile->buffer, raw_prefix + raw_prefix_len) + + 1; + if (raw_prefix_len == 16) + cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, col, + "raw string delimiter longer than 16 characters"); + else + cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, col, + "invalid character '%c' in raw string delimiter", + (int) raw_prefix[raw_prefix_len]); + pfile->buffer->cur = raw_prefix - 1; + create_literal (pfile, token, base, raw_prefix - 1 - base, CPP_OTHER); + return; + } + + cur = raw_prefix + raw_prefix_len + 1; + for (;;) + { + cppchar_t c = *cur++; + + if (c == ']' + && strncmp ((const char *) cur, (const char *) raw_prefix, + raw_prefix_len) == 0 + && cur[raw_prefix_len] == '"') + { + cur += raw_prefix_len + 1; + break; + } + else if (c == '\n') + { + if (pfile->state.in_directive + || pfile->state.parsing_args + || pfile->state.in_deferred_pragma) + { + cur--; + type = CPP_OTHER; + cpp_error_with_line (pfile, CPP_DL_ERROR, token->src_loc, 0, + "unterminated raw string"); + break; + } + + /* raw strings allow embedded non-escaped newlines, which + complicates this routine a lot. */ + if (first_buff == NULL) + { + total_len = cur - base; + first_buff = last_buff = _cpp_get_buff (pfile, total_len); + memcpy (BUFF_FRONT (last_buff), base, total_len); + raw_prefix = BUFF_FRONT (last_buff) + (raw_prefix - base); + BUFF_FRONT (last_buff) += total_len; + } + else + { + size_t len = cur - base; + size_t cur_len = len > BUFF_ROOM (last_buff) + ? BUFF_ROOM (last_buff) : len; + + total_len += len; + memcpy (BUFF_FRONT (last_buff), base, cur_len); + BUFF_FRONT (last_buff) += cur_len; + if (len > cur_len) + { + last_buff = _cpp_append_extend_buff (pfile, last_buff, + len - cur_len); + memcpy (BUFF_FRONT (last_buff), base + cur_len, + len - cur_len); + BUFF_FRONT (last_buff) += len - cur_len; + } + } + + if (pfile->buffer->cur < pfile->buffer->rlimit) + CPP_INCREMENT_LINE (pfile, 0); + pfile->buffer->need_line = true; + + if (!_cpp_get_fresh_line (pfile)) + { + source_location src_loc = token->src_loc; + token->type = CPP_EOF; + /* Tell the compiler the line number of the EOF token. */ + token->src_loc = pfile->line_table->highest_line; + token->flags = BOL; + if (first_buff != NULL) + _cpp_release_buff (pfile, first_buff); + cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0, + "unterminated raw string"); + return; + } + + cur = base = pfile->buffer->cur; + } + else if (c == '\0' && !saw_NUL) + LINEMAP_POSITION_FOR_COLUMN (saw_NUL, pfile->line_table, + CPP_BUF_COLUMN (pfile->buffer, cur)); + } + + if (saw_NUL && !pfile->state.skipping) + cpp_error_with_line (pfile, CPP_DL_WARNING, saw_NUL, 0, + "null character(s) preserved in literal"); + + pfile->buffer->cur = cur; + if (first_buff == NULL) + create_literal (pfile, token, base, cur - base, type); + else + { + uchar *dest = _cpp_unaligned_alloc (pfile, total_len + (cur - base) + 1); + + token->type = type; + token->val.str.len = total_len + (cur - base); + token->val.str.text = dest; + last_buff = first_buff; + while (last_buff != NULL) + { + memcpy (dest, last_buff->base, + BUFF_FRONT (last_buff) - last_buff->base); + dest += BUFF_FRONT (last_buff) - last_buff->base; + last_buff = last_buff->next; + } + _cpp_release_buff (pfile, first_buff); + memcpy (dest, base, cur - base); + dest[cur - base] = '\0'; + } +} + /* Lexes a string, character constant, or angle-bracketed header file name. The stored string contains the spelling, including opening - quote and leading any leading 'L', 'u' or 'U'. It returns the type - of the literal, or CPP_OTHER if it was not properly terminated, or - CPP_LESS for an unterminated header name which must be relexed as - normal tokens. + quote and any leading 'L', 'u', 'U' or 'u8' and optional + 'R' modifier. It returns the type of the literal, or CPP_OTHER + if it was not properly terminated, or CPP_LESS for an unterminated + header name which must be relexed as normal tokens. The spelling is NUL-terminated, but it is not guaranteed that this is the first NUL since embedded NULs are preserved. */ @@ -636,12 +816,24 @@ lex_string (cpp_reader *pfile, cpp_token *token, const uchar *base) cur = base; terminator = *cur++; - if (terminator == 'L' || terminator == 'u' || terminator == 'U') + if (terminator == 'L' || terminator == 'U') terminator = *cur++; - if (terminator == '\"') + else if (terminator == 'u') + { + terminator = *cur++; + if (terminator == '8') + terminator = *cur++; + } + if (terminator == 'R') + { + lex_raw_string (pfile, token, base, cur); + return; + } + if (terminator == '"') type = (*base == 'L' ? CPP_WSTRING : *base == 'U' ? CPP_STRING32 : - *base == 'u' ? CPP_STRING16 : CPP_STRING); + *base == 'u' ? (base[1] == '8' ? CPP_UTF8STRING : CPP_STRING16) + : CPP_STRING); else if (terminator == '\'') type = (*base == 'L' ? CPP_WCHAR : *base == 'U' ? CPP_CHAR32 : @@ -1101,10 +1293,21 @@ _cpp_lex_direct (cpp_reader *pfile) case 'L': case 'u': case 'U': - /* 'L', 'u' or 'U' may introduce wide characters or strings. */ + case 'R': + /* 'L', 'u', 'U', 'u8' or 'R' may introduce wide characters, + wide strings or raw strings. */ if (c == 'L' || CPP_OPTION (pfile, uliterals)) { - if (*buffer->cur == '\'' || *buffer->cur == '"') + if ((*buffer->cur == '\'' && c != 'R') + || *buffer->cur == '"' + || (*buffer->cur == 'R' + && c != 'R' + && buffer->cur[1] == '"' + && CPP_OPTION (pfile, uliterals)) + || (*buffer->cur == '8' + && c == 'u' + && (buffer->cur[1] == '"' + || (buffer->cur[1] == 'R' && buffer->cur[2] == '"')))) { lex_string (pfile, result, buffer->cur - 1); break; @@ -1120,7 +1323,7 @@ _cpp_lex_direct (cpp_reader *pfile) case 'y': case 'z': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': - case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'S': case 'T': case 'V': case 'W': case 'X': case 'Y': case 'Z': result->type = CPP_NAME; diff --git a/libcpp/line-map.c b/libcpp/line-map.c index 553cc2ab605..a82c4286f07 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -38,8 +38,8 @@ linemap_init (struct line_maps *set) set->trace_includes = false; set->depth = 0; set->cache = 0; - set->highest_location = 0; - set->highest_line = 0; + set->highest_location = RESERVED_LOCATION_COUNT - 1; + set->highest_line = RESERVED_LOCATION_COUNT - 1; set->max_column_hint = 0; set->reallocator = 0; } diff --git a/libcpp/macro.c b/libcpp/macro.c index f31805955c6..1d284cf9f8a 100644 --- a/libcpp/macro.c +++ b/libcpp/macro.c @@ -379,7 +379,8 @@ stringify_arg (cpp_reader *pfile, macro_arg *arg) escape_it = (token->type == CPP_STRING || token->type == CPP_CHAR || token->type == CPP_WSTRING || token->type == CPP_WCHAR || token->type == CPP_STRING32 || token->type == CPP_CHAR32 - || token->type == CPP_STRING16 || token->type == CPP_CHAR16); + || token->type == CPP_STRING16 || token->type == CPP_CHAR16 + || token->type == CPP_UTF8STRING); /* Room for each char being written in octal, initial space and final quote and NUL. */ diff --git a/libcpp/po/ChangeLog b/libcpp/po/ChangeLog index 1a295b5c1f4..e6ce3126a60 100644 --- a/libcpp/po/ChangeLog +++ b/libcpp/po/ChangeLog @@ -1,3 +1,7 @@ +2009-10-17 Joseph Myers <joseph@codesourcery.com> + + * cpplib.pot: Regenerate. + 2009-09-19 Joseph Myers <joseph@codesourcery.com> * vi.po: Update. diff --git a/libcpp/po/cpplib.pot b/libcpp/po/cpplib.pot index 94adf5d08f5..7a5450ff9da 100644 --- a/libcpp/po/cpplib.pot +++ b/libcpp/po/cpplib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" -"POT-Creation-Date: 2009-04-22 16:24+0000\n" +"POT-Creation-Date: 2009-10-17 13:36+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -36,7 +36,7 @@ msgid "character 0x%lx is not in the basic source character set\n" msgstr "" #: charset.c:790 -#: charset.c:1398 +#: charset.c:1407 msgid "converting to execution character set" msgstr "" @@ -50,355 +50,355 @@ msgstr "" msgid "Character %x might not be NFKC" msgstr "" -#: charset.c:980 +#: charset.c:986 msgid "universal character names are only valid in C++ and C99" msgstr "" -#: charset.c:983 +#: charset.c:989 #, c-format msgid "the meaning of '\\%c' is different in traditional C" msgstr "" -#: charset.c:992 +#: charset.c:998 msgid "In _cpp_valid_ucn but not a UCN" msgstr "" -#: charset.c:1017 +#: charset.c:1023 #, c-format msgid "incomplete universal character name %.*s" msgstr "" -#: charset.c:1029 +#: charset.c:1038 #, c-format msgid "%.*s is not a valid universal character" msgstr "" -#: charset.c:1039 +#: charset.c:1048 #: lex.c:486 msgid "'$' in identifier or number" msgstr "" -#: charset.c:1049 +#: charset.c:1058 #, c-format msgid "universal character %.*s is not valid in an identifier" msgstr "" -#: charset.c:1053 +#: charset.c:1062 #, c-format msgid "universal character %.*s is not valid at the start of an identifier" msgstr "" -#: charset.c:1085 -#: charset.c:1628 +#: charset.c:1094 +#: charset.c:1637 msgid "converting UCN to source character set" msgstr "" -#: charset.c:1089 +#: charset.c:1098 msgid "converting UCN to execution character set" msgstr "" -#: charset.c:1161 +#: charset.c:1170 msgid "the meaning of '\\x' is different in traditional C" msgstr "" -#: charset.c:1178 +#: charset.c:1187 msgid "\\x used with no following hex digits" msgstr "" -#: charset.c:1185 +#: charset.c:1194 msgid "hex escape sequence out of range" msgstr "" -#: charset.c:1223 +#: charset.c:1232 msgid "octal escape sequence out of range" msgstr "" -#: charset.c:1289 +#: charset.c:1298 msgid "the meaning of '\\a' is different in traditional C" msgstr "" -#: charset.c:1296 +#: charset.c:1305 #, c-format msgid "non-ISO-standard escape sequence, '\\%c'" msgstr "" -#: charset.c:1304 +#: charset.c:1313 #, c-format -msgid "unknown escape sequence '\\%c'" +msgid "unknown escape sequence: '\\%c'" msgstr "" -#: charset.c:1312 +#: charset.c:1321 #, c-format msgid "unknown escape sequence: '\\%s'" msgstr "" -#: charset.c:1319 +#: charset.c:1328 msgid "converting escape sequence to execution character set" msgstr "" -#: charset.c:1463 -#: charset.c:1527 +#: charset.c:1472 +#: charset.c:1536 msgid "character constant too long for its type" msgstr "" -#: charset.c:1466 +#: charset.c:1475 msgid "multi-character character constant" msgstr "" -#: charset.c:1566 +#: charset.c:1575 msgid "empty character constant" msgstr "" -#: charset.c:1675 +#: charset.c:1684 #, c-format msgid "failure to convert %s to %s" msgstr "" -#: directives.c:219 -#: directives.c:245 +#: directives.c:220 +#: directives.c:246 #, c-format msgid "extra tokens at end of #%s directive" msgstr "" -#: directives.c:351 +#: directives.c:352 #, c-format msgid "#%s is a GCC extension" msgstr "" -#: directives.c:355 +#: directives.c:356 #, c-format msgid "#%s is a deprecated GCC extension" msgstr "" -#: directives.c:369 +#: directives.c:370 msgid "suggest not using #elif in traditional C" msgstr "" -#: directives.c:372 +#: directives.c:373 #, c-format msgid "traditional C ignores #%s with the # indented" msgstr "" -#: directives.c:376 +#: directives.c:377 #, c-format msgid "suggest hiding #%s from traditional C with an indented #" msgstr "" -#: directives.c:402 +#: directives.c:403 msgid "embedding a directive within macro arguments is not portable" msgstr "" -#: directives.c:422 +#: directives.c:423 msgid "style of line directive is a GCC extension" msgstr "" -#: directives.c:477 +#: directives.c:478 #, c-format msgid "invalid preprocessing directive #%s" msgstr "" -#: directives.c:545 +#: directives.c:546 msgid "\"defined\" cannot be used as a macro name" msgstr "" -#: directives.c:551 +#: directives.c:552 #, c-format msgid "\"%s\" cannot be used as a macro name as it is an operator in C++" msgstr "" -#: directives.c:554 +#: directives.c:555 #, c-format msgid "no macro name given in #%s directive" msgstr "" -#: directives.c:557 +#: directives.c:558 msgid "macro names must be identifiers" msgstr "" -#: directives.c:606 +#: directives.c:607 #, c-format msgid "undefining \"%s\"" msgstr "" -#: directives.c:661 +#: directives.c:662 msgid "missing terminating > character" msgstr "" -#: directives.c:716 +#: directives.c:720 #, c-format msgid "#%s expects \"FILENAME\" or <FILENAME>" msgstr "" -#: directives.c:760 +#: directives.c:766 #, c-format msgid "empty filename in #%s" msgstr "" -#: directives.c:770 +#: directives.c:776 msgid "#include nested too deeply" msgstr "" -#: directives.c:811 +#: directives.c:817 msgid "#include_next in primary source file" msgstr "" -#: directives.c:837 +#: directives.c:843 #, c-format msgid "invalid flag \"%s\" in line directive" msgstr "" -#: directives.c:897 +#: directives.c:903 msgid "unexpected end of file after #line" msgstr "" -#: directives.c:900 +#: directives.c:906 #, c-format msgid "\"%s\" after #line is not a positive integer" msgstr "" -#: directives.c:906 -#: directives.c:908 +#: directives.c:912 +#: directives.c:914 msgid "line number out of range" msgstr "" -#: directives.c:921 -#: directives.c:1001 +#: directives.c:927 +#: directives.c:1007 #, c-format msgid "\"%s\" is not a valid filename" msgstr "" -#: directives.c:961 +#: directives.c:967 #, c-format msgid "\"%s\" after # is not a positive integer" msgstr "" -#: directives.c:1045 +#: directives.c:1059 #, c-format msgid "%s" msgstr "" -#: directives.c:1069 +#: directives.c:1083 #, c-format msgid "invalid #%s directive" msgstr "" -#: directives.c:1132 +#: directives.c:1146 #, c-format msgid "registering pragmas in namespace \"%s\" with mismatched name expansion" msgstr "" -#: directives.c:1141 +#: directives.c:1155 #, c-format msgid "registering pragma \"%s\" with name expansion and no namespace" msgstr "" -#: directives.c:1159 +#: directives.c:1173 #, c-format msgid "registering \"%s\" as both a pragma and a pragma namespace" msgstr "" -#: directives.c:1162 +#: directives.c:1176 #, c-format msgid "#pragma %s %s is already registered" msgstr "" -#: directives.c:1165 +#: directives.c:1179 #, c-format msgid "#pragma %s is already registered" msgstr "" -#: directives.c:1195 +#: directives.c:1209 msgid "registering pragma with NULL handler" msgstr "" -#: directives.c:1405 +#: directives.c:1419 msgid "#pragma once in main file" msgstr "" -#: directives.c:1428 +#: directives.c:1442 msgid "invalid #pragma GCC poison directive" msgstr "" -#: directives.c:1437 +#: directives.c:1451 #, c-format msgid "poisoning existing macro \"%s\"" msgstr "" -#: directives.c:1456 +#: directives.c:1470 msgid "#pragma system_header ignored outside include file" msgstr "" -#: directives.c:1480 +#: directives.c:1495 #, c-format msgid "cannot find source file %s" msgstr "" -#: directives.c:1484 +#: directives.c:1499 #, c-format msgid "current file is older than %s" msgstr "" -#: directives.c:1668 +#: directives.c:1683 msgid "_Pragma takes a parenthesized string literal" msgstr "" -#: directives.c:1769 +#: directives.c:1784 msgid "#else without #if" msgstr "" -#: directives.c:1774 +#: directives.c:1789 msgid "#else after #else" msgstr "" -#: directives.c:1776 -#: directives.c:1809 +#: directives.c:1791 +#: directives.c:1824 msgid "the conditional began here" msgstr "" -#: directives.c:1802 +#: directives.c:1817 msgid "#elif without #if" msgstr "" -#: directives.c:1807 +#: directives.c:1822 msgid "#elif after #else" msgstr "" -#: directives.c:1845 +#: directives.c:1860 msgid "#endif without #if" msgstr "" -#: directives.c:1922 +#: directives.c:1940 msgid "missing '(' after predicate" msgstr "" -#: directives.c:1937 +#: directives.c:1955 msgid "missing ')' to complete answer" msgstr "" -#: directives.c:1957 +#: directives.c:1975 msgid "predicate's answer is empty" msgstr "" -#: directives.c:1984 +#: directives.c:2002 msgid "assertion without predicate" msgstr "" -#: directives.c:1986 +#: directives.c:2005 msgid "predicate must be an identifier" msgstr "" -#: directives.c:2072 +#: directives.c:2091 #, c-format msgid "\"%s\" re-asserted" msgstr "" -#: directives.c:2371 +#: directives.c:2391 #, c-format msgid "unterminated #%s" msgstr "" #: directives-only.c:222 -#: lex.c:1149 +#: lex.c:1155 #: traditional.c:163 msgid "unterminated comment" msgstr "" @@ -412,243 +412,243 @@ msgstr "" msgid "%s: %s" msgstr "" -#: expr.c:278 +#: expr.c:279 msgid "too many decimal points in number" msgstr "" -#: expr.c:307 -#: expr.c:389 +#: expr.c:308 +#: expr.c:390 msgid "fixed-point constants are a GCC extension" msgstr "" -#: expr.c:320 +#: expr.c:321 #, c-format msgid "invalid digit \"%c\" in binary constant" msgstr "" -#: expr.c:322 +#: expr.c:323 #, c-format msgid "invalid digit \"%c\" in octal constant" msgstr "" -#: expr.c:330 +#: expr.c:331 msgid "invalid prefix \"0b\" for floating constant" msgstr "" -#: expr.c:336 +#: expr.c:337 msgid "use of C99 hexadecimal floating constant" msgstr "" -#: expr.c:345 +#: expr.c:346 msgid "exponent has no digits" msgstr "" -#: expr.c:352 +#: expr.c:353 msgid "hexadecimal floating constants require an exponent" msgstr "" -#: expr.c:358 +#: expr.c:359 #, c-format msgid "invalid suffix \"%.*s\" on floating constant" msgstr "" -#: expr.c:368 -#: expr.c:417 +#: expr.c:369 +#: expr.c:418 #, c-format msgid "traditional C rejects the \"%.*s\" suffix" msgstr "" -#: expr.c:376 +#: expr.c:377 msgid "suffix for double constant is a GCC extension" msgstr "" -#: expr.c:382 +#: expr.c:383 #, c-format msgid "invalid suffix \"%.*s\" with hexadecimal floating constant" msgstr "" -#: expr.c:393 +#: expr.c:394 msgid "decimal float constants are a GCC extension" msgstr "" -#: expr.c:403 +#: expr.c:404 #, c-format msgid "invalid suffix \"%.*s\" on integer constant" msgstr "" -#: expr.c:426 +#: expr.c:427 msgid "use of C++0x long long integer constant" msgstr "" -#: expr.c:435 +#: expr.c:436 msgid "imaginary constants are a GCC extension" msgstr "" -#: expr.c:438 +#: expr.c:439 msgid "binary constants are a GCC extension" msgstr "" -#: expr.c:531 +#: expr.c:532 msgid "integer constant is too large for its type" msgstr "" -#: expr.c:543 +#: expr.c:563 msgid "integer constant is so large that it is unsigned" msgstr "" -#: expr.c:638 +#: expr.c:658 msgid "missing ')' after \"defined\"" msgstr "" -#: expr.c:645 +#: expr.c:665 msgid "operator \"defined\" requires an identifier" msgstr "" -#: expr.c:653 +#: expr.c:673 #, c-format msgid "(\"%s\" is an alternative token for \"%s\" in C++)" msgstr "" -#: expr.c:663 +#: expr.c:683 msgid "this use of \"defined\" may not be portable" msgstr "" -#: expr.c:716 +#: expr.c:736 msgid "floating constant in preprocessor expression" msgstr "" -#: expr.c:722 +#: expr.c:742 msgid "imaginary number in preprocessor expression" msgstr "" -#: expr.c:769 +#: expr.c:789 #, c-format msgid "\"%s\" is not defined" msgstr "" -#: expr.c:781 +#: expr.c:801 msgid "assertions are a GCC extension" msgstr "" -#: expr.c:784 +#: expr.c:804 msgid "assertions are a deprecated extension" msgstr "" -#: expr.c:917 -#: expr.c:946 +#: expr.c:937 +#: expr.c:966 #, c-format msgid "missing binary operator before token \"%s\"" msgstr "" -#: expr.c:937 +#: expr.c:957 #, c-format msgid "token \"%s\" is not valid in preprocessor expressions" msgstr "" -#: expr.c:954 +#: expr.c:974 msgid "missing expression between '(' and ')'" msgstr "" -#: expr.c:957 +#: expr.c:977 #, c-format msgid "%s with no expression" msgstr "" -#: expr.c:960 +#: expr.c:980 #, c-format msgid "operator '%s' has no right operand" msgstr "" -#: expr.c:965 +#: expr.c:985 #, c-format msgid "operator '%s' has no left operand" msgstr "" -#: expr.c:991 +#: expr.c:1011 msgid " ':' without preceding '?'" msgstr "" -#: expr.c:1019 +#: expr.c:1039 #, c-format msgid "unbalanced stack in %s" msgstr "" -#: expr.c:1039 +#: expr.c:1059 #, c-format msgid "impossible operator '%u'" msgstr "" -#: expr.c:1140 +#: expr.c:1160 msgid "missing ')' in expression" msgstr "" -#: expr.c:1169 +#: expr.c:1189 msgid "'?' without following ':'" msgstr "" -#: expr.c:1179 +#: expr.c:1199 msgid "integer overflow in preprocessor expression" msgstr "" -#: expr.c:1184 +#: expr.c:1204 msgid "missing '(' in expression" msgstr "" -#: expr.c:1216 +#: expr.c:1236 #, c-format msgid "the left operand of \"%s\" changes sign when promoted" msgstr "" -#: expr.c:1221 +#: expr.c:1241 #, c-format msgid "the right operand of \"%s\" changes sign when promoted" msgstr "" -#: expr.c:1480 +#: expr.c:1500 msgid "traditional C rejects the unary plus operator" msgstr "" -#: expr.c:1563 +#: expr.c:1583 msgid "comma operator in operand of #if" msgstr "" -#: expr.c:1695 +#: expr.c:1719 msgid "division by zero in #if" msgstr "" -#: files.c:457 +#: files.c:463 msgid "NULL directory in find_file" msgstr "" -#: files.c:494 +#: files.c:500 msgid "one or more PCH files were found, but they were invalid" msgstr "" -#: files.c:497 +#: files.c:503 msgid "use -Winvalid-pch for more information" msgstr "" -#: files.c:588 +#: files.c:594 #, c-format msgid "%s is a block device" msgstr "" -#: files.c:605 +#: files.c:611 #, c-format msgid "%s is too large" msgstr "" -#: files.c:640 +#: files.c:646 #, c-format msgid "%s is shorter than expected" msgstr "" -#: files.c:875 +#: files.c:881 #, c-format msgid "no include path in which to search for %s" msgstr "" -#: files.c:1286 +#: files.c:1306 msgid "Multiple include guards may be useful for:\n" msgstr "" @@ -740,28 +740,33 @@ msgstr "" msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro" msgstr "" -#: lex.c:675 +#: lex.c:567 +#, c-format +msgid "identifier \"%s\" is a special operator name in C++" +msgstr "" + +#: lex.c:681 msgid "null character(s) preserved in literal" msgstr "" -#: lex.c:678 +#: lex.c:684 #, c-format msgid "missing terminating %c character" msgstr "" -#: lex.c:1160 +#: lex.c:1166 msgid "C++ style comments are not allowed in ISO C90" msgstr "" -#: lex.c:1162 +#: lex.c:1168 msgid "(this will be reported only once per input file)" msgstr "" -#: lex.c:1167 +#: lex.c:1173 msgid "multi-line comment" msgstr "" -#: lex.c:1487 +#: lex.c:1493 #, c-format msgid "unspellable token %s" msgstr "" diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index b7c75e033ea..bf51dbcdd6d 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2009-10-12 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libgfortran/41683 + * io/format.c (parse_format_list): Allow a repeat specifier immediately + after a P specifier. + 2009-10-11 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/38439 diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index 97bd2da77ba..0ee60ea9012 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -706,7 +706,8 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok) goto data_desc; } - if (t != FMT_COMMA && t != FMT_RPAREN && t != FMT_SLASH) + if (t != FMT_COMMA && t != FMT_RPAREN && t != FMT_SLASH + && t != FMT_POSINT) { fmt->error = "Comma required after P descriptor"; goto finished; diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 682da80e297..ac9bb19b55a 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,10 @@ +2009-10-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + PR libgomp/41418 + * configure.ac: Set FC to "no" if $GFORTRAN starts with "no" + or a hyphen (happens with fortran language disabled). + * configure: Regenerate. + 2009-09-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * acinclude.m4 (LIBGOMP_CHECK_LINKER_FEATURES): Avoid 'head', diff --git a/libgomp/configure b/libgomp/configure index d138f687983..a0a93d6d328 100755 --- a/libgomp/configure +++ b/libgomp/configure @@ -11340,7 +11340,12 @@ fi # We need gfortran to compile parts of the library # We can't use AC_PROG_FC because it expects a fully working gfortran. #AC_PROG_FC(gfortran) -FC="$GFORTRAN" +case `echo $GFORTRAN` in + -* | no* ) + FC=no ;; + *) + FC="$GFORTRAN" ;; +esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' @@ -12351,11 +12356,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12354: $lt_compile\"" >&5) + (eval echo "\"\$as_me:12359: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:12358: \$? = $ac_status" >&5 + echo "$as_me:12363: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -12450,11 +12455,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12453: $lt_compile\"" >&5) + (eval echo "\"\$as_me:12458: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:12457: \$? = $ac_status" >&5 + echo "$as_me:12462: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -12502,11 +12507,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:12505: $lt_compile\"" >&5) + (eval echo "\"\$as_me:12510: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:12509: \$? = $ac_status" >&5 + echo "$as_me:12514: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized diff --git a/libgomp/configure.ac b/libgomp/configure.ac index e0bdf2b9ac9..792c9f52068 100644 --- a/libgomp/configure.ac +++ b/libgomp/configure.ac @@ -142,7 +142,12 @@ AM_MAINTAINER_MODE # We need gfortran to compile parts of the library # We can't use AC_PROG_FC because it expects a fully working gfortran. #AC_PROG_FC(gfortran) -FC="$GFORTRAN" +case `echo $GFORTRAN` in + -* | no* ) + FC=no ;; + *) + FC="$GFORTRAN" ;; +esac AC_PROG_FC(gfortran) FCFLAGS="$FCFLAGS -Wall" diff --git a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c index a198fed658a..7f2c823f73e 100644 --- a/libgomp/testsuite/libgomp.graphite/force-parallel-2.c +++ b/libgomp/testsuite/libgomp.graphite/force-parallel-2.c @@ -23,7 +23,7 @@ int main(void) } /* Check that parallel code generation part make the right answer. */ -/* { dg-final { scan-tree-dump-times "2 loops carried no dependency" 1 "graphite" } } */ +/* { dg-final { scan-tree-dump-times "2 loops carried no dependency" 2 "graphite" } } */ /* { dg-final { cleanup-tree-dump "graphite" } } */ /* { dg-final { scan-tree-dump-times "loopfn" 5 "optimized" } } */ /* { dg-final { cleanup-tree-dump "parloops" } } */ diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 78aaa3e473a..4f9a6c5afeb 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2009-10-22 Matthias Klose <doko@ubuntu.com> + + * configure.ac: Rename --enable-plugin to --enable-browser-plugin, + pass --{en,dis}able-plugin to the classpath configure. + * configure: Regenerate. + 2009-09-30 Dave Korn <dave.korn.cygwin@gmail.com> * configure.host (libgcj_sublib_ltflags): New variable. diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index 475e6bdc1b3..a2df28c46cf 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,3 +1,10 @@ +2009-10-22 Richard Guenther <rguenther@suse.de> + + PR cp-tools/39177 + * tools/gnu/classpath/tools/jar/Creator.java (writeCommandLineEntries): + Do not use uninitialized manifest. + * tools/classes/gnu/classpath/tools/jar/Creator.class: Re-generated. + 2009-08-26 Dave Korn <dave.korn.cygwin@gmail.com> * ltmain.sh (removedotparts): Don't use comma as 's' separator. diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/jar/Creator.class b/libjava/classpath/tools/classes/gnu/classpath/tools/jar/Creator.class Binary files differindex 517fe0c7a33..ad4cc74f732 100644 --- a/libjava/classpath/tools/classes/gnu/classpath/tools/jar/Creator.class +++ b/libjava/classpath/tools/classes/gnu/classpath/tools/jar/Creator.class diff --git a/libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java b/libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java index a6b6112caa1..6ffce18ac05 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java +++ b/libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java @@ -216,11 +216,14 @@ public class Creator manifest = createManifest(parameters); /* If no version is specified, provide the same manifest version default * as Sun's jar tool */ - Attributes attr = manifest.getMainAttributes(); - if (attr.getValue(Attributes.Name.MANIFEST_VERSION) == null) - attr.putValue(Attributes.Name.MANIFEST_VERSION.toString(), "1.0"); - attr.putValue("Created-By", System.getProperty("java.version") + + if (parameters.wantManifest) + { + Attributes attr = manifest.getMainAttributes(); + if (attr.getValue(Attributes.Name.MANIFEST_VERSION) == null) + attr.putValue(Attributes.Name.MANIFEST_VERSION.toString(), "1.0"); + attr.putValue("Created-By", System.getProperty("java.version") + " (" + System.getProperty("java.vendor") + ")"); + } outputStream = new JarOutputStream(os, manifest); // FIXME: this sets the method too late for the manifest file. outputStream.setMethod(parameters.storageMode); diff --git a/libjava/configure b/libjava/configure index 95d21af1e5f..8234c8b13df 100755 --- a/libjava/configure +++ b/libjava/configure @@ -1050,7 +1050,7 @@ enable_multilib with_cross_host with_newlib enable_version_specific_runtime_libs -enable_plugin +enable_browser_plugin enable_gconf_peer with_antlr_jar enable_gjdoc @@ -1739,7 +1739,7 @@ Optional Features: --enable-version-specific-runtime-libs specify that runtime libraries should be installed in a compiler-specific directory - --enable-plugin build gcjwebplugin web browser plugin + --enable-browser-plugin build gcjwebplugin web browser plugin --enable-gconf-peer compile GConf native peers for util.preferences --disable-gjdoc compile GJDoc (disabled by --disable-gjdoc) default=yes @@ -3363,15 +3363,15 @@ else fi -# Check whether --enable-plugin was given. -if test "${enable_plugin+set}" = set; then : - enableval=$enable_plugin; case "$enableval" in - yes) plugin_enabled=yes ;; - no) plugin_enabled=no ;; - *) as_fn_error "Unknown argument to enable/disable plugin" "$LINENO" 5;; +# Check whether --enable-browser-plugin was given. +if test "${enable_browser_plugin+set}" = set; then : + enableval=$enable_browser_plugin; case "$enableval" in + yes) browser_plugin_enabled=yes ;; + no) browser_plugin_enabled=no ;; + *) as_fn_error "Unknown argument to enable/disable browser plugin" "$LINENO" 5;; esac else - plugin_enabled=no + browser_plugin_enabled=no fi @@ -6833,8 +6833,10 @@ ac_configure_args="$ac_configure_args --with-vm-classes=$dir1:$dir2" ac_configure_args="$ac_configure_args --disable-core-jni" ac_configure_args="$ac_configure_args --disable-examples" ac_configure_args="$ac_configure_args --with-glibj=build" -if test "$plugin_enabled" != yes; then +if test "$browser_plugin_enabled" != yes; then ac_configure_args="$ac_configure_args --disable-plugin" +else + ac_configure_args="$ac_configure_args --enable-plugin" fi if test "$gconf_enabled" != yes; then ac_configure_args="$ac_configure_args --disable-gconf-peer" @@ -7504,13 +7506,13 @@ if test "${lt_cv_nm_interface+set}" = set; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:7507: $ac_compile\"" >&5) + (eval echo "\"\$as_me:7509: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:7510: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:7512: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:7513: output\"" >&5) + (eval echo "\"\$as_me:7515: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -8705,7 +8707,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 8708 "configure"' > conftest.$ac_ext + echo '#line 8710 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -10639,11 +10641,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10642: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10644: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:10646: \$? = $ac_status" >&5 + echo "$as_me:10648: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -10978,11 +10980,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10981: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10983: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:10985: \$? = $ac_status" >&5 + echo "$as_me:10987: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -11083,11 +11085,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11086: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11088: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11090: \$? = $ac_status" >&5 + echo "$as_me:11092: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -11138,11 +11140,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11141: $lt_compile\"" >&5) + (eval echo "\"\$as_me:11143: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:11145: \$? = $ac_status" >&5 + echo "$as_me:11147: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -13547,7 +13549,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 13550 "configure" +#line 13552 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -13643,7 +13645,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 13646 "configure" +#line 13648 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15605,11 +15607,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15608: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15610: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15612: \$? = $ac_status" >&5 + echo "$as_me:15614: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -15704,11 +15706,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15707: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15709: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:15711: \$? = $ac_status" >&5 + echo "$as_me:15713: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -15756,11 +15758,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15759: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15761: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:15763: \$? = $ac_status" >&5 + echo "$as_me:15765: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17172,11 +17174,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17175: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17177: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17179: \$? = $ac_status" >&5 + echo "$as_me:17181: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17505,11 +17507,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17508: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17510: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17512: \$? = $ac_status" >&5 + echo "$as_me:17514: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17604,11 +17606,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17607: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17609: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:17611: \$? = $ac_status" >&5 + echo "$as_me:17613: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17656,11 +17658,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17659: $lt_compile\"" >&5) + (eval echo "\"\$as_me:17661: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:17663: \$? = $ac_status" >&5 + echo "$as_me:17665: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -19258,7 +19260,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then : enableval=$enable_sjlj_exceptions; : else cat > conftest.$ac_ext << EOF -#line 19261 "configure" +#line 19263 "configure" struct S { ~S(); }; void bar(); void foo() diff --git a/libjava/configure.ac b/libjava/configure.ac index bfd33fd5154..be143c5b833 100644 --- a/libjava/configure.ac +++ b/libjava/configure.ac @@ -55,15 +55,15 @@ AC_ARG_ENABLE(version-specific-runtime-libs, [version_specific_libs=no] ) -AC_ARG_ENABLE(plugin, - AS_HELP_STRING([--enable-plugin], +AC_ARG_ENABLE(browser-plugin, + AS_HELP_STRING([--enable-browser-plugin], [build gcjwebplugin web browser plugin]), [case "$enableval" in - yes) plugin_enabled=yes ;; - no) plugin_enabled=no ;; - *) AC_MSG_ERROR([Unknown argument to enable/disable plugin]);; + yes) browser_plugin_enabled=yes ;; + no) browser_plugin_enabled=no ;; + *) AC_MSG_ERROR([Unknown argument to enable/disable browser plugin]);; esac], - [plugin_enabled=no] + [browser_plugin_enabled=no] ) AC_ARG_ENABLE(gconf-peer, @@ -491,8 +491,10 @@ ac_configure_args="$ac_configure_args --disable-core-jni" dnl FIXME? ac_configure_args="$ac_configure_args --disable-examples" ac_configure_args="$ac_configure_args --with-glibj=build" -if test "$plugin_enabled" != yes; then +if test "$browser_plugin_enabled" != yes; then ac_configure_args="$ac_configure_args --disable-plugin" +else + ac_configure_args="$ac_configure_args --enable-plugin" fi if test "$gconf_enabled" != yes; then ac_configure_args="$ac_configure_args --disable-gconf-peer" diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e68d69d86bb..c13bb4005cc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,162 @@ +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. + +2009-10-20 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/41763 + * include/bits/valarray_array.h (__valarray_default_construct, + __valarray_fill_construct, __valarray_copy_construct, __valarray_sum + __valarray_destroy_elements, __valarray_product): Do not qualify with + __restrict__ pointers accessing data also accessed by other pointers. + +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-15 Phil Muldoon <pmuldoon@redhat.com> + + * python/libstdcxx/v6/printers.py (StdTuplePrinter): New printer. + (build_libstdcxx_dictionary): Add StdTuplePrinter registration. + +2009-10-16 Benjamin Kosnik <bkoz@redhat.com> + + * include/c_compatibility/stdatomic.h: Include cstdatomic if + __cplusplus. + +2009-10-15 Benjamin Kosnik <bkoz@redhat.com> + + PR libstdc++/40654 + PR libstdc++/40826 + * src/atomic.cc (atomic_flag_test_and_set_explicit): Add + static_cast from base to derived. + (atomic_flag_clear_explicit): Same. + * include/bits/atomic_2.h (__atomic2::atomic_flag): Public derivation. + Remove value type constructor. + * include/bits/atomic_0.h (__atomic0::atomic_flag): Same. + * include/std/future (_Future_state): Use ATOMIC_FLAG_INIT to + initialized the atomic_flag member. + +2009-10-14 Benjamin Kosnik <bkoz@redhat.com> + + * doc/xml/authors.xml: Update. + * doc/xml/manual/intro.xml: Move test section... + * doc/xml/manual/appendix_porting.xml: ...here. + * doc/xml/manual/diagnostics.xml: Edit. + * doc/xml/manual/using.xml: Break out exception section. + * doc/xml/manual/using_exceptions.xml: New. + * doc/html: Regenerate. + +2009-10-14 Paolo Carlini <paolo.carlini@oracle.com> + + * config/abi/pre/gnu.ver: Export the _S_construct<> helpers. + +2009-10-14 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/basic_string.h (operator+=(initializer_list<>), + append(initializer_list<>)): Forward to the append overload taking + a const CharT* pointer and a size, thus avoiding instantiating + unnecessarily in the built library the overload taking a pair of + iterators. + (operator=(initializer_list<>), assign(initializer_list<>)): Likewise + for assign. + (insert(iterator, initializer_list<>): Likewise for insert. + +2009-10-14 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/c++config: Do not disable extern templates for string + in plain parallel-mode and in profile-mode; add comment explaining + _GLIBCXX_EXTERN_TEMPLATE == -1. + * testsuite/ext/profile/mutex_extensions.cc: Adjust dg-error line. + +2009-10-14 Jason Merrill <jason@redhat.com> + + * testsuite/20_util/unique_ptr/assign/assign_neg.cc: Adjust expected. + +2009-10-13 Paolo Carlini <paolo.carlini@oracle.com> + + * include/parallel/for_each_selectors.h: Minor uglification and + stylistic fixes. + +2009-10-13 Edward Smith-Rowland <3dw4rd@verizon.net> + + * include/precompiled/stdc++.h: Include <initializer_list> + for completeness. + +2009-10-12 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/random.h (class linear_congruential_engine, + class mersenne_twister_engine, class subtract_with_carry_engine, + class discard_block_engine, class independent_bits_engine, + class shuffle_order_engine, class uniform_int_distribution, + class binomial_distribution, class geometric_distribution, + class negative_binomial_distribution, class poisson_distribution, + class discrete_distribution): Do not use simulated concept checks, + tidy startic_asserts on argument types and ranges. + (class uniform_real_distribution, class normal_distribution, + class lognormal_distribution, class gamma_distribution, + class chi_squared_distribution, class cauchy_distribution, + class fisher_f_distribution, class student_t_distribution, + class exponential_distribution, class weibull_distribution, + class extreme_value_distribution, class piecewise_linear_distribution, + class piecewise_constant_distribution): Add static_assert on + template argument type. + * include/std/random: Do not include <bits/concept_check.h>. + * testsuite/26_numerics/random/discard_block_engine/cons/base_move.cc: + Fix. + * testsuite/26_numerics/random/discard_block_engine/cons/seed1.cc: + Likewise. + * testsuite/26_numerics/random/discard_block_engine/cons/seed2.cc: + Likewise. + * testsuite/26_numerics/random/discard_block_engine/cons/base_copy.cc: + Likewise. + * testsuite/26_numerics/random/discard_block_engine/cons/default.cc: + Likewise. + * testsuite/26_numerics/random/discard_block_engine/cons/seed_seq.cc: + Likewise. + * testsuite/26_numerics/random/discard_block_engine/requirements/ + typedefs.cc: Likewise. + * testsuite/26_numerics/random/discard_block_engine/operators/ + equal.cc: Likewise. + * testsuite/26_numerics/random/discard_block_engine/operators/ + serialize.cc: Likewise. + * testsuite/26_numerics/random/linear_congruential_engine/ + requirements/non_uint_neg.cc: Tweak. + 2009-10-10 Gerald Pfeifer <gerald@pfeifer.com> * doc/xml/manual/messages.xml: Update GNU gettext reference. diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index bad07588b82..2337a5a3fbf 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -1039,6 +1039,10 @@ GLIBCXX_3.4.14 { _ZNKSbIwSt11char_traitsIwESaIwEE7crbeginEv; _ZNKSbIwSt11char_traitsIwESaIwEE5crendEv; + # string|wstring ::_S_construct<> helpers + _ZNSs12_S_constructI*; + _ZNSbIwSt11char_traitsIwESaIwEE12_S_constructI*; + } GLIBCXX_3.4.13; # Symbols in the support library (libsupc++) have their own tag. diff --git a/libstdc++-v3/doc/html/api.html b/libstdc++-v3/doc/html/api.html index a1f1f289b19..fd511df55dd 100644 --- a/libstdc++-v3/doc/html/api.html +++ b/libstdc++-v3/doc/html/api.html @@ -5,7 +5,7 @@ <a class="ulink" href="http://www.fsf.org/" target="_top">FSF </a> - </p></div><div><div class="legalnotice"><a id="id485923"></a><p> + </p></div><div><div class="legalnotice"><a id="id596116"></a><p> <a class="link" href="manual/license.html" title="License">License </a> </p></div></div></div><hr /></div><p> diff --git a/libstdc++-v3/doc/html/manual/abi.html b/libstdc++-v3/doc/html/manual/abi.html index b0aa6be6fd7..7d11f768464 100644 --- a/libstdc++-v3/doc/html/manual/abi.html +++ b/libstdc++-v3/doc/html/manual/abi.html @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" C++ , ABI , version , dynamic , shared " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" C++ , ABI , version , dynamic , shared " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B. Porting and Maintenance </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p> @@ -464,60 +464,60 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so. <a class="ulink" href="http://gcc.gnu.org/PR24660" target="_top">24660: versioning weak symbols in libstdc++</a> </p><p> <a class="ulink" href="http://gcc.gnu.org/PR19664" target="_top">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a> -</p></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id390229"></a><p><span class="title"><i> +</p></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id658186"></a><p><span class="title"><i> ABIcheck, a vague idea of checking ABI compatibility </i>. </span><span class="biblioid"> <a class="ulink" href="http://abicheck.sourceforge.net/" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id390246"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id658203"></a><p><span class="title"><i> C++ ABI Reference </i>. </span><span class="biblioid"> <a class="ulink" href="http://www.codesourcery.com/public/cxx-abi/" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id390263"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id658220"></a><p><span class="title"><i> Intel® Compilers for Linux* -Compatibility with the GNU Compilers </i>. </span><span class="biblioid"> <a class="ulink" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id497386"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id658238"></a><p><span class="title"><i> Sun Solaris 2.9 : Linker and Libraries Guide (document 816-1386) </i>. </span><span class="biblioid"> <a class="ulink" href="http://docs.sun.com/app/docs/doc/817-1984" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id497402"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id658254"></a><p><span class="title"><i> Sun Solaris 2.9 : C++ Migration Guide (document 816-2459) </i>. </span><span class="biblioid"> <a class="ulink" href="http://docs.sun.com/app/docs/doc/819-5266" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id497420"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id658272"></a><p><span class="title"><i> How to Write Shared Libraries </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="biblioid"> <a class="ulink" href="http://people.redhat.com/drepper/dsohowto.pdf" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id497448"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id675905"></a><p><span class="title"><i> C++ ABI for the ARM Architecture </i>. </span><span class="biblioid"> <a class="ulink" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id497465"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id675922"></a><p><span class="title"><i> Dynamic Shared Objects: Survey and Issues </i>. </span><span class="subtitle"> ISO C++ J16/06-0046 . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span><span class="biblioid"> <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id497497"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id675954"></a><p><span class="title"><i> Versioning With Namespaces </i>. </span><span class="subtitle"> ISO C++ J16/06-0083 . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span><span class="biblioid"> <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id497530"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id675987"></a><p><span class="title"><i> Binary Compatibility of Shared Libraries Implemented in C++ on GNU/Linux Systems </i>. </span><span class="subtitle"> SYRCoSE 2009 . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span><span class="biblioid"> <a class="ulink" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top"> </a> - . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html> + . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/algorithms.html b/libstdc++-v3/doc/html/manual/algorithms.html index db71a81443b..aaaa42c27ef 100644 --- a/libstdc++-v3/doc/html/manual/algorithms.html +++ b/libstdc++-v3/doc/html/manual/algorithms.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt08ch19s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt09pr02.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.algorithms"></a>Part IX. Algorithms - <a id="id397908" class="indexterm"></a> + <a id="id721514" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="bk01pt09pr02.html"></a></span></dt><dt><span class="chapter"><a href="bk01pt09ch20.html">20. Mutating</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt09ch20.html#algorithms.mutating.swap">swap</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt09ch20.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt08ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt09pr02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">One Past the End </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/api.html b/libstdc++-v3/doc/html/manual/api.html index c2120235844..f0f0e271f1a 100644 --- a/libstdc++-v3/doc/html/manual/api.html +++ b/libstdc++-v3/doc/html/manual/api.html @@ -75,11 +75,11 @@ _Alloc_traits</code> have been removed. <span class="type">__alloc</span> to select an underlying allocator that satisfied memory allocation requests. The selection of this underlying allocator was not user-configurable. - </p><div class="table"><a id="id505845"></a><p class="title"><b>Table B.1. Extension Allocators</b></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator<T></code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator<T></code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template<int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc<T></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc<T></code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator<T></code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection + </p><div class="table"><a id="id623096"></a><p class="title"><b>Table B.1. Extension Allocators</b></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator<T></code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator<T></code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template<int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator<T></code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc<T></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc<T></code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template<bool,int></code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc<T></code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator<T></code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection of available allocators. All of these new allocators are standard-style. The following table includes details, along with the first released version of GCC that included the extension allocator. - </p><div class="table"><a id="id403516"></a><p class="title"><b>Table B.2. Extension Allocators Continued</b></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator<T></code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator<T></code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p> + </p><div class="table"><a id="id721371"></a><p class="title"><b>Table B.2. Extension Allocators Continued</b></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator<T></code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator<T></code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p> Debug mode first appears. </p><p> Precompiled header support <acronym class="acronym">PCH</acronym> support. diff --git a/libstdc++-v3/doc/html/manual/appendix_contributing.html b/libstdc++-v3/doc/html/manual/appendix_contributing.html index a31760453cf..b54faf1b14d 100644 --- a/libstdc++-v3/doc/html/manual/appendix_contributing.html +++ b/libstdc++-v3/doc/html/manual/appendix_contributing.html @@ -5,7 +5,7 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt12ch41s03.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.contrib"></a>Appendix A. Contributing - <a id="id384414" class="indexterm"></a> + <a id="id622754" class="indexterm"></a> </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p> The GNU C++ Library follows an open development model. Active contributors are assigned maintainer-ship responsibility, and given diff --git a/libstdc++-v3/doc/html/manual/appendix_free.html b/libstdc++-v3/doc/html/manual/appendix_free.html index 8fb4578e1c9..5b529f93e8e 100644 --- a/libstdc++-v3/doc/html/manual/appendix_free.html +++ b/libstdc++-v3/doc/html/manual/appendix_free.html @@ -5,7 +5,7 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.free"></a>Appendix C. Free Software Needs Free Documentation - <a id="id501419" class="indexterm"></a> + <a id="id675332" class="indexterm"></a> </h2></div></div></div><p> The biggest deficiency in free operating systems is not in the software--it is the lack of good free manuals that we can include in diff --git a/libstdc++-v3/doc/html/manual/appendix_gpl.html b/libstdc++-v3/doc/html/manual/appendix_gpl.html index 88e1468293d..0f9a838f365 100644 --- a/libstdc++-v3/doc/html/manual/appendix_gpl.html +++ b/libstdc++-v3/doc/html/manual/appendix_gpl.html @@ -76,7 +76,7 @@ </p><p> The precise terms and conditions for copying, distribution and modification follow. - </p><h2><a id="id514028"></a> + </p><h2><a id="id746936"></a> TERMS AND CONDITIONS </h2><h2><a id="gpl-3-definitions"></a> 0. Definitions. @@ -617,7 +617,7 @@ waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - </p><h2><a id="id510808"></a> + </p><h2><a id="id654357"></a> END OF TERMS AND CONDITIONS </h2><h2><a id="HowToApply"></a> How to Apply These Terms to Your New Programs diff --git a/libstdc++-v3/doc/html/manual/appendix_porting.html b/libstdc++-v3/doc/html/manual/appendix_porting.html index fceb1abc244..037759421ee 100644 --- a/libstdc++-v3/doc/html/manual/appendix_porting.html +++ b/libstdc++-v3/doc/html/manual/appendix_porting.html @@ -5,8 +5,8 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="appendix" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="appendix.porting"></a>Appendix B. Porting and Maintenance - <a id="id509079" class="indexterm"></a> -</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable">GLIBCXX_ENABLE, the --enable maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300">3.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310">3.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320">3.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330">3.3</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340">3.4</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400">4.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410">4.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420">4.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430">4.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p> + <a id="id744430" class="indexterm"></a> +</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable">GLIBCXX_ENABLE, the --enable maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300">3.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310">3.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320">3.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330">3.3</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340">3.4</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400">4.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410">4.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420">4.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430">4.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p> As noted <a class="ulink" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">previously</a>, certain other tools are necessary for hacking on files that control configure (<code class="code">configure.ac</code>, diff --git a/libstdc++-v3/doc/html/manual/backwards.html b/libstdc++-v3/doc/html/manual/backwards.html index 499581ba33c..252d177d4aa 100644 --- a/libstdc++-v3/doc/html/manual/backwards.html +++ b/libstdc++-v3/doc/html/manual/backwards.html @@ -17,8 +17,8 @@ ISO Standard (e.g., statistical analysis). While there are a lot of really useful things that are used by a lot of people, the Standards Committee couldn't include everything, and so a lot of those “<span class="quote">obvious</span>” classes didn't get included. -</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id426872"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id426904"></a>No <code class="code">cout</code> in <code class="code">ostream.h</code>, no <code class="code">cin</code> in <code class="code">istream.h</code></h4></div></div></div><p> +</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id744149"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>. +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id744181"></a>No <code class="code">cout</code> in <code class="code">ostream.h</code>, no <code class="code">cin</code> in <code class="code">istream.h</code></h4></div></div></div><p> In earlier versions of the standard, <code class="filename">fstream.h</code>, <code class="filename">ostream.h</code> @@ -44,7 +44,7 @@ considered replaced and rewritten. archived. The code is considered replaced and rewritten. </p><p> Portability notes and known implementation limitations are as follows. -</p><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id427002"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p> +</p><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id744279"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p> Some care is required to support C++ compiler and or library implementation that do not have the standard library in <code class="code">namespace std</code>. @@ -108,7 +108,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ]) fi ]) -</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id384005"></a>Illegal iterator usage</h4></div></div></div><p> +</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id673182"></a>Illegal iterator usage</h4></div></div></div><p> The following illustrate implementation-allowed illegal iterator use, and then correct use. </p><div class="itemizedlist"><ul type="disc"><li><p> @@ -121,7 +121,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ </p></li><li><p> <code class="code">if (iterator)</code> won't work any more => use <code class="code">if (iterator != iterator_type())</code> - </p></li></ul></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id384066"></a><code class="code">isspace</code> from <code class="filename">cctype</code> is a macro + </p></li></ul></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id673243"></a><code class="code">isspace</code> from <code class="filename">cctype</code> is a macro </h4></div></div></div><p> Glibc 2.0.x and 2.1.x define <code class="filename">ctype.h</code> functionality as macros (isspace, isalpha etc.). @@ -154,7 +154,7 @@ std:: (__ctype_b[(int) ( ( 'X' ) )] & (unsigned short int) _ISspace ) ; (<code class="filename">ctype.h</code>) and the definitions in namespace <code class="code">std::</code> (<code class="code"><cctype></code>). -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id384160"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id586519"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p> One solution is to add an autoconf-test for this: </p><pre class="programlisting"> AC_MSG_CHECKING(for container::at) @@ -180,7 +180,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)], </pre><p> If you are using other (non-GNU) compilers it might be a good idea to check for <code class="code">string::at</code> separately. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id492905"></a>No <code class="code">std::char_traits<char>::eof</code></h4></div></div></div><p> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id586557"></a>No <code class="code">std::char_traits<char>::eof</code></h4></div></div></div><p> Use some kind of autoconf test, plus this: </p><pre class="programlisting"> #ifdef HAVE_CHAR_TRAITS @@ -188,7 +188,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)], #else #define CPP_EOF EOF #endif -</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id492923"></a>No <code class="code">string::clear</code></h4></div></div></div><p> +</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id586575"></a>No <code class="code">string::clear</code></h4></div></div></div><p> There are two functions for deleting the contents of a string: <code class="code">clear</code> and <code class="code">erase</code> (the latter returns the string). @@ -206,12 +206,12 @@ erase(size_type __pos = 0, size_type __n = npos) Unfortunately, <code class="code">clear</code> is not implemented in this version, so you should use <code class="code">erase</code> (which is probably faster than <code class="code">operator=(charT*)</code>). -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id492968"></a> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id586620"></a> Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code> extensions </h4></div></div></div><p> These are no longer supported. Please use stringstreams instead. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id492987"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id586640"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p> Although the ISO standard <code class="code">i/ostringstream</code>-classes are provided, (<code class="filename">sstream</code>), for compatibility with older implementations the pre-ISO @@ -299,14 +299,14 @@ any = temp; Another example of using stringstreams is in <a class="link" href="bk01pt05ch13s05.html" title="Shrink to Fit">this howto</a>. </p><p> There is additional information in the libstdc++-v2 info files, in particular “<span class="quote">info iostream</span>”. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id511920"></a>Little or no wide character support</h4></div></div></div><p> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id659623"></a>Little or no wide character support</h4></div></div></div><p> Classes <code class="classname">wstring</code> and <code class="classname">char_traits<wchar_t></code> are not supported. - </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id511939"></a>No templatized iostreams</h4></div></div></div><p> + </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id659642"></a>No templatized iostreams</h4></div></div></div><p> Classes <code class="classname">wfilebuf</code> and <code class="classname">wstringstream</code> are not supported. - </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id511958"></a>Thread safety issues</h4></div></div></div><p> + </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id659661"></a>Thread safety issues</h4></div></div></div><p> Earlier GCC releases had a somewhat different approach to threading configuration and proper compilation. Before GCC 3.0, configuration of the threading model was dictated by compiler @@ -364,7 +364,7 @@ libstdc++-v3. of the SGI STL (version 3.3), with extensive changes. </p><p>A more formal description of the V3 goals can be found in the official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>. - </p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id512074"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers + </p><p>Portability notes and known implementation limitations are as follows.</p><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id659778"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers (<code class="code">iostream.h</code>, <code class="code">defalloc.h</code> etc.) are available, unlike previous libstdc++ versions, but inclusion generates a warning that you are using deprecated headers. @@ -436,7 +436,7 @@ like <code class="filename">vector.h</code> can be replaced with <code class="fi directive <code class="code">using namespace std;</code> can be put at the global scope. This should be enough to get this code compiling, assuming the other usage is correct. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id385442"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id674389"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been replaced by standardized libraries. In particular, the unordered_map and unordered_set containers of TR1 are suitable replacement for the non-standard hash_map and hash_set @@ -508,7 +508,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [ AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ]) fi ]) -</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id385545"></a>No <code class="code">ios::nocreate/ios::noreplace</code>. +</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id674492"></a>No <code class="code">ios::nocreate/ios::noreplace</code>. </h4></div></div></div><p> The existence of <code class="code">ios::nocreate</code> being used for input-streams has been confirmed, most probably because the author thought it would be more correct to specify nocreate explicitly. So @@ -519,7 +519,7 @@ open the file for reading, check if it has been opened, and then decide whether you want to create/replace or not. To my knowledge, even older implementations support <code class="code">app</code>, <code class="code">ate</code> and <code class="code">trunc</code> (except for <code class="code">app</code> ?). -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id385592"></a> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id674539"></a> No <code class="code">stream::attach(int fd)</code> </h4></div></div></div><p> Phil Edwards writes: It was considered and rejected for the ISO @@ -542,7 +542,7 @@ No <code class="code">stream::attach(int fd)</code> For another example of this, refer to <a class="ulink" href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a> by Nicolai Josuttis. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id385656"></a> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id674603"></a> Support for C++98 dialect. </h4></div></div></div><p>Check for complete library coverage of the C++1998/2003 standard. </p><pre class="programlisting"> @@ -610,7 +610,7 @@ AC_DEFUN([AC_HEADER_STDCXX_98], [ AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ]) fi ]) -</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id403656"></a> +</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id674631"></a> Support for C++TR1 dialect. </h4></div></div></div><p>Check for library coverage of the TR1 standard. </p><pre class="programlisting"> @@ -687,7 +687,7 @@ AC_DEFUN([AC_HEADER_TR1_UNORDERED_SET], [ AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ]) fi ]) -</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id403699"></a> +</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id675096"></a> Support for C++0x dialect. </h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++0xstandard. </p><pre class="programlisting"> @@ -899,27 +899,27 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [ AC_DEFINE(HAVE_UNORDERED_SET,,[Define if unordered_set is present. ]) fi ]) -</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id403776"></a> +</pre></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id675173"></a> Container::iterator_type is not necessarily Container::value_type* </h4></div></div></div><p> This is a change in behavior from the previous version. Now, most <span class="type">iterator_type</span> typedefs in container classes are POD objects, not <span class="type">value_type</span> pointers. -</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id403806"></a><p>[<abbr class="abbrev"> +</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id675202"></a><p>[<abbr class="abbrev"> kegel41 </abbr>] <span class="title"><i> Migrating to GCC 4.1 </i>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span><span class="biblioid"> <a class="ulink" href="http://www.kegel.com/gcc/gcc4.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id403838"></a><p>[<abbr class="abbrev"> + . </span></p></div><div class="biblioentry"><a id="id675235"></a><p>[<abbr class="abbrev"> kegel41 </abbr>] <span class="title"><i> Building the Whole Debian Archive with GCC 4.1: A Summary </i>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span><span class="biblioid"> <a class="ulink" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id403871"></a><p>[<abbr class="abbrev"> + . </span></p></div><div class="biblioentry"><a id="id675268"></a><p>[<abbr class="abbrev"> lbl32 </abbr>] <span class="title"><i> Migration guide for GCC-3.2 diff --git a/libstdc++-v3/doc/html/manual/bitmap_allocator.html b/libstdc++-v3/doc/html/manual/bitmap_allocator.html index e60f6671d25..806ca047865 100644 --- a/libstdc++-v3/doc/html/manual/bitmap_allocator.html +++ b/libstdc++-v3/doc/html/manual/bitmap_allocator.html @@ -103,7 +103,7 @@ else return false.</p></li></ol></div><p> </p><p> Consider a block of size 64 ints. In memory, it would look like this: (assume a 32-bit system where, size_t is a 32-bit entity). - </p><div class="table"><a id="id393472"></a><p class="title"><b>Table 33.1. Bitmap Allocator Memory Map</b></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p> + </p><div class="table"><a id="id730908"></a><p class="title"><b>Table 33.1. Bitmap Allocator Memory Map</b></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -> Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p> The first Column(268) represents the size of the Block in bytes as seen by the Bitmap Allocator. Internally, a global free list is used to keep track of the free blocks used and given back by the diff --git a/libstdc++-v3/doc/html/manual/bk01ix01.html b/libstdc++-v3/doc/html/manual/bk01ix01.html index 9feecbf32ae..51a67bbe12d 100644 --- a/libstdc++-v3/doc/html/manual/bk01ix01.html +++ b/libstdc++-v3/doc/html/manual/bk01ix01.html @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Index</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gfdl.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a id="id496564"></a>Index</h2></div></div></div><div class="index"><div class="indexdiv"><h3>A</h3><dl><dt>Algorithms, <a class="indexterm" href="algorithms.html"> +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Index</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Index</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gfdl.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="index"><div class="titlepage"><div><div><h2 class="title"><a id="id692397"></a>Index</h2></div></div></div><div class="index"><div class="indexdiv"><h3>A</h3><dl><dt>Algorithms, <a class="indexterm" href="algorithms.html"> Algorithms </a></dt><dt>Appendix</dt><dd><dl><dt>Contributing, <a class="indexterm" href="appendix_contributing.html"> diff --git a/libstdc++-v3/doc/html/manual/bk01pt02pr01.html b/libstdc++-v3/doc/html/manual/bk01pt02pr01.html index 2bdadd27d95..4ec01fefd93 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt02pr01.html +++ b/libstdc++-v3/doc/html/manual/bk01pt02pr01.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="support.html" title="Part II. Support" /><link rel="prev" href="support.html" title="Part II. Support" /><link rel="next" href="fundamental_types.html" title="Chapter 4. Types" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Part II. Support -</th><td width="20%" align="right"> <a accesskey="n" href="fundamental_types.html">Next</a></td></tr></table><hr /></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id492782"></a></h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="fundamental_types.html">Next</a></td></tr></table><hr /></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id650354"></a></h2></div></div></div><p> This part deals with the functions called and objects created automatically during the course of a program's existence. </p><p> diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html b/libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html index 5194208173b..d72d23d2d95 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html +++ b/libstdc++-v3/doc/html/manual/bk01pt03ch07s02.html @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Adding Data to Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="exceptions.html" title="Chapter 7. Exceptions" /><link rel="prev" href="exceptions.html" title="Chapter 7. Exceptions" /><link rel="next" href="bk01pt03ch07s03.html" title="Cancellation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Adding Data to Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Exceptions</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch07s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.diagnostics.exceptions.data"></a>Adding Data to Exceptions</h2></div></div></div><p> +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Adding Data to Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="exceptions.html" title="Chapter 7. Exceptions" /><link rel="prev" href="exceptions.html" title="Chapter 7. Exceptions" /><link rel="next" href="bk01pt03ch08.html" title="Chapter 8. Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Adding Data to Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 7. Exceptions</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch08.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.diagnostics.exceptions.data"></a>Adding Data to Exceptions</h2></div></div></div><p> The standard exception classes carry with them a single string as data (usually describing what went wrong or where the 'throw' took place). It's good to remember that you can add your own data to @@ -17,4 +17,4 @@ int e; DBID id; // some user-defined type }; - </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="exceptions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch07s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Cancellation</td></tr></table></div></body></html> + </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="exceptions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch08.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. Concept Checking</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/bk01pt03ch08.html b/libstdc++-v3/doc/html/manual/bk01pt03ch08.html index 758405f356c..5c6d0c83a24 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt03ch08.html +++ b/libstdc++-v3/doc/html/manual/bk01pt03ch08.html @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Concept Checking</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="diagnostics.html" title="Part III. Diagnostics" /><link rel="prev" href="bk01pt03ch07s03.html" title="Cancellation" /><link rel="next" href="utilities.html" title="Part IV. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch07s03.html">Prev</a> </td><th width="60%" align="center">Part III. +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8. Concept Checking</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="diagnostics.html" title="Part III. Diagnostics" /><link rel="prev" href="bk01pt03ch07s02.html" title="Adding Data to Exceptions" /><link rel="next" href="utilities.html" title="Part IV. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><th width="60%" align="center">Part III. Diagnostics </th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.diagnostics.concept_checking"></a>Chapter 8. Concept Checking</h2></div></div></div><p> @@ -39,7 +39,7 @@ support for template parameter constraints based on concepts in the core language. This will obviate the need for the library-simulated concept checking described above. - </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch07s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Cancellation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. + </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="diagnostics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Adding Data to Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. Utilities </td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/bk01pt09pr02.html b/libstdc++-v3/doc/html/manual/bk01pt09pr02.html index 1397245fd93..420cb81b855 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt09pr02.html +++ b/libstdc++-v3/doc/html/manual/bk01pt09pr02.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library , algorithm " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="algorithms.html" title="Part IX. Algorithms" /><link rel="prev" href="algorithms.html" title="Part IX. Algorithms" /><link rel="next" href="bk01pt09ch20.html" title="Chapter 20. Mutating" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part IX. Algorithms -</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt09ch20.html">Next</a></td></tr></table><hr /></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id397917"></a></h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt09ch20.html">Next</a></td></tr></table><hr /></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id617760"></a></h2></div></div></div><p> The neatest accomplishment of the algorithms chapter is that all the work is done via iterators, not containers directly. This means two important things: diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html b/libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html index 613964f8cc2..089058c2ff7 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html +++ b/libstdc++-v3/doc/html/manual/bk01pt12ch30s03.html @@ -19,6 +19,6 @@ mode or with debug mode. The following table provides the names and headers of the debugging containers: -</p><div class="table"><a id="id517820"></a><p class="title"><b>Table 30.1. Debugging Containers</b></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">bitset</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">deque</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">map</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">map</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">set</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">set</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++0x mode, these additional +</p><div class="table"><a id="id672482"></a><p class="title"><b>Table 30.1. Debugging Containers</b></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">bitset</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">deque</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">map</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">map</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">set</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">set</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">string</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++0x mode, these additional containers have additional debug capability. -</p><div class="table"><a id="id357333"></a><p class="title"><b>Table 30.2. Debugging Containers C++0x</b></p><div class="table-contents"><table summary="Debugging Containers C++0x" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch30s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch30s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> +</p><div class="table"><a id="id646525"></a><p class="title"><b>Table 30.2. Debugging Containers C++0x</b></p><div class="table-contents"><table summary="Debugging Containers C++0x" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch30s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch30s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html b/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html index 9e38ab478dd..265a3116022 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html +++ b/libstdc++-v3/doc/html/manual/bk01pt12ch31s03.html @@ -63,4 +63,4 @@ Then compile this code with the prerequisite compiler flags flags for atomic operations.) </p><p> The following table provides the names and headers of all the parallel algorithms that can be used in a similar manner: -</p><div class="table"><a id="id479890"></a><p class="title"><b>Table 31.1. Parallel Algorithms</b></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch31s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch31s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> +</p><div class="table"><a id="id731921"></a><p class="title"><b>Table 31.1. Parallel Algorithms</b></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt12ch31s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12ch31s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s02.html b/libstdc++-v3/doc/html/manual/bk01pt12ch32s02.html index 0aac094031e..70f0eef3199 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s02.html +++ b/libstdc++-v3/doc/html/manual/bk01pt12ch32s02.html @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" C++ , library , profile " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 32. Profile Mode" /><link rel="next" href="bk01pt12ch32s03.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 32. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12ch32s03.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p> -</p><div class="table"><a id="id474437"></a><p class="title"><b>Table 32.1. Code Location</b></p><div class="table-contents"><table summary="Code Location" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are +</p><div class="table"><a id="id647548"></a><p class="title"><b>Table 32.1. Code Location</b></p><div class="table-contents"><table summary="Code Location" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals. Implementation files are only included from <code class="code">impl/profiler.h</code>, which is the only file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p> </p><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p> diff --git a/libstdc++-v3/doc/html/manual/bk01pt12ch32s07.html b/libstdc++-v3/doc/html/manual/bk01pt12ch32s07.html index 7420fdeb7d3..cbe09f0f19d 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt12ch32s07.html +++ b/libstdc++-v3/doc/html/manual/bk01pt12ch32s07.html @@ -18,7 +18,7 @@ A high accuracy means that the diagnostic is unlikely to be wrong. These grades are not perfect. They are just meant to guide users with specific needs or time budgets. - </p><div class="table"><a id="id501361"></a><p class="title"><b>Table 32.2. Diagnostics</b></p><div class="table-contents"><table summary="Diagnostics" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th></tr></thead><tbody><tr><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.containers" target="_top"> + </p><div class="table"><a id="id521055"></a><p class="title"><b>Table 32.2. Diagnostics</b></p><div class="table-contents"><table summary="Diagnostics" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th></tr></thead><tbody><tr><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.containers" target="_top"> CONTAINERS</a></td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.hashtable_too_small" target="_top"> HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.hashtable_too_large" target="_top"> HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="ulink" href="#manual.ext.profile_mode.analysis.inefficient_hash" target="_top"> diff --git a/libstdc++-v3/doc/html/manual/bk01pt12pr03.html b/libstdc++-v3/doc/html/manual/bk01pt12pr03.html index d166ed5d17f..68f3a89765d 100644 --- a/libstdc++-v3/doc/html/manual/bk01pt12pr03.html +++ b/libstdc++-v3/doc/html/manual/bk01pt12pr03.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="extensions.html" title="Part XII. Extensions" /><link rel="prev" href="extensions.html" title="Part XII. Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 29. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part XII. Extensions -</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id450207"></a></h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="id646774"></a></h2></div></div></div><p> Here we will make an attempt at describing the non-Standard extensions to the library. Some of these are from SGI's STL, some of these are GNU's, and some just seemed to appear on the doorstep. diff --git a/libstdc++-v3/doc/html/manual/codecvt.html b/libstdc++-v3/doc/html/manual/codecvt.html index 64196b1ece8..0ac3285f1e9 100644 --- a/libstdc++-v3/doc/html/manual/codecvt.html +++ b/libstdc++-v3/doc/html/manual/codecvt.html @@ -337,41 +337,41 @@ codecvt usage. </p></li><li><p> wchar_t/char internal buffers and conversions between internal/external buffers? - </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id493338"></a><p><span class="title"><i> + </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id703118"></a><p><span class="title"><i> The GNU C Library - </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id478473"></a><p><span class="title"><i> + </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id644322"></a><p><span class="title"><i> Correspondence - </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id478501"></a><p><span class="title"><i> + </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id644350"></a><p><span class="title"><i> ISO/IEC 14882:1998 Programming languages - C++ - </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id497324"></a><p><span class="title"><i> + </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id660838"></a><p><span class="title"><i> ISO/IEC 9899:1999 Programming languages - C - </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id497342"></a><p><span class="title"><i> - System Interface Definitions, Issue 6 (IEEE Std. 1003.1-200x) + </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id660857"></a><p><span class="title"><i> + The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004) </i>. </span><span class="copyright">Copyright © 1999 The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid"> - <a class="ulink" href="http://www.opennc.org/austin/docreg.html" target="_top"> + <a class="ulink" href="http://www.unix.org/version3/ieee_std.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id461154"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id686728"></a><p><span class="title"><i> The C++ Programming Language, Special Edition </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername"> Addison Wesley - . </span></span></p></div><div class="biblioentry"><a id="id409878"></a><p><span class="title"><i> + . </span></span></p></div><div class="biblioentry"><a id="id720408"></a><p><span class="title"><i> Standard C++ IOStreams and Locales </i>. </span><span class="subtitle"> Advanced Programmer's Guide and Reference . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername"> Addison Wesley Longman - . </span></span></p></div><div class="biblioentry"><a id="id390798"></a><p><span class="title"><i> + . </span></span></p></div><div class="biblioentry"><a id="id692630"></a><p><span class="title"><i> A brief description of Normative Addendum 1 </i>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span><span class="biblioid"> <a class="ulink" href="http://www.lysator.liu.se/c/na1.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id389025"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id617963"></a><p><span class="title"><i> The Unicode HOWTO </i>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span><span class="biblioid"> <a class="ulink" href="ftp://ftp.ilog.fr/pub/Users/haible/utf8/Unicode-HOWTO.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id337800"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id681295"></a><p><span class="title"><i> UTF-8 and Unicode FAQ for Unix/Linux </i>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span><span class="biblioid"> <a class="ulink" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top"> diff --git a/libstdc++-v3/doc/html/manual/containers.html b/libstdc++-v3/doc/html/manual/containers.html index de09de84158..9fc6bcdab56 100644 --- a/libstdc++-v3/doc/html/manual/containers.html +++ b/libstdc++-v3/doc/html/manual/containers.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="messages.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="sequences.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.containers"></a>Part VII. Containers - <a id="id421482" class="indexterm"></a> + <a id="id644180" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="sequences.html">16. Sequences</a></span></dt><dd><dl><dt><span class="sect1"><a href="sequences.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="sect2"><a href="sequences.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="sect1"><a href="vector.html">vector</a></span></dt><dd><dl><dt><span class="sect2"><a href="vector.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="associative.html">17. Associative</a></span></dt><dd><dl><dt><span class="sect1"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="sect1"><a href="bitset.html">bitset</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitset.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="sect2"><a href="bitset.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="containers_and_c.html">18. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="messages.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sequences.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">messages </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Sequences</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/debug.html b/libstdc++-v3/doc/html/manual/debug.html index bf56f513849..d1a4fb2232b 100644 --- a/libstdc++-v3/doc/html/manual/debug.html +++ b/libstdc++-v3/doc/html/manual/debug.html @@ -138,16 +138,42 @@ set print demangle on set demangle-style gnu-v3 </pre><p> - GDB 7.0 will include support for writing pretty-printers in Python. - A library of printers for STL classes already exists within the - libstdc++ svn repository. For information on enabling these printers, - and for other GDB STL support options: please see - <a class="ulink" href="http://sourceware.org/gdb/wiki/STLSupport" target="_top"> "GDB Support - for STL" </a> in the GDB wiki. Additionally, in-depth - documentation and discussion of this feature can be found in the GDB - manual. Please see: - <a class="ulink" href="http://sourceware.org/gdb/current/onlinedocs//gdb_24.html#SEC260" target="_top"> - "23.2.2.6 Pretty Printing" </a> + Starting with version 7.0, GDB includes support for writing + pretty-printers in Python. Pretty printers for STL classes are + distributed with GCC from version 4.5.0. The most recent version of + these printers are always found in libstdc++ svn repository. + To enable these printers, check-out the latest printers to a local + directory: +</p><pre class="programlisting"> + svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python +</pre><p> + Next, add the following section to your ~/.gdbinit The path must + match the location where the Python module above was checked-out. + So if checked out to: /home/maude/gdb_printers/, the path would be as + written in the example below. +</p><pre class="programlisting"> + python + import sys + sys.path.insert(0, '/home/maude/gdb_printers/python') + from libstdcxx.v6.printers import register_libstdcxx_printers + register_libstdcxx_printers (None) + end +</pre><p> + The path should be the only element that needs to be adjusted in the + example. Once loaded, STL classes that the printers support + should print in a more human-readable format. To print the classes + in the old style, use the /r (raw) switch in the print command + (i.e., print /r foo). This will print the classes as if the Python + pretty-printers were not loaded. +</p><p> + For additional information on STL support and GDB please visit: + <a class="ulink" href="http://sourceware.org/gdb/wiki/STLSupport" target="_top"> "GDB Support + for STL" </a> in the GDB wiki. Additionally, in-depth + documentation and discussion of the pretty printing feature can be + found in "Pretty Printing" node in the GDB manual. You can find + on-line versions of the GDB user manual in GDB's homepage, at + <a class="ulink" href="http://sourceware.org/gdb/" target="_top"> "GDB: The GNU Project + Debugger" </a>. </p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p> The <a class="link" href="verbose_termination.html" title="Verbose Terminate Handler">verbose termination handler</a> gives information about uncaught diff --git a/libstdc++-v3/doc/html/manual/diagnostics.html b/libstdc++-v3/doc/html/manual/diagnostics.html index 21a447193e1..b869aec22f8 100644 --- a/libstdc++-v3/doc/html/manual/diagnostics.html +++ b/libstdc++-v3/doc/html/manual/diagnostics.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="verbose_termination.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="exceptions.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.diagnostics"></a>Part III. Diagnostics - <a id="id432454" class="indexterm"></a> -</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s03.html">Cancellation</a></span></dt></dl></dd><dt><span class="chapter"><a href="bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="verbose_termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Verbose Terminate Handler </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. Exceptions</td></tr></table></div></body></html> + <a id="id702920" class="indexterm"></a> +</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></dd><dt><span class="chapter"><a href="bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="verbose_termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Verbose Terminate Handler </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. Exceptions</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/documentation_style.html b/libstdc++-v3/doc/html/manual/documentation_style.html index b58aa894c93..e8d7831cb5c 100644 --- a/libstdc++-v3/doc/html/manual/documentation_style.html +++ b/libstdc++-v3/doc/html/manual/documentation_style.html @@ -211,11 +211,11 @@ Complete details on Docbook markup can be found in the DocBook Element Reference, <a class="ulink" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>. An incomplete reference for HTML to Docbook conversion is detailed in the table below. -</p><div class="table"><a id="id431910"></a><p class="title"><b>Table A.1. HTML to Docbook XML markup comparison</b></p><div class="table-contents"><table summary="HTML to Docbook XML markup comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">XML</th></tr></thead><tbody><tr><td align="left"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>, +</p><div class="table"><a id="id740402"></a><p class="title"><b>Table A.1. HTML to Docbook XML markup comparison</b></p><div class="table-contents"><table summary="HTML to Docbook XML markup comparison" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">XML</th></tr></thead><tbody><tr><td align="left"><p></td><td align="left"><para></td></tr><tr><td align="left"><pre></td><td align="left"><computeroutput>, <programlisting>, <literallayout></td></tr><tr><td align="left"><ul></td><td align="left"><itemizedlist></td></tr><tr><td align="left"><ol></td><td align="left"><orderedlist></td></tr><tr><td align="left"><il></td><td align="left"><listitem></td></tr><tr><td align="left"><dl></td><td align="left"><variablelist></td></tr><tr><td align="left"><dt></td><td align="left"><term></td></tr><tr><td align="left"><dd></td><td align="left"><listitem></td></tr><tr><td align="left"><a href=""></td><td align="left"><ulink url=""></td></tr><tr><td align="left"><code></td><td align="left"><literal>, <programlisting></td></tr><tr><td align="left"><strong></td><td align="left"><emphasis></td></tr><tr><td align="left"><em></td><td align="left"><emphasis></td></tr><tr><td align="left">"</td><td align="left"><quote></td></tr></tbody></table></div></div><br class="table-break" /><p> And examples of detailed markup for which there are no real HTML equivalents are listed in the table below. -</p><div class="table"><a id="id514274"></a><p class="title"><b>Table A.2. Docbook XML Element Use</b></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><structname></td><td align="left"><structname>char_traits</structname></td></tr><tr><td align="left"><classname></td><td align="left"><classname>string</classname></td></tr><tr><td align="left"><function></td><td align="left"> +</p><div class="table"><a id="id613462"></a><p class="title"><b>Table A.2. Docbook XML Element Use</b></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><structname></td><td align="left"><structname>char_traits</structname></td></tr><tr><td align="left"><classname></td><td align="left"><classname>string</classname></td></tr><tr><td align="left"><function></td><td align="left"> <p><function>clear()</function></p> <p><function>fs.clear()</function></p> </td></tr><tr><td align="left"><type></td><td align="left"><type>long long</type></td></tr><tr><td align="left"><varname></td><td align="left"><varname>fs</varname></td></tr><tr><td align="left"><literal></td><td align="left"> diff --git a/libstdc++-v3/doc/html/manual/exceptions.html b/libstdc++-v3/doc/html/manual/exceptions.html index 74bcdebe14f..83eb8892fa4 100644 --- a/libstdc++-v3/doc/html/manual/exceptions.html +++ b/libstdc++-v3/doc/html/manual/exceptions.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7. Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="diagnostics.html" title="Part III. Diagnostics" /><link rel="prev" href="diagnostics.html" title="Part III. Diagnostics" /><link rel="next" href="bk01pt03ch07s02.html" title="Adding Data to Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III. Diagnostics -</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch07s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.diagnostics.exceptions"></a>Chapter 7. Exceptions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s03.html">Cancellation</a></span></dt></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.diagnostics.exceptions.hierarchy"></a>Exception Classes</h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch07s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.diagnostics.exceptions"></a>Chapter 7. Exceptions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.diagnostics.exceptions.hierarchy"></a>Exception Classes</h2></div></div></div><p> All exception objects are defined in one of the standard header files: <code class="filename">exception</code>, <code class="filename">stdexcept</code>, <code class="filename">new</code>, and diff --git a/libstdc++-v3/doc/html/manual/extensions.html b/libstdc++-v3/doc/html/manual/extensions.html index 90c2b048ee1..e80e4110ec5 100644 --- a/libstdc++-v3/doc/html/manual/extensions.html +++ b/libstdc++-v3/doc/html/manual/extensions.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt11ch28s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt12pr03.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part XII. Extensions - <a id="id450198" class="indexterm"></a> + <a id="id646766" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="bk01pt12pr03.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">29. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">30. Debug Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch30s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch30s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.methods">Methods</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch30s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">31. Parallel Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s02.html">Semantics</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch31s03.html">Using</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s04.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch31s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch31s05.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">32. Profile Mode</a></span></dt><dd><dl><dt><span class="sect1"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="sect2"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s02.html">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s04.html">Empirical Cost Model</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch32s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s05.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch32s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch32s07.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_allocators.html">33. Allocators</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_allocators.html#manual.ext.allocator.mt">mt_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_single">Single Thread Example</a></span></dt><dt><span class="sect2"><a href="ext_allocators.html#allocator.mt.example_multi">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="bitmap_allocator.html">bitmap_allocator</a></span></dt><dd><dl><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="sect2"><a href="bitmap_allocator.html#allocator.bitmap.impl">Implementation</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ext_containers.html">34. Containers</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_containers.html#manual.ext.containers.pbds">Policy Based Data Structures</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s02.html">HP/SGI</a></span></dt><dt><span class="sect1"><a href="bk01pt12ch34s03.html">Deprecated HP/SGI</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">35. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">36. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">37. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">38. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">39. Input and Output</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">40. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">41. Concurrency</a></span></dt><dd><dl><dt><span class="sect1"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="sect2"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s02.html">Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="sect2"><a href="bk01pt12ch41s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="sect1"><a href="bk01pt12ch41s03.html">Use</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt11ch28s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt12pr03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Performance </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/facets.html b/libstdc++-v3/doc/html/manual/facets.html index a23ee847975..ff42a5bbe0a 100644 --- a/libstdc++-v3/doc/html/manual/facets.html +++ b/libstdc++-v3/doc/html/manual/facets.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15. Facets aka Categories</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="localization.html" title="Part VI. Localization" /><link rel="prev" href="locales.html" title="Chapter 14. Locales" /><link rel="next" href="codecvt.html" title="codecvt" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. Facets aka Categories</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="locales.html">Prev</a> </td><th width="60%" align="center">Part VI. Localization -</th><td width="20%" align="right"> <a accesskey="n" href="codecvt.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.localization.facet"></a>Chapter 15. Facets aka Categories</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="facets.html#manual.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="sect2"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="codecvt.html">codecvt</a></span></dt><dd><dl><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.design">Design</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.use">Use</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="messages.html">messages</a></span></dt><dd><dl><dt><span class="sect2"><a href="messages.html#facet.messages.req">Requirements</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.design">Design</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.use">Use</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.localization.facet.ctype"></a>ctype</h2></div></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="facet.ctype.impl"></a>Implementation</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id456506"></a>Specializations</h4></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="codecvt.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.localization.facet"></a>Chapter 15. Facets aka Categories</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="facets.html#manual.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="sect2"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="codecvt.html">codecvt</a></span></dt><dd><dl><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.design">Design</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.use">Use</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="messages.html">messages</a></span></dt><dd><dl><dt><span class="sect2"><a href="messages.html#facet.messages.req">Requirements</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.design">Design</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.use">Use</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.localization.facet.ctype"></a>ctype</h2></div></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="facet.ctype.impl"></a>Implementation</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id639240"></a>Specializations</h4></div></div></div><p> For the required specialization codecvt<wchar_t, char, mbstate_t> , conversions are made between the internal character set (always UCS4 on GNU/Linux) and whatever the currently selected locale for the @@ -50,25 +50,25 @@ characters. </p></li><li><p> Rename abstract base class. See if just smash-overriding is a better approach. Clarify, add sanity to naming. - </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id394298"></a><p><span class="title"><i> + </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id621794"></a><p><span class="title"><i> The GNU C Library - </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id480756"></a><p><span class="title"><i> + </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id641198"></a><p><span class="title"><i> Correspondence - </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id396720"></a><p><span class="title"><i> + </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id734835"></a><p><span class="title"><i> ISO/IEC 14882:1998 Programming languages - C++ - </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id396738"></a><p><span class="title"><i> + </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id629980"></a><p><span class="title"><i> ISO/IEC 9899:1999 Programming languages - C - </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id395771"></a><p><span class="title"><i> - System Interface Definitions, Issue 6 (IEEE Std. 1003.1-200x) + </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id629998"></a><p><span class="title"><i> + The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004) </i>. </span><span class="copyright">Copyright © 1999 The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid"> - <a class="ulink" href="http://www.opennc.org/austin/docreg.html" target="_top"> + <a class="ulink" href="http://www.unix.org/version3/ieee_std.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id412160"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id619025"></a><p><span class="title"><i> The C++ Programming Language, Special Edition </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername"> Addison Wesley - . </span></span></p></div><div class="biblioentry"><a id="id465171"></a><p><span class="title"><i> + . </span></span></p></div><div class="biblioentry"><a id="id637327"></a><p><span class="title"><i> Standard C++ IOStreams and Locales </i>. </span><span class="subtitle"> Advanced Programmer's Guide and Reference diff --git a/libstdc++-v3/doc/html/manual/internals.html b/libstdc++-v3/doc/html/manual/internals.html index 8ba004ece5a..aca09ecaf51 100644 --- a/libstdc++-v3/doc/html/manual/internals.html +++ b/libstdc++-v3/doc/html/manual/internals.html @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , internals " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , internals " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. Porting and Maintenance -</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p> </p><p>This document explains how to port libstdc++ (the GNU C++ library) to a new target. </p><p>In order to make the GNU C++ library (libstdc++) work with a new @@ -368,7 +368,7 @@ do this is to build the library using <code class="code">gcc -shared</code>. <code class="code">ltcf-c.sh</code> in the top-level directory. Find the switch statement that sets <code class="code">archive_cmds</code>. Here, adjust the setting for your operating system. - </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix B. + </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix B. Porting and Maintenance - </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html> + </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/intro.html b/libstdc++-v3/doc/html/manual/intro.html index 58b373b1260..350d617ccc2 100644 --- a/libstdc++-v3/doc/html/manual/intro.html +++ b/libstdc++-v3/doc/html/manual/intro.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="spine.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. Introduction - <a id="id431712" class="indexterm"></a> -</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Propagating Exceptions aka Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Support for -fno-exceptions</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="spine.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html> + <a id="id690392" class="indexterm"></a> +</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="spine.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/io.html b/libstdc++-v3/doc/html/manual/io.html index 121c8be1636..1ede95bdcda 100644 --- a/libstdc++-v3/doc/html/manual/io.html +++ b/libstdc++-v3/doc/html/manual/io.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt10ch23s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="iostream_objects.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.io"></a>Part XI. Input and Output - <a id="id412720" class="indexterm"></a> + <a id="id585725" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="iostream_objects.html">24. Iostream Objects</a></span></dt><dt><span class="chapter"><a href="streambufs.html">25. Stream Buffers</a></span></dt><dd><dl><dt><span class="sect1"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch25s02.html">Buffering</a></span></dt></dl></dd><dt><span class="chapter"><a href="stringstreams.html">26. Memory Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="stringstreams.html#manual.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="chapter"><a href="fstreams.html">27. File Based Streams</a></span></dt><dd><dl><dt><span class="sect1"><a href="fstreams.html#manual.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch27s02.html">Binary Input and Output</a></span></dt></dl></dd><dt><span class="chapter"><a href="io_and_c.html">28. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="io_and_c.html#manual.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="sect1"><a href="bk01pt11ch28s02.html">Performance</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt10ch23s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iostream_objects.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">C99 </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Iostream Objects</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/iterators.html b/libstdc++-v3/doc/html/manual/iterators.html index c168b0e1787..a002097bfcd 100644 --- a/libstdc++-v3/doc/html/manual/iterators.html +++ b/libstdc++-v3/doc/html/manual/iterators.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitset.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt08ch19.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.iterators"></a>Part VIII. Iterators - <a id="id511191" class="indexterm"></a> + <a id="id632651" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="bk01pt08ch19.html">19. Predefined</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt08ch19.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="sect1"><a href="bk01pt08ch19s02.html">One Past the End</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitset.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt08ch19.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">bitset </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Predefined</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/locales.html b/libstdc++-v3/doc/html/manual/locales.html index 87b7c2b7bbc..296e8aecbba 100644 --- a/libstdc++-v3/doc/html/manual/locales.html +++ b/libstdc++-v3/doc/html/manual/locales.html @@ -398,25 +398,25 @@ global locale" (emphasis Paolo), that is: What should non-required facet instantiations do? If the generic implementation is provided, then how to end-users provide specializations? - </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="locales.locale.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id388197"></a><p><span class="title"><i> + </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="locales.locale.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id658666"></a><p><span class="title"><i> The GNU C Library - </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id403972"></a><p><span class="title"><i> + </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="id679103"></a><p><span class="title"><i> Correspondence - </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id404001"></a><p><span class="title"><i> + </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id635262"></a><p><span class="title"><i> ISO/IEC 14882:1998 Programming languages - C++ - </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id450687"></a><p><span class="title"><i> + </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id709948"></a><p><span class="title"><i> ISO/IEC 9899:1999 Programming languages - C - </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id450705"></a><p><span class="title"><i> - System Interface Definitions, Issue 6 (IEEE Std. 1003.1-200x) + </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id709967"></a><p><span class="title"><i> + The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004) </i>. </span><span class="copyright">Copyright © 1999 The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid"> - <a class="ulink" href="http://www.opennc.org/austin/docreg.html" target="_top"> + <a class="ulink" href="http://www.unix.org/version3/ieee_std.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id429438"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id618881"></a><p><span class="title"><i> The C++ Programming Language, Special Edition </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername"> Addison Wesley - . </span></span></p></div><div class="biblioentry"><a id="id405937"></a><p><span class="title"><i> + . </span></span></p></div><div class="biblioentry"><a id="id641063"></a><p><span class="title"><i> Standard C++ IOStreams and Locales </i>. </span><span class="subtitle"> Advanced Programmer's Guide and Reference diff --git a/libstdc++-v3/doc/html/manual/localization.html b/libstdc++-v3/doc/html/manual/localization.html index 35b18f8617f..152956fa176 100644 --- a/libstdc++-v3/doc/html/manual/localization.html +++ b/libstdc++-v3/doc/html/manual/localization.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt05ch13s06.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="locales.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.localization"></a>Part VI. Localization - <a id="id421930" class="indexterm"></a> + <a id="id585411" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="locales.html">14. Locales</a></span></dt><dd><dl><dt><span class="sect1"><a href="locales.html#manual.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="sect2"><a href="locales.html#locales.locale.req">Requirements</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.design">Design</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="locales.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="facets.html">15. Facets aka Categories</a></span></dt><dd><dl><dt><span class="sect1"><a href="facets.html#manual.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="sect2"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="codecvt.html">codecvt</a></span></dt><dd><dl><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.design">Design</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.use">Use</a></span></dt><dt><span class="sect2"><a href="codecvt.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="sect1"><a href="messages.html">messages</a></span></dt><dd><dl><dt><span class="sect2"><a href="messages.html#facet.messages.req">Requirements</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.design">Design</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.use">Use</a></span></dt><dt><span class="sect2"><a href="messages.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt05ch13s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="locales.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">CString (MFC) </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. Locales</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/make.html b/libstdc++-v3/doc/html/manual/make.html index 6a56ea690da..2563d277938 100644 --- a/libstdc++-v3/doc/html/manual/make.html +++ b/libstdc++-v3/doc/html/manual/make.html @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic <a class="ulink" href="http://gcc.gnu.org/install/" target="_top">GCC Installation Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>. <span class="emphasis"><em>Twice.</em></span> </p><p>Then type:<span class="command"><strong>make</strong></span>, and congratulations, you're started to build. -</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html> +</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/memory.html b/libstdc++-v3/doc/html/manual/memory.html index 035b50d5836..b49003b7a82 100644 --- a/libstdc++-v3/doc/html/manual/memory.html +++ b/libstdc++-v3/doc/html/manual/memory.html @@ -93,7 +93,7 @@ or loading and unloading shared objects in memory. As such, using caching allocators on systems that do not support <code class="function">abi::__cxa_atexit</code> is not recommended. - </p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.impl"></a>Implementation</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id448064"></a>Interface Design</h4></div></div></div><p> + </p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.impl"></a>Implementation</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id712986"></a>Interface Design</h4></div></div></div><p> The only allocator interface that is support is the standard C++ interface. As such, all STL containers have been adjusted, and all external allocators have @@ -106,7 +106,7 @@ </p><p> The base class that <code class="classname">allocator</code> is derived from may not be user-configurable. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id419395"></a>Selecting Default Allocation Policy</h4></div></div></div><p> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id629278"></a>Selecting Default Allocation Policy</h4></div></div></div><p> It's difficult to pick an allocation strategy that will provide maximum utility, without excessively penalizing some behavior. In fact, it's difficult just deciding which typical actions to measure @@ -143,7 +143,7 @@ The current default choice for <code class="classname">allocator</code> is <code class="classname">__gnu_cxx::new_allocator</code>. - </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id392353"></a>Disabling Memory Caching</h4></div></div></div><p> + </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id711751"></a>Disabling Memory Caching</h4></div></div></div><p> In use, <code class="classname">allocator</code> may allocate and deallocate using implementation-specified strategies and heuristics. Because of this, every call to an allocator object's @@ -308,11 +308,11 @@ A high-performance allocator that uses a bit-map to keep track of the used and unused memory locations. It has its own documentation, found <a class="link" href="bitmap_allocator.html" title="bitmap_allocator">here</a>. - </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id401721"></a><p><span class="title"><i> + </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id710951"></a><p><span class="title"><i> ISO/IEC 14882:1998 Programming languages - C++ </i>. </span> isoc++_1998 - <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="id401736"></a><p><span class="title"><i>The Standard Librarian: What Are Allocators Good + <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="id710966"></a><p><span class="title"><i>The Standard Librarian: What Are Allocators Good </i>. </span> austernm <span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername"> @@ -320,28 +320,28 @@ . </span></span><span class="biblioid"> <a class="ulink" href="http://www.cuj.com/documents/s=8000/cujcexp1812austern/" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id478919"></a><p><span class="title"><i>The Hoard Memory Allocator</i>. </span> + . </span></p></div><div class="biblioentry"><a id="id644430"></a><p><span class="title"><i>The Hoard Memory Allocator</i>. </span> emeryb <span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="biblioid"> <a class="ulink" href="http://www.cs.umass.edu/~emery/hoard/" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id447245"></a><p><span class="title"><i>Reconsidering Custom Memory Allocation</i>. </span> + . </span></p></div><div class="biblioentry"><a id="id689922"></a><p><span class="title"><i>Reconsidering Custom Memory Allocation</i>. </span> bergerzorn <span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span><span class="biblioid"> <a class="ulink" href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id427350"></a><p><span class="title"><i>Allocator Types</i>. </span> + . </span></p></div><div class="biblioentry"><a id="id709355"></a><p><span class="title"><i>Allocator Types</i>. </span> kreftlanger <span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername"> C/C++ Users Journal . </span></span><span class="biblioid"> <a class="ulink" href="http://www.langer.camelot.de/Articles/C++Report/Allocators/Allocators.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id291159"></a><p><span class="title"><i>The C++ Programming Language</i>. </span> + . </span></p></div><div class="biblioentry"><a id="id642689"></a><p><span class="title"><i>The C++ Programming Language</i>. </span> tcpl <span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername"> Addison Wesley - . </span></span></p></div><div class="biblioentry"><a id="id420450"></a><p><span class="title"><i>Yalloc: A Recycling C++ Allocator</i>. </span> + . </span></span></p></div><div class="biblioentry"><a id="id614194"></a><p><span class="title"><i>Yalloc: A Recycling C++ Allocator</i>. </span> yenf <span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span><span class="copyright">Copyright © . </span><span class="biblioid"> <a class="ulink" href="http://home.earthlink.net/~brimar/yalloc/" target="_top"> diff --git a/libstdc++-v3/doc/html/manual/messages.html b/libstdc++-v3/doc/html/manual/messages.html index 64b6d6d6c48..e21adac3025 100644 --- a/libstdc++-v3/doc/html/manual/messages.html +++ b/libstdc++-v3/doc/html/manual/messages.html @@ -241,42 +241,42 @@ void test01() model. As of this writing, it is unknown how to query to see if a specified message catalog exists using the gettext package. - </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id472238"></a><p><span class="title"><i> + </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="facet.messages.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id699687"></a><p><span class="title"><i> The GNU C Library </i>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization - . </span></p></div><div class="biblioentry"><a id="id414678"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id622574"></a><p><span class="title"><i> Correspondence - </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id412595"></a><p><span class="title"><i> + </i>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="id630269"></a><p><span class="title"><i> ISO/IEC 14882:1998 Programming languages - C++ - </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id412614"></a><p><span class="title"><i> + </i>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="id630287"></a><p><span class="title"><i> ISO/IEC 9899:1999 Programming languages - C - </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id400869"></a><p><span class="title"><i> + </i>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="id630306"></a><p><span class="title"><i> System Interface Definitions, Issue 6 (IEEE Std. 1003.1-200x) </i>. </span><span class="copyright">Copyright © 1999 The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid"> <a class="ulink" href="http://www.opengroup.org/austin/" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id400897"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id567615"></a><p><span class="title"><i> The C++ Programming Language, Special Edition </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername"> Addison Wesley - . </span></span></p></div><div class="biblioentry"><a id="id426571"></a><p><span class="title"><i> + . </span></span></p></div><div class="biblioentry"><a id="id621555"></a><p><span class="title"><i> Standard C++ IOStreams and Locales </i>. </span><span class="subtitle"> Advanced Programmer's Guide and Reference . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername"> Addison Wesley Longman - . </span></span></p></div><div class="biblioentry"><a id="id414262"></a><p><span class="title"><i> + . </span></span></p></div><div class="biblioentry"><a id="id646611"></a><p><span class="title"><i> Java 2 Platform, Standard Edition, v 1.3.1 API Specification </i>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat, java.util.Locale, java.util.ResourceBundle. </span><span class="biblioid"> <a class="ulink" href="http://java.sun.com/reference/api/index.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id414283"></a><p><span class="title"><i> + . </span></p></div><div class="biblioentry"><a id="id682026"></a><p><span class="title"><i> GNU gettext tools, version 0.10.38, Native Language Support Library and Tools. </i>. </span><span class="biblioid"> - <a class="ulink" href="http://sources.redhat.com/gettext" target="_top"> + <a class="ulink" href="http://www.gnu.org/software/gettext/" target="_top"> </a> . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="codecvt.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="facets.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">codecvt </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part VII. Containers diff --git a/libstdc++-v3/doc/html/manual/numerics.html b/libstdc++-v3/doc/html/manual/numerics.html index 7738f38215b..457f548f437 100644 --- a/libstdc++-v3/doc/html/manual/numerics.html +++ b/libstdc++-v3/doc/html/manual/numerics.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt09ch20.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="complex.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.numerics"></a>Part X. Numerics - <a id="id399502" class="indexterm"></a> + <a id="id624917" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="complex.html">21. Complex</a></span></dt><dd><dl><dt><span class="sect1"><a href="complex.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="chapter"><a href="generalized_numeric_operations.html">22. Generalized Operations</a></span></dt><dt><span class="chapter"><a href="numerics_and_c.html">23. Interacting with C</a></span></dt><dd><dl><dt><span class="sect1"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="sect1"><a href="bk01pt10ch23s02.html">C99</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt09ch20.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="complex.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. Mutating </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. Complex</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/parallel_mode.html b/libstdc++-v3/doc/html/manual/parallel_mode.html index 46af419a9ae..635ef1dd6a1 100644 --- a/libstdc++-v3/doc/html/manual/parallel_mode.html +++ b/libstdc++-v3/doc/html/manual/parallel_mode.html @@ -13,11 +13,11 @@ explicit source declaration or by compiling existing sources with a specific compiler flag. </p><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include <code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="function">std::accumulate</code></p></li><li><p><code class="function">std::adjacent_difference</code></p></li><li><p><code class="function">std::inner_product</code></p></li><li><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include -<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="function">std::adjacent_find</code></p></li><li><p><code class="function">std::count</code></p></li><li><p><code class="function">std::count_if</code></p></li><li><p><code class="function">std::equal</code></p></li><li><p><code class="function">std::find</code></p></li><li><p><code class="function">std::find_if</code></p></li><li><p><code class="function">std::find_first_of</code></p></li><li><p><code class="function">std::for_each</code></p></li><li><p><code class="function">std::generate</code></p></li><li><p><code class="function">std::generate_n</code></p></li><li><p><code class="function">std::lexicographical_compare</code></p></li><li><p><code class="function">std::mismatch</code></p></li><li><p><code class="function">std::search</code></p></li><li><p><code class="function">std::search_n</code></p></li><li><p><code class="function">std::transform</code></p></li><li><p><code class="function">std::replace</code></p></li><li><p><code class="function">std::replace_if</code></p></li><li><p><code class="function">std::max_element</code></p></li><li><p><code class="function">std::merge</code></p></li><li><p><code class="function">std::min_element</code></p></li><li><p><code class="function">std::nth_element</code></p></li><li><p><code class="function">std::partial_sort</code></p></li><li><p><code class="function">std::partition</code></p></li><li><p><code class="function">std::random_shuffle</code></p></li><li><p><code class="function">std::set_union</code></p></li><li><p><code class="function">std::set_intersection</code></p></li><li><p><code class="function">std::set_symmetric_difference</code></p></li><li><p><code class="function">std::set_difference</code></p></li><li><p><code class="function">std::sort</code></p></li><li><p><code class="function">std::stable_sort</code></p></li><li><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id431585"></a><p><span class="title"><i> +<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul type="disc"><li><p><code class="function">std::adjacent_find</code></p></li><li><p><code class="function">std::count</code></p></li><li><p><code class="function">std::count_if</code></p></li><li><p><code class="function">std::equal</code></p></li><li><p><code class="function">std::find</code></p></li><li><p><code class="function">std::find_if</code></p></li><li><p><code class="function">std::find_first_of</code></p></li><li><p><code class="function">std::for_each</code></p></li><li><p><code class="function">std::generate</code></p></li><li><p><code class="function">std::generate_n</code></p></li><li><p><code class="function">std::lexicographical_compare</code></p></li><li><p><code class="function">std::mismatch</code></p></li><li><p><code class="function">std::search</code></p></li><li><p><code class="function">std::search_n</code></p></li><li><p><code class="function">std::transform</code></p></li><li><p><code class="function">std::replace</code></p></li><li><p><code class="function">std::replace_if</code></p></li><li><p><code class="function">std::max_element</code></p></li><li><p><code class="function">std::merge</code></p></li><li><p><code class="function">std::min_element</code></p></li><li><p><code class="function">std::nth_element</code></p></li><li><p><code class="function">std::partial_sort</code></p></li><li><p><code class="function">std::partition</code></p></li><li><p><code class="function">std::random_shuffle</code></p></li><li><p><code class="function">std::set_union</code></p></li><li><p><code class="function">std::set_intersection</code></p></li><li><p><code class="function">std::set_symmetric_difference</code></p></li><li><p><code class="function">std::set_difference</code></p></li><li><p><code class="function">std::sort</code></p></li><li><p><code class="function">std::stable_sort</code></p></li><li><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id660222"></a><p><span class="title"><i> Parallelization of Bulk Operations for STL Dictionaries </i>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername"> Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS) - . </span></span></p></div><div class="biblioentry"><a id="id389946"></a><p><span class="title"><i> + . </span></span></p></div><div class="biblioentry"><a id="id660269"></a><p><span class="title"><i> The Multi-Core Standard Template Library </i>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername"> Euro-Par 2007: Parallel Processing. (LNCS 4641) diff --git a/libstdc++-v3/doc/html/manual/profile_mode.html b/libstdc++-v3/doc/html/manual/profile_mode.html index fca37908a35..e47ecdb67e1 100644 --- a/libstdc++-v3/doc/html/manual/profile_mode.html +++ b/libstdc++-v3/doc/html/manual/profile_mode.html @@ -135,7 +135,7 @@ vector-size: improvement = 3: call stack = 0x804842c ... call context. (Environment variable not supported.) </p></li></ul></div><p> - </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id412060"></a><p><span class="title"><i> + </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="id659013"></a><p><span class="title"><i> Perflint: A Context Sensitive Performance Advisor for C++ Programs </i>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername"> Proceedings of the 2009 International Symposium on Code Generation diff --git a/libstdc++-v3/doc/html/manual/setup.html b/libstdc++-v3/doc/html/manual/setup.html index bab3b46b30c..4d8f3d01172 100644 --- a/libstdc++-v3/doc/html/manual/setup.html +++ b/libstdc++-v3/doc/html/manual/setup.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I. Introduction -</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt></dl></dd></dl></div><p>To transform libstdc++ sources into installed include files +</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files and properly built binaries useful for linking to other software is a multi-step process. Steps include getting the sources, configuring and building the sources, testing, and installation. diff --git a/libstdc++-v3/doc/html/manual/shared_ptr.html b/libstdc++-v3/doc/html/manual/shared_ptr.html index ea7e3208f9d..978c7ec54c6 100644 --- a/libstdc++-v3/doc/html/manual/shared_ptr.html +++ b/libstdc++-v3/doc/html/manual/shared_ptr.html @@ -29,7 +29,7 @@ drops to zero. Derived classes override those functions to destroy resources in a context where the correct dynamic type is known. This is an application of the technique known as type erasure. - </p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.impl"></a>Implementation</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id397705"></a>Class Hierarchy</h4></div></div></div><p> + </p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.impl"></a>Implementation</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id737043"></a>Class Hierarchy</h4></div></div></div><p> A <code class="classname">shared_ptr<T></code> contains a pointer of type <span class="type">T*</span> and an object of type <code class="classname">__shared_count</code>. The shared_count contains a @@ -71,7 +71,7 @@ be forwarded to <span class="type">Tp</span>'s constructor. Unlike the other <code class="classname">_Sp_counted_*</code> classes, this one is parameterized on the type of object, not the type of pointer; this is purely a convenience that simplifies the implementation slightly. - </p></dd></dl></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id455193"></a>Thread Safety</h4></div></div></div><p> + </p></dd></dl></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id656080"></a>Thread Safety</h4></div></div></div><p> The interface of <code class="classname">tr1::shared_ptr</code> was extended for C++0x with support for rvalue-references and the other features from N2351. As with other libstdc++ headers shared by TR1 and C++0x, @@ -129,7 +129,7 @@ compiler, standard library, platform etc. For the version of shared_ptr in libstdc++ the compiler and library are fixed, which makes things much simpler: we have an atomic CAS or we don't, see Lock Policy below for details. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id410726"></a>Selecting Lock Policy</h4></div></div></div><p> +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id618309"></a>Selecting Lock Policy</h4></div></div></div><p> </p><p> There is a single <code class="classname">_Sp_counted_base</code> class, which is a template parameterized on the enum @@ -170,7 +170,7 @@ used when libstdc++ is built without <code class="literal">--enable-threads</cod <code class="filename">ext/atomicity.h</code>, which detect if the program is multi-threaded. If only one thread of execution exists in the program then less expensive non-atomic operations are used. - </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id477345"></a>Dual C++0x and TR1 Implementation</h4></div></div></div><p> + </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id679959"></a>Dual C++0x and TR1 Implementation</h4></div></div></div><p> The classes derived from <code class="classname">_Sp_counted_base</code> (see Class Hierarchy below) and <code class="classname">__shared_count</code> are implemented separately for C++0x and TR1, in <code class="filename">bits/boost_sp_shared_count.h</code> and @@ -181,7 +181,7 @@ The TR1 implementation is considered relatively stable, so is unlikely to change unless bug fixes require it. If the code that is common to both C++0x and TR1 modes needs to diverge further then it might be necessary to duplicate additional classes and only make changes to the C++0x versions. -</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id474156"></a>Related functions and classes</h4></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>, +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id680859"></a>Related functions and classes</h4></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>, <code class="code">const_pointer_cast</code></span></dt><dd><p> As noted in N2351, these functions can be implemented non-intrusively using the alias constructor. However the aliasing constructor is only available @@ -214,10 +214,10 @@ is called. Users should not try to use this. As well as the extra constructors, this implementation also needs some members of _Sp_counted_deleter to be protected where they could otherwise be private. - </p></dd></dl></div></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.using"></a>Use</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id498188"></a>Examples</h4></div></div></div><p> + </p></dd></dl></div></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.using"></a>Use</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id715170"></a>Examples</h4></div></div></div><p> Examples of use can be found in the testsuite, under <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>. - </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id461223"></a>Unresolved Issues</h4></div></div></div><p> + </p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="id686787"></a>Unresolved Issues</h4></div></div></div><p> The resolution to C++ Standard Library issue <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#674" target="_top">674</a>, "shared_ptr interface changes for consistency with N1856" will need to be implemented after it is accepted into the working @@ -265,7 +265,7 @@ be private. code to work with, Peter Dimov in particular for his help and invaluable advice on thread safety. Phillip Jordan and Paolo Carlini for the lock policy implementation. - </p></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id414603"></a><p>[<abbr class="abbrev"> + </p></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id622100"></a><p>[<abbr class="abbrev"> n2351 </abbr>] <span class="title"><i> Improving shared_ptr for C++0x, Revision 2 @@ -274,7 +274,7 @@ be private. . </span><span class="biblioid"> <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id414627"></a><p>[<abbr class="abbrev"> + . </span></p></div><div class="biblioentry"><a id="id622124"></a><p>[<abbr class="abbrev"> n2456 </abbr>] <span class="title"><i> C++ Standard Library Active Issues List (Revision R52) @@ -283,7 +283,7 @@ be private. . </span><span class="biblioid"> <a class="ulink" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id469083"></a><p>[<abbr class="abbrev"> + . </span></p></div><div class="biblioentry"><a id="id635143"></a><p>[<abbr class="abbrev"> n2461 </abbr>] <span class="title"><i> Working Draft, Standard for Programming Language C++ @@ -292,7 +292,7 @@ be private. . </span><span class="biblioid"> <a class="ulink" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top"> </a> - . </span></p></div><div class="biblioentry"><a id="id416974"></a><p>[<abbr class="abbrev"> + . </span></p></div><div class="biblioentry"><a id="id685426"></a><p>[<abbr class="abbrev"> boostshared_ptr </abbr>] <span class="title"><i> Boost C++ Libraries documentation - shared_ptr class template diff --git a/libstdc++-v3/doc/html/manual/spine.html b/libstdc++-v3/doc/html/manual/spine.html index beca228c986..09f971a46e3 100644 --- a/libstdc++-v3/doc/html/manual/spine.html +++ b/libstdc++-v3/doc/html/manual/spine.html @@ -2,18 +2,18 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="prev" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="next" href="intro.html" title="Part I. Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual-index"></a>The GNU C++ Library</h1></div><div><p class="copyright">Copyright © 2009 <a class="ulink" href="http://www.fsf.org" target="_top">FSF</a> - </p></div><div><div class="legalnotice"><a id="id451530"></a><p> + </p></div><div><div class="legalnotice"><a id="id699529"></a><p> <a class="link" href="license.html" title="License">License</a> </p></div></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="part"><a href="intro.html">I. Introduction -</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Propagating Exceptions aka Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Support for -fno-exceptions</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="support.html">II. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="support.html">II. Support </a></span></dt><dd><dl><dt><span class="preface"><a href="bk01pt02pr01.html"></a></span></dt><dt><span class="chapter"><a href="fundamental_types.html">4. Types</a></span></dt><dd><dl><dt><span class="sect1"><a href="fundamental_types.html#manual.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s02.html">Numeric Properties</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s03.html">NULL</a></span></dt></dl></dd><dt><span class="chapter"><a href="dynamic_memory.html">5. Dynamic Memory</a></span></dt><dt><span class="chapter"><a href="termination.html">6. Termination</a></span></dt><dd><dl><dt><span class="sect1"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect1"><a href="verbose_termination.html">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="diagnostics.html">III. Diagnostics -</a></span></dt><dd><dl><dt><span class="chapter"><a href="exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s03.html">Cancellation</a></span></dt></dl></dd><dt><span class="chapter"><a href="bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></dd><dt><span class="part"><a href="utilities.html">IV. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></dd><dt><span class="chapter"><a href="bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></dd><dt><span class="part"><a href="utilities.html">IV. Utilities </a></span></dt><dd><dl><dt><span class="chapter"><a href="functors.html">9. Functors</a></span></dt><dt><span class="chapter"><a href="pairs.html">10. Pairs</a></span></dt><dt><span class="chapter"><a href="memory.html">11. Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="traits.html">12. Traits</a></span></dt></dl></dd><dt><span class="part"><a href="strings.html">V. @@ -46,12 +46,12 @@ </a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="documentation_style.html#doc_style.docbook">Docbook</a></span></dt></dl></dd><dt><span class="sect1"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B. Porting and Maintenance -</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable">GLIBCXX_ENABLE, the --enable maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300">3.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310">3.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320">3.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330">3.3</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340">3.4</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400">4.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410">4.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420">4.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430">4.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C. +</a></span></dt><dd><dl><dt><span class="sect1"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="appendix_porting.html#build_hacking.enable">GLIBCXX_ENABLE, the --enable maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="api.html#api.rel_300">3.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_310">3.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_320">3.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_330">3.3</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_340">3.4</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_400">4.0</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_410">4.1</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_420">4.2</a></span></dt><dt><span class="sect2"><a href="api.html#api.rel_430">4.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="appendix_free.html">C. Free Software Needs Free Documentation </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D. GNU General Public License version 3 - </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt><dt><span class="index"><a href="bk01ix01.html">Index</a></span></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>1.1. <a href="status.html#id452999">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#id458222">C++ TR1 Implementation Status</a></dt><dt>1.3. <a href="status.html#id478373">C++ 200x Implementation Status</a></dt><dt>1.4. <a href="status.html#id410254">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using_headers.html#id415096">C++ 1998 Library Headers</a></dt><dt>3.2. <a href="using_headers.html#id458725">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.3. <a href="using_headers.html#id457966">C++ 200x Library Headers</a></dt><dt>3.4. <a href="using_headers.html#id407365">C++ 200x Library Headers for C Library Facilities</a></dt><dt>3.5. <a href="using_headers.html#id450814">C++ TR 1 Library Headers</a></dt><dt>3.6. <a href="using_headers.html#id480798">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.7. <a href="using_headers.html#id517956">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.8. <a href="using_headers.html#id402018">C++ ABI Headers</a></dt><dt>3.9. <a href="using_headers.html#id400704">Extension Headers</a></dt><dt>3.10. <a href="using_headers.html#id355542">Extension Debug Headers</a></dt><dt>3.11. <a href="using_headers.html#id461107">Extension Profile Headers</a></dt><dt>3.12. <a href="using_headers.html#id497297">Extension Parallel Headers</a></dt><dt>30.1. <a href="bk01pt12ch30s03.html#id517820">Debugging Containers</a></dt><dt>30.2. <a href="bk01pt12ch30s03.html#id357333">Debugging Containers C++0x</a></dt><dt>31.1. <a href="bk01pt12ch31s03.html#id479890">Parallel Algorithms</a></dt><dt>32.1. <a href="bk01pt12ch32s02.html#id474437">Code Location</a></dt><dt>32.2. <a href="bk01pt12ch32s07.html#id501361">Diagnostics</a></dt><dt>33.1. <a href="bitmap_allocator.html#id393472">Bitmap Allocator Memory Map</a></dt><dt>A.1. <a href="documentation_style.html#id431910">HTML to Docbook XML markup comparison</a></dt><dt>A.2. <a href="documentation_style.html#id514274">Docbook XML Element Use</a></dt><dt>B.1. <a href="api.html#id505845">Extension Allocators</a></dt><dt>B.2. <a href="api.html#id403516">Extension Allocators Continued</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Documentation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. + </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt><dt><span class="index"><a href="bk01ix01.html">Index</a></span></dt></dl></div><div class="list-of-tables"><p><b>List of Tables</b></p><dl><dt>1.1. <a href="status.html#id700007">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#id693868">C++ TR1 Implementation Status</a></dt><dt>1.3. <a href="status.html#id633674">C++ 200x Implementation Status</a></dt><dt>1.4. <a href="status.html#id631613">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using_headers.html#id651524">C++ 1998 Library Headers</a></dt><dt>3.2. <a href="using_headers.html#id639501">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.3. <a href="using_headers.html#id645876">C++ 200x Library Headers</a></dt><dt>3.4. <a href="using_headers.html#id646983">C++ 200x Library Headers for C Library Facilities</a></dt><dt>3.5. <a href="using_headers.html#id631952">C++ TR 1 Library Headers</a></dt><dt>3.6. <a href="using_headers.html#id636818">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.7. <a href="using_headers.html#id685876">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.8. <a href="using_headers.html#id639029">C++ ABI Headers</a></dt><dt>3.9. <a href="using_headers.html#id637647">Extension Headers</a></dt><dt>3.10. <a href="using_headers.html#id631989">Extension Debug Headers</a></dt><dt>3.11. <a href="using_headers.html#id521103">Extension Profile Headers</a></dt><dt>3.12. <a href="using_headers.html#id684216">Extension Parallel Headers</a></dt><dt>30.1. <a href="bk01pt12ch30s03.html#id672482">Debugging Containers</a></dt><dt>30.2. <a href="bk01pt12ch30s03.html#id646525">Debugging Containers C++0x</a></dt><dt>31.1. <a href="bk01pt12ch31s03.html#id731921">Parallel Algorithms</a></dt><dt>32.1. <a href="bk01pt12ch32s02.html#id647548">Code Location</a></dt><dt>32.2. <a href="bk01pt12ch32s07.html#id521055">Diagnostics</a></dt><dt>33.1. <a href="bitmap_allocator.html#id730908">Bitmap Allocator Memory Map</a></dt><dt>A.1. <a href="documentation_style.html#id740402">HTML to Docbook XML markup comparison</a></dt><dt>A.2. <a href="documentation_style.html#id613462">Docbook XML Element Use</a></dt><dt>B.1. <a href="api.html#id623096">Extension Allocators</a></dt><dt>B.2. <a href="api.html#id721371">Extension Allocators Continued</a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../spine.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Documentation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. Introduction </td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index cbc8ddab532..40dc1a26eb2 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -8,7 +8,7 @@ This status table is based on the table of contents of ISO/IEC 14882:2003. </p><p> This page describes the C++0x support in mainline GCC SVN, not in any particular release. -</p><div class="table"><a id="id452999"></a><p class="title"><b>Table 1.1. C++ 1998/2003 Implementation Status</b></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"> +</p><div class="table"><a id="id700007"></a><p class="title"><b>Table 1.1. C++ 1998/2003 Implementation Status</b></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"> <span class="emphasis"><em>18</em></span> </td><td colspan="3" align="left"> <span class="emphasis"><em>Language support</em></span> @@ -153,7 +153,7 @@ In this implementation the header names are prefixed by </p><p> This page describes the TR1 support in mainline GCC SVN, not in any particular release. -</p><div class="table"><a id="id458222"></a><p class="title"><b>Table 1.2. C++ TR1 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code"><functional></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code"><memory></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left"> +</p><div class="table"><a id="id693868"></a><p class="title"><b>Table 1.2. C++ TR1 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code"><functional></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code"><memory></code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left"> <p> Uses code from <a class="ulink" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>. @@ -171,7 +171,7 @@ presence of the required flag. </p><p> This page describes the C++0x support in mainline GCC SVN, not in any particular release. -</p><div class="table"><a id="id478373"></a><p class="title"><b>Table 1.3. C++ 200x Implementation Status</b></p><div class="table-contents"><table summary="C++ 200x Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"> +</p><div class="table"><a id="id633674"></a><p class="title"><b>Table 1.3. C++ 200x Implementation Status</b></p><div class="table-contents"><table summary="C++ 200x Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"> <span class="emphasis"><em>18</em></span> </td><td colspan="3" align="left"> <span class="emphasis"><em>Language support</em></span> @@ -240,7 +240,7 @@ decimal floating-point arithmetic </p><p> This page describes the TR 24733 support in mainline GCC SVN, not in any particular release. -</p><div class="table"><a id="id410254"></a><p class="title"><b>Table 1.4. C++ TR 24733 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"> +</p><div class="table"><a id="id631613"></a><p class="title"><b>Table 1.4. C++ TR 24733 Implementation Status</b></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"> <span class="emphasis"><em>0</em></span> </td><td colspan="3" align="left"> <span class="emphasis"><em>Introduction</em></span> diff --git a/libstdc++-v3/doc/html/manual/strings.html b/libstdc++-v3/doc/html/manual/strings.html index 82f3ad7367e..a1e78f27289 100644 --- a/libstdc++-v3/doc/html/manual/strings.html +++ b/libstdc++-v3/doc/html/manual/strings.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="shared_ptr.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt05ch13.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.strings"></a>Part V. Strings - <a id="id405758" class="indexterm"></a> + <a id="id710761" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="bk01pt05ch13.html">13. String Classes</a></span></dt><dd><dl><dt><span class="sect1"><a href="bk01pt05ch13.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s02.html">Case Sensitivity</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s03.html">Arbitrary Character Types</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s04.html">Tokenizing</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s05.html">Shrink to Fit</a></span></dt><dt><span class="sect1"><a href="bk01pt05ch13s06.html">CString (MFC)</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="shared_ptr.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt05ch13.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">shared_ptr </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 13. String Classes</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/support.html b/libstdc++-v3/doc/html/manual/support.html index 48d38aa8df5..fb217b89a0d 100644 --- a/libstdc++-v3/doc/html/manual/support.html +++ b/libstdc++-v3/doc/html/manual/support.html @@ -5,5 +5,5 @@ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02pr01.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.support"></a>Part II. Support - <a id="id492773" class="indexterm"></a> + <a id="id652738" class="indexterm"></a> </h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="bk01pt02pr01.html"></a></span></dt><dt><span class="chapter"><a href="fundamental_types.html">4. Types</a></span></dt><dd><dl><dt><span class="sect1"><a href="fundamental_types.html#manual.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s02.html">Numeric Properties</a></span></dt><dt><span class="sect1"><a href="bk01pt02ch04s03.html">NULL</a></span></dt></dl></dd><dt><span class="chapter"><a href="dynamic_memory.html">5. Dynamic Memory</a></span></dt><dt><span class="chapter"><a href="termination.html">6. Termination</a></span></dt><dd><dl><dt><span class="sect1"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect1"><a href="verbose_termination.html">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Debugging Support </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/test.html b/libstdc++-v3/doc/html/manual/test.html index 9d95b85ea2e..80988a4febe 100644 --- a/libstdc++-v3/doc/html/manual/test.html +++ b/libstdc++-v3/doc/html/manual/test.html @@ -1,6 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , test , testsuite , performance , conformance , ABI , exception safety " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p> +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , test , testsuite , performance , conformance , ABI , exception safety " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="appendix_porting.html" title="Appendix B. Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. + Porting and Maintenance + +</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p> The libstdc++ testsuite includes testing for standard conformance, regressions, ABI, and performance. </p><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"></a>Organization</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"></a>Directory Layout</h4></div></div></div><p> @@ -486,4 +489,4 @@ only default variables. </p><p> A number of class abstractions for performance counters, and reporting functions including: - </p><div class="itemizedlist"><ul type="circle"><li><p>time_counter</p></li><li><p>resource_counter</p></li><li><p>report_performance</p></li></ul></div></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html> + </p><div class="itemizedlist"><ul type="circle"><li><p>time_counter</p></li><li><p>resource_counter</p></li><li><p>report_performance</p></li></ul></div></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/using.html b/libstdc++-v3/doc/html/manual/using.html index b7bf46a67d7..1d63cb53087 100644 --- a/libstdc++-v3/doc/html/manual/using.html +++ b/libstdc++-v3/doc/html/manual/using.html @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Part I. +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="intro.html" title="Part I. Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. Introduction -</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Propagating Exceptions aka Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Support for -fno-exceptions</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.lib"></a>Linking Library Binary Files</h2></div></div></div><p> +</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.lib"></a>Linking Library Binary Files</h2></div></div></div><p> If you only built a static library (libstdc++.a), or if you specified static linking, you don't have to worry about this. But if you built a shared library (libstdc++.so) and linked @@ -41,4 +41,4 @@ A libstdc++.la file is also installed, for use with Libtool. If you use Libtool to create your executables, these details are taken care of for you. - </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html> + </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/using_exceptions.html b/libstdc++-v3/doc/html/manual/using_exceptions.html index 6bc776c2c6c..5c74e93ac8f 100644 --- a/libstdc++-v3/doc/html/manual/using_exceptions.html +++ b/libstdc++-v3/doc/html/manual/using_exceptions.html @@ -1,6 +1,319 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exception"></a>Exceptions</h2></div></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Propagating Exceptions aka Exception Neutrality</h3></div></div></div><p> - </p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p> - </p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Support for <code class="literal">-fno-exceptions</code></h3></div></div></div><p> - </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html> +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" C++ , exception , error , exception neutrality , exception safety , exception propagation , -fno-exceptions " /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p> +The C++ language provides language support for stack unwinding +with <code class="literal">try</code> and <code class="literal">catch</code> blocks and +the <code class="literal">throw</code> keyword. +</p><p> +These are very powerful constructs, and require some thought when +applied to the standard library in order to yield components that work +efficiently while cleaning up resources when unexpectedly killed via +exceptional circumstances. +</p><p> +Two general topics of discussion follow: +exception neutrality and exception safety. +</p><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p> + What is exception-safe code? + </p><p> + Will define this as reasonable and well-defined behavior by classes + and functions from the standard library when used by user-defined + classes and functions that are themselves exception safe. + </p><p> + Please note that using exceptions in combination with templates + imposes an additional requirement for exception + safety. Instantiating types are required to have destructors that + do no throw. + </p><p> + Using the layered approach from Abrahams, can classify library + components as providing set levels of safety. These will be called + exception guarantees, and can be divided into three categories. + </p><div class="itemizedlist"><ul type="disc"><li><p> + One. Don't throw. + </p><p> + As specified in 23.2.1 general container requirements. Applicable + to container and string classes. + </p><p> + Member + functions <code class="function">erase</code>, <code class="function">pop_back</code>, <code class="function">pop_front</code>, <code class="function">swap</code>, <code class="function">clear</code>. And <span class="type">iterator</span> + copy constructor and assignment operator. + </p></li><li><p> + Two. Don't leak resources when exceptions are thrown. This is + also referred to as the “<span class="quote">basic</span>” exception safety guarantee. + </p><p> + This applicable throughout the standard library. + </p></li><li><p> + Three. Commit-or-rollback semantics. This is + referred to as “<span class="quote">strong</span>” exception safety guarantee. + </p><p> + As specified in 23.2.1 general container requirements. Applicable + to container and string classes. + </p><p> + Member functions <code class="function">insert</code> of a single + element, <code class="function">push_back</code>, <code class="function">push_front</code>, + and <code class="function">rehash</code>. + </p></li></ul></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Exception Neutrality</h3></div></div></div><p> + Simply put, once thrown an exception object should continue in + flight unless handled explicitly. In practice, this means + propagating exceptions should not be swallowed in + gratuitous <code class="literal">catch(...)</code> blocks. Instead, + matching <code class="literal">try</code> and <code class="literal">catch</code> + blocks should have specific catch handlers and allow un-handed + exception objects to propagate. If a + terminating <code class="literal">catch(...)</code> blocks exist then it + should end with a <code class="literal">throw</code> to re-throw the current + exception. + </p><p> + Why do this? + </p><p> + By allowing exception objects to propagate, a more flexible + approach to error handling is made possible (although not + required.) Instead of dealing with an error immediately, one can + allow the exception to propagate up until sufficient context is + available and the choice of exiting or retrying can be made in an + informed manner. + </p><p> + Unfortunately, this tends to be more of a guideline than a strict + rule as applied to the standard library. As such, the following is + a list of known problem areas where exceptions are not propagated. + </p><div class="itemizedlist"><ul type="disc"><li><p> + Input/Output + </p><p> + The destructor <code class="function">ios_base::Init::~Init()</code> + swallows all exceptions from <code class="function">flush</code> called on + all open streams at termination. + </p><p> + All formatted input in <code class="classname">basic_istream</code> or + formatted output in <code class="classname">basic_ostream</code> can be + configured to swallow exceptions + when <code class="function">exceptions</code> is set to + ignore <span class="type">ios_base::badbit</span>. + </p><p> + Functions that have been registered + with <code class="function">ios_base::register_callback</code> swallow all + exceptions when called as part of a callback event. + </p><p> + When closing the underlying + file, <code class="function">basic_filebuf::close</code> will swallow + (non-cancellation) exceptions thrown and return <code class="literal">NULL</code>. + </p></li><li><p> + Thread + </p><p> + The constructors of <code class="classname">thread</code> that take a + callable function argument swallow all exceptions resulting from + executing the function argument. + </p></li></ul></div></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p> + C++ is a language that strives to be as efficient as is possible + in delivering features. As such, considerable care is used by both + language implementer and designers to make sure unused features + not impose hidden or unexpected costs. The GNU system tries to be + as flexible and as configurable as possible. So, it should come as + no surprise that GNU C++ provides an optional language extension, + spelled <code class="literal">-fno-exceptions</code>, as a way to excise the + implicitly generated magic necessary to + support <code class="literal">try</code> and <code class="literal">catch</code> blocks + and thrown objects. (Language support + for <code class="literal">-fno-exceptions</code> is documented in the GNU + GCC <a class="ulink" href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options" target="_top">manual</a>.) + </p><p>Before detailing the library support + for <code class="literal">-fno-exceptions</code>, first a passing note on + the things lost when this flag is used: it will break exceptions + trying to pass through code compiled + with <code class="literal">-fno-exceptions</code> whether or not that code + has any <code class="literal">try</code> or <code class="literal">catch</code> + constructs. If you might have some code that throws, you shouldn't + use <code class="literal">-fno-exceptions</code>. If you have some code that + uses <code class="literal">try</code> or <code class="literal">catch</code>, you + shouldn't use <code class="literal">-fno-exceptions</code>. + </p><p> + And what it to be gained, tinkering in the back alleys with a + language like this? Exception handling overhead can be measured + in the size of the executable binary, and varies with the + capabilities of the underlying operating system and specific + configuration of the C++ compiler. On recent hardware with GNU + system software of the same age, the combined code and data size + overhead for enabling exception handling is around 7%. Of course, + if code size is of singular concern than using the appropriate + optimizer setting with exception handling enabled + (ie, <code class="literal">-Os -fexceptions</code>) may save up to twice + that, and preserve error checking. + </p><p> + So. Hell bent, we race down the slippery track, knowing the brakes + are a little soft and that the right front wheel has a tendency to + wobble at speed. Go on: detail the standard library support + for <code class="literal">-fno-exceptions</code>. + </p><p> + In sum, valid C++ code with exception handling is transformed into + a dialect without exception handling. In detailed steps: all use + of the C++ + keywords <code class="literal">try</code>, <code class="literal">catch</code>, + and <code class="literal">throw</code> in the standard library have been + permanently replaced with the pre-processor controlled equivalents + spelled <code class="literal">__try</code>, <code class="literal">__catch</code>, + and <code class="literal">__throw_exception_again</code>. They are defined + as follows. + </p><pre class="programlisting"> +#ifdef __EXCEPTIONS +# define __try try +# define __catch(X) catch(X) +# define __throw_exception_again throw +#else +# define __try if (true) +# define __catch(X) if (false) +# define __throw_exception_again +#endif +</pre><p> + In addition, for every object derived from + class <code class="classname">exception</code>, there exists a corresponding + function with C language linkage. An example: +</p><pre class="programlisting"> +#ifdef __EXCEPTIONS + void __throw_bad_exception(void) + { throw bad_exception(); } +#else + void __throw_bad_exception(void) + { abort(); } +#endif +</pre><p> + The last language feature needing to be transformed + by <code class="literal">-fno-exceptions</code> is treatment of exception + specifications on member functions. Fortunately, the compiler deals + with this by ignoring exception specifications and so no alternate + source markup is needed. +</p><p> + By using this combination of language re-specification by the + compiler, and the pre-processor tricks and the functional + indirection layer for thrown exception objects by the library, + libstdc++ files can be compiled + with <code class="literal">-fno-exceptions</code>. +</p><p> + User code that uses C++ keywords + like <code class="literal">throw</code>, <code class="literal">try</code>, + and <code class="literal">catch</code> will produce errors even if the user + code has included libstdc++ headers and is using constructs + like <code class="classname">basic_iostream</code>. Even though the standard + library has been transformed, user code may need modification. User + code that attempts or expects to do error checking on standard + library components compiled with exception handling disabled should + be evaluated and potentially made conditional. +</p><p> + Some issues remain with this approach (see bugzilla entry + 25191). Code paths are not equivalent, in + particular <code class="literal">catch</code> blocks are not evaluated. Also + problematic are <code class="literal">throw</code> expressions expecting a + user-defined throw handler. Known problem areas in the standard + library include using an instance + of <code class="classname">basic_istream</code> + with <code class="function">exceptions</code> set to specific + <span class="type">ios_base::iostate</span> conditions, or + cascading <code class="literal">catch</code> blocks that dispatch error + handling or recovery efforts based on the type of exception object + thrown. +</p><p> + Oh, and by the way: none of this hackery is at all + special. (Although perhaps well-deserving of a raised eyebrow.) + Support continues to evolve and may change in the future. Similar + and even additional techniques are used in other C++ libraries and + compilers. +</p><p> + C++ hackers with a bent for language and control-flow purity have + been successfully consoled by grizzled C veterans lamenting the + substitution of the C language keyword + <code class="literal">const</code> with the uglified + doppelganger <code class="literal">__const</code>. +</p></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p> + C language code that is expecting to interoperate with C++ should be + compiled with <code class="literal">-fexceptions</code>. This will make + debugging a C language function called as part of C++-induced stack + unwinding possible. +</p><p> + In particular, unwinding into a frame with no exception handling +data will cause a runtime abort. If the unwinder runs out of unwind +info before it finds a handler, <code class="function">std::terminate()</code> +is called. +</p><p> + Please note that most development environments should take care of + getting these details right. For GNU systems, all appropriate parts + of the GNU C library are already compiled + with <code class="literal">-fexceptions</code>. +</p></div><div class="sect3" lang="en" xml:lang="en"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p> + GNU systems re-use some of the exception handling mechanisms to + track control flow for <code class="literal">POSIX</code> thread cancellation. +</p><p> + Cancellation points are functions defined by POSIX as worthy of + special treatment. The standard library may use some of these + functions to implement parts of the ISO C++ standard or depend on + them for extensions. +</p><p> + Of note: +</p><p> + <code class="function">nanosleep</code>, + <code class="function">read</code>, <code class="function">write</code>, <code class="function">open</code>, <code class="function">close</code>, + and <code class="function">wait</code>. +</p><p> + The parts of libstdc++ that use C library functions marked as + cancellation points should take pains to be exception neutral. + Failing this, <code class="literal">catch</code> blocks have been augmented to + show that the POSIX cancellation object is in flight. +</p><p> + This augmentation adds a <code class="literal">catch</code> block + for <code class="classname">__cxxabiv1::__forced_unwind</code>, which is the + object representing the POSIX cancellation object. Like so: +</p><pre class="programlisting"> + catch(const __cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + throw; + } + catch(...) + { this->_M_setstate(ios_base::badbit); } +</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="id618326"></a><p><span class="title"><i> + System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) + </i>. </span><span class="pagenums"> + 2.9.5 Thread Cancellation + . </span><span class="copyright">Copyright © 2008 + The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span><span class="biblioid"> + <a class="ulink" href="http://www.opengroup.org/austin/" target="_top"> + </a> + . </span></p></div><div class="biblioentry"><a id="id627763"></a><p><span class="title"><i> + Error and Exception Handling + </i>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername"> + Boost + . </span></span><span class="biblioid"> + <a class="ulink" href="http://www.boost.org/community/error_handling.html" target="_top"> + </a> + . </span></p></div><div class="biblioentry"><a id="id633982"></a><p><span class="title"><i> + Exception-Safety in Generic Components + </i>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername"> + Boost + . </span></span><span class="biblioid"> + <a class="ulink" href="http://www.boost.org/community/exception_safety.html" target="_top"> + </a> + . </span></p></div><div class="biblioentry"><a id="id634268"></a><p><span class="title"><i> + Standard Library Exception Policy + </i>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername"> + WG21 N1077 + . </span></span><span class="biblioid"> + <a class="ulink" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top"> + </a> + . </span></p></div><div class="biblioentry"><a id="id642510"></a><p><span class="title"><i> + ia64 c++ abi exception handling + </i>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername"> + GNU + . </span></span><span class="biblioid"> + <a class="ulink" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top"> + </a> + . </span></p></div><div class="biblioentry"><a id="id636666"></a><p><span class="title"><i> + Appendix E: Standard-Library Exception Safety + </i>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="biblioid"> + <a class="ulink" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top"> + </a> + . </span></p></div><div class="biblioentry"><a id="id707620"></a><p><span class="title"><i> + Exceptional C++ + </i>. </span><span class="pagenums"> + Exception-Safety Issues and Techniques + . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="id652939"></a><p><span class="title"><i> + exception_defines.h #defines try/catch + </i>. </span><span class="subtitle"> + GCC Bug <a class="ulink" href="http://gcc.gnu.org/PR25191" target="_top">25191</a> + . </span><span class="biblioid"> + . </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/manual/using_headers.html b/libstdc++-v3/doc/html/manual/using_headers.html index 62bc8f9c665..4986fe585a3 100644 --- a/libstdc++-v3/doc/html/manual/using_headers.html +++ b/libstdc++-v3/doc/html/manual/using_headers.html @@ -20,19 +20,19 @@ upcoming 200x standard. </p><p> C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>. - </p><div class="table"><a id="id415096"></a><p class="title"><b>Table 3.1. C++ 1998 Library Headers</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id458725"></a><p class="title"><b>Table 3.2. C++ 1998 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p> + </p><div class="table"><a id="id651524"></a><p class="title"><b>Table 3.1. C++ 1998 Library Headers</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id639501"></a><p class="title"><b>Table 3.2. C++ 1998 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p> C++0x include files. These are only available in C++0x compilation mode, i.e. <code class="literal">-std=c++0x</code> or <code class="literal">-std=gnu++0x</code>. -</p><p></p><div class="table"><a id="id457966"></a><p class="title"><b>Table 3.3. C++ 200x Library Headers</b></p><div class="table-contents"><table summary="C++ 200x Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id407365"></a><p class="title"><b>Table 3.4. C++ 200x Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 200x Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdatomic</code></td></tr><tr><td align="left"><code class="filename">cstdbool</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td></tr><tr><td align="left"><code class="filename">cstring</code></td><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td></tr><tr><td align="left"><code class="filename">cwctype</code></td><td align="left"><code class="filename">stdatomic.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p> +</p><p></p><div class="table"><a id="id645876"></a><p class="title"><b>Table 3.3. C++ 200x Library Headers</b></p><div class="table-contents"><table summary="C++ 200x Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id646983"></a><p class="title"><b>Table 3.4. C++ 200x Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ 200x Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdatomic</code></td></tr><tr><td align="left"><code class="filename">cstdbool</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td></tr><tr><td align="left"><code class="filename">cstring</code></td><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td></tr><tr><td align="left"><code class="filename">cwctype</code></td><td align="left"><code class="filename">stdatomic.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p> In addition, TR1 includes as: -</p><div class="table"><a id="id450814"></a><p class="title"><b>Table 3.5. C++ TR 1 Library Headers</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id480798"></a><p class="title"><b>Table 3.6. C++ TR 1 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++ +</p><div class="table"><a id="id631952"></a><p class="title"><b>Table 3.5. C++ TR 1 Library Headers</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id636818"></a><p class="title"><b>Table 3.6. C++ TR 1 Library Headers for C Library Facilities</b></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++ compiler supports scalar decimal floating-point types defined via <code class="code">__attribute__((mode(SD|DD|LD)))</code>. -</p><div class="table"><a id="id517956"></a><p class="title"><b>Table 3.7. C++ TR 24733 Decimal Floating-Point Header</b></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p> +</p><div class="table"><a id="id685876"></a><p class="title"><b>Table 3.7. C++ TR 24733 Decimal Floating-Point Header</b></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p> Also included are files for the C++ ABI interface: -</p><div class="table"><a id="id402018"></a><p class="title"><b>Table 3.8. C++ ABI Headers</b></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p> +</p><div class="table"><a id="id639029"></a><p class="title"><b>Table 3.8. C++ ABI Headers</b></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p> And a large variety of extensions. -</p><div class="table"><a id="id400704"></a><p class="title"><b>Table 3.9. Extension Headers</b></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id355542"></a><p class="title"><b>Table 3.10. Extension Debug Headers</b></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id461107"></a><p class="title"><b>Table 3.11. Extension Profile Headers</b></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id497297"></a><p class="title"><b>Table 3.12. Extension Parallel Headers</b></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules. +</p><div class="table"><a id="id637647"></a><p class="title"><b>Table 3.9. Extension Headers</b></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id631989"></a><p class="title"><b>Table 3.10. Extension Debug Headers</b></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id521103"></a><p class="title"><b>Table 3.11. Extension Profile Headers</b></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" /><col align="left" /><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="id684216"></a><p class="title"><b>Table 3.12. Extension Parallel Headers</b></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" /><col align="left" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="sect2" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules. </p><p>First, mixing different dialects of the standard headers is not possible. It's an all-or-nothing affair. Thus, code like </p><pre class="programlisting"> diff --git a/libstdc++-v3/doc/html/manual/utilities.html b/libstdc++-v3/doc/html/manual/utilities.html index 3da95195573..26cef8e6d18 100644 --- a/libstdc++-v3/doc/html/manual/utilities.html +++ b/libstdc++-v3/doc/html/manual/utilities.html @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt03ch07s03.html" title="Cancellation" /><link rel="next" href="functors.html" title="Chapter 9. Functors" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV. Utilities</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><meta name="keywords" content=" ISO C++ , library " /><link rel="home" href="../spine.html" title="The GNU C++ Library Documentation" /><link rel="up" href="spine.html" title="The GNU C++ Library" /><link rel="prev" href="bk01pt03ch07s02.html" title="Adding Data to Exceptions" /><link rel="next" href="functors.html" title="Chapter 9. Functors" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. Utilities -</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch07s03.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="functors.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.util"></a>Part IV. +</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library</th><td width="20%" align="right"> <a accesskey="n" href="functors.html">Next</a></td></tr></table><hr /></div><div class="part" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="manual.util"></a>Part IV. Utilities - <a id="id457371" class="indexterm"></a> -</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="functors.html">9. Functors</a></span></dt><dt><span class="chapter"><a href="pairs.html">10. Pairs</a></span></dt><dt><span class="chapter"><a href="memory.html">11. Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="traits.html">12. Traits</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch07s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="functors.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Cancellation </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. Functors</td></tr></table></div></body></html> + <a id="id622508" class="indexterm"></a> +</h1></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="chapter"><a href="functors.html">9. Functors</a></span></dt><dt><span class="chapter"><a href="pairs.html">10. Pairs</a></span></dt><dt><span class="chapter"><a href="memory.html">11. Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="traits.html">12. Traits</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch07s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="spine.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="functors.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Adding Data to Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../spine.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. Functors</td></tr></table></div></body></html> diff --git a/libstdc++-v3/doc/html/spine.html b/libstdc++-v3/doc/html/spine.html index 8fa09254c5c..4d153da62b4 100644 --- a/libstdc++-v3/doc/html/spine.html +++ b/libstdc++-v3/doc/html/spine.html @@ -1,17 +1,17 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="next" href="manual/spine.html" title="The GNU C++ Library" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Documentation</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/spine.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library Documentation</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Documentation</title><meta name="generator" content="DocBook XSL Stylesheets V1.74.3" /><link rel="home" href="spine.html" title="The GNU C++ Library Documentation" /><link rel="next" href="manual/spine.html" title="The GNU C++ Library" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Documentation</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/spine.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library Documentation</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 <a class="ulink" href="http://www.fsf.org" target="_top">FSF</a> </p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="book"><a href="manual/spine.html">The GNU C++ Library</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I. Introduction -</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="manual/make.html">Make</a></span></dt><dt><span class="sect1"><a href="manual/test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.harness">Test Harness and Utilities</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Propagating Exceptions aka Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.no">Support for -fno-exceptions</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/support.html">II. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.200x">C++ 200x</a></span></dt><dt><span class="sect2"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="sect2"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="sect2"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="sect1"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="sect1"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/using.html#manual.intro.using.lib">Linking Library Binary Files</a></span></dt><dt><span class="sect1"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and namespace std</a></span></dt><dt><span class="sect2"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="sect2"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="sect1"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dt><span class="sect2"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="sect2"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/debug.html#debug.compiler">Using g++</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.gdb">Using gdb</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="sect2"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/support.html">II. Support </a></span></dt><dd><dl><dt><span class="preface"><a href="manual/bk01pt02pr01.html"></a></span></dt><dt><span class="chapter"><a href="manual/fundamental_types.html">4. Types</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/fundamental_types.html#manual.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt02ch04s02.html">Numeric Properties</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt02ch04s03.html">NULL</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/dynamic_memory.html">5. Dynamic Memory</a></span></dt><dt><span class="chapter"><a href="manual/termination.html">6. Termination</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="sect1"><a href="manual/verbose_termination.html">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="part"><a href="manual/diagnostics.html">III. Diagnostics -</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch07s03.html">Cancellation</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></dd><dt><span class="part"><a href="manual/utilities.html">IV. +</a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/exceptions.html">7. Exceptions</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/exceptions.html#manual.diagnostics.exceptions.hierarchy">Exception Classes</a></span></dt><dt><span class="sect1"><a href="manual/bk01pt03ch07s02.html">Adding Data to Exceptions</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/bk01pt03ch08.html">8. Concept Checking</a></span></dt></dl></dd><dt><span class="part"><a href="manual/utilities.html">IV. Utilities </a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/functors.html">9. Functors</a></span></dt><dt><span class="chapter"><a href="manual/pairs.html">10. Pairs</a></span></dt><dt><span class="chapter"><a href="manual/memory.html">11. Memory</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/memory.html#manual.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="sect2"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/auto_ptr.html">auto_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/auto_ptr.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="sect2"><a href="manual/auto_ptr.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/shared_ptr.html">shared_ptr</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.using">Use</a></span></dt><dt><span class="sect2"><a href="manual/shared_ptr.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/traits.html">12. Traits</a></span></dt></dl></dd><dt><span class="part"><a href="manual/strings.html">V. @@ -44,7 +44,7 @@ </a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="sect2"><a href="manual/appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="sect1"><a href="manual/source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="sect2"><a href="manual/source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/documentation_style.html">Documentation Style</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/documentation_style.html#doc_style.doxygen">Doxygen</a></span></dt><dt><span class="sect2"><a href="manual/documentation_style.html#doc_style.docbook">Docbook</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="manual/appendix_porting.html">B. Porting and Maintenance -</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.enable">GLIBCXX_ENABLE, the --enable maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/api.html#api.rel_300">3.0</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_310">3.1</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_320">3.2</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_330">3.3</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_340">3.4</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_400">4.0</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_410">4.1</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_420">4.2</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_430">4.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="manual/backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="manual/appendix_free.html">C. +</a></span></dt><dd><dl><dt><span class="sect1"><a href="manual/appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.map">Overview: What Comes from Where</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="sect2"><a href="manual/appendix_porting.html#build_hacking.enable">GLIBCXX_ENABLE, the --enable maker</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/internals.html#internals.os">Operating System</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.cpu">CPU</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="sect2"><a href="manual/internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/test.html">Test</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/test.html#test.organization">Organization</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.run">Running the Testsuite</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="sect2"><a href="manual/test.html#test.harness">Test Harness and Utilities</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/abi.html">ABI Policy and Guidelines</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/abi.html#abi.cxx_interface">The C++ Interface</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.versioning">Versioning</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.changes_allowed">Allowed Changes</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.changes_no">Prohibited Changes</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.impl">Implementation</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.testing">Testing</a></span></dt><dt><span class="sect2"><a href="manual/abi.html#abi.issues">Outstanding Issues</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/api.html">API Evolution and Deprecation History</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/api.html#api.rel_300">3.0</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_310">3.1</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_320">3.2</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_330">3.3</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_340">3.4</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_400">4.0</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_410">4.1</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_420">4.2</a></span></dt><dt><span class="sect2"><a href="manual/api.html#api.rel_430">4.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="manual/backwards.html">Backwards Compatibility</a></span></dt><dd><dl><dt><span class="sect2"><a href="manual/backwards.html#backwards.first">First</a></span></dt><dt><span class="sect2"><a href="manual/backwards.html#backwards.second">Second</a></span></dt><dt><span class="sect2"><a href="manual/backwards.html#backwards.third">Third</a></span></dt></dl></dd></dl></dd><dt><span class="appendix"><a href="manual/appendix_free.html">C. Free Software Needs Free Documentation </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gpl.html">D. diff --git a/libstdc++-v3/doc/xml/authors.xml b/libstdc++-v3/doc/xml/authors.xml index 43d8d864130..5d7909f8b14 100644 --- a/libstdc++-v3/doc/xml/authors.xml +++ b/libstdc++-v3/doc/xml/authors.xml @@ -74,7 +74,7 @@ Allocators, ABI, API evolution and deprecation history, Backwards Compatibility, Thread, Debug Support, Locales, Facets, Parallel Mode, Headers, Namespaces, Construction and - Structure, DocBook conversion and layout. + Structure, Using Exceptions, DocBook conversion and layout. </para> </authorblurb> </author> @@ -148,6 +148,17 @@ </author> <author> + <firstname>Silvius</firstname> + <surname>Rus</surname> + + <authorblurb> + <para> + Profile mode + </para> + </authorblurb> + </author> + + <author> <firstname>Johannes</firstname> <surname>Singler</surname> diff --git a/libstdc++-v3/doc/xml/manual/appendix_porting.xml b/libstdc++-v3/doc/xml/manual/appendix_porting.xml index f565c0e03d4..c44a9adeb86 100644 --- a/libstdc++-v3/doc/xml/manual/appendix_porting.xml +++ b/libstdc++-v3/doc/xml/manual/appendix_porting.xml @@ -35,6 +35,11 @@ parse="xml" href="internals.xml"> </xi:include> + <!-- Test --> + <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + parse="xml" href="test.xml"> + </xi:include> + <!-- ABI Policy and Guidelines --> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="abi.xml"> diff --git a/libstdc++-v3/doc/xml/manual/diagnostics.xml b/libstdc++-v3/doc/xml/manual/diagnostics.xml index d76f6e8e419..097d8917695 100644 --- a/libstdc++-v3/doc/xml/manual/diagnostics.xml +++ b/libstdc++-v3/doc/xml/manual/diagnostics.xml @@ -71,11 +71,6 @@ </programlisting> </sect1> - <sect1 id="manual.diagnostics.exceptions.cancellation" xreflabel="Cancellation"> - <title>Cancellation</title> - <para> - </para> - </sect1> </chapter> <chapter id="manual.diagnostics.concept_checking" xreflabel="Concept Checking"> diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml index d4e1d12d896..77824985854 100644 --- a/libstdc++-v3/doc/xml/manual/intro.xml +++ b/libstdc++-v3/doc/xml/manual/intro.xml @@ -870,13 +870,8 @@ started to build. </sect1> - <!-- Section 04 : Test --> - <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" - parse="xml" href="test.xml"> - </xi:include> </chapter> - <!-- Chapter 03 : Using --> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" parse="xml" href="using.xml"> diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml index bf25bb766ac..d9ff8cadef4 100644 --- a/libstdc++-v3/doc/xml/manual/using.xml +++ b/libstdc++-v3/doc/xml/manual/using.xml @@ -1290,32 +1290,12 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33) </para> </sect2> - </sect1> - - <sect1 id="manual.intro.using.exception" xreflabel="Exceptions"> - <?dbhtml filename="using_exceptions.html"?> - <title>Exceptions</title> - - <sect2 id="intro.using.exception.propagating" xreflabel="Propagating Exceptions"> - - <title>Propagating Exceptions aka Exception Neutrality</title> - <para> - </para> - </sect2> - - <sect2 id="intro.using.exception.safety" xreflabel="Exception Safety"> - <title>Exception Safety</title> - <para> - </para> - </sect2> - - <sect2 id="intro.using.exception.no" xreflabel="-fno-exceptions"> - <title>Support for <literal>-fno-exceptions</literal></title> - <para> - </para> - </sect2> +</sect1> - </sect1> +<!-- Section 0x : Exception policies, expectations, topics --> +<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" + parse="xml" href="using_exceptions.xml"> +</xi:include> <!-- Section 0x : Debug --> <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" diff --git a/libstdc++-v3/doc/xml/manual/using_exceptions.xml b/libstdc++-v3/doc/xml/manual/using_exceptions.xml new file mode 100644 index 00000000000..09c21d41ccc --- /dev/null +++ b/libstdc++-v3/doc/xml/manual/using_exceptions.xml @@ -0,0 +1,579 @@ +<sect1 id="manual.intro.using.exceptions" xreflabel="Using Exceptions"> +<?dbhtml filename="using_exceptions.html"?> + +<sect1info> + <keywordset> + <keyword> + C++ + </keyword> + <keyword> + exception + </keyword> + <keyword> + error + </keyword> + <keyword> + exception neutrality + </keyword> + <keyword> + exception safety + </keyword> + <keyword> + exception propagation + </keyword> + <keyword> + -fno-exceptions + </keyword> + </keywordset> +</sect1info> + +<title>Exceptions</title> + +<para> +The C++ language provides language support for stack unwinding +with <literal>try</literal> and <literal>catch</literal> blocks and +the <literal>throw</literal> keyword. +</para> + +<para> +These are very powerful constructs, and require some thought when +applied to the standard library in order to yield components that work +efficiently while cleaning up resources when unexpectedly killed via +exceptional circumstances. +</para> + +<para> +Two general topics of discussion follow: +exception neutrality and exception safety. +</para> + + +<sect2 id="intro.using.exception.safety" xreflabel="Exception Safety"> +<title>Exception Safety</title> + + <para> + What is exception-safe code? + </para> + + <para> + Will define this as reasonable and well-defined behavior by classes + and functions from the standard library when used by user-defined + classes and functions that are themselves exception safe. + </para> + + <para> + Please note that using exceptions in combination with templates + imposes an additional requirement for exception + safety. Instantiating types are required to have destructors that + do no throw. + </para> + + <para> + Using the layered approach from Abrahams, can classify library + components as providing set levels of safety. These will be called + exception guarantees, and can be divided into three categories. + </para> + +<itemizedlist> + + <listitem> + <para> + One. Don't throw. + </para> + <para> + As specified in 23.2.1 general container requirements. Applicable + to container and string classes. + </para> + <para> + Member + functions <function>erase</function>, <function>pop_back</function>, <function>pop_front</function>, <function>swap</function>, <function>clear</function>. And <type>iterator</type> + copy constructor and assignment operator. + </para> + </listitem> + + <listitem> + <para> + Two. Don't leak resources when exceptions are thrown. This is + also referred to as the <quote>basic</quote> exception safety guarantee. + </para> + + <para> + This applicable throughout the standard library. + </para> + </listitem> + + <listitem> + <para> + Three. Commit-or-rollback semantics. This is + referred to as <quote>strong</quote> exception safety guarantee. + </para> + + <para> + As specified in 23.2.1 general container requirements. Applicable + to container and string classes. + </para> + <para> + Member functions <function>insert</function> of a single + element, <function>push_back</function>, <function>push_front</function>, + and <function>rehash</function>. + </para> + + </listitem> +</itemizedlist> + +</sect2> + + +<sect2 id="intro.using.exception.propagating" xreflabel="Exceptions Neutrality"> +<title>Exception Neutrality</title> + <para> + Simply put, once thrown an exception object should continue in + flight unless handled explicitly. In practice, this means + propagating exceptions should not be swallowed in + gratuitous <literal>catch(...)</literal> blocks. Instead, + matching <literal>try</literal> and <literal>catch</literal> + blocks should have specific catch handlers and allow un-handed + exception objects to propagate. If a + terminating <literal>catch(...)</literal> blocks exist then it + should end with a <literal>throw</literal> to re-throw the current + exception. + </para> + + <para> + Why do this? + </para> + + <para> + By allowing exception objects to propagate, a more flexible + approach to error handling is made possible (although not + required.) Instead of dealing with an error immediately, one can + allow the exception to propagate up until sufficient context is + available and the choice of exiting or retrying can be made in an + informed manner. + </para> + + <para> + Unfortunately, this tends to be more of a guideline than a strict + rule as applied to the standard library. As such, the following is + a list of known problem areas where exceptions are not propagated. + </para> + +<itemizedlist> + <listitem> + <para> + Input/Output + </para> + <para> + The destructor <function>ios_base::Init::~Init()</function> + swallows all exceptions from <function>flush</function> called on + all open streams at termination. + </para> + + <para> + All formatted input in <classname>basic_istream</classname> or + formatted output in <classname>basic_ostream</classname> can be + configured to swallow exceptions + when <function>exceptions</function> is set to + ignore <type>ios_base::badbit</type>. + </para> + + <para> + Functions that have been registered + with <function>ios_base::register_callback</function> swallow all + exceptions when called as part of a callback event. + </para> + + <para> + When closing the underlying + file, <function>basic_filebuf::close</function> will swallow + (non-cancellation) exceptions thrown and return <literal>NULL</literal>. + </para> + </listitem> + <listitem> + <para> + Thread + </para> + <para> + The constructors of <classname>thread</classname> that take a + callable function argument swallow all exceptions resulting from + executing the function argument. + </para> + </listitem> +</itemizedlist> + +</sect2> + +<sect2 id="intro.using.exception.no" xreflabel="-fno-exceptions"> +<title>Doing without</title> + <para> + C++ is a language that strives to be as efficient as is possible + in delivering features. As such, considerable care is used by both + language implementer and designers to make sure unused features + not impose hidden or unexpected costs. The GNU system tries to be + as flexible and as configurable as possible. So, it should come as + no surprise that GNU C++ provides an optional language extension, + spelled <literal>-fno-exceptions</literal>, as a way to excise the + implicitly generated magic necessary to + support <literal>try</literal> and <literal>catch</literal> blocks + and thrown objects. (Language support + for <literal>-fno-exceptions</literal> is documented in the GNU + GCC <ulink url="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options">manual</ulink>.) + </para> + + <para>Before detailing the library support + for <literal>-fno-exceptions</literal>, first a passing note on + the things lost when this flag is used: it will break exceptions + trying to pass through code compiled + with <literal>-fno-exceptions</literal> whether or not that code + has any <literal>try</literal> or <literal>catch</literal> + constructs. If you might have some code that throws, you shouldn't + use <literal>-fno-exceptions</literal>. If you have some code that + uses <literal>try</literal> or <literal>catch</literal>, you + shouldn't use <literal>-fno-exceptions</literal>. + </para> + + <para> + And what it to be gained, tinkering in the back alleys with a + language like this? Exception handling overhead can be measured + in the size of the executable binary, and varies with the + capabilities of the underlying operating system and specific + configuration of the C++ compiler. On recent hardware with GNU + system software of the same age, the combined code and data size + overhead for enabling exception handling is around 7%. Of course, + if code size is of singular concern than using the appropriate + optimizer setting with exception handling enabled + (ie, <literal>-Os -fexceptions</literal>) may save up to twice + that, and preserve error checking. + </para> + + <para> + So. Hell bent, we race down the slippery track, knowing the brakes + are a little soft and that the right front wheel has a tendency to + wobble at speed. Go on: detail the standard library support + for <literal>-fno-exceptions</literal>. + </para> + + <para> + In sum, valid C++ code with exception handling is transformed into + a dialect without exception handling. In detailed steps: all use + of the C++ + keywords <literal>try</literal>, <literal>catch</literal>, + and <literal>throw</literal> in the standard library have been + permanently replaced with the pre-processor controlled equivalents + spelled <literal>__try</literal>, <literal>__catch</literal>, + and <literal>__throw_exception_again</literal>. They are defined + as follows. + </para> + +<programlisting> +#ifdef __EXCEPTIONS +# define __try try +# define __catch(X) catch(X) +# define __throw_exception_again throw +#else +# define __try if (true) +# define __catch(X) if (false) +# define __throw_exception_again +#endif +</programlisting> + +<para> + In addition, for every object derived from + class <classname>exception</classname>, there exists a corresponding + function with C language linkage. An example: +</para> + +<programlisting> +#ifdef __EXCEPTIONS + void __throw_bad_exception(void) + { throw bad_exception(); } +#else + void __throw_bad_exception(void) + { abort(); } +#endif +</programlisting> + +<para> + The last language feature needing to be transformed + by <literal>-fno-exceptions</literal> is treatment of exception + specifications on member functions. Fortunately, the compiler deals + with this by ignoring exception specifications and so no alternate + source markup is needed. +</para> + +<para> + By using this combination of language re-specification by the + compiler, and the pre-processor tricks and the functional + indirection layer for thrown exception objects by the library, + libstdc++ files can be compiled + with <literal>-fno-exceptions</literal>. +</para> + +<para> + User code that uses C++ keywords + like <literal>throw</literal>, <literal>try</literal>, + and <literal>catch</literal> will produce errors even if the user + code has included libstdc++ headers and is using constructs + like <classname>basic_iostream</classname>. Even though the standard + library has been transformed, user code may need modification. User + code that attempts or expects to do error checking on standard + library components compiled with exception handling disabled should + be evaluated and potentially made conditional. +</para> + +<para> + Some issues remain with this approach (see bugzilla entry + 25191). Code paths are not equivalent, in + particular <literal>catch</literal> blocks are not evaluated. Also + problematic are <literal>throw</literal> expressions expecting a + user-defined throw handler. Known problem areas in the standard + library include using an instance + of <classname>basic_istream</classname> + with <function>exceptions</function> set to specific + <type>ios_base::iostate</type> conditions, or + cascading <literal>catch</literal> blocks that dispatch error + handling or recovery efforts based on the type of exception object + thrown. +</para> + +<para> + Oh, and by the way: none of this hackery is at all + special. (Although perhaps well-deserving of a raised eyebrow.) + Support continues to evolve and may change in the future. Similar + and even additional techniques are used in other C++ libraries and + compilers. +</para> + +<para> + C++ hackers with a bent for language and control-flow purity have + been successfully consoled by grizzled C veterans lamenting the + substitution of the C language keyword + <literal>const</literal> with the uglified + doppelganger <literal>__const</literal>. +</para> + + +</sect2> + +<sect2 id="intro.using.exception.compat"> +<title>Compatibility</title> + +<sect3 id="using.exception.compat.c"> +<title>With <literal>C</literal></title> +<para> + C language code that is expecting to interoperate with C++ should be + compiled with <literal>-fexceptions</literal>. This will make + debugging a C language function called as part of C++-induced stack + unwinding possible. +</para> + +<para> + In particular, unwinding into a frame with no exception handling +data will cause a runtime abort. If the unwinder runs out of unwind +info before it finds a handler, <function>std::terminate()</function> +is called. +</para> + +<para> + Please note that most development environments should take care of + getting these details right. For GNU systems, all appropriate parts + of the GNU C library are already compiled + with <literal>-fexceptions</literal>. +</para> + +</sect3> + +<sect3 id="using.exception.compat.posix"> +<title>With <literal>POSIX</literal> thread cancellation</title> + +<para> + GNU systems re-use some of the exception handling mechanisms to + track control flow for <literal>POSIX</literal> thread cancellation. +</para> + +<para> + Cancellation points are functions defined by POSIX as worthy of + special treatment. The standard library may use some of these + functions to implement parts of the ISO C++ standard or depend on + them for extensions. +</para> + +<para> + Of note: +</para> + +<para> + <function>nanosleep</function>, + <function>read</function>, <function>write</function>, <function>open</function>, <function>close</function>, + and <function>wait</function>. +</para> + +<para> + The parts of libstdc++ that use C library functions marked as + cancellation points should take pains to be exception neutral. + Failing this, <literal>catch</literal> blocks have been augmented to + show that the POSIX cancellation object is in flight. +</para> + +<para> + This augmentation adds a <literal>catch</literal> block + for <classname>__cxxabiv1::__forced_unwind</classname>, which is the + object representing the POSIX cancellation object. Like so: +</para> + +<programlisting> + catch(const __cxxabiv1::__forced_unwind&) + { + this->_M_setstate(ios_base::badbit); + throw; + } + catch(...) + { this->_M_setstate(ios_base::badbit); } +</programlisting> + + +</sect3> +</sect2> + +<bibliography id="using.exceptions.biblio"> +<title>Bibliography</title> + + <biblioentry> + <title> + System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) + </title> + <pagenums> + 2.9.5 Thread Cancellation + </pagenums> + + <copyright> + <year>2008</year> + <holder> + The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder> + </copyright> + + <biblioid> + <ulink url="http://www.opengroup.org/austin/"> + </ulink> + </biblioid> + + </biblioentry> + + <biblioentry> + <title> + Error and Exception Handling + </title> + <author> + <firstname>David</firstname> + <surname>Abrahams </surname> + </author> + <publisher> + <publishername> + Boost + </publishername> + </publisher> + <biblioid> + <ulink url="http://www.boost.org/community/error_handling.html"> + </ulink> + </biblioid> + </biblioentry> + + + <biblioentry> + <title> + Exception-Safety in Generic Components + </title> + <author> + <firstname>David</firstname> + <surname>Abrahams</surname> + </author> + <publisher> + <publishername> + Boost + </publishername> + </publisher> + <biblioid> + <ulink url="http://www.boost.org/community/exception_safety.html"> + </ulink> + </biblioid> + </biblioentry> + + <biblioentry> + <title> + Standard Library Exception Policy + </title> + <author> + <firstname>Matt</firstname> + <surname>Austern</surname> + </author> + <publisher> + <publishername> + WG21 N1077 + </publishername> + </publisher> + <biblioid> + <ulink url="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf"> + </ulink> + </biblioid> + </biblioentry> + + <biblioentry> + <title> + ia64 c++ abi exception handling + </title> + <author> + <firstname>Richard</firstname> + <surname>Henderson</surname> + </author> + <publisher> + <publishername> + GNU + </publishername> + </publisher> + <biblioid> + <ulink url="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html"> + </ulink> + </biblioid> + </biblioentry> + + <biblioentry> + <title> + Appendix E: Standard-Library Exception Safety + </title> + <author> + <firstname>Bjarne</firstname> + <surname>Stroustrup</surname> + </author> + <biblioid> + <ulink url="http://www.research.att.com/~bs/3rd_safe.pdf"> + </ulink> + </biblioid> + </biblioentry> + + <biblioentry> + <title> + Exceptional C++ + </title> + <pagenums> + Exception-Safety Issues and Techniques + </pagenums> + <author> + <firstname>Herb</firstname> + <surname>Sutter</surname> + </author> + </biblioentry> + + <biblioentry> + <title> + exception_defines.h #defines try/catch + </title> + <subtitle> + GCC Bug <ulink url="http://gcc.gnu.org/PR25191">25191</ulink> + </subtitle> + <biblioid> + </biblioid> + </biblioentry> + +</bibliography> + +</sect1> diff --git a/libstdc++-v3/include/bits/atomic_0.h b/libstdc++-v3/include/bits/atomic_0.h index a493ea66af9..0caffaf1e9f 100644 --- a/libstdc++-v3/include/bits/atomic_0.h +++ b/libstdc++-v3/include/bits/atomic_0.h @@ -82,14 +82,15 @@ namespace __atomic0 __r; }) /// atomic_flag - struct atomic_flag : private __atomic_flag_base + struct atomic_flag : public __atomic_flag_base { atomic_flag() = default; ~atomic_flag() = default; atomic_flag(const atomic_flag&) = delete; atomic_flag& operator=(const atomic_flag&) = delete; - atomic_flag(bool __i) { _M_i = __i; } // XXX deleted copy ctor != agg + // Conversion to ATOMIC_FLAG_INIT. + atomic_flag(bool __i): __atomic_flag_base({ __i }) { } bool test_and_set(memory_order __m = memory_order_seq_cst) volatile; diff --git a/libstdc++-v3/include/bits/atomic_2.h b/libstdc++-v3/include/bits/atomic_2.h index 8e8e7ff16f8..d39adb920a2 100644 --- a/libstdc++-v3/include/bits/atomic_2.h +++ b/libstdc++-v3/include/bits/atomic_2.h @@ -44,14 +44,15 @@ namespace __atomic2 { /// atomic_flag - struct atomic_flag : private __atomic_flag_base + struct atomic_flag : public __atomic_flag_base { atomic_flag() = default; ~atomic_flag() = default; atomic_flag(const atomic_flag&) = delete; atomic_flag& operator=(const atomic_flag&) = delete; - atomic_flag(bool __i) { _M_i = __i; } // XXX deleted copy ctor != agg + // Conversion to ATOMIC_FLAG_INIT. + atomic_flag(bool __i): __atomic_flag_base({ __i }) { } bool test_and_set(memory_order __m = memory_order_seq_cst) volatile diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index bd54537cdc1..9d44dc4fdfc 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -540,7 +540,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) basic_string& operator=(initializer_list<_CharT> __l) { - this->assign (__l.begin(), __l.end()); + this->assign(__l.begin(), __l.size()); return *this; } #endif // __GXX_EXPERIMENTAL_CXX0X__ @@ -860,7 +860,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) */ basic_string& operator+=(initializer_list<_CharT> __l) - { return this->append(__l.begin(), __l.end()); } + { return this->append(__l.begin(), __l.size()); } #endif // __GXX_EXPERIMENTAL_CXX0X__ /** @@ -926,7 +926,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) */ basic_string& append(initializer_list<_CharT> __l) - { return this->append(__l.begin(), __l.end()); } + { return this->append(__l.begin(), __l.size()); } #endif // __GXX_EXPERIMENTAL_CXX0X__ /** @@ -1045,7 +1045,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) */ basic_string& assign(initializer_list<_CharT> __l) - { return this->assign(__l.begin(), __l.end()); } + { return this->assign(__l.begin(), __l.size()); } #endif // __GXX_EXPERIMENTAL_CXX0X__ /** @@ -1089,7 +1089,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std) */ void insert(iterator __p, initializer_list<_CharT> __l) - { this->insert(__p, __l.begin(), __l.end()); } + { + _GLIBCXX_DEBUG_PEDASSERT(__p >= _M_ibegin() && __p <= _M_iend()); + this->insert(__p - _M_ibegin(), __l.begin(), __l.size()); + } #endif // __GXX_EXPERIMENTAL_CXX0X__ /** diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 724f373ebae..f4f1f8b901f 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -147,7 +147,6 @@ # define _GLIBCXX_STD __cxx1998 # define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) { # define _GLIBCXX_END_NAMESPACE } -# define _GLIBCXX_EXTERN_TEMPLATE -1 # endif // debug + parallel @@ -172,7 +171,6 @@ # define _GLIBCXX_STD __cxx1998 # define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) { # define _GLIBCXX_END_NAMESPACE } -# define _GLIBCXX_EXTERN_TEMPLATE -1 # endif # if __NO_INLINE__ && !__GXX_WEAK__ @@ -287,6 +285,10 @@ namespace std // library to avoid multiple weak definitions for required types that // are already explicitly instantiated in the library binary. This // substantially reduces the binary size of resulting executables. + +// Special case: _GLIBCXX_EXTERN_TEMPLATE == -1 disallows extern +// templates only in basic_string, thus activating its debug-mode +// checks even at -O0. #ifndef _GLIBCXX_EXTERN_TEMPLATE # define _GLIBCXX_EXTERN_TEMPLATE 1 #endif diff --git a/libstdc++-v3/include/bits/random.h b/libstdc++-v3/include/bits/random.h index 06aa6f87b91..2c2c79ca16b 100644 --- a/libstdc++-v3/include/bits/random.h +++ b/libstdc++-v3/include/bits/random.h @@ -32,7 +32,6 @@ namespace std { - // [26.4] Random number generation /** @@ -154,10 +153,10 @@ namespace std template<typename _UIntType, _UIntType __a, _UIntType __c, _UIntType __m> class linear_congruential_engine { - __glibcxx_class_requires(_UIntType, _UnsignedIntegerConcept) - static_assert(__m == 0 || (__a < __m && __c < __m), - "template arguments out of bounds" - " in linear_congruential_engine"); + static_assert(std::is_unsigned<_UIntType>::value, "template argument " + "_UIntType not an unsigned integral type"); + static_assert(__m == 0u || (__a < __m && __c < __m), + "template argument __m out of bounds"); public: /** The type of the generated random value. */ @@ -341,35 +340,27 @@ namespace std _UIntType __c, size_t __l, _UIntType __f> class mersenne_twister_engine { - __glibcxx_class_requires(_UIntType, _UnsignedIntegerConcept) - - static_assert(__m >= 1U, - "mersenne_twister_engine template arguments out of bounds"); - static_assert(__n >= __m, - "mersenne_twister_engine template arguments out of bounds"); - static_assert(__w >= __r, - "mersenne_twister_engine template arguments out of bounds"); - static_assert(__w >= __u, - "mersenne_twister_engine template arguments out of bounds"); - static_assert(__w >= __s, - "mersenne_twister_engine template arguments out of bounds"); - static_assert(__w >= __t, - "mersenne_twister_engine template arguments out of bounds"); - static_assert(__w >= __l, - "mersenne_twister_engine template arguments out of bounds"); - static_assert(__w <= - static_cast<size_t>(std::numeric_limits<_UIntType>::digits), - "mersenne_twister_engine template arguments out of bounds"); + static_assert(std::is_unsigned<_UIntType>::value, "template argument " + "_UIntType not an unsigned integral type"); + static_assert(1u <= __m && __m <= __n, + "template argument __m out of bounds"); + static_assert(__r <= __w, "template argument __r out of bound"); + static_assert(__u <= __w, "template argument __u out of bound"); + static_assert(__s <= __w, "template argument __s out of bound"); + static_assert(__t <= __w, "template argument __t out of bound"); + static_assert(__l <= __w, "template argument __l out of bound"); + static_assert(__w <= std::numeric_limits<_UIntType>::digits, + "template argument __w out of bound"); static_assert(__a <= (__detail::_Shift<_UIntType, __w>::__value - 1), - "mersenne_twister_engine template arguments out of bounds"); + "template argument __a out of bound"); static_assert(__b <= (__detail::_Shift<_UIntType, __w>::__value - 1), - "mersenne_twister_engine template arguments out of bounds"); + "template argument __b out of bound"); static_assert(__c <= (__detail::_Shift<_UIntType, __w>::__value - 1), - "mersenne_twister_engine template arguments out of bounds"); + "template argument __c out of bound"); static_assert(__d <= (__detail::_Shift<_UIntType, __w>::__value - 1), - "mersenne_twister_engine template arguments out of bounds"); + "template argument __d out of bound"); static_assert(__f <= (__detail::_Shift<_UIntType, __w>::__value - 1), - "mersenne_twister_engine template arguments out of bounds"); + "template argument __f out of bound"); public: /** The type of the generated random value. */ @@ -538,13 +529,12 @@ namespace std template<typename _UIntType, size_t __w, size_t __s, size_t __r> class subtract_with_carry_engine { - __glibcxx_class_requires(_UIntType, _UnsignedIntegerConcept) - static_assert(__s > 0U && __r > __s - && __w > 0U - && __w <= static_cast<size_t> - (std::numeric_limits<_UIntType>::digits), - "template arguments out of bounds" - " in subtract_with_carry_engine"); + static_assert(std::is_unsigned<_UIntType>::value, "template argument " + "_UIntType not an unsigned integral type"); + static_assert(0u < __s && __s < __r, + "template argument __s out of bounds"); + static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits, + "template argument __w out of bounds"); public: /** The type of the generated random value. */ @@ -702,9 +692,8 @@ namespace std template<typename _RandomNumberEngine, size_t __p, size_t __r> class discard_block_engine { - static_assert(__r >= 1U && __p >= __r, - "template arguments out of bounds" - " in discard_block_engine"); + static_assert(1 <= __r && __r <= __p, + "template argument __r out of bounds"); public: /** The type of the generated random value. */ @@ -903,12 +892,10 @@ namespace std template<typename _RandomNumberEngine, size_t __w, typename _UIntType> class independent_bits_engine { - static_assert(__w > 0U - && __w <= - static_cast<size_t> - (std::numeric_limits<_UIntType>::digits), - "template arguments out of bounds " - "in independent_bits_engine"); + static_assert(std::is_unsigned<_UIntType>::value, "template argument " + "_UIntType not an unsigned integral type"); + static_assert(0u < __w && __w <= std::numeric_limits<_UIntType>::digits, + "template argument __w out of bounds"); public: /** The type of the generated random value. */ @@ -1102,9 +1089,7 @@ namespace std template<typename _RandomNumberEngine, size_t __k> class shuffle_order_engine { - static_assert(__k >= 1U, - "template arguments out of bounds" - " in shuffle_order_engine"); + static_assert(1u <= __k, "template argument __k out of bound"); public: /** The type of the generated random value. */ @@ -1480,7 +1465,8 @@ namespace std template<typename _IntType = int> class uniform_int_distribution { - __glibcxx_class_requires(_IntType, _IntegerConcept) + static_assert(std::is_integral<_IntType>::value, + "template argument not an integral type"); public: /** The type of the range of the distribution. */ @@ -1633,6 +1619,9 @@ namespace std template<typename _RealType = double> class uniform_real_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -1791,6 +1780,9 @@ namespace std template<typename _RealType = double> class normal_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -1943,6 +1935,9 @@ namespace std template<typename _RealType = double> class lognormal_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -2086,6 +2081,9 @@ namespace std template<typename _RealType = double> class gamma_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -2243,6 +2241,9 @@ namespace std template<typename _RealType = double> class chi_squared_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -2378,6 +2379,9 @@ namespace std template<typename _RealType = double> class cauchy_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -2519,6 +2523,9 @@ namespace std template<typename _RealType = double> class fisher_f_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -2670,6 +2677,9 @@ namespace std template<typename _RealType = double> class student_t_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -2972,7 +2982,8 @@ namespace std template<typename _IntType = int> class binomial_distribution { - __glibcxx_class_requires(_IntType, _IntegerConcept) + static_assert(std::is_integral<_IntType>::value, + "template argument not an integral type"); public: /** The type of the range of the distribution. */ @@ -3142,7 +3153,8 @@ namespace std template<typename _IntType = int> class geometric_distribution { - __glibcxx_class_requires(_IntType, _IntegerConcept) + static_assert(std::is_integral<_IntType>::value, + "template argument not an integral type"); public: /** The type of the range of the distribution. */ @@ -3287,7 +3299,8 @@ namespace std template<typename _IntType = int> class negative_binomial_distribution { - __glibcxx_class_requires(_IntType, _IntegerConcept) + static_assert(std::is_integral<_IntType>::value, + "template argument not an integral type"); public: /** The type of the range of the distribution. */ @@ -3439,7 +3452,8 @@ namespace std template<typename _IntType = int> class poisson_distribution { - __glibcxx_class_requires(_IntType, _IntegerConcept) + static_assert(std::is_integral<_IntType>::value, + "template argument not an integral type"); public: /** The type of the range of the distribution. */ @@ -3594,6 +3608,9 @@ namespace std template<typename _RealType = double> class exponential_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -3736,6 +3753,9 @@ namespace std template<typename _RealType = double> class weibull_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -3879,6 +3899,9 @@ namespace std template<typename _RealType = double> class extreme_value_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -4021,7 +4044,8 @@ namespace std template<typename _IntType = int> class discrete_distribution { - __glibcxx_class_requires(_IntType, _IntegerConcept) + static_assert(std::is_integral<_IntType>::value, + "template argument not an integral type"); public: /** The type of the range of the distribution. */ @@ -4185,6 +4209,9 @@ namespace std template<typename _RealType = double> class piecewise_constant_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; @@ -4363,6 +4390,9 @@ namespace std template<typename _RealType = double> class piecewise_linear_distribution { + static_assert(std::is_floating_point<_RealType>::value, + "template argument not a floating point type"); + public: /** The type of the range of the distribution. */ typedef _RealType result_type; diff --git a/libstdc++-v3/include/bits/valarray_array.h b/libstdc++-v3/include/bits/valarray_array.h index 492891bc9d8..a12b3347b9d 100644 --- a/libstdc++-v3/include/bits/valarray_array.h +++ b/libstdc++-v3/include/bits/valarray_array.h @@ -1,7 +1,7 @@ // The template and inlines for the -*- C++ -*- internal _Array helper class. // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -// 2006, 2007, 2009 +// 2006, 2007, 2008, 2009 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -73,7 +73,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Please note that this isn't exception safe. But // valarrays aren't required to be exception safe. inline static void - _S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e) + _S_do_it(_Tp* __b, _Tp* __e) { while (__b != __e) new(__b++) _Tp(); @@ -85,13 +85,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { // For fundamental types, it suffices to say 'memset()' inline static void - _S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e) + _S_do_it(_Tp* __b, _Tp* __e) { __builtin_memset(__b, 0, (__e - __b) * sizeof(_Tp)); } }; template<typename _Tp> inline void - __valarray_default_construct(_Tp* __restrict__ __b, _Tp* __restrict__ __e) + __valarray_default_construct(_Tp* __b, _Tp* __e) { _Array_default_ctor<_Tp, __is_scalar<_Tp>::__value>::_S_do_it(__b, __e); } @@ -105,7 +105,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Please note that this isn't exception safe. But // valarrays aren't required to be exception safe. inline static void - _S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e, const _Tp __t) + _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t) { while (__b != __e) new(__b++) _Tp(__t); @@ -116,7 +116,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) struct _Array_init_ctor<_Tp, true> { inline static void - _S_do_it(_Tp* __restrict__ __b, _Tp* __restrict__ __e, const _Tp __t) + _S_do_it(_Tp* __b, _Tp* __e, const _Tp __t) { while (__b != __e) *__b++ = __t; @@ -125,8 +125,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) template<typename _Tp> inline void - __valarray_fill_construct(_Tp* __restrict__ __b, _Tp* __restrict__ __e, - const _Tp __t) + __valarray_fill_construct(_Tp* __b, _Tp* __e, const _Tp __t) { _Array_init_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __t); } @@ -141,8 +140,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Please note that this isn't exception safe. But // valarrays aren't required to be exception safe. inline static void - _S_do_it(const _Tp* __restrict__ __b, const _Tp* __restrict__ __e, - _Tp* __restrict__ __o) + _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o) { while (__b != __e) new(__o++) _Tp(*__b++); @@ -153,15 +151,13 @@ _GLIBCXX_BEGIN_NAMESPACE(std) struct _Array_copy_ctor<_Tp, true> { inline static void - _S_do_it(const _Tp* __restrict__ __b, const _Tp* __restrict__ __e, - _Tp* __restrict__ __o) + _S_do_it(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o) { __builtin_memcpy(__o, __b, (__e - __b) * sizeof(_Tp)); } }; template<typename _Tp> inline void - __valarray_copy_construct(const _Tp* __restrict__ __b, - const _Tp* __restrict__ __e, + __valarray_copy_construct(const _Tp* __b, const _Tp* __e, _Tp* __restrict__ __o) { _Array_copy_ctor<_Tp, __is_pod(_Tp)>::_S_do_it(__b, __e, __o); @@ -205,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Do the necessary cleanup when we're done with arrays. template<typename _Tp> inline void - __valarray_destroy_elements(_Tp* __restrict__ __b, _Tp* __restrict__ __e) + __valarray_destroy_elements(_Tp* __b, _Tp* __e) { if (!__is_pod(_Tp)) while (__b != __e) @@ -347,7 +343,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // template<typename _Tp> inline _Tp - __valarray_sum(const _Tp* __restrict__ __f, const _Tp* __restrict__ __l) + __valarray_sum(const _Tp* __f, const _Tp* __l) { _Tp __r = _Tp(); while (__f != __l) @@ -358,8 +354,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Compute the product of all elements in range [__f, __l) template<typename _Tp> inline _Tp - __valarray_product(const _Tp* __restrict__ __f, - const _Tp* __restrict__ __l) + __valarray_product(const _Tp* __f, const _Tp* __l) { _Tp __r = _Tp(1); while (__f != __l) diff --git a/libstdc++-v3/include/c_compatibility/stdatomic.h b/libstdc++-v3/include/c_compatibility/stdatomic.h index f4771166d2b..eaa45cddac1 100644 --- a/libstdc++-v3/include/c_compatibility/stdatomic.h +++ b/libstdc++-v3/include/c_compatibility/stdatomic.h @@ -186,8 +186,11 @@ _GLIBCXX_BEGIN_EXTERN_C _GLIBCXX_END_EXTERN_C _GLIBCXX_END_NAMESPACE -// Inject into global namespace. XXX -#if defined(__cplusplus) && !defined(_GLIBCXX_STDATOMIC) +// Inject into global namespace. +#ifdef __cplusplus + +#include <cstdatomic> + using std::memory_order; using std::memory_order_relaxed; using std::memory_order_consume; diff --git a/libstdc++-v3/include/parallel/for_each_selectors.h b/libstdc++-v3/include/parallel/for_each_selectors.h index 9fd432df021..3a37e5ca637 100644 --- a/libstdc++-v3/include/parallel/for_each_selectors.h +++ b/libstdc++-v3/include/parallel/for_each_selectors.h @@ -37,17 +37,15 @@ namespace __gnu_parallel { - /** @brief Generic __selector for embarrassingly parallel functions. */ template<typename _It> - struct __generic_for_each_selector - { - /** @brief _Iterator on last element processed; needed for some - * algorithms (e. g. std::transform()). - */ - _It _M_finish_iterator; - }; - + struct __generic_for_each_selector + { + /** @brief _Iterator on last element processed; needed for some + * algorithms (e. g. std::transform()). + */ + _It _M_finish_iterator; + }; /** @brief std::for_each() selector. */ template<typename _It> @@ -220,21 +218,21 @@ namespace __gnu_parallel }; /** @brief std::inner_product() selector. */ - template<typename _It, typename It2, typename _Tp> + template<typename _It, typename _It2, typename _Tp> struct __inner_product_selector : public __generic_for_each_selector<_It> { /** @brief Begin iterator of first sequence. */ - _It __begin1_iterator; + _It __begin1_iterator; /** @brief Begin iterator of second sequence. */ - It2 begin2_iterator; + _It2 __begin2_iterator; /** @brief Constructor. * @param b1 Begin iterator of first sequence. * @param b2 Begin iterator of second sequence. */ explicit - __inner_product_selector(_It b1, It2 b2) - : __begin1_iterator(b1), begin2_iterator(b2) { } + __inner_product_selector(_It __b1, _It2 __b2) + : __begin1_iterator(__b1), __begin2_iterator(__b2) { } /** @brief Functor execution. * @param __mult Multiplication functor. @@ -246,7 +244,7 @@ namespace __gnu_parallel { typename std::iterator_traits<_It>::difference_type __position = __current - __begin1_iterator; - return __mult(*__current, *(begin2_iterator + __position)); + return __mult(*__current, *(__begin2_iterator + __position)); } }; @@ -268,8 +266,8 @@ namespace __gnu_parallel * __elements. */ template<typename _It> - struct __adjacent_difference_selector : - public __generic_for_each_selector<_It> + struct __adjacent_difference_selector + : public __generic_for_each_selector<_It> { template<typename _Op> bool @@ -293,14 +291,14 @@ namespace __gnu_parallel * @param __i iterator referencing object. */ template<typename _It> void - operator()(_It __i) { } + operator()(_It) { } }; /** @brief Reduction function doing nothing. */ struct _DummyReduct { bool - operator()(bool /*__x*/, bool /*__y*/) const + operator()(bool, bool) const { return true; } }; @@ -315,12 +313,7 @@ namespace __gnu_parallel _It operator()(_It __x, _It __y) - { - if (__comp(*__x, *__y)) - return __x; - else - return __y; - } + { return (__comp(*__x, *__y)) ? __x : __y; } }; /** @brief Reduction for finding the maximum element, using a comparator. */ @@ -334,12 +327,7 @@ namespace __gnu_parallel _It operator()(_It __x, _It __y) - { - if (__comp(*__x, *__y)) - return __y; - else - return __x; - } + { return (__comp(*__x, *__y)) ? __y : __x; } }; /** @brief General reduction, using a binary operator. */ diff --git a/libstdc++-v3/include/precompiled/stdc++.h b/libstdc++-v3/include/precompiled/stdc++.h index 1c615091bdc..99def363142 100644 --- a/libstdc++-v3/include/precompiled/stdc++.h +++ b/libstdc++-v3/include/precompiled/stdc++.h @@ -101,6 +101,7 @@ #include <condition_variable> #include <forward_list> #include <future> +#include <initializer_list> #include <mutex> #include <random> #include <ratio> diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index badb6e07e5a..f922dcd74d5 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -150,7 +150,7 @@ namespace std typedef _Future_ptr<_Future_result_base>::type _Future_ptr_type; public: - _Future_state() : _M_result(), _M_retrieved(false) { } + _Future_state() : _M_result(), _M_retrieved(ATOMIC_FLAG_INIT) { } _Future_state(const _Future_state&) = delete; _Future_state& operator=(const _Future_state&) = delete; diff --git a/libstdc++-v3/include/std/random b/libstdc++-v3/include/std/random index b57ef4925d6..72d3ceb7f43 100644 --- a/libstdc++-v3/include/std/random +++ b/libstdc++-v3/include/std/random @@ -43,7 +43,6 @@ #include <limits> #include <ext/type_traits.h> #include <ext/numeric_traits.h> -#include <bits/concept_check.h> #include <debug/debug.h> #include <type_traits> diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py index a5e5b0d02a2..872e2d30a97 100644 --- a/libstdc++-v3/python/libstdcxx/v6/printers.py +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py @@ -197,6 +197,64 @@ class StdVectorIteratorPrinter: def to_string(self): return self.val['_M_current'].dereference() +class StdTuplePrinter: + "Print a std::tuple" + + class _iterator: + def __init__ (self, head): + self.head = head + + # Set the base class as the initial head of the + # tuple. + nodes = self.head.type.fields () + if len (nodes) != 1: + raise "Top of tuple tree does not consist of a single node." + + # Set the actual head to the first pair. + self.head = self.head.cast (nodes[0].type) + self.count = 0 + + def __iter__ (self): + return self + + def next (self): + nodes = self.head.type.fields () + # Check for further recursions in the inheritance tree. + if len (nodes) == 0: + raise StopIteration + # Check that this iteration has an expected structure. + if len (nodes) != 2: + raise "Cannot parse more than 2 nodes in a tuple tree." + + # - Left node is the next recursion parent. + # - Right node is the actual class contained in the tuple. + + # Process right node. + impl = self.head.cast (nodes[1].type) + + # Process left node and set it as head. + self.head = self.head.cast (nodes[0].type) + self.count = self.count + 1 + + # Finally, check the implementation. If it is + # wrapped in _M_head_impl return that, otherwise return + # the value "as is". + fields = impl.type.fields () + if len (fields) < 1 or fields[0].name != "_M_head_impl": + return ('[%d]' % self.count, impl) + else: + return ('[%d]' % self.count, impl['_M_head_impl']) + + def __init__ (self, typename, val): + self.typename = typename + self.val = val; + + def children (self): + return self._iterator (self.val) + + def to_string (self): + return '%s containing' % (self.typename) + class StdStackOrQueuePrinter: "Print a std::stack or std::queue" @@ -641,6 +699,7 @@ def build_libstdcxx_dictionary (): pretty_printers_dict[re.compile('^std::multiset<.*>$')] = lambda val: StdSetPrinter("std::multiset", val) pretty_printers_dict[re.compile('^std::priority_queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::priority_queue", val) pretty_printers_dict[re.compile('^std::queue<.*>$')] = lambda val: StdStackOrQueuePrinter("std::queue", val) + pretty_printers_dict[re.compile('^std::tuple<.*>$')] = lambda val: StdTuplePrinter("std::tuple", val) pretty_printers_dict[re.compile('^std::set<.*>$')] = lambda val: StdSetPrinter("std::set", val) pretty_printers_dict[re.compile('^std::stack<.*>$')] = lambda val: StdStackOrQueuePrinter("std::stack", val) pretty_printers_dict[re.compile('^std::unique_ptr<.*>$')] = UniquePointerPrinter diff --git a/libstdc++-v3/src/atomic.cc b/libstdc++-v3/src/atomic.cc index 3a2ff3d52e9..775bb7601c1 100644 --- a/libstdc++-v3/src/atomic.cc +++ b/libstdc++-v3/src/atomic.cc @@ -80,16 +80,16 @@ namespace std atomic_flag_test_and_set_explicit(volatile __atomic_flag_base* __a, memory_order __m) throw () { - volatile atomic_flag d(__a->_M_i); - return d.test_and_set(__m); + volatile atomic_flag* d = static_cast<volatile atomic_flag*>(__a); + return d->test_and_set(__m); } void atomic_flag_clear_explicit(volatile __atomic_flag_base* __a, memory_order __m) throw () { - volatile atomic_flag d(__a->_M_i); - return d.clear(__m); + volatile atomic_flag* d = static_cast<volatile atomic_flag*>(__a); + return d->clear(__m); } void diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc index f0236eb2637..bf49aa6b080 100644 --- a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc +++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc @@ -49,10 +49,13 @@ test03() std::unique_ptr<int[2]> p2 = p1; } +// { dg-error "deleted function" "" { target *-*-* } 358 } // { dg-error "used here" "" { target *-*-* } 42 } // { dg-error "no matching" "" { target *-*-* } 48 } -// { dg-error "used here" "" { target *-*-* } 49 } -// { dg-error "candidates are" "" { target *-*-* } 213 } +// { dg-warning "candidates are" "" { target *-*-* } 119 } +// { dg-warning "note" "" { target *-*-* } 112 } +// { dg-warning "note" "" { target *-*-* } 107 } +// { dg-warning "note" "" { target *-*-* } 102 } +// { dg-warning "note" "" { target *-*-* } 96 } // { dg-error "deleted function" "" { target *-*-* } 213 } -// { dg-error "deleted function" "" { target *-*-* } 358 } -// { dg-excess-errors "note" } +// { dg-error "used here" "" { target *-*-* } 49 } diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_copy.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_copy.cc index 328dd71d0bb..6c8498e7b10 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_copy.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_copy.cc @@ -31,7 +31,7 @@ test01() { bool test __attribute__((unused)) = true; - typedef std::subtract_with_carry_engine<long, 24, 10, 24> + typedef std::subtract_with_carry_engine<unsigned long, 24, 10, 24> base_engine; base_engine b; diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_move.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_move.cc index 990dc9b3fe9..fabe17a2b56 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_move.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/base_move.cc @@ -31,7 +31,7 @@ test01() { bool test __attribute__((unused)) = true; - typedef std::subtract_with_carry_engine<long, 24, 10, 24> + typedef std::subtract_with_carry_engine<unsigned long, 24, 10, 24> base_engine; std::discard_block_engine<base_engine, 389, 24> diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/default.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/default.cc index 17fea5bdb47..926bb2c24db 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/default.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/default.cc @@ -33,7 +33,7 @@ test01() std::discard_block_engine < - std::subtract_with_carry_engine<long, 24, 10, 24>, + std::subtract_with_carry_engine<unsigned long, 24, 10, 24>, 389, 24 > e; } diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed1.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed1.cc index efe194c99f0..4cedeb85d39 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed1.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed1.cc @@ -35,7 +35,7 @@ test01() std::discard_block_engine < - std::subtract_with_carry_engine<long, 24, 10, 24>, + std::subtract_with_carry_engine<unsigned long, 24, 10, 24>, 389, 24 > e(seed); } diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed2.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed2.cc index 82f6fdb1c74..b66752c2b6e 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed2.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed2.cc @@ -35,7 +35,7 @@ test01() std::discard_block_engine < - std::subtract_with_carry_engine<long, 24, 10, 24>, + std::subtract_with_carry_engine<unsigned long, 24, 10, 24>, 389, 24 > e(seed); } diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq.cc index 58f0f1c392a..aa86b9afedc 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/cons/seed_seq.cc @@ -35,7 +35,7 @@ test01() std::discard_block_engine < - std::subtract_with_carry_engine<long, 24, 10, 24>, + std::subtract_with_carry_engine<unsigned long, 24, 10, 24>, 389, 24 > e(seq); } diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/equal.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/equal.cc index db2497540a3..5d63114fef3 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/equal.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/equal.cc @@ -33,7 +33,7 @@ test01() std::discard_block_engine < - std::subtract_with_carry_engine<long, 24, 10, 24>, + std::subtract_with_carry_engine<unsigned long, 24, 10, 24>, 389, 24 > u, v; diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc index 1d39a213f47..7aec649c03b 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/operators/serialize.cc @@ -35,7 +35,7 @@ test01() std::stringstream str; std::discard_block_engine < - std::subtract_with_carry_engine<long, 24, 10, 24>, + std::subtract_with_carry_engine<unsigned long, 24, 10, 24>, 389, 24 > u, v; diff --git a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/typedefs.cc b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/typedefs.cc index 379b3aeb978..6e23316caa1 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/typedefs.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/discard_block_engine/requirements/typedefs.cc @@ -31,7 +31,7 @@ test01() { typedef std::discard_block_engine < - std::subtract_with_carry_engine<long, 24, 10, 24>, + std::subtract_with_carry_engine<unsigned long, 24, 10, 24>, 389, 24 > test_type; diff --git a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/non_uint_neg.cc b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/non_uint_neg.cc index f54d76ada07..18fb44fdac5 100644 --- a/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/non_uint_neg.cc +++ b/libstdc++-v3/testsuite/26_numerics/random/linear_congruential_engine/requirements/non_uint_neg.cc @@ -19,7 +19,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-options "-std=c++0x -D_GLIBCXX_CONCEPT_CHECKS" } +// { dg-options "-std=c++0x" } // { dg-require-cstdint "" } // { dg-error "not a valid type" "" { target *-*-* } 32 } // { dg-error "invalid type" "" { target *-*-* } 32 } diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.c b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.c new file mode 100644 index 00000000000..3fd2f2c799d --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.c @@ -0,0 +1,34 @@ +// { dg-options "-x c -shared-libgcc -lstdc++" } + +// 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 <cassert> +#include <stdatomic.h> + +// libstdc++/40826 +// libstdc++/40654 +int main() +{ + atomic_flag f = ATOMIC_FLAG_INIT; + + atomic_flag_clear(&f); // set to false + assert( false == atomic_flag_test_and_set(&f) ); // return previous false, set to true + assert( true == atomic_flag_test_and_set(&f) ); // return true + + return 0; +} diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc new file mode 100644 index 00000000000..6cb09f34b7a --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc @@ -0,0 +1,33 @@ +// { 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 <cstdatomic> +#include <testsuite_hooks.h> + +int main() +{ + bool test __attribute__((unused)) = true; + std::atomic_flag f = ATOMIC_FLAG_INIT; + + f.clear(); // set to false + VERIFY( false == f.test_and_set() ); // return previous false, set to true + VERIFY( true == f.test_and_set() ); // return true + + return 0; +} diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc new file mode 100644 index 00000000000..cfb0c1bbb7a --- /dev/null +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc @@ -0,0 +1,27 @@ +// { dg-options "-std=gnu++0x" } +// { dg-do compile } + +// Copyright (C) 2008, 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 <stdatomic.h> + +void test01() +{ + using namespace std; + atomic_flag af = ATOMIC_FLAG_INIT; +} diff --git a/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc b/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc index c8bcf720e1d..5237107da1f 100644 --- a/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc +++ b/libstdc++-v3/testsuite/ext/profile/mutex_extensions.cc @@ -22,5 +22,5 @@ #include <vector> -// { dg-error "Cannot use -D_GLIBCXX_PROFILE with " "" { target *-*-* } 166 } +// { dg-error "Cannot use -D_GLIBCXX_PROFILE with " "" { target *-*-* } 165 } // { dg-excess-errors "In file included from" } diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog index cabfcca9f2e..110c79e93ad 100644 --- a/lto-plugin/ChangeLog +++ b/lto-plugin/ChangeLog @@ -1,3 +1,36 @@ +2009-10-19 Rafael Avila de Espindola <espindola@google.com> + + PR40790 + * configure: Regenerate. + * configure.ac: Add AC_TYPE_UINT64_T. + +2009-10-16 Rafael Avila de Espindola <espindola@google.com> + + * lto-plugin.c (message): New variable. + (check): New function. + (parse_table_entry, translate, write_resolution,add_output_files, + exec_lto_wrapper,claim_file_handler, onload): Use check instead of + assert. + (cleanup_handler): Use check instead of assert. Remove the arguments + file if it exists. + +2009-10-15 Rafael Avila de Espindola <espindola@google.com> + + * lto-plugin.c (resolution_file): New. + (free_1): Update comment. + (free_2): Free resolution_file. + (write_resolution): Write resolution to specified file. Use the + syms array from the symbol table. + (all_symbols_read_handler): Delay call to free_1 past call to + write_resolution. + (process_option): Add a -resolution option. + +2009-10-13 Richard Guenther <rguenther@suse.de> + + * Makefile.am (liblto_plugin_la_LIBADD): Link against the + correct libiberty. + * Makefile.in: Regenerated. + 2009-10-08 Rafael Avila de Espindola <espindola@google.com> * lto-plugin.c (add_input_library): New. diff --git a/lto-plugin/Makefile.am b/lto-plugin/Makefile.am index b5dd5fc4716..19fbdcd8ef5 100644 --- a/lto-plugin/Makefile.am +++ b/lto-plugin/Makefile.am @@ -16,4 +16,4 @@ AM_CFLAGS = -Wall -Werror libexecsub_LTLIBRARIES = liblto_plugin.la liblto_plugin_la_SOURCES = lto-plugin.c -liblto_plugin_la_LIBADD = $(LIBELFLIBS) -L../libiberty/pic -liberty +liblto_plugin_la_LIBADD = $(LIBELFLIBS) ../libiberty/pic/libiberty.a diff --git a/lto-plugin/Makefile.in b/lto-plugin/Makefile.in index 7284e4cb856..6ae87de40c1 100644 --- a/lto-plugin/Makefile.in +++ b/lto-plugin/Makefile.in @@ -82,7 +82,8 @@ am__base_list = \ am__installdirs = "$(DESTDIR)$(libexecsubdir)" LTLIBRARIES = $(libexecsub_LTLIBRARIES) am__DEPENDENCIES_1 = -liblto_plugin_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +liblto_plugin_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + ../libiberty/pic/libiberty.a am_liblto_plugin_la_OBJECTS = lto-plugin.lo liblto_plugin_la_OBJECTS = $(am_liblto_plugin_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ @@ -240,7 +241,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/../include $(LIBELFINC) AM_CFLAGS = -Wall -Werror libexecsub_LTLIBRARIES = liblto_plugin.la liblto_plugin_la_SOURCES = lto-plugin.c -liblto_plugin_la_LIBADD = $(LIBELFLIBS) -L../libiberty/pic -liberty +liblto_plugin_la_LIBADD = $(LIBELFLIBS) ../libiberty/pic/libiberty.a all: all-am .SUFFIXES: diff --git a/lto-plugin/configure b/lto-plugin/configure index e701ee1aa10..c7ecf3e85fe 100755 --- a/lto-plugin/configure +++ b/lto-plugin/configure @@ -1864,6 +1864,58 @@ $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func + +# ac_fn_c_find_uintX_t LINENO BITS VAR +# ------------------------------------ +# Finds an unsigned integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_uintX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(($ac_type) -1 >> ($2 - 1) == 1)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + case $ac_type in #( + uint$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval as_val=\$$3 + if test "x$as_val" = x""no; then : + +else + break +fi + done +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_find_uintX_t cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -4400,13 +4452,13 @@ if test "${lt_cv_nm_interface+set}" = set; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4403: $ac_compile\"" >&5) + (eval echo "\"\$as_me:4455: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:4406: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:4458: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:4409: output\"" >&5) + (eval echo "\"\$as_me:4461: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -5612,7 +5664,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5615 "configure"' > conftest.$ac_ext + echo '#line 5667 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -7142,11 +7194,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7145: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7197: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7149: \$? = $ac_status" >&5 + echo "$as_me:7201: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7481,11 +7533,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7484: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7536: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7488: \$? = $ac_status" >&5 + echo "$as_me:7540: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -7586,11 +7638,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7589: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7641: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7593: \$? = $ac_status" >&5 + echo "$as_me:7645: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -7641,11 +7693,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:7644: $lt_compile\"" >&5) + (eval echo "\"\$as_me:7696: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7648: \$? = $ac_status" >&5 + echo "$as_me:7700: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -10023,7 +10075,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10026 "configure" +#line 10078 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10119,7 +10171,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 10122 "configure" +#line 10174 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10347,6 +10399,20 @@ CC="$lt_save_CC" +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT64_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF +;; + esac + ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF diff --git a/lto-plugin/configure.ac b/lto-plugin/configure.ac index 277d31135fe..2956ed06c5f 100644 --- a/lto-plugin/configure.ac +++ b/lto-plugin/configure.ac @@ -7,6 +7,7 @@ AC_ARG_VAR(LIBELFLIBS,[How to link libelf]) AC_ARG_VAR(LIBELFINC,[How to find libelf include files]) AM_PROG_LIBTOOL AC_SUBST(target_noncanonical) +AC_TYPE_UINT64_T AC_CONFIG_FILES(Makefile) AC_OUTPUT AC_SYS_LARGEFILE diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c index 71b4961496c..0cf1ab4ec69 100644 --- a/lto-plugin/lto-plugin.c +++ b/lto-plugin/lto-plugin.c @@ -82,6 +82,7 @@ static ld_plugin_get_symbols get_symbols; static ld_plugin_register_cleanup register_cleanup; static ld_plugin_add_input_file add_input_file; static ld_plugin_add_input_library add_input_library; +static ld_plugin_message message; static struct plugin_file_info *claimed_files = NULL; static unsigned int num_claimed_files = 0; @@ -97,6 +98,24 @@ static unsigned int num_pass_through_items; static bool debug; static bool nop; +static char *resolution_file = NULL; + +static void +check (bool gate, enum ld_plugin_level level, const char *text) +{ + if (gate) + return; + + if (message) + message (level, text); + else + { + /* If there is no nicer way to inform the user, fallback to stderr. */ + fprintf (stderr, "%s\n", text); + if (level == LDPL_FATAL) + abort (); + } +} /* Parse an entry of the IL symbol table. The data to be parsed is pointed by P and the result is written in ENTRY. The slot number is stored in SLOT. @@ -141,12 +160,12 @@ parse_table_entry (char *p, struct ld_plugin_symbol *entry, uint32_t *slot) entry->comdat_key = strdup (entry->comdat_key); t = *p; - assert (t <= 4); + check (t <= 4, LDPL_FATAL, "invalid symbol kind found"); entry->def = translate_kind[t]; p++; t = *p; - assert (t <= 3); + check (t <= 3, LDPL_FATAL, "invalid symbol visibility found"); entry->visibility = translate_visibility[t]; p++; @@ -217,9 +236,9 @@ translate (Elf_Data *symtab, struct plugin_symtab *out) { n++; syms = realloc (syms, n * sizeof (struct ld_plugin_symbol)); - assert (syms); + check (syms, LDPL_FATAL, "could not allocate memory"); slots = realloc (slots, n * sizeof (uint32_t)); - assert (slots); + check (slots, LDPL_FATAL, "could not allocate memory"); data = parse_table_entry (data, &syms[n - 1], &slots[n - 1]); } @@ -228,7 +247,8 @@ translate (Elf_Data *symtab, struct plugin_symtab *out) out->slots = slots; } -/* Free all memory that is no longer needed at the beginning of all_symbols_read. */ +/* Free all memory that is no longer needed after writing the symbol + resolution. */ static void free_1 (void) @@ -275,6 +295,12 @@ free_2 (void) free (temp_obj_dir_name); temp_obj_dir_name = NULL; + + if (resolution_file) + { + free (resolution_file); + resolution_file = NULL; + } } /* Writes the relocations to disk. */ @@ -284,12 +310,12 @@ write_resolution (void) { unsigned int i; FILE *f; - /* FIXME: Disabled for now since we are not using the resolution file. */ - return; + if (!resolution_file) + return; - /* FIXME: This should be a temporary file. */ - f = fopen ("resolution", "w"); + f = fopen (resolution_file, "w"); + check (f, LDPL_FATAL, "could not open file"); fprintf (f, "%d\n", num_claimed_files); @@ -297,8 +323,7 @@ write_resolution (void) { struct plugin_file_info *info = &claimed_files[i]; struct plugin_symtab *symtab = &info->symtab; - struct ld_plugin_symbol *syms = calloc (symtab->nsyms, - sizeof (struct ld_plugin_symbol)); + struct ld_plugin_symbol *syms = symtab->syms; unsigned j; assert (syms); @@ -312,7 +337,6 @@ write_resolution (void) unsigned int resolution = syms[j].resolution; fprintf (f, "%d %s\n", slot, lto_resolution_str[resolution]); } - free (syms); } fclose (f); } @@ -323,7 +347,7 @@ write_resolution (void) static void add_output_files (FILE *f) { - char fname[1000]; /* FIXME: Is this big enough? */ + char fname[1000]; /* FIXME: Remove this restriction. */ for (;;) { @@ -333,7 +357,7 @@ add_output_files (FILE *f) break; len = strlen (s); - assert (s[len - 1] == '\n'); + check (s[len - 1] == '\n', LDPL_FATAL, "file name too long"); s[len - 1] = '\0'; num_output_files++; @@ -361,16 +385,16 @@ exec_lto_wrapper (char *argv[]) /* Write argv to a file to avoid a command line that is too long. */ t = asprintf (&at_args, "@%s/arguments", temp_obj_dir_name); - assert (t >= 0); + check (t >= 0, LDPL_FATAL, "asprintf failed"); args_name = at_args + 1; args = fopen (args_name, "w"); - assert (args); + check (args, LDPL_FATAL, "could not open arguments file"); t = writeargv (&argv[1], args); - assert (t == 0); + check (t == 0, LDPL_FATAL, "could not write arguments"); t = fclose (args); - assert (t == 0); + check (t == 0, LDPL_FATAL, "could not close arguments file"); new_argv[0] = argv[0]; new_argv[1] = at_args; @@ -386,25 +410,26 @@ exec_lto_wrapper (char *argv[]) pex = pex_init (PEX_USE_PIPES, "lto-wrapper", NULL); - assert (pex != NULL); + check (pex != NULL, LDPL_FATAL, "could not pex_init lto-wrapper"); errmsg = pex_run (pex, 0, new_argv[0], new_argv, NULL, NULL, &t); - assert (errmsg == NULL); - assert (t == 0); + check (errmsg == NULL, LDPL_FATAL, "could not run lto-wrapper"); + check (t == 0, LDPL_FATAL, "could not run lto-wrapper"); wrapper_output = pex_read_output (pex, 0); - assert (wrapper_output); + check (wrapper_output, LDPL_FATAL, "could not read lto-wrapper output"); add_output_files (wrapper_output); t = pex_get_status (pex, 1, &status); - assert (t == 1); - assert (WIFEXITED (status) && WEXITSTATUS (status) == 0); + check (t == 1, LDPL_FATAL, "could not get lto-wrapper exit status"); + check (WIFEXITED (status) && WEXITSTATUS (status) == 0, LDPL_FATAL, + "lto-wrapper failed"); pex_free (pex); t = unlink (args_name); - assert (t == 0); + check (t == 0, LDPL_FATAL, "could not unlink arguments file"); free (at_args); } @@ -434,8 +459,6 @@ all_symbols_read_handler (void) if (num_claimed_files == 0) return LDPS_OK; - free_1 (); - if (nop) { use_original_files (); @@ -448,6 +471,8 @@ all_symbols_read_handler (void) write_resolution (); + free_1 (); + for (i = 0; i < lto_wrapper_num_args; i++) *lto_arg_ptr++ = lto_wrapper_argv[i]; @@ -487,8 +512,12 @@ all_symbols_read_handler (void) static enum ld_plugin_status cleanup_handler (void) { + /* Note: we cannot use LDPL_FATAL in here as that would produce + an infinite loop. */ int t; unsigned i; + char *arguments; + struct stat buf; for (i = 0; i < num_claimed_files; i++) { @@ -496,11 +525,23 @@ cleanup_handler (void) if (info->temp) { t = unlink (info->name); - assert (t == 0); + check (t == 0, LDPL_ERROR, "could not unlink temporary file"); } } + + /* If we are being called from an error handler, it is possible + that the arguments file is still exists. */ + t = asprintf (&arguments, "%s/arguments", temp_obj_dir_name); + check (t >= 0, LDPL_ERROR, "asprintf failed"); + if (stat(arguments, &buf) == 0) + { + t = unlink (arguments); + check (t == 0, LDPL_ERROR, "could not unlink arguments file"); + } + free (arguments); + t = rmdir (temp_obj_dir_name); - assert (t == 0); + check (t == 0, LDPL_ERROR, "could not remove temporary directory"); free_2 (); return LDPS_OK; @@ -529,13 +570,13 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed) char *objname; int t = asprintf (&objname, "%s/obj%d.o", temp_obj_dir_name, objnum); - assert (t >= 0); + check (t >= 0, LDPL_FATAL, "asprintf failed"); objnum++; fd = open (objname, O_RDWR | O_CREAT, 0666); - assert (fd > 0); + check (fd > 0, LDPL_FATAL, "could not open/create temporary file"); offset = lseek (file->fd, file->offset, SEEK_SET); - assert (offset == file->offset); + check (offset == file->offset, LDPL_FATAL, "could not seek"); while (size > 0) { ssize_t r, written; @@ -543,7 +584,7 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed) off_t s = sizeof (buf) < size ? sizeof (buf) : size; r = read (file->fd, buf, s); written = write (fd, buf, r); - assert (written = r); + check (written == r, LDPL_FATAL, "could not write to temporary file"); size -= r; } lto_file.name = objname; @@ -573,7 +614,7 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed) status = add_symbols (file->handle, lto_file.symtab.nsyms, lto_file.symtab.syms); - assert (status == LDPS_OK); + check (status == LDPS_OK, LDPL_FATAL, "could not add symbols"); *claimed = 1; num_claimed_files++; @@ -588,7 +629,7 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed) if (file->offset != 0) { int t = unlink (lto_file.name); - assert (t == 0); + check (t == 0, LDPL_FATAL, "could not unlink file"); } free (lto_file.name); @@ -608,6 +649,10 @@ process_option (const char *option) debug = 1; else if (strcmp (option, "-nop") == 0) nop = 1; + else if (!strncmp (option, "-resolution=", strlen("-resolution="))) + { + resolution_file = strdup (option + strlen("-resolution=")); + } else if (!strncmp (option, "-pass-through=", strlen("-pass-through="))) { num_pass_through_items++; @@ -636,13 +681,16 @@ onload (struct ld_plugin_tv *tv) char *t; unsigned version = elf_version (EV_CURRENT); - assert (version != EV_NONE); + check (version != EV_NONE, LDPL_FATAL, "invalid ELF version"); p = tv; while (p->tv_tag) { switch (p->tv_tag) { + case LDPT_MESSAGE: + message = p->tv_u.tv_message; + break; case LDPT_REGISTER_CLAIM_FILE_HOOK: register_claim_file = p->tv_u.tv_register_claim_file; break; @@ -673,22 +721,25 @@ onload (struct ld_plugin_tv *tv) p++; } - assert (register_claim_file); - assert (add_symbols); + check (register_claim_file, LDPL_FATAL, "register_claim_file not found"); + check (add_symbols, LDPL_FATAL, "add_symbols not found"); status = register_claim_file (claim_file_handler); - assert (status == LDPS_OK); + check (status == LDPS_OK, LDPL_FATAL, + "could not register the claim_file callback"); if (register_cleanup) { status = register_cleanup (cleanup_handler); - assert (status == LDPS_OK); + check (status == LDPS_OK, LDPL_FATAL, + "could not register the cleanup callback"); } if (register_all_symbols_read) { - assert (get_symbols); + check (get_symbols, LDPL_FATAL, "get_symbols not found"); status = register_all_symbols_read (all_symbols_read_handler); - assert (status == LDPS_OK); + check (status == LDPS_OK, LDPL_FATAL, + "could not register the all_symbols_read callback"); } temp_obj_dir_name = strdup ("tmp_objectsXXXXXX"); |