From a96583a25c34e80d5920be57cc81f05621d4d9fd Mon Sep 17 00:00:00 2001 From: no-author Date: Thu, 21 Apr 2005 05:20:58 +0000 Subject: This commit was manufactured by cvs2svn to create tag 'gcc_4_0_0_release'. git-svn-id: https://gcc.gnu.org/svn/gcc/tags/gcc_4_0_0_release@98492 138bc75d-0d04-0410-961f-82ee72b054a4 --- ChangeLog | 40 + MAINTAINERS | 5 + boehm-gc/ChangeLog | 17 + boehm-gc/Makefile.in | 5 +- boehm-gc/dyn_load.c | 5 + boehm-gc/include/Makefile.in | 29 +- boehm-gc/include/private/gcconfig.h | 2 +- config/ChangeLog | 8 + config/acx.m4 | 1 - configure | 30 +- configure.in | 3 +- contrib/ChangeLog | 34 + contrib/gcc_update | 42 +- contrib/gennews | 5 +- contrib/reghunt/ChangeLog | 4 + contrib/regression/ChangeLog | 4 + contrib/warn_summary | 14 +- fastjar/ChangeLog | 4 + fixincludes/ChangeLog | 18 + fixincludes/fixincl.x | 98 +- fixincludes/inclhack.def | 41 + fixincludes/tests/base/netinet/in.h | 24 + fixincludes/tests/base/pthread.h | 5 + gcc/ChangeLog | 1349 +- gcc/Makefile.in | 2 +- gcc/ada/ChangeLog | 129 + gcc/ada/Make-lang.in | 30 +- gcc/ada/Makefile.in | 50 + gcc/ada/decl.c | 163 +- gcc/ada/exp_ch13.adb | 11 +- gcc/ada/exp_ch3.adb | 22 +- gcc/ada/exp_ch3.ads | 10 +- gcc/ada/exp_util.adb | 11 +- gcc/ada/freeze.adb | 366 +- gcc/ada/gigi.h | 6 +- gcc/ada/lang.opt | 4 +- gcc/ada/misc.c | 21 +- gcc/ada/s-osinte-linux-hppa.ads | 533 + gcc/ada/sem_ch3.adb | 18 +- gcc/ada/system-hpux.ads | 2 +- gcc/ada/system-linux-hppa.ads | 151 + gcc/ada/system-linux-sparc.ads | 151 + gcc/ada/trans.c | 67 +- gcc/ada/utils.c | 21 +- gcc/ada/utils2.c | 6 +- gcc/bb-reorder.c | 54 +- gcc/builtins.c | 8 +- gcc/c-common.c | 121 +- gcc/c-common.h | 2 + gcc/c-decl.c | 137 +- gcc/c-opts.c | 7 +- gcc/c-tree.h | 34 +- gcc/c-typeck.c | 84 +- gcc/c.opt | 14 +- gcc/calls.c | 8 +- gcc/cfglayout.c | 6 + gcc/cgraph.c | 108 +- gcc/cgraph.h | 9 +- gcc/cgraphunit.c | 25 +- gcc/combine.c | 656 +- gcc/common.opt | 6 +- gcc/config.gcc | 156 +- gcc/config.host | 2 + gcc/config/alpha/alpha.c | 35 +- gcc/config/alpha/alpha.h | 40 +- gcc/config/alpha/t-osf4 | 4 +- gcc/config/arm/arm.c | 8 +- gcc/config/arm/arm.h | 9 +- gcc/config/arm/linux-elf.h | 6 +- gcc/config/arm/netbsd-elf.h | 5 +- gcc/config/arm/t-netbsd | 4 +- gcc/config/avr/avr.c | 114 +- gcc/config/avr/avr.md | 112 +- gcc/config/cris/cris.h | 12 +- gcc/config/cris/cris.md | 139 +- gcc/config/darwin8.h | 10 +- gcc/config/i386/cygwin1.c | 8 +- gcc/config/i386/darwin.h | 2 +- gcc/config/i386/emmintrin.h | 2 +- gcc/config/i386/host-cygwin.c | 81 + gcc/config/i386/i386.c | 171 +- gcc/config/i386/i386.h | 5 - gcc/config/i386/i386.md | 254 +- gcc/config/i386/mmx.md | 2 +- gcc/config/i386/predicates.md | 8 +- gcc/config/i386/scodbx.h | 84 - gcc/config/i386/t-rtems-i386 | 15 +- gcc/config/i386/x-cygwin | 4 + gcc/config/i386/xm-dgux.h | 4 - gcc/config/i386/xm-sun.h | 21 - gcc/config/i386/xm-sysv3.h | 3 - gcc/config/ia64/hpux.h | 10 +- gcc/config/ia64/ia64.c | 19 +- gcc/config/ia64/ia64.md | 20 +- gcc/config/ia64/lib1funcs.asm | 10 +- gcc/config/ia64/t-hpux | 4 +- gcc/config/ia64/t-ia64 | 3 +- gcc/config/ia64/unwind-ia64.c | 3 +- gcc/config/mips/iris6.h | 5 + gcc/config/mips/mips.c | 48 +- gcc/config/mips/mips.h | 37 +- gcc/config/mips/mips.md | 29 +- gcc/config/mips/t-vr | 9 +- gcc/config/mips/vr.h | 18 +- gcc/config/pa/elf.h | 45 +- gcc/config/pa/pa-protos.h | 1 + gcc/config/pa/pa.c | 99 +- gcc/config/pa/pa.h | 22 +- gcc/config/pa/pa.md | 10 +- gcc/config/pa/pa64-hpux.h | 31 +- gcc/config/pa/som.h | 68 +- gcc/config/pa/t-hpux-shlib | 5 +- gcc/config/rs6000/rs6000-protos.h | 2 +- gcc/config/rs6000/rs6000.c | 659 +- gcc/config/rs6000/rs6000.h | 3 + gcc/config/rs6000/rs6000.md | 13 +- gcc/config/rs6000/spe.md | 15 +- gcc/config/rs6000/t-darwin | 7 +- gcc/config/rs6000/t-darwin8 | 6 +- gcc/config/s390/s390-modes.def | 3 + gcc/config/s390/s390.c | 7 +- gcc/config/s390/s390.md | 12 +- gcc/config/s390/tpf.h | 3 + gcc/config/sh/lib1funcs.asm | 13 +- gcc/config/sparc/linux.h | 5 +- gcc/config/sparc/linux64.h | 5 +- gcc/config/sparc/sparc.c | 122 +- gcc/config/sparc/sparc.h | 7 +- gcc/config/sparc/sparc.md | 15 +- gcc/config/t-darwin | 6 +- gcc/config/vax/vax.c | 201 +- gcc/config/xtensa/xtensa.h | 9 + gcc/configure | 314 +- gcc/configure.ac | 2 +- gcc/cp/ChangeLog | 242 +- gcc/cp/call.c | 14 - gcc/cp/class.c | 20 +- gcc/cp/cp-tree.def | 7 +- gcc/cp/cp-tree.h | 9 +- gcc/cp/decl.c | 178 +- gcc/cp/decl2.c | 49 +- gcc/cp/init.c | 35 +- gcc/cp/method.c | 4 + gcc/cp/name-lookup.c | 3 +- gcc/cp/parser.c | 129 +- gcc/cp/pt.c | 41 +- gcc/cp/semantics.c | 6 +- gcc/cp/tree.c | 17 +- gcc/cp/typeck.c | 197 +- gcc/cp/typeck2.c | 2 +- gcc/cse.c | 48 +- gcc/dbxout.c | 6 +- gcc/ddg.c | 2 + gcc/debug.c | 3 +- gcc/debug.h | 4 + gcc/doc/c-tree.texi | 2 +- gcc/doc/contrib.texi | 151 +- gcc/doc/cpp.texi | 12 +- gcc/doc/cppinternals.texi | 4 +- gcc/doc/cppopts.texi | 5 +- gcc/doc/extend.texi | 122 +- gcc/doc/gcov.texi | 32 +- gcc/doc/include/gcc-common.texi | 2 +- gcc/doc/install.texi | 223 +- gcc/doc/invoke.texi | 85 +- gcc/doc/md.texi | 8 +- gcc/doc/objc.texi | 4 +- gcc/doc/rtl.texi | 2 +- gcc/doc/sourcebuild.texi | 8 +- gcc/doc/standards.texi | 2 +- gcc/doc/tm.texi | 38 +- gcc/doc/tree-ssa.texi | 18 +- gcc/dwarf2out.c | 104 +- gcc/expr.c | 28 +- gcc/final.c | 26 +- gcc/fold-const.c | 102 +- gcc/fortran/ChangeLog | 247 + gcc/fortran/arith.c | 29 +- gcc/fortran/array.c | 42 +- gcc/fortran/check.c | 241 + gcc/fortran/decl.c | 53 + gcc/fortran/dump-parse-tree.c | 2 + gcc/fortran/expr.c | 13 +- gcc/fortran/gfortran.h | 19 +- gcc/fortran/gfortran.texi | 49 +- gcc/fortran/intrinsic.c | 96 + gcc/fortran/intrinsic.h | 35 + gcc/fortran/intrinsic.texi | 1904 ++ gcc/fortran/invoke.texi | 57 +- gcc/fortran/io.c | 11 +- gcc/fortran/iresolve.c | 218 + gcc/fortran/lang.opt | 22 +- gcc/fortran/match.c | 35 +- gcc/fortran/match.h | 2 + gcc/fortran/options.c | 18 +- gcc/fortran/primary.c | 28 +- gcc/fortran/resolve.c | 81 +- gcc/fortran/simplify.c | 78 +- gcc/fortran/symbol.c | 1 + gcc/fortran/trans-array.c | 37 - gcc/fortran/trans-array.h | 5 - gcc/fortran/trans-common.c | 61 +- gcc/fortran/trans-decl.c | 28 +- gcc/fortran/trans-expr.c | 3 +- gcc/fortran/trans-intrinsic.c | 24 +- gcc/fortran/trans-io.c | 3 +- gcc/fortran/trans-stmt.c | 23 +- gcc/fortran/trans-types.c | 25 +- gcc/fortran/trans.h | 5 + gcc/function.c | 39 +- gcc/gcc.c | 2 +- gcc/gcov.c | 9 +- gcc/gimplify.c | 133 +- gcc/gthr-posix.c | 27 +- gcc/java/ChangeLog | 89 + gcc/java/Make-lang.in | 3 - gcc/java/class.c | 20 +- gcc/java/decl.c | 34 +- gcc/java/expr.c | 33 +- gcc/java/gcj.texi | 89 +- gcc/java/jcf-io.c | 10 +- gcc/java/verify-glue.c | 37 +- gcc/java/verify-impl.c | 163 +- gcc/libgcc2.c | 50 +- gcc/libgcc2.h | 69 +- gcc/loop.c | 39 +- gcc/modulo-sched.c | 38 +- gcc/objc/ChangeLog | 11 + gcc/objc/objc-act.c | 6 + gcc/params.def | 21 +- gcc/passes.c | 18 +- gcc/po/ChangeLog | 37 + gcc/po/be.po | 7485 +++--- gcc/po/ca.po | 7598 +++--- gcc/po/da.po | 7616 +++--- gcc/po/de.po | 8723 +++---- gcc/po/el.po | 7579 +++--- gcc/po/es.po | 14562 +++++------ gcc/po/fr.po | 7630 +++--- gcc/po/gcc.pot | 8374 +++---- gcc/po/ja.po | 7531 +++--- gcc/po/nl.po | 7544 +++--- gcc/po/rw.po | 24887 +++++++++++++++++++ gcc/po/sv.po | 7510 +++--- gcc/po/tr.po | 11587 ++++----- gcc/reload1.c | 17 +- gcc/sdbout.c | 3 +- gcc/simplify-rtx.c | 97 +- gcc/stmt.c | 2 +- gcc/testsuite/ChangeLog | 711 +- gcc/testsuite/README | 2 +- gcc/testsuite/g++.dg/abi/param2.C | 18 + gcc/testsuite/g++.dg/abi/vague1.C | 2 - gcc/testsuite/g++.dg/debug/const2.C | 15 + gcc/testsuite/g++.dg/debug/using1.C | 15 + gcc/testsuite/g++.dg/expr/cast3.C | 22 + gcc/testsuite/g++.dg/expr/lval2.C | 27 + gcc/testsuite/g++.dg/ext/attrib21.C | 17 + gcc/testsuite/g++.dg/ext/stmtexpr4.C | 8 + .../g++.dg/ext/visibility/pragma-override1.C | 2 +- .../g++.dg/ext/visibility/pragma-override2.C | 2 +- gcc/testsuite/g++.dg/ext/visibility/visibility-7.C | 2 +- gcc/testsuite/g++.dg/ext/weak2.C | 17 + gcc/testsuite/g++.dg/inherit/covariant12.C | 18 + gcc/testsuite/g++.dg/init/array18.C | 22 + gcc/testsuite/g++.dg/init/array19.C | 4 + gcc/testsuite/g++.dg/init/dso_handle1.C | 1 + gcc/testsuite/g++.dg/init/ptrmem2.C | 12 + gcc/testsuite/g++.dg/lookup/using13.C | 12 + gcc/testsuite/g++.dg/opt/covariant1.C | 47 + gcc/testsuite/g++.dg/opt/max1.C | 2 +- gcc/testsuite/g++.dg/opt/pr13066-1.C | 22 + gcc/testsuite/g++.dg/opt/pr19108.C | 19 + gcc/testsuite/g++.dg/opt/pr20991.C | 34 + gcc/testsuite/g++.dg/opt/pr7503-2.C | 2 +- gcc/testsuite/g++.dg/opt/pr7503-3.C | 2 +- gcc/testsuite/g++.dg/opt/pr7503-4.C | 2 +- gcc/testsuite/g++.dg/opt/pr7503-5.C | 2 +- gcc/testsuite/g++.dg/opt/thunk2.C | 44 + gcc/testsuite/g++.dg/other/cv_func.C | 4 +- gcc/testsuite/g++.dg/other/offsetof3.C | 2 +- gcc/testsuite/g++.dg/other/stdarg3.C | 16 + gcc/testsuite/g++.dg/overload/using2.C | 87 + gcc/testsuite/g++.dg/parse/cond2.C | 14 + gcc/testsuite/g++.dg/parse/crash24.C | 6 + gcc/testsuite/g++.dg/parse/crash25.C | 10 + gcc/testsuite/g++.dg/parse/error11.C | 2 +- gcc/testsuite/g++.dg/parse/error16.C | 4 +- gcc/testsuite/g++.dg/tc1/dr108.C | 2 +- gcc/testsuite/g++.dg/template/array13.C | 14 + gcc/testsuite/g++.dg/template/crash35.C | 9 + gcc/testsuite/g++.dg/template/crash36.C | 9 + gcc/testsuite/g++.dg/template/error18.C | 11 + gcc/testsuite/g++.dg/template/local4.C | 2 +- gcc/testsuite/g++.dg/template/non-dependent11.C | 18 + gcc/testsuite/g++.dg/template/non-dependent12.C | 10 + gcc/testsuite/g++.dg/template/nontype6.C | 2 +- gcc/testsuite/g++.dg/template/overload4.C | 20 + gcc/testsuite/g++.dg/template/ptrmem12.C | 29 + gcc/testsuite/g++.dg/template/ptrmem13.C | 11 + gcc/testsuite/g++.dg/template/redecl3.C | 7 + gcc/testsuite/g++.dg/template/sizeof9.C | 6 + gcc/testsuite/g++.dg/tree-ssa/pr20280.C | 63 + gcc/testsuite/g++.dg/tree-ssa/ssa-sra-3.C | 85 + gcc/testsuite/g++.dg/warn/Wdtor1.C | 22 + gcc/testsuite/g++.dg/warn/Wnvdtor.C | 10 + gcc/testsuite/g++.dg/warn/Wunused-11.C | 11 + gcc/testsuite/g++.dg/warn/deprecated.C | 10 +- gcc/testsuite/g++.dg/warn/minmax.C | 15 + gcc/testsuite/g++.dg/warn/weak1.C | 2 + gcc/testsuite/g++.old-deja/g++.jason/warning9.C | 5 +- gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog | 9 + gcc/testsuite/g++.old-deja/g++.oliva/expr2.C | 2 +- gcc/testsuite/g++.old-deja/g++.warn/compare1.C | 2 +- gcc/testsuite/gcc.c-torture/compile/20011119-1.c | 2 + gcc/testsuite/gcc.c-torture/compile/20011119-2.c | 2 + gcc/testsuite/gcc.c-torture/compile/20040323-1.c | 2 +- gcc/testsuite/gcc.c-torture/compile/981001-2.c | 2 + gcc/testsuite/gcc.c-torture/compile/pr13066-1.c | 10 + gcc/testsuite/gcc.c-torture/compile/pr20203.c | 16 + gcc/testsuite/gcc.c-torture/compile/pr20412.c | 20 + gcc/testsuite/gcc.c-torture/compile/pr20539-1.c | 10 + .../gcc.c-torture/compile/struct-non-lval-1.c | 7 + .../gcc.c-torture/compile/struct-non-lval-2.c | 7 + .../gcc.c-torture/compile/struct-non-lval-3.c | 7 + gcc/testsuite/gcc.c-torture/execute/20050119-2.c | 40 + gcc/testsuite/gcc.c-torture/execute/20050316-1.c | 69 + gcc/testsuite/gcc.c-torture/execute/20050410-1.c | 13 + gcc/testsuite/gcc.c-torture/execute/20050414-1.c | 47 + .../execute/ieee/mul-subnormal-single-1.x | 6 + .../gcc.c-torture/execute/loop-ivopts-2.c | 50 + gcc/testsuite/gcc.c-torture/execute/medce-2.c | 42 - gcc/testsuite/gcc.c-torture/execute/pr20527-1.c | 81 + gcc/testsuite/gcc.c-torture/execute/pr20601-1.c | 122 + gcc/testsuite/gcc.dg/20050307-1.c | 52 + gcc/testsuite/gcc.dg/20050309-1.c | 37 + gcc/testsuite/gcc.dg/20050321-1.c | 26 + gcc/testsuite/gcc.dg/20050321-2.c | 54 + gcc/testsuite/gcc.dg/20050325-1.c | 19 + gcc/testsuite/gcc.dg/20050330-1.c | 14 + gcc/testsuite/gcc.dg/20050409-1.c | 18 + gcc/testsuite/gcc.dg/alias-3.c | 11 + gcc/testsuite/gcc.dg/alias-4.c | 11 + gcc/testsuite/gcc.dg/alias-5.c | 7 + gcc/testsuite/gcc.dg/alias-6.c | 7 + gcc/testsuite/gcc.dg/alias-7.c | 16 + gcc/testsuite/gcc.dg/anon-struct-6.c | 2 +- gcc/testsuite/gcc.dg/array-8.c | 4 +- gcc/testsuite/gcc.dg/asm-b.c | 39 + gcc/testsuite/gcc.dg/bitfld-14.c | 11 + gcc/testsuite/gcc.dg/builtin-apply4.c | 30 + gcc/testsuite/gcc.dg/cpp/19940712-1.c | 2 +- gcc/testsuite/gcc.dg/cpp/19951025-1.c | 4 +- gcc/testsuite/gcc.dg/cpp/assert4.c | 4 +- gcc/testsuite/gcc.dg/cpp/macspace1.c | 61 + gcc/testsuite/gcc.dg/cpp/macspace2.c | 61 + gcc/testsuite/gcc.dg/cpp/tr-warn6.c | 2 +- gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c | 13 + gcc/testsuite/gcc.dg/deprecated.c | 10 +- gcc/testsuite/gcc.dg/enum3.c | 11 + gcc/testsuite/gcc.dg/i386-387-7.c | 1 + gcc/testsuite/gcc.dg/i386-3dnowA-1.c | 1 + gcc/testsuite/gcc.dg/i386-3dnowA-2.c | 1 + gcc/testsuite/gcc.dg/init-bad-1.c | 24 +- gcc/testsuite/gcc.dg/init-bad-2.c | 12 +- gcc/testsuite/gcc.dg/init-bad-3.c | 12 +- gcc/testsuite/gcc.dg/loop-3.c | 2 +- gcc/testsuite/gcc.dg/m-un-2.c | 2 +- gcc/testsuite/gcc.dg/old-style-then-proto-1.c | 44 + gcc/testsuite/gcc.dg/parm-mismatch-1.c | 8 +- gcc/testsuite/gcc.dg/pr12092-1.c | 1 + gcc/testsuite/gcc.dg/pr18628.c | 31 + gcc/testsuite/gcc.dg/pr19345.c | 12 + gcc/testsuite/gcc.dg/pr20204.c | 34 + gcc/testsuite/gcc.dg/pr20368-1.c | 12 + gcc/testsuite/gcc.dg/pr20368-2.c | 12 + gcc/testsuite/gcc.dg/pr20368-3.c | 12 + gcc/testsuite/gcc.dg/pr20927.c | 23 + gcc/testsuite/gcc.dg/redecl-1.c | 2 +- gcc/testsuite/gcc.dg/short-compare-1.c | 2 +- gcc/testsuite/gcc.dg/short-compare-2.c | 2 +- gcc/testsuite/gcc.dg/smod-1.c | 2 +- gcc/testsuite/gcc.dg/sparc-reg-1.c | 11 + gcc/testsuite/gcc.dg/stmt-expr-label-1.c | 404 + gcc/testsuite/gcc.dg/stmt-expr-label-2.c | 27 + gcc/testsuite/gcc.dg/stmt-expr-label-3.c | 8 + gcc/testsuite/gcc.dg/titype-1.c | 2 +- gcc/testsuite/gcc.dg/torture/asm-subreg-1.c | 14 + gcc/testsuite/gcc.dg/torture/badshift.c | 29 + gcc/testsuite/gcc.dg/torture/builtin-noret-1.c | 1 + gcc/testsuite/gcc.dg/torture/builtin-noret-2.c | 1 + gcc/testsuite/gcc.dg/torture/pr19683-1.c | 42 + gcc/testsuite/gcc.dg/torture/pr20314-1.c | 56 + gcc/testsuite/gcc.dg/torture/pr20314-2.c | 47 + gcc/testsuite/gcc.dg/torture/tree-loop-1.c | 21 + gcc/testsuite/gcc.dg/tree-ssa/inline_asm-1.c | 18 + gcc/testsuite/gcc.dg/tree-ssa/inline_asm-2.c | 17 + gcc/testsuite/gcc.dg/tree-ssa/pr20739.c | 24 + gcc/testsuite/gcc.dg/uninit-C.c | 2 +- gcc/testsuite/gcc.dg/vect/pr20122.c | 38 + gcc/testsuite/gcc.dg/visibility-7.c | 2 +- gcc/testsuite/gcc.dg/vmx/darwin-abi-3.c | 34 - gcc/testsuite/gcc.dg/weak/weak-12.c | 17 + gcc/testsuite/gcc.dg/weak/weak-3.c | 4 +- gcc/testsuite/gcc.dg/weak/weak-9.c | 9 +- gcc/testsuite/gcc.dg/winline-6.c | 2 +- gcc/testsuite/gcc.target/mips/fix-vr4130-1.c | 9 + gcc/testsuite/gcc.target/mips/fix-vr4130-2.c | 9 + gcc/testsuite/gcc.target/mips/fix-vr4130-3.c | 9 + gcc/testsuite/gcc.target/mips/fix-vr4130-4.c | 9 + gcc/testsuite/gfortran.dg/PR19754_1.f90 | 9 + gcc/testsuite/gfortran.dg/PR19754_2.f90 | 22 + gcc/testsuite/gfortran.dg/assign.f90 | 8 + gcc/testsuite/gfortran.dg/assign_2.f90 | 11 + gcc/testsuite/gfortran.dg/assign_3.f90 | 11 + gcc/testsuite/gfortran.dg/backspace.f | 82 + gcc/testsuite/gfortran.dg/bound_1.f90 | 20 + gcc/testsuite/gfortran.dg/boz_1.f90 | 38 + gcc/testsuite/gfortran.dg/boz_3.f90 | 34 + gcc/testsuite/gfortran.dg/boz_4.f90 | 29 + gcc/testsuite/gfortran.dg/dos_eol.f | 19 + gcc/testsuite/gfortran.dg/e_d_fmt.f90 | 13 + gcc/testsuite/gfortran.dg/eor_1.f90 | 2 +- gcc/testsuite/gfortran.dg/func_result_1.f90 | 19 + gcc/testsuite/gfortran.dg/g77/12002.f | 2 +- gcc/testsuite/gfortran.dg/g77/19990313-1.f | 2 +- gcc/testsuite/gfortran.dg/g77/19990313-2.f | 2 +- gcc/testsuite/gfortran.dg/g77/19990313-3.f | 2 +- gcc/testsuite/gfortran.dg/g77/19990525-0.f | 22 +- gcc/testsuite/gfortran.dg/g77/19990826-0.f | 4 +- gcc/testsuite/gfortran.dg/g77/19990826-2.f | 2 +- gcc/testsuite/gfortran.dg/g77/19990826-3.f | 493 +- gcc/testsuite/gfortran.dg/g77/20000511-1.f | 8 +- gcc/testsuite/gfortran.dg/g77/20000511-2.f | 18 +- gcc/testsuite/gfortran.dg/g77/970625-2.f | 4 +- gcc/testsuite/gfortran.dg/g77/980310-2.f | 14 +- gcc/testsuite/gfortran.dg/g77/980310-3.f | 8 +- gcc/testsuite/gfortran.dg/g77/980310-8.f | 27 +- gcc/testsuite/gfortran.dg/g77/980519-2.f | 8 +- gcc/testsuite/gfortran.dg/g77/alpha1.f | 4 +- gcc/testsuite/gfortran.dg/g77/claus.f | 8 +- gcc/testsuite/gfortran.dg/g77/erfc.f | 44 +- gcc/testsuite/gfortran.dg/g77/short.f | 12 +- gcc/testsuite/gfortran.dg/g77_intrinsics_funcs.f | 51 + gcc/testsuite/gfortran.dg/g77_intrinsics_sub.f | 82 + gcc/testsuite/gfortran.dg/ishft.f90 | 2 +- gcc/testsuite/gfortran.dg/largeequiv_1.f90 | 13 + gcc/testsuite/gfortran.dg/negative_unit.f | 22 + gcc/testsuite/gfortran.dg/nesting_1.f90 | 18 + gcc/testsuite/gfortran.dg/open-options-blanks.f | 7 + gcc/testsuite/gfortran.dg/open_new.f90 | 2 +- gcc/testsuite/gfortran.dg/pr15332.f | 12 + gcc/testsuite/gfortran.dg/pr15754.f90 | 4 +- gcc/testsuite/gfortran.dg/pr15959.f90 | 5 + gcc/testsuite/gfortran.dg/pr17229.f | 23 + gcc/testsuite/gfortran.dg/pr18025.f90 | 8 + gcc/testsuite/gfortran.dg/pr19936_1.f90 | 5 + gcc/testsuite/gfortran.dg/pr19936_2.f90 | 5 + gcc/testsuite/gfortran.dg/pr19936_3.f90 | 5 + gcc/testsuite/gfortran.dg/pr20124.f90 | 8 + gcc/testsuite/gfortran.dg/pr20163-2.f | 5 + gcc/testsuite/gfortran.dg/pr20257.f90 | 9 + gcc/testsuite/gfortran.dg/pr20480.f90 | 9 + gcc/testsuite/gfortran.dg/pr20755.f | 10 + gcc/testsuite/gfortran.dg/promotion.f90 | 12 + gcc/testsuite/gfortran.dg/real_index_1.f90 | 7 + gcc/testsuite/gfortran.dg/spec_expr_1.f90 | 12 + gcc/testsuite/gfortran.dg/stfunc_2.f90 | 6 + gcc/testsuite/gfortran.dg/string_pad_trunc.f90 | 20 + gcc/testsuite/gfortran.dg/tiny_1.f90 | 9 + gcc/testsuite/gfortran.dg/tiny_2.f90 | 9 + gcc/testsuite/gfortran.dg/write_0_pe_format.f90 | 9 + .../gfortran.fortran-torture/execute/backspace.f90 | 2 +- .../gfortran.fortran-torture/execute/data.f90 | 10 +- .../execute/integer_select.f90 | 36 +- .../execute/integer_select_1.f90 | 2 +- .../execute/intrinsic_mvbits.f90 | 9 +- gcc/testsuite/lib/c-torture.exp | 3 - gcc/testsuite/lib/file-format.exp | 10 + gcc/testsuite/lib/objc-torture.exp | 3 - gcc/testsuite/lib/target-supports-dg.exp | 2 +- gcc/testsuite/lib/target-supports.exp | 43 +- gcc/testsuite/objc.dg/stabs-1.m | 4 +- gcc/testsuite/treelang/ChangeLog | 19 + gcc/testsuite/treelang/compile/extrafunc.tree | 24 + gcc/testsuite/treelang/compile/extravar.tree | 13 + gcc/testsuite/treelang/compile/unsigned.tree | 19 + gcc/testsuite/treelang/compile/var_defs.tree | 6 +- gcc/toplev.c | 7 +- gcc/tree-chrec.c | 168 +- gcc/tree-eh.c | 109 +- gcc/tree-if-conv.c | 19 +- gcc/tree-inline.c | 110 +- gcc/tree-inline.h | 1 + gcc/tree-into-ssa.c | 6 +- gcc/tree-optimize.c | 6 +- gcc/tree-scalar-evolution.c | 44 +- gcc/tree-sra.c | 41 +- gcc/tree-ssa-alias.c | 4 +- gcc/tree-ssa-ccp.c | 12 + gcc/tree-ssa-dce.c | 21 +- gcc/tree-ssa-loop-ivcanon.c | 3 - gcc/tree-ssa-loop-ivopts.c | 60 +- gcc/tree-ssa-loop.c | 2 +- gcc/tree-ssa-pre.c | 57 +- gcc/tree-ssa.c | 13 +- gcc/tree-vect-analyze.c | 20 +- gcc/tree.c | 11 +- gcc/tree.h | 3 +- gcc/treelang/ChangeLog | 62 + gcc/treelang/Make-lang.in | 22 +- gcc/treelang/lang-specs.h | 1 + gcc/treelang/parse.y | 15 +- gcc/treelang/spec.c | 63 + gcc/treelang/treelang.texi | 261 +- gcc/treelang/treetree.c | 35 +- gcc/treelang/treetree.h | 3 +- gcc/unwind-dw2-fde-glibc.c | 137 +- gcc/varasm.c | 373 +- gcc/version.c | 2 +- gcc/vmsdbgout.c | 3 +- include/ChangeLog | 4 + intl/ChangeLog | 4 + libada/ChangeLog | 4 + libcpp/ChangeLog | 30 + libcpp/configure | 2 +- libcpp/configure.ac | 2 +- libcpp/directives.c | 7 +- libcpp/macro.c | 39 +- libcpp/po/ChangeLog | 30 + libcpp/po/be.po | 185 +- libcpp/po/ca.po | 188 +- libcpp/po/cpplib.pot | 216 +- libcpp/po/da.po | 191 +- libcpp/po/de.po | 204 +- libcpp/po/el.po | 189 +- libcpp/po/es.po | 195 +- libcpp/po/fr.po | 188 +- libcpp/po/ja.po | 191 +- libcpp/po/nl.po | 189 +- libcpp/po/rw.po | 967 + libcpp/po/sv.po | 188 +- libcpp/po/tr.po | 193 +- libcpp/po/vi.po | 825 + libffi/ChangeLog | 4 + libgfortran/ChangeLog | 150 +- libgfortran/Makefile.am | 14 +- libgfortran/Makefile.in | 67 +- libgfortran/aclocal.m4 | 4 +- libgfortran/config.h.in | 33 + libgfortran/configure | 237 +- libgfortran/configure.ac | 13 +- libgfortran/intrinsics/chdir.c | 118 + libgfortran/intrinsics/gerror.c | 67 + libgfortran/intrinsics/getlog.c | 65 + libgfortran/intrinsics/hostnm.c | 110 + libgfortran/intrinsics/ierrno.c | 57 + libgfortran/intrinsics/kill.c | 107 + libgfortran/intrinsics/link.c | 138 + libgfortran/intrinsics/perror.c | 64 + libgfortran/intrinsics/rename.c | 132 + libgfortran/intrinsics/sleep.c | 68 + libgfortran/intrinsics/symlnk.c | 138 + libgfortran/intrinsics/time.c | 72 + libgfortran/io/backspace.c | 24 +- libgfortran/io/format.c | 1 + libgfortran/io/inquire.c | 7 +- libgfortran/io/io.h | 7 +- libgfortran/io/list_read.c | 13 +- libgfortran/io/open.c | 5 +- libgfortran/io/transfer.c | 8 +- libgfortran/io/write.c | 37 +- libgfortran/runtime/environ.c | 63 +- libgfortran/runtime/string.c | 14 +- libiberty/ChangeLog | 4 + libjava/ChangeLog | 563 + libjava/Makefile.am | 346 +- libjava/Makefile.in | 3801 +-- libjava/boehm.cc | 6 +- libjava/configure | 73 +- libjava/configure.ac | 33 +- libjava/configure.host | 1 - libjava/external/Makefile.in | 4 +- libjava/external/sax/Makefile.am | 18 +- libjava/external/sax/Makefile.in | 305 +- .../sax/org/xml/sax/helpers/NamespaceSupport.java | 5 +- libjava/external/w3c_dom/Makefile.am | 18 +- libjava/external/w3c_dom/Makefile.in | 1083 +- libjava/gcj/Makefile.in | 4 +- libjava/gcj/cni.h | 6 + libjava/gij.cc | 305 +- libjava/gnu/gcj/runtime/BootClassLoader.java | 71 + libjava/gnu/gcj/runtime/ExtensionClassLoader.java | 40 + libjava/gnu/gcj/runtime/HelperClassLoader.java | 67 + libjava/gnu/gcj/runtime/VMClassLoader.java | 135 - libjava/gnu/gcj/runtime/natVMClassLoader.cc | 79 - libjava/gnu/gcj/tools/gcj_dbtool/Main.java | 189 +- libjava/gnu/gcj/tools/gcj_dbtool/natMain.cc | 24 + libjava/gnu/java/lang/MainThread.java | 5 +- libjava/gnu/java/net/natPlainSocketImplPosix.cc | 5 + libjava/gnu/java/net/natPlainSocketImplWin32.cc | 5 + libjava/gnu/java/nio/channels/FileChannelImpl.java | 100 +- libjava/gnu/xml/aelfred2/JAXPFactory.java | 273 +- libjava/gnu/xml/aelfred2/SAXDriver.java | 2456 +- libjava/gnu/xml/aelfred2/XmlParser.java | 10268 ++++---- libjava/gnu/xml/aelfred2/XmlReader.java | 515 +- libjava/gnu/xml/dom/DomNode.java | 13 +- libjava/gnu/xml/dom/ls/SAXEventSink.java | 7 + libjava/gnu/xml/pipeline/ValidationConsumer.java | 5 +- libjava/include/Makefile.in | 4 +- libjava/include/config.h.in | 6 + libjava/include/java-interp.h | 8 +- libjava/include/java-props.h | 3 - libjava/include/jawt.h | 6 + libjava/include/jawt_md.h | 1 + libjava/include/jvm.h | 15 +- libjava/java/io/BufferedInputStream.java | 100 +- libjava/java/io/InputStreamReader.java | 2 - libjava/java/io/PipedInputStream.java | 23 +- libjava/java/lang/Class.h | 6 +- libjava/java/lang/ClassLoader.java | 50 +- libjava/java/lang/VMClassLoader.java | 56 +- libjava/java/lang/VMCompiler.java | 33 +- libjava/java/lang/natClassLoader.cc | 64 +- libjava/java/lang/natDouble.cc | 19 +- libjava/java/lang/natRuntime.cc | 61 +- libjava/java/lang/natVMClassLoader.cc | 99 +- libjava/java/net/URL.java | 2 +- libjava/java/net/URLClassLoader.java | 36 +- libjava/java/nio/DirectByteBufferImpl.java | 2 +- libjava/java/text/SimpleDateFormat.java | 12 + libjava/java/util/Calendar.java | 6 + libjava/java/util/GregorianCalendar.java | 45 +- libjava/java/util/Timer.java | 5 +- libjava/javax/imageio/ImageIO.java | 2 +- .../javax/naming/directory/BasicAttributes.java | 30 +- libjava/javax/swing/text/JTextComponent.java | 5 + libjava/jawt.c | 19 + libjava/jni/classpath/classpath_jawt.h | 1 + libjava/jni/classpath/jcl.c | 144 - libjava/jni/classpath/jcl.h | 64 - libjava/jni/classpath/jnilink.c | 117 - libjava/jni/classpath/jnilink.h | 86 - libjava/jni/classpath/primlib.c | 463 - libjava/jni/classpath/primlib.h | 102 - libjava/jni/gtk-peer/gtk_jawt.c | 34 + libjava/libltdl/ChangeLog | 4 + libjava/link.cc | 62 +- libjava/prims.cc | 266 +- libjava/testsuite/Makefile.in | 4 +- libjava/testsuite/lib/libjava.exp | 4 +- libjava/testsuite/libjava.jni/jni.exp | 30 +- libjava/testsuite/libjava.lang/bytearray.java | 10 + libjava/testsuite/libjava.lang/bytearray.out | 2 + libmudflap/ChangeLog | 4 + libobjc/ChangeLog | 30 + libobjc/Makefile.in | 8 +- libobjc/archive.c | 135 +- libobjc/hash.c | 34 +- libobjc/hash_compat.c | 97 + libobjc/init.c | 11 +- libobjc/libobjc.def | 7 + libobjc/objc/hash.h | 129 +- libobjc/selector.c | 16 +- libstdc++-v3/ChangeLog | 293 + libstdc++-v3/acinclude.m4 | 2 +- libstdc++-v3/config/cpu/cris/atomicity.h | 10 +- libstdc++-v3/config/cpu/s390/atomicity.h | 3 +- libstdc++-v3/config/linker-map.gnu | 2 - libstdc++-v3/config/os/mingw32/os_defines.h | 5 +- libstdc++-v3/config/os/newlib/os_defines.h | 5 +- libstdc++-v3/configure | 2 +- libstdc++-v3/docs/doxygen/user.cfg.in | 10 +- libstdc++-v3/docs/html/ext/howto.html | 6 + libstdc++-v3/docs/html/faq/index.html | 3 + libstdc++-v3/include/Makefile.am | 8 + libstdc++-v3/include/Makefile.in | 8 + libstdc++-v3/include/bits/c++config | 2 +- libstdc++-v3/include/bits/fstream.tcc | 19 +- libstdc++-v3/include/bits/locale_facets.tcc | 6 +- libstdc++-v3/include/bits/stl_algobase.h | 9 +- libstdc++-v3/include/ext/bitmap_allocator.h | 34 +- libstdc++-v3/include/std/std_complex.h | 14 +- libstdc++-v3/include/std/std_fstream.h | 12 + libstdc++-v3/include/tr1/bind_iterate.h | 78 + libstdc++-v3/include/tr1/bind_repeat.h | 192 + libstdc++-v3/include/tr1/boost_shared_ptr.h | 981 + libstdc++-v3/include/tr1/functional | 1050 +- libstdc++-v3/include/tr1/functional_iterate.h | 235 +- libstdc++-v3/include/tr1/memory | 955 +- libstdc++-v3/include/tr1/mu_iterate.h | 51 + libstdc++-v3/include/tr1/ref_fwd.h | 59 + libstdc++-v3/include/tr1/ref_wrap_iterate.h | 44 + libstdc++-v3/include/tr1/repeat.h | 636 + libstdc++-v3/include/tr1/tuple | 1643 +- libstdc++-v3/include/tr1/tuple_iterate.h | 158 + libstdc++-v3/include/tr1/type_traits | 173 +- libstdc++-v3/include/tr1/type_traits_fwd.h | 4 + libstdc++-v3/scripts/gen_bind_includers.pl | 30 + libstdc++-v3/scripts/gen_includers.pl | 108 + libstdc++-v3/src/bitmap_allocator.cc | 22 +- .../22_locale/collate/compare/wchar_t/2.cc | 1 + .../collate/compare/wchar_t/wrapped_env.cc | 1 + .../collate/compare/wchar_t/wrapped_locale.cc | 1 + .../testsuite/22_locale/collate/hash/wchar_t/2.cc | 1 + .../22_locale/collate/hash/wchar_t/wrapped_env.cc | 1 + .../collate/hash/wchar_t/wrapped_locale.cc | 1 + .../22_locale/collate/transform/wchar_t/2.cc | 1 + .../collate/transform/wchar_t/wrapped_env.cc | 1 + .../collate/transform/wchar_t/wrapped_locale.cc | 1 + .../testsuite/22_locale/num_put/put/char/20909.cc | 79 + .../22_locale/num_put/put/wchar_t/20909.cc | 79 + .../testsuite/25_algorithms/iter_swap/20577.cc | 71 + .../testsuite/27_io/basic_ifstream/open/char/1.cc | 9 +- .../testsuite/27_io/basic_ofstream/open/char/1.cc | 9 +- .../bitmap_allocator/check_allocate_max_size.cc | 8 +- .../ext/bitmap_allocator/check_deallocate_null.cc | 10 +- libstdc++-v3/testsuite/testsuite_abi.cc | 1 + libstdc++-v3/testsuite/testsuite_tr1.h | 107 +- .../memory/enable_shared_from_this/not_shared.cc | 2 + .../memory/enable_shared_from_this/not_shared2.cc | 5 + .../memory/enable_shared_from_this/not_shared3.cc | 5 + .../memory/shared_ptr/assign/auto_ptr_neg.cc | 4 +- .../shared_ptr/assign/auto_ptr_rvalue_neg.cc | 3 +- .../memory/shared_ptr/cons/auto_ptr_neg.cc | 4 +- .../memory/shared_ptr/cons/weak_ptr_expired.cc | 5 +- .../tr1/3_function_objects/bind/all_bound.cc | 45 + .../tr1/3_function_objects/bind/nested.cc | 46 + .../tr1/3_function_objects/bind/placeholders.cc | 46 + .../testsuite/tr1/3_function_objects/bind/ref.cc | 60 + .../3_function_objects/reference_wrapper/invoke.cc | 103 + .../reference_wrapper/typedefs.cc | 89 + .../testsuite/tr1/3_function_objects/result_of.cc | 75 + .../is_union_or_class/is_union_or_class.cc | 62 + .../is_union_or_class/typedefs.cc | 36 + .../is_base_of/is_base_of.cc | 94 + .../is_base_of/typedefs.cc | 36 + .../is_polymorphic/is_polymorphic.cc | 54 + .../type_properties/is_polymorphic/typedefs.cc | 36 + ltmain.sh | 72 +- maintainer-scripts/ChangeLog | 4 + zlib/ChangeLog | 4 + 742 files changed, 114162 insertions(+), 73886 deletions(-) create mode 100644 fixincludes/tests/base/netinet/in.h create mode 100644 gcc/ada/s-osinte-linux-hppa.ads create mode 100644 gcc/ada/system-linux-hppa.ads create mode 100644 gcc/ada/system-linux-sparc.ads create mode 100755 gcc/config/i386/host-cygwin.c delete mode 100644 gcc/config/i386/scodbx.h create mode 100644 gcc/config/i386/x-cygwin delete mode 100644 gcc/config/i386/xm-dgux.h delete mode 100644 gcc/config/i386/xm-sun.h delete mode 100644 gcc/config/i386/xm-sysv3.h create mode 100644 gcc/fortran/intrinsic.texi create mode 100644 gcc/po/rw.po create mode 100644 gcc/testsuite/g++.dg/abi/param2.C create mode 100644 gcc/testsuite/g++.dg/debug/const2.C create mode 100644 gcc/testsuite/g++.dg/debug/using1.C create mode 100644 gcc/testsuite/g++.dg/expr/cast3.C create mode 100644 gcc/testsuite/g++.dg/expr/lval2.C create mode 100644 gcc/testsuite/g++.dg/ext/attrib21.C create mode 100644 gcc/testsuite/g++.dg/ext/stmtexpr4.C create mode 100644 gcc/testsuite/g++.dg/ext/weak2.C create mode 100644 gcc/testsuite/g++.dg/inherit/covariant12.C create mode 100644 gcc/testsuite/g++.dg/init/array18.C create mode 100644 gcc/testsuite/g++.dg/init/array19.C create mode 100644 gcc/testsuite/g++.dg/init/ptrmem2.C create mode 100644 gcc/testsuite/g++.dg/lookup/using13.C create mode 100644 gcc/testsuite/g++.dg/opt/covariant1.C create mode 100644 gcc/testsuite/g++.dg/opt/pr13066-1.C create mode 100644 gcc/testsuite/g++.dg/opt/pr19108.C create mode 100644 gcc/testsuite/g++.dg/opt/pr20991.C create mode 100644 gcc/testsuite/g++.dg/opt/thunk2.C create mode 100644 gcc/testsuite/g++.dg/other/stdarg3.C create mode 100644 gcc/testsuite/g++.dg/overload/using2.C create mode 100644 gcc/testsuite/g++.dg/parse/cond2.C create mode 100644 gcc/testsuite/g++.dg/parse/crash24.C create mode 100644 gcc/testsuite/g++.dg/parse/crash25.C create mode 100644 gcc/testsuite/g++.dg/template/array13.C create mode 100644 gcc/testsuite/g++.dg/template/crash35.C create mode 100644 gcc/testsuite/g++.dg/template/crash36.C create mode 100644 gcc/testsuite/g++.dg/template/error18.C create mode 100644 gcc/testsuite/g++.dg/template/non-dependent11.C create mode 100644 gcc/testsuite/g++.dg/template/non-dependent12.C create mode 100644 gcc/testsuite/g++.dg/template/overload4.C create mode 100644 gcc/testsuite/g++.dg/template/ptrmem12.C create mode 100644 gcc/testsuite/g++.dg/template/ptrmem13.C create mode 100644 gcc/testsuite/g++.dg/template/redecl3.C create mode 100644 gcc/testsuite/g++.dg/template/sizeof9.C create mode 100644 gcc/testsuite/g++.dg/tree-ssa/pr20280.C create mode 100644 gcc/testsuite/g++.dg/tree-ssa/ssa-sra-3.C create mode 100644 gcc/testsuite/g++.dg/warn/Wdtor1.C create mode 100644 gcc/testsuite/g++.dg/warn/Wnvdtor.C create mode 100644 gcc/testsuite/g++.dg/warn/Wunused-11.C create mode 100644 gcc/testsuite/g++.dg/warn/minmax.C create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr13066-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr20203.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr20412.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr20539-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/struct-non-lval-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/struct-non-lval-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/struct-non-lval-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20050119-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20050316-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20050410-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/20050414-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/mul-subnormal-single-1.x create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-ivopts-2.c delete mode 100644 gcc/testsuite/gcc.c-torture/execute/medce-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr20527-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pr20601-1.c create mode 100644 gcc/testsuite/gcc.dg/20050307-1.c create mode 100644 gcc/testsuite/gcc.dg/20050309-1.c create mode 100644 gcc/testsuite/gcc.dg/20050321-1.c create mode 100644 gcc/testsuite/gcc.dg/20050321-2.c create mode 100644 gcc/testsuite/gcc.dg/20050325-1.c create mode 100644 gcc/testsuite/gcc.dg/20050330-1.c create mode 100644 gcc/testsuite/gcc.dg/20050409-1.c create mode 100644 gcc/testsuite/gcc.dg/alias-3.c create mode 100644 gcc/testsuite/gcc.dg/alias-4.c create mode 100644 gcc/testsuite/gcc.dg/alias-5.c create mode 100644 gcc/testsuite/gcc.dg/alias-6.c create mode 100644 gcc/testsuite/gcc.dg/alias-7.c create mode 100644 gcc/testsuite/gcc.dg/asm-b.c create mode 100644 gcc/testsuite/gcc.dg/bitfld-14.c create mode 100644 gcc/testsuite/gcc.dg/builtin-apply4.c create mode 100644 gcc/testsuite/gcc.dg/cpp/macspace1.c create mode 100644 gcc/testsuite/gcc.dg/cpp/macspace2.c create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c create mode 100644 gcc/testsuite/gcc.dg/enum3.c create mode 100644 gcc/testsuite/gcc.dg/old-style-then-proto-1.c create mode 100644 gcc/testsuite/gcc.dg/pr18628.c create mode 100644 gcc/testsuite/gcc.dg/pr19345.c create mode 100644 gcc/testsuite/gcc.dg/pr20204.c create mode 100644 gcc/testsuite/gcc.dg/pr20368-1.c create mode 100644 gcc/testsuite/gcc.dg/pr20368-2.c create mode 100644 gcc/testsuite/gcc.dg/pr20368-3.c create mode 100644 gcc/testsuite/gcc.dg/pr20927.c create mode 100644 gcc/testsuite/gcc.dg/sparc-reg-1.c create mode 100644 gcc/testsuite/gcc.dg/stmt-expr-label-1.c create mode 100644 gcc/testsuite/gcc.dg/stmt-expr-label-2.c create mode 100644 gcc/testsuite/gcc.dg/stmt-expr-label-3.c create mode 100644 gcc/testsuite/gcc.dg/torture/asm-subreg-1.c create mode 100644 gcc/testsuite/gcc.dg/torture/badshift.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr19683-1.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr20314-1.c create mode 100644 gcc/testsuite/gcc.dg/torture/pr20314-2.c create mode 100644 gcc/testsuite/gcc.dg/torture/tree-loop-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/inline_asm-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/inline_asm-2.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr20739.c create mode 100644 gcc/testsuite/gcc.dg/vect/pr20122.c delete mode 100644 gcc/testsuite/gcc.dg/vmx/darwin-abi-3.c create mode 100644 gcc/testsuite/gcc.dg/weak/weak-12.c create mode 100644 gcc/testsuite/gcc.target/mips/fix-vr4130-1.c create mode 100644 gcc/testsuite/gcc.target/mips/fix-vr4130-2.c create mode 100644 gcc/testsuite/gcc.target/mips/fix-vr4130-3.c create mode 100644 gcc/testsuite/gcc.target/mips/fix-vr4130-4.c create mode 100644 gcc/testsuite/gfortran.dg/PR19754_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/PR19754_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/assign.f90 create mode 100644 gcc/testsuite/gfortran.dg/assign_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/assign_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/backspace.f create mode 100644 gcc/testsuite/gfortran.dg/bound_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/boz_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/boz_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/boz_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/dos_eol.f create mode 100644 gcc/testsuite/gfortran.dg/e_d_fmt.f90 create mode 100644 gcc/testsuite/gfortran.dg/func_result_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/g77_intrinsics_funcs.f create mode 100644 gcc/testsuite/gfortran.dg/g77_intrinsics_sub.f create mode 100644 gcc/testsuite/gfortran.dg/largeequiv_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/negative_unit.f create mode 100644 gcc/testsuite/gfortran.dg/nesting_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/open-options-blanks.f create mode 100644 gcc/testsuite/gfortran.dg/pr15332.f create mode 100644 gcc/testsuite/gfortran.dg/pr15959.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr17229.f create mode 100644 gcc/testsuite/gfortran.dg/pr18025.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr19936_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr19936_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr19936_3.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr20124.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr20163-2.f create mode 100644 gcc/testsuite/gfortran.dg/pr20257.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr20480.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr20755.f create mode 100644 gcc/testsuite/gfortran.dg/promotion.f90 create mode 100644 gcc/testsuite/gfortran.dg/real_index_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/spec_expr_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/stfunc_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/string_pad_trunc.f90 create mode 100644 gcc/testsuite/gfortran.dg/tiny_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/tiny_2.f90 create mode 100644 gcc/testsuite/gfortran.dg/write_0_pe_format.f90 create mode 100644 gcc/testsuite/treelang/compile/extrafunc.tree create mode 100644 gcc/testsuite/treelang/compile/extravar.tree create mode 100644 gcc/testsuite/treelang/compile/unsigned.tree create mode 100644 gcc/treelang/spec.c create mode 100644 libcpp/po/rw.po create mode 100644 libcpp/po/vi.po create mode 100644 libgfortran/intrinsics/chdir.c create mode 100644 libgfortran/intrinsics/gerror.c create mode 100644 libgfortran/intrinsics/getlog.c create mode 100644 libgfortran/intrinsics/hostnm.c create mode 100644 libgfortran/intrinsics/ierrno.c create mode 100644 libgfortran/intrinsics/kill.c create mode 100644 libgfortran/intrinsics/link.c create mode 100644 libgfortran/intrinsics/perror.c create mode 100644 libgfortran/intrinsics/rename.c create mode 100644 libgfortran/intrinsics/sleep.c create mode 100644 libgfortran/intrinsics/symlnk.c create mode 100644 libgfortran/intrinsics/time.c create mode 100644 libjava/gnu/gcj/runtime/BootClassLoader.java create mode 100644 libjava/gnu/gcj/runtime/ExtensionClassLoader.java create mode 100644 libjava/gnu/gcj/runtime/HelperClassLoader.java delete mode 100644 libjava/gnu/gcj/runtime/VMClassLoader.java delete mode 100644 libjava/gnu/gcj/runtime/natVMClassLoader.cc create mode 100644 libjava/gnu/gcj/tools/gcj_dbtool/natMain.cc delete mode 100644 libjava/jni/classpath/jcl.c delete mode 100644 libjava/jni/classpath/jcl.h delete mode 100644 libjava/jni/classpath/jnilink.c delete mode 100644 libjava/jni/classpath/jnilink.h delete mode 100644 libjava/jni/classpath/primlib.c delete mode 100644 libjava/jni/classpath/primlib.h create mode 100644 libjava/testsuite/libjava.lang/bytearray.java create mode 100644 libjava/testsuite/libjava.lang/bytearray.out create mode 100644 libobjc/hash_compat.c create mode 100644 libstdc++-v3/include/tr1/bind_iterate.h create mode 100644 libstdc++-v3/include/tr1/bind_repeat.h create mode 100644 libstdc++-v3/include/tr1/boost_shared_ptr.h create mode 100644 libstdc++-v3/include/tr1/mu_iterate.h create mode 100644 libstdc++-v3/include/tr1/ref_fwd.h create mode 100644 libstdc++-v3/include/tr1/ref_wrap_iterate.h create mode 100644 libstdc++-v3/include/tr1/repeat.h create mode 100644 libstdc++-v3/include/tr1/tuple_iterate.h create mode 100644 libstdc++-v3/scripts/gen_bind_includers.pl create mode 100644 libstdc++-v3/scripts/gen_includers.pl create mode 100644 libstdc++-v3/testsuite/22_locale/num_put/put/char/20909.cc create mode 100644 libstdc++-v3/testsuite/22_locale/num_put/put/wchar_t/20909.cc create mode 100644 libstdc++-v3/testsuite/25_algorithms/iter_swap/20577.cc create mode 100644 libstdc++-v3/testsuite/tr1/3_function_objects/bind/all_bound.cc create mode 100644 libstdc++-v3/testsuite/tr1/3_function_objects/bind/nested.cc create mode 100644 libstdc++-v3/testsuite/tr1/3_function_objects/bind/placeholders.cc create mode 100644 libstdc++-v3/testsuite/tr1/3_function_objects/bind/ref.cc create mode 100644 libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/invoke.cc create mode 100644 libstdc++-v3/testsuite/tr1/3_function_objects/reference_wrapper/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/3_function_objects/result_of.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_union_or_class/is_union_or_class.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/composite_type_traits/is_union_or_class/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/is_base_of.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/relationships_between_types/is_base_of/typedefs.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/is_polymorphic.cc create mode 100644 libstdc++-v3/testsuite/tr1/4_metaprogramming/type_properties/is_polymorphic/typedefs.cc diff --git a/ChangeLog b/ChangeLog index ef2f14bb0c7..4b4eb0a8ee1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,43 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-20 Geoffrey Keating + + * configure.in (powerpc-*-darwin*): Add ${libgcj} to noconfigdirs. + * configure: Regenerated. + +2005-04-19 Paolo Bonzini + + * configure: Regenerate after change to config/acx.m4. + +2005-04-14 Joseph S. Myers + + * MAINTAINERS (Various Maintainers): Add self as i18n maintainer. + +2005-04-04 Thomas Koenig + + * MAINTAINERS (Write After Approval): Add myself. + +2005-03-25 Paolo Bonzini + + * configure.in (RPATH_ENVVAR): Set to DYLD_LIBRARY_PATH on Darwin. + * configure: Regenerate. + +2005-03-14 Feng Wang + + * MAINTAINERS (Write After Approval): Add myself. + +2005-03-03 David Ayers + + * MAINTAINERS (Write After Approval): Add myself. + +2005-03-01 Alexandre Oliva + + PR libgcj/20160 + * ltmain.sh: Avoid creating archives with components that have + duplicate basenames. + 2005-02-24 James A. Morrison * MAINTAINERS (Language Front Ends Maintainers): Add myself as diff --git a/MAINTAINERS b/MAINTAINERS index c4d42890472..2872a49a06a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -162,6 +162,7 @@ build status lists Janis Johnson janis187@us.ibm.com config.sub/config.guess Ben Elliston config-patches@gnu.org basic block reordering Jason Eckhardt jle@rice.edu i18n Philipp Thomas pthomas@suse.de +i18n Joseph Myers jsm@polyomino.org.uk diagnostic messages Gabriel Dos Reis gdr@integrable-solutions.net libiberty DJ Delorie dj@redhat.com libiberty Ian Lance Taylor ian@airs.com @@ -194,6 +195,7 @@ in changes outside of the parts of the compiler they maintain. Mark G. Adams mark.g.adams@sympatico.ca Matt Austern austern@apple.com +David Ayers d.ayers@inode.at Giovanni Bajo giovannibajo@gcc.gnu.org Scott Bambrough scottb@netwinder.org Wolfgang Bangerth bangerth@dealii.org @@ -217,6 +219,7 @@ Chandra Chavva cchavva@redhat.com William Cohen wcohen@redhat.com R. Kelley Cook kcook@gcc.gnu.org Christian Cornelssen ccorn@cs.tu-berlin.de +François-Xavier Coudert coudert@clipper.ens.fr David Daney ddaney@avtrex.com Bud Davis bdavis9659@comcast.net Chris Demetriou cgd@broadcom.com @@ -250,6 +253,7 @@ Mumit Khan khan@xraylith.wisc.edu Matthias Klose doko@debian.org Jeff Knaggs jknaggs@redhat.com Michael Koch konqueror@gmx.de +Thomas Koenig Thomas.Koenig@online.de Matt Kraai kraai@ftbfs.org Scott Robert Ladd scott.ladd@coyotegulch.com Razya Ladelsky razya@gcc.gnu.org @@ -308,6 +312,7 @@ Caroline Tice ctice@apple.com Michael Tiemann tiemann@redhat.com Jonathan Wakely redi@gcc.gnu.org Krister Walfridsson cato@df.lth.se +Feng Wang fengwang@nudt.edu.cn John Wehle john@feith.com Florian Weimer fw@deneb.enyo.de Mark Wielaard mark@gcc.gnu.org diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index 2194ad5863f..a5a7c90d4a9 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,20 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-12 Richard Henderson + + * include/private/gcconfig.h (alpha-linux): Use LINUX_STACKBOTTOM. + +2005-03-01 Kelley Cook + + * Makefile.in, include/Makefile.in: Regenerate. + +2005-02-26 Richard Earnshaw + + * dyn_load.c: On NetBSD, include machine/elf_machdep.h and define + ELFSIZE in terms of ARCH_ELFSIZE (back-ported from gc7.0alpha1). + 2005-02-15 Bryce McKinlay PR libgcj/19823 diff --git a/boehm-gc/Makefile.in b/boehm-gc/Makefile.in index a81e3d0b466..6f842205efe 100644 --- a/boehm-gc/Makefile.in +++ b/boehm-gc/Makefile.in @@ -77,7 +77,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno -CONFIG_HEADER = $(top_builddir)/include/gc_config.h +CONFIG_HEADER = $(top_builddir)/include/gc_config.h \ + $(top_builddir)/include/gc_ext_config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = @@ -100,7 +101,7 @@ am_gctest_OBJECTS = tests/test.$(OBJEXT) gctest_OBJECTS = $(am_gctest_OBJECTS) gctest_DEPENDENCIES = ./libgcjgc.la $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_builddir)/include depcomp = am__depfiles_maybe = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ diff --git a/boehm-gc/dyn_load.c b/boehm-gc/dyn_load.c index dfe0a3c87e8..c5139aa80a8 100644 --- a/boehm-gc/dyn_load.c +++ b/boehm-gc/dyn_load.c @@ -80,6 +80,11 @@ # define l_name lm_name #endif +#if defined(NETBSD) +# include +# define ELFSIZE ARCH_ELFSIZE +#endif + #if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \ (defined(FREEBSD) && defined(__ELF__)) || defined(DGUX) || \ (defined(NETBSD) && defined(__ELF__)) || defined(HURD) diff --git a/boehm-gc/include/Makefile.in b/boehm-gc/include/Makefile.in index 66aacac205a..4c823287b32 100644 --- a/boehm-gc/include/Makefile.in +++ b/boehm-gc/include/Makefile.in @@ -39,14 +39,15 @@ host_triplet = @host@ target_triplet = @target@ subdir = include DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/gc_config.h.in + $(srcdir)/Makefile.in $(srcdir)/gc_config.h.in \ + $(srcdir)/gc_ext_config.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/no-executables.m4 \ $(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) -CONFIG_HEADER = gc_config.h +CONFIG_HEADER = gc_config.h gc_ext_config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = @@ -179,7 +180,7 @@ AUTOMAKE_OPTIONS = foreign noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \ gc_pthread_redirects.h gc_cpp.h -all: gc_config.h +all: gc_config.h gc_ext_config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: @@ -227,8 +228,18 @@ $(srcdir)/gc_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) rm -f stamp-h1 touch $@ +gc_ext_config.h: stamp-h2 + @if test ! -f $@; then \ + rm -f stamp-h2; \ + $(MAKE) stamp-h2; \ + else :; fi + +stamp-h2: $(srcdir)/gc_ext_config.h.in $(top_builddir)/config.status + @rm -f stamp-h2 + cd $(top_builddir) && $(SHELL) ./config.status include/gc_ext_config.h + distclean-hdr: - -rm -f gc_config.h stamp-h1 + -rm -f gc_config.h stamp-h1 gc_ext_config.h stamp-h2 mostlyclean-libtool: -rm -f *.lo @@ -250,11 +261,11 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) mkid -fID $$unique tags: TAGS -TAGS: $(HEADERS) $(SOURCES) gc_config.h.in $(TAGS_DEPENDENCIES) \ +TAGS: $(HEADERS) $(SOURCES) gc_config.h.in gc_ext_config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) gc_config.h.in $(LISP) $(TAGS_FILES)'; \ + list='$(SOURCES) $(HEADERS) gc_config.h.in gc_ext_config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ @@ -266,11 +277,11 @@ TAGS: $(HEADERS) $(SOURCES) gc_config.h.in $(TAGS_DEPENDENCIES) \ $$tags $$unique; \ fi ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) gc_config.h.in $(TAGS_DEPENDENCIES) \ +CTAGS: $(HEADERS) $(SOURCES) gc_config.h.in gc_ext_config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ - list='$(SOURCES) $(HEADERS) gc_config.h.in $(LISP) $(TAGS_FILES)'; \ + list='$(SOURCES) $(HEADERS) gc_config.h.in gc_ext_config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ @@ -317,7 +328,7 @@ distdir: $(DISTFILES) done check-am: all-am check: check-am -all-am: Makefile $(HEADERS) gc_config.h +all-am: Makefile $(HEADERS) gc_config.h gc_ext_config.h installdirs: install: install-am install-exec: install-exec-am diff --git a/boehm-gc/include/private/gcconfig.h b/boehm-gc/include/private/gcconfig.h index 64cbde22c30..eeba4bc720b 100644 --- a/boehm-gc/include/private/gcconfig.h +++ b/boehm-gc/include/private/gcconfig.h @@ -1544,7 +1544,7 @@ # endif # ifdef LINUX # define OS_TYPE "LINUX" -# define STACKBOTTOM ((ptr_t) 0x120000000) +# define LINUX_STACKBOTTOM # ifdef __ELF__ # define SEARCH_FOR_DATA_START # define DYNAMIC_LOADING diff --git a/config/ChangeLog b/config/ChangeLog index c6885d131da..3c8c7ba6f61 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,11 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-16 Paolo Bonzini + + * acx.m4 (ACX_PROG_GNAT): Remove spurious break. + 2005-01-23 Joseph S. Myers * warnings.m4 (ACX_PROG_CC_WARNING_ALMOST_PEDANTIC): Don't do diff --git a/config/acx.m4 b/config/acx.m4 index d4a583dc67f..a7d425c7e29 100644 --- a/config/acx.m4 +++ b/config/acx.m4 @@ -207,7 +207,6 @@ acx_cv_cc_gcc_supports_ada=no errors=`(${CC} -c conftest.adb) 2>&1 || echo failure` if test x"$errors" = x && test -f conftest.$ac_objext; then acx_cv_cc_gcc_supports_ada=yes - break fi rm -f conftest.*]) diff --git a/configure b/configure index 85df544ed66..204dcf3f5f3 100755 --- a/configure +++ b/configure @@ -1155,7 +1155,7 @@ case "${target}" in noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" ;; powerpc-*-darwin*) - noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof" + noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof ${libgcj}" ;; *-*-darwin*) noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof" @@ -2138,7 +2138,6 @@ acx_cv_cc_gcc_supports_ada=no errors=`(${CC} -c conftest.adb) 2>&1 || echo failure` if test x"$errors" = x && test -f conftest.$ac_objext; then acx_cv_cc_gcc_supports_ada=yes - break fi rm -f conftest.* fi @@ -2152,7 +2151,7 @@ else fi echo $ac_n "checking how to compare bootstrapped objects""... $ac_c" 1>&6 -echo "configure:2156: checking how to compare bootstrapped objects" >&5 +echo "configure:2155: checking how to compare bootstrapped objects" >&5 if eval "test \"`echo '$''{'gcc_cv_prog_cmp_skip'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2250,9 +2249,9 @@ saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $gmpinc" # Check GMP actually works echo $ac_n "checking for correct version of gmp.h""... $ac_c" 1>&6 -echo "configure:2254: checking for correct version of gmp.h" >&5 +echo "configure:2253: checking for correct version of gmp.h" >&5 cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else @@ -2276,12 +2275,12 @@ rm -f conftest* if test x"$have_gmp" = xyes; then echo $ac_n "checking for MPFR""... $ac_c" 1>&6 -echo "configure:2280: checking for MPFR" >&5 +echo "configure:2279: checking for MPFR" >&5 saved_LIBS="$LIBS" LIBS="$LIBS $gmplibs" cat > conftest.$ac_ext < #include @@ -2289,7 +2288,7 @@ int main() { mpfr_t n; mpfr_init(n); ; return 0; } EOF -if { (eval echo configure:2293: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2292: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* echo "$ac_t""yes" 1>&6 else @@ -2776,7 +2775,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2780: checking for $ac_word" >&5 +echo "configure:2779: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_BISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2811,7 +2810,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2815: checking for $ac_word" >&5 +echo "configure:2814: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2846,7 +2845,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2850: checking for $ac_word" >&5 +echo "configure:2849: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_M4'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2881,7 +2880,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2885: checking for $ac_word" >&5 +echo "configure:2884: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_FLEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2916,7 +2915,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2920: checking for $ac_word" >&5 +echo "configure:2919: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_LEX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2951,7 +2950,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2955: checking for $ac_word" >&5 +echo "configure:2954: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CONFIGURED_MAKEINFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3072,6 +3071,7 @@ esac case "${host}" in *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;; + *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;; *) RPATH_ENVVAR=LD_LIBRARY_PATH ;; esac diff --git a/configure.in b/configure.in index 9ec9dc94201..0d0fd7a551f 100644 --- a/configure.in +++ b/configure.in @@ -364,7 +364,7 @@ case "${target}" in noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" ;; powerpc-*-darwin*) - noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof" + noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof ${libgcj}" ;; *-*-darwin*) noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes gdb gprof" @@ -1666,6 +1666,7 @@ esac case "${host}" in *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;; + *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;; *) RPATH_ENVVAR=LD_LIBRARY_PATH ;; esac diff --git a/contrib/ChangeLog b/contrib/ChangeLog index da4eae5166f..0fa90481100 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,37 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-17 Joseph S. Myers + + * gennews (files): Update for GCC 4.0. + +2005-03-21 Zack Weinberg + + Merge from mainline: + + 2005-03-18 Alexandre Oliva + + * gcc_update (silent): Unset instead of initializing to null. + + 2005-03-18 Andreas Schwab + + * gcc_update (apply_patch): Properly quote $1. + + 2005-03-18 Zack Weinberg + + * gcc_update: Add --silent option. + +2005-03-08 Kaveh R. Ghazi + + * warn_summary (keywordFilter): Update sed pattern for new quoting + style in warnings. + +2005-03-07 Kaveh R. Ghazi + + * warn_summary: Add -fortran subdir flag. + (subdirectoryFilter): Fix missing ada subdir. + 2004-11-20 Hans-Peter Nilsson * gcc_update (touch_files): Don't rely on "make" being GNU make; diff --git a/contrib/gcc_update b/contrib/gcc_update index 7e0e837e1af..cab6c47ec12 100755 --- a/contrib/gcc_update +++ b/contrib/gcc_update @@ -19,6 +19,9 @@ # If the first parameter is --list, a list of the generated files and # their dependencies will be printed; --help prints this message. # +# If the first parameter is --silent, this script prints nothing other +# than error messages; the second parameter is then interpreted as above. +# # Examples: # # contrib/gcc_update -r gcc_latest_snapshot @@ -29,7 +32,7 @@ # contrib/gcc_update --list # # -# (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation +# (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation # Originally by Gerald Pfeifer , August 1998. # # This script is Free Software, and it can be copied, distributed and @@ -51,6 +54,15 @@ UPDATE_OPTIONS=-Pd # Arrange for the value of $0 to be available for functions self=$0 +# This function prints its arguments to standard output unless +# "silent" is set. +unset silent +chat () { + if [ -z "$silent" ]; then + echo "$@" + fi +} + # This function prints a list of all generated files, along with their # dependencies. Note that only one target is supported per line: the # colon is stripped from the output. @@ -125,7 +137,7 @@ touch_files () { echo ':' >> Makefile.$$ echo ' @for f in $? $@; do test -f $$f || exit 0; done; \' >> Makefile.$$ echo ' echo Touching $@...; \' >> Makefile.$$ - echo ' echo Touching $@... 1>&2; \' >> Makefile.$$ + chat ' echo Touching $@... 1>&2; \' >> Makefile.$$ echo ' touch $@' >> Makefile.$$ files_and_dependencies | sed 's,[^ ]* ,,;s,$, :,' >> Makefile.$$ @@ -148,21 +160,21 @@ touch_files () { # this script. By re-execing it, we ensure that the appropriate # dependencies and rules will be used. touch_files_reexec () { - echo "Adjusting file timestamps" - exec ${CONFIG_SHELL-/bin/sh} $self --touch + chat "Adjusting file timestamps" + exec ${CONFIG_SHELL-/bin/sh} $self ${silent+"--silent"} --touch } # This functions applies a patch to an existing tree. apply_patch () { - if [ -f $1 ]; then + if [ -f "$1" ]; then echo "Applying patch file $1" - case "$1" in + case $1 in *gz) - gzip -d -c $1 | patch -p1 ;; + gzip -d -c "$1" | patch -p1 ;; *bz2) - bzip2 -d -c $1 | patch -p1 ;; + bzip2 -d -c "$1" | patch -p1 ;; *) - cat $1 | patch -p1 ;; + patch -p1 < "$1";; esac fi touch_files_reexec @@ -174,6 +186,13 @@ if [ ! -f gcc/version.c ]; then exit fi +case "$1" in +--silent) + silent=t + shift + ;; +esac + case "$1" in # First of all, check whether we are going to process a patch. --patch) @@ -228,8 +247,9 @@ else set -- $UPDATE_OPTIONS ${1+"$@"} fi -echo "Updating CVS tree" -$GCC_CVS -q update ${1+"$@"} +chat "Updating CVS tree" + +$GCC_CVS -q ${silent+-Q} update ${1+"$@"} if [ $? -ne 0 ]; then (touch_files_reexec) echo "CVS update of full tree failed." >&2 diff --git a/contrib/gennews b/contrib/gennews index 37eb659134b..14a76b22510 100755 --- a/contrib/gennews +++ b/contrib/gennews @@ -3,7 +3,7 @@ # Script to generate the NEWS file from online release notes. # Contributed by Joseph Myers . # -# Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. # This file is part of GCC. # # GCC is free software; you can redistribute it and/or modify @@ -22,7 +22,8 @@ # Boston, MA 02111-1307, USA. website=http://gcc.gnu.org/ -files="gcc-3.4/index.html gcc-3.4/changes.html +files="gcc-4.0/index.html gcc-4.0/changes.html + gcc-3.4/index.html gcc-3.4/changes.html gcc-3.3/index.html gcc-3.3/changes.html gcc-3.2/index.html gcc-3.2/changes.html gcc-3.1/index.html gcc-3.1/changes.html diff --git a/contrib/reghunt/ChangeLog b/contrib/reghunt/ChangeLog index 6e3c3e980fd..71afa5b4cff 100644 --- a/contrib/reghunt/ChangeLog +++ b/contrib/reghunt/ChangeLog @@ -1,3 +1,7 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + 2005-01-17 Kazu Hirata * reg_periodic, reg_search: Fix the uses of date command. diff --git a/contrib/regression/ChangeLog b/contrib/regression/ChangeLog index 23e1e287fd2..1faa7fc0c48 100644 --- a/contrib/regression/ChangeLog +++ b/contrib/regression/ChangeLog @@ -1,3 +1,7 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + 2004-11-07 James A. Morrison * README: Update website URL. diff --git a/contrib/warn_summary b/contrib/warn_summary index 10b4c0d7831..253d244c3dd 100755 --- a/contrib/warn_summary +++ b/contrib/warn_summary @@ -3,7 +3,7 @@ # This script parses the output of a gcc bootstrap when using warning # flags and determines various statistics. # -# usage: warn_summary [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc] +# usage: warn_summary [-llf] [-s stage] [-nosub|-ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc] # [-pass|-wpass] [file(s)] # # -llf @@ -19,8 +19,8 @@ # # -nosub # Only show warnings from the gcc top level directory. -# -ch|-cp|-f|-java|-ada|-intl|-fixinc -# Only show warnings from the specified language subdirectory. +# -ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc +# Only show warnings from the specified gcc subdirectory. # These override each other so only the last one passed takes effect. # # -pass @@ -57,7 +57,7 @@ subdirectoryFilter() else if test "$filter" = nosub ; then # Omit all subdirectories. - egrep -v '/gcc/(ch|cp|f|java|intl|fixinc)/' + egrep -v '/gcc/(ch|cp|f|fortran|java|ada|intl|fixinc)/' else # Pass through only subdir $filter. grep "/gcc/$filter/" @@ -107,7 +107,7 @@ keywordFilter() { s/`\(const\)'"'"'/"\1"/g; s/`\(noreturn\)'"'"'/"\1"/g; s/`\(longjmp\)'"'"' or `\(vfork\)'"'"'/"\1" or "\2"/g; - s/`'"[^']*'/"'`???'"'/g;"' + s/'"[\`'][^']*'/"'"???"/g; s/.*format, .* arg (arg [0-9][0-9]*)/??? format, ??? arg (arg ???)/; s/\([( ]\)arg [0-9][0-9]*\([) ]\)/\1arg ???\2/; s/"\([^"]*\)"/`\1'"'"'/g' @@ -132,7 +132,7 @@ s%^[^ ]*/\(lib[a-z23+-]*/\)%\1%;' # Start the main section. -usage="usage: `basename $0` [-llf] [-s stage] [-nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc] [-pass|-wpass] [file(s)]" +usage="usage: `basename $0` [-llf] [-s stage] [-nosub|-ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc] [-pass|-wpass] [file(s)]" stageN=3 tmpfile=/tmp/tmp-warn.$$ @@ -158,7 +158,7 @@ while test -n "$1" ; do -s) if test -z "$2"; then echo $usage 1>&2; exit 1; fi stageN="$2"; shift 2 ;; -s*) stageN="`expr $1 : '-s\(.*\)'`" ; shift ;; - -nosub|-ch|-cp|-f|-java|-ada|-intl|-fixinc) filter="`expr $1 : '-\(.*\)'`" ; shift ;; + -nosub|-ch|-cp|-f|-fortran|-java|-ada|-intl|-fixinc) filter="`expr $1 : '-\(.*\)'`" ; shift ;; -pass) pass=1 ; shift ;; -wpass) pass=w ; shift ;; -*) echo $usage 1>&2 ; exit 1 ;; diff --git a/fastjar/ChangeLog b/fastjar/ChangeLog index a429a6369cb..88da10f8b9e 100644 --- a/fastjar/ChangeLog +++ b/fastjar/ChangeLog @@ -1,3 +1,7 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + 2004-12-02 Richard Sandiford * configure.ac: Use TL_AC_GCC_VERSION to set gcc_version. diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index 03b55917f10..7f09f67a74c 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -1,3 +1,21 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-03-21 Richard Guenther + + PR target/20166 + * inclhack.def: Add fix for array of incomplete structures + in function prototype in pthread.h. + * fixincl.x: Regenerate. + * tests/base/pthread.h: Adjust. + +2005-03-15 Joseph S. Myers + + * inclhack.def (hpux_htonl): New fix. + * tests/base/netinet/in.h: New test. + * fixincl.x: Regenerate. + 2005-02-23 James E Wilson * Makefile.in (full-stamp, test-stamp, $(AF)): Add $(CFLAGS) to link. diff --git a/fixincludes/fixincl.x b/fixincludes/fixincl.x index 2eabf1f572e..f7d2ecc50c7 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 Friday November 26, 2004 at 09:59:26 PM UTC + * It has been AutoGen-ed Monday March 21, 2005 at 04:21:15 PM CET * From the definitions inclhack.def * and the template file fixincl */ -/* DO NOT CVS-MERGE THIS FILE, EITHER Fri Nov 26 21:59:26 UTC 2004 +/* DO NOT CVS-MERGE THIS FILE, EITHER Mon Mar 21 16:21:15 CET 2005 * * You must regenerate it. Use the ./genfixes script. * @@ -15,7 +15,7 @@ * certain ANSI-incompatible system header files which are fixed to work * correctly with ANSI C and placed in a directory that GNU C will search. * - * This file contains 177 fixup descriptions. + * This file contains 179 fixup descriptions. * * See README for more information. * @@ -2646,6 +2646,46 @@ static const char* apzHpux_Ctype_MacrosPatch[] = { "%1(int)%3", (char*)NULL }; +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Hpux_Htonl fix + */ +tSCC zHpux_HtonlName[] = + "hpux_htonl"; + +/* + * File name selection pattern + */ +tSCC zHpux_HtonlList[] = + "|netinet/in.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzHpux_HtonlMachs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zHpux_HtonlSelect0[] = + "#ifndef _XOPEN_SOURCE_EXTENDED\n\ +(/\\*\n\ + \\* Macros for number representation conversion\\.\n\ + \\*/\n\ +#ifndef ntohl)"; + +#define HPUX_HTONL_TEST_CT 1 +static tTestDesc aHpux_HtonlTests[] = { + { TT_EGREP, zHpux_HtonlSelect0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Hpux_Htonl + */ +static const char* apzHpux_HtonlPatch[] = { + "format", + "#if 1\n\ +%1", + (char*)NULL }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * Description of Hpux_Long_Double fix @@ -4141,6 +4181,42 @@ static const char* apzPthread_Page_SizePatch[] = { "extern %0", (char*)NULL }; +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Description of Pthread_Incomplete_Struct_Argument fix + */ +tSCC zPthread_Incomplete_Struct_ArgumentName[] = + "pthread_incomplete_struct_argument"; + +/* + * File name selection pattern + */ +tSCC zPthread_Incomplete_Struct_ArgumentList[] = + "|pthread.h|"; +/* + * Machine/OS name selection pattern + */ +#define apzPthread_Incomplete_Struct_ArgumentMachs (const char**)NULL + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zPthread_Incomplete_Struct_ArgumentSelect0[] = + "struct __jmp_buf_tag"; + +#define PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_TEST_CT 1 +static tTestDesc aPthread_Incomplete_Struct_ArgumentTests[] = { + { TT_EGREP, zPthread_Incomplete_Struct_ArgumentSelect0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Pthread_Incomplete_Struct_Argument + */ +static const char* apzPthread_Incomplete_Struct_ArgumentPatch[] = { + "format", + "%1 *%2%3", + "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) (__env)\\[1\\](.*)$", + (char*)NULL }; + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * Description of Read_Ret_Type fix @@ -7085,9 +7161,9 @@ static const char* apzX11_SprintfPatch[] = { * * List of all fixes */ -#define REGEX_COUNT 207 +#define REGEX_COUNT 209 #define MACH_LIST_SIZE_LIMIT 261 -#define FIX_COUNT 177 +#define FIX_COUNT 179 /* * Enumerate the fixes @@ -7156,6 +7232,7 @@ typedef enum { HPUX11_VSNPRINTF_FIXIDX, HPUX8_BOGUS_INLINES_FIXIDX, HPUX_CTYPE_MACROS_FIXIDX, + HPUX_HTONL_FIXIDX, HPUX_LONG_DOUBLE_FIXIDX, HPUX_SYSTIME_FIXIDX, INT_ABORT_FREE_AND_EXIT_FIXIDX, @@ -7195,6 +7272,7 @@ typedef enum { OSF_NAMESPACE_A_FIXIDX, OSF_NAMESPACE_C_FIXIDX, PTHREAD_PAGE_SIZE_FIXIDX, + PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_FIXIDX, READ_RET_TYPE_FIXIDX, RPC_XDR_LVALUE_CAST_A_FIXIDX, RPC_XDR_LVALUE_CAST_B_FIXIDX, @@ -7588,6 +7666,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = { HPUX_CTYPE_MACROS_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aHpux_Ctype_MacrosTests, apzHpux_Ctype_MacrosPatch, 0 }, + { zHpux_HtonlName, zHpux_HtonlList, + apzHpux_HtonlMachs, + HPUX_HTONL_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aHpux_HtonlTests, apzHpux_HtonlPatch, 0 }, + { zHpux_Long_DoubleName, zHpux_Long_DoubleList, apzHpux_Long_DoubleMachs, HPUX_LONG_DOUBLE_TEST_CT, FD_MACH_ONLY, @@ -7783,6 +7866,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = { PTHREAD_PAGE_SIZE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, aPthread_Page_SizeTests, apzPthread_Page_SizePatch, 0 }, + { zPthread_Incomplete_Struct_ArgumentName, zPthread_Incomplete_Struct_ArgumentList, + apzPthread_Incomplete_Struct_ArgumentMachs, + PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aPthread_Incomplete_Struct_ArgumentTests, apzPthread_Incomplete_Struct_ArgumentPatch, 0 }, + { zRead_Ret_TypeName, zRead_Ret_TypeList, apzRead_Ret_TypeMachs, READ_RET_TYPE_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, diff --git a/fixincludes/inclhack.def b/fixincludes/inclhack.def index 28dbd46533e..f55a9f05a05 100644 --- a/fixincludes/inclhack.def +++ b/fixincludes/inclhack.def @@ -1506,6 +1506,34 @@ fix = { }; +/* + * Fix hpux broken #ifndef _XOPEN_SOURCE_EXTENDED conditional on htonl etc. + */ +fix = { + hackname = hpux_htonl; + files = netinet/in.h; + select = "#ifndef _XOPEN_SOURCE_EXTENDED\n" + "(/\\*\n" + " \\* Macros for number representation conversion\\.\n" + " \\*/\n" + "#ifndef ntohl)"; + c_fix = format; + c_fix_arg = "#if 1\n%1"; + + test_text = "#ifndef _XOPEN_SOURCE_EXTENDED\n" + "/*\n" + " * Macros for number representation conversion.\n" + " */\n" + "#ifndef ntohl\n" + "#define ntohl(x) (x)\n" + "#define ntohs(x) (x)\n" + "#define htonl(x) (x)\n" + "#define htons(x) (x)\n" + "#endif\n" + "#endif /* ! _XOPEN_SOURCE_EXTENDED */"; +}; + + /* * HP-UX long_double */ @@ -2287,6 +2315,19 @@ fix = { test_text = "int __page_size;"; }; +/* + * On broken glibc-2.3.3 systems an array of incomplete structures is + * passed to __sigsetjmp. Fix that to take a pointer instead. + */ +fix = { + hackname = pthread_incomplete_struct_argument; + files = pthread.h; + select = "struct __jmp_buf_tag"; + c_fix = format; + c_fix_arg = "%1 *%2%3"; + c_fix_arg = "^(extern int __sigsetjmp \\(struct __jmp_buf_tag) (__env)\\[1\\](.*)$"; + test_text = "extern int __sigsetjmp (struct __jmp_buf_tag __env[1], int __savemask);"; +}; /* * On DYNIX/ptx, sys/mc_param.h has an embedded asm for the cpuid instruction diff --git a/fixincludes/tests/base/netinet/in.h b/fixincludes/tests/base/netinet/in.h new file mode 100644 index 00000000000..2d7f7b8522f --- /dev/null +++ b/fixincludes/tests/base/netinet/in.h @@ -0,0 +1,24 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/netinet/in.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( HPUX_HTONL_CHECK ) +#if 1 +/* + * Macros for number representation conversion. + */ +#ifndef ntohl +#define ntohl(x) (x) +#define ntohs(x) (x) +#define htonl(x) (x) +#define htons(x) (x) +#endif +#endif /* ! _XOPEN_SOURCE_EXTENDED */ +#endif /* HPUX_HTONL_CHECK */ diff --git a/fixincludes/tests/base/pthread.h b/fixincludes/tests/base/pthread.h index 767c6e2774b..9998f660c7c 100644 --- a/fixincludes/tests/base/pthread.h +++ b/fixincludes/tests/base/pthread.h @@ -61,6 +61,11 @@ extern int __page_size; #endif /* PTHREAD_PAGE_SIZE_CHECK */ +#if defined( PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_CHECK ) +extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask); +#endif /* PTHREAD_INCOMPLETE_STRUCT_ARGUMENT_CHECK */ + + #if defined( SOLARIS_MUTEX_INIT_1_CHECK ) #ident "@(#)pthread.h 1.16 97/05/05 SMI" #if __STDC__ - 0 == 0 && !defined(_NO_LONGLONG) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 36d0804bbd5..be70e1b2f59 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,1346 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-18 Jakub Jelinek + + PR middle-end/20991 + * tree-ssa-ccp.c (fold_stmt): Don't optimize OBJ_TYPE_REFs if that + would result in an already finalized unreachable node becoming + reachable while cgraph_global_info_ready. + +2005-04-19 Ben Elliston + + * doc/invoke.texi (Optimize Options): Refer to the correct + optimisation flag -ftree-dominator-opts, not -ftree-dom. + +2005-04-17 Daniel Berlin + + Fix PR tree-optimization/20490 + Fix PR tree-optimization/20929 + + * tree-ssa-pre.c (create_expression_by_pieces): Use + force_gimple_operand on result of fold, value number + gimple_operand result. + +2005-04-17 Joseph S. Myers + + Merge from mainline: + + 2005-02-28 Geert Bosch + + PR ada/15977 + * doc/contrib.texi: List contributors for Ada front end + + 2005-03-14 Geoffrey Keating + + * doc/cppopts.texi (-fexec-charset): Add concept index + entry. + (-fwide-exec-charset): Likewise. + (-finput-charset): Likewise. + + 2005-04-15 David Edelsohn + + * doc/install.texi (*-ibm-aix*): Add comment about system + limits. + +2005-04-17 Richard Sandiford + + * combine.c (combine_simplify_rtx): Remove a transformation that + relies on an invalid assumption about rtl sign-extension semantics. + +2005-04-17 Richard Henderson + + PR target/20375 + * config/alpha/alpha.c (alpha_setup_incoming_varargs): Advance a copy + of CUMULATIVE_ARGS past the last named argument. + (alpha_va_start): Expect pretend_args_size only if strictly less than + 6 named arguments. + * config/alpha/alpha.h (TARGET_FP, TARGET_FPREGS, TARGET_GAS, + TARGET_IEEE_CONFORMANT, TARGET_IEEE, TARGET_IEEE_WITH_INEXACT, + TARGET_BUILD_CONSTANTS, TARGET_FLOAT_VAX, TARGET_BWX, TARGET_MAX, + TARGET_FIX, TARGET_CIX, TARGET_EXPLICIT_RELOCS, TARGET_SMALL_DATA, + TARGET_TLS_KERNEL, TARGET_SMALL_TEXT, TARGET_LONG_DOUBLE_128, + TARGET_CPU_EV5, TARGET_CPU_EV6, TARGET_SUPPORT_ARCH): Booleanize. + +2005-04-17 Alexandre Oliva + + PR middle-end/20739 + * gimplify.c (gimplify_addr_expr): Compensate for removal of + e.g. cv-qualification conversions. + +2005-04-16 Gerald Pfeifer + + * doc/install.texi (Specific): Avoid using asterisks in @anchor + names related to target triplets. + Remove i?86-*-esix from platform directory. + Remove powerpc-*-eabiaix from platform directory. + +2005-04-16 Joseph S. Myers + + PR middle-end/20491 + * config/ia64/ia64.c (rtx_needs_barrier): Recurse instead of + falling through from SUBREG case to REG. + +2005-04-15 Dave Korn + + * gcc.c (default_compilers): Clarify obscure error message when + reading from standard input. + +2005-04-15 Rainer Orth + + * gthr-posix.c (pthread_cancel): Define. + (pthread_mutexattr_init): Likewise. + (pthread_mutexattr_settype): Likewise. + (pthread_mutexattr_destroy): Likewise. + +2005-04-15 Volker Reichelt + + * doc/invoke.texi: Fix typos. + * doc/md.texi: Likewise. + * doc/rtl.texi: Likewise. + * doc/sourcebuild.texi: Likewise. + * doc/tm.texi: Likewise. + +2005-04-15 Alexandre Oliva + + * tree-eh.c (lower_try_finally_copy): Generate new code in + response to goto_queue entries as if the queue was sorted by + index, not pointers. + (lower_try_finally_switch): Likewise. + +2005-04-15 Richard Sandiford + + * config/mips/mips.h (ASM_OUTPUT_CASE_LABEL): Delete. + (JUMP_TABLES_IN_TEXT_SECTION): Define. + * config/mips/mips.c (mips16_insn_length): Remove reference to + JUMP_TABLES_IN_TEXT_SECTION. + +2005-04-14 Joseph S. Myers + + * doc/cpp.texi, doc/install.texi: Change references to GCC 3.5 to + refer to 4.0. + +2005-04-14 Steve Ellcey + + PR target/20924 + * config/ia64/ia64.md (divsf3_internal_lat): Generate frcpa with + fpsr 0 instead of fpsr 1. + (divsf3_internal_thr): Ditto. + (divdf3_internal_lat): Ditto. + (divdf3_internal_thr): Ditto. + (divxf3_internal_lat): Ditto. + (divxf3_internal_thr): Ditto. + +2005-04-14 Ulrich Weigand + + PR target/20927 + * config/s390/s390-modes.def: Define TFmode. + +2005-04-14 Alexandre Oliva + Roger Sayle + + PR target/20126 + * loop.c (loop_givs_rescan): If replacement of DEST_ADDR failed, + signal that all GIVs couldn't be reduced. + +2005-04-12 Eric Botcazou + + * config/sparc/sparc.h (APPLY_RESULT_SIZE): Set to 24 in 64-bit mode. + * config/sparc/sparc.md (untyped_call): Save the registers manually. + + * config/sparc/sparc.c (legitimate_address_p): Use TARGET_ARCH32. + +2005-04-12 Ulrich Weigand + + PR middle-end/20917 + * config/s390/s390.md ("*set_tp"): Use SET in pattern. + ("set_tp_64", "set_tp_31"): Adapt expanded pattern. + +2005-04-09 Jakub Jelinek + + PR target/20795 + * config/i386/i386.c (construct_container): Pass empty aligned + struct, union or class in memory. + +2005-04-08 Ulrich Weigand + + Backport from mainline: + * config/s390/tpf.h (ASM_SPEC): Define. + +2005-04-07 Andreas Schwab + + Backport from mainline: + + 2005-04-03 Steven Bosscher + + PR middle-end/20648 + * bb-reorder.c (duplicate_computed_gotos): Do not unfactor + a computed goto if the edge to the computed goto block has + incoming abnormal edges. Clarify how the function works. + +2005-04-07 Joseph S. Myers + + PR target/20093 + * simplify-rtx.c (simplify_unary_operation): Check + SUBREG_PROMOTED_UNSIGNED_P (op) > 0 for zero-extension. + +2005-04-07 Eric Botcazou + + PR ada/18659 + PR ada/18819 + * doc/invoke.texi (Optimize Options): Document that + -ftree-sra is not automatically enabled for the Ada compiler. + +2005-04-06 Richard Sandiford + + * c.opt (-F): Remove trailing whitespace from help string. + (-finput-charset): Use a tab to separate the switch name and help + string. + * common.opt (-fsched-stalled-insns, -fsched-stalled-insns-dep) + (-ftree-vectorizer-verbose): Likewise. + +2005-04-06 Dale Johannesen + + * doc/invoke.texi (Optimization Options): Remove + duplicate -fcse-follow-jumps. Add -fweb. + (-ftree-lim): Fix spelling (-ftree-loop-im, invariants). + (-fivcanon): Fix spelling (-ftree-loop-ivcanon). + +2005-04-06 Joseph S. Myers + + * c-decl.c (finish_decl): Apply pending #pragma weak regardless of + scope. + +2005-04-06 Ranjit Mathew + + * doc/install.texi: Update the URL for Jacks. + * doc/sourcebuild.texi: Likewise. + +2005-04-06 Eric Botcazou + + PR target/17245 + * config/sparc/sparc.c (legitimate_address_p): Remove 'imm2'. + Revert 2004-10-08 patch. Reject TFmode LO_SUM in 32-bit mode. + +2005-04-05 Jakub Jelinek + + PR tree-optimization/20076 + * tree-inline.c (inline_forbidden_p_1): Prevent inlining functions + that call __builtin_return or __builtin_apply_args. + +2005-04-06 Uros Bizjak + + PR target/20421 + * config/i386/i386.md (frndintxf2_floor, frndintxf2_ceil) + (frndintxf2_trunc, frndintxf2_mask_pm): Add FLAGS_REG clobber. + Allocate local stack slots here. Set ix86_optimize_mode_switching. + flag here. Implement using define_insn_and_split. + (frndintxf2_floor_i387, frndintxf2_ceil_i387, frndintxf2_trunc_i387) + (frndintxf2_mask_pm_i387): New insn patterns. + (floorsf2, floordf2, floorxf2): Remove local stack slot allocations. + Do not set ix86_optimize_mode_switching flag. + (ceilsf2, ceildf2, ceilxf2): Same. + (btruncsf2, btruncdf2, btruncxf2): Same. + (nearbyintsf2, nearbyintdf2, nearbyintxf2): Same. + +2005-04-05 James E. Wilson + + PR target/20670 + * unwind-ia64.c (uw_intall_context): Add missing load of r27. + +2005-04-05 Thomas Fitzsimmons + + * doc/install.texi (Configuration): Document --with-java-home. + +2005-04-05 Dale Johannesen + + PR middle-end/19225 + * calls.c (expand_call): Flush pending deferrals before + throwing call. + +2005-04-06 Zdenek Dvorak + + PR target/20625 + * tree-ssa-loop-ivopts.c (generic_type_for): New function. + (add_candidate_1): Use generic_type_for instead of unsigned_type_for. + +2005-04-05 Roger Sayle + + * config/i386/i386.md (*truncdfsf2_i387_1): New pattern. + +2005-04-05 Ben Elliston + + * doc/invoke.texi (Optimize Options): Mention -ftree-lrs, not + -ftree-live_range_split. Perhaps renamed at some point? + +2005-04-05 Jason Merrill + + PR c++/19317 + * calls.c (expand_call): Disable return slot optimization. + +2005-04-05 Richard Henderson + + PR target/20342 + PR target/20447 + * config/i386/i386.c (print_operand): Handle vector zeros. + (ix86_split_to_parts): Handle CONST_VECTOR. + (ix86_hard_regno_mode_ok): Allow MMX modes in general regs. + (ix86_modes_tieable_p): Use ix86_hard_regno_mode_ok to decide + what modes to tie for MMX and SSE registers. + * config/i386/i386.h (MMX_REG_MODE_P): Remove. + * config/i386/i386.md: Extend move 0 -> xor peephole to apply + to vector modes as well. + * config/i386/predicates.md (const0_operand): Handle VOIDmode + properly as an input mode. + +2005-04-05 Hans-Peter Nilsson + + PR rtl-optimization/20527 + * combine.c (can_combine_p) [AUTO_INC_DEC]: When INSN has an + REG_INC note, test that the register also isn't mentioned in PRED + or SUCC. + +2005-04-05 Eric Botcazou + + * config/sparc/sparc.c (TARGET_ASM_FILE_END): Undefine before + overriding. + +2005-04-05 Olivier Hainque + + * config/mips/iris6.h (DWARF_FRAME_RETURN_COLUMN): Redefine to + match what the system unwinder expects. + * config/mips/mips.c (mips_frame_set): If we're saving the return + address register and the dwarf return address column number differs + from the hard register number, adjust the note reg to refer to the + former. + +2005-04-05 Eric Botcazou + Sebastian Pop + + PR tree-optimization/19903 + * tree-chrec.c (chrec_convert): Return chrec_dont_know for constants + that don't fit in their type after conversion. + +2005-04-04 Roger Sayle + Alexandre Oliva + + PR c++/19199 + * fold-const.c (non_lvalue): Split tests into... + (maybe_lvalue_p): New function. + (fold_cond_expr_with_comparison): Preserve lvalue-ness for the + C++ front-end prior to lowering into gimple form. + +2004-04-04 Richard Sandiford + + PR target/19537 + * Makefile.in (tree-ssa-loop-ivopts.o): Depend on langhooks.h. + * tree-ssa-loop-ivopts.c: Include langhooks.h. + (add_standard_iv_candidates_for_size): New function, extracting code + from add_standard_iv_candidates and parameterizing it by type size. + (add_standard_iv_candidates): Use add_standard_iv_candidates_for_size. + +2005-04-04 Eric Botcazou + + * doc/invoke.texi (SPARC options): Document that + -mlittle-endian is not supported on Linux either. + +2005-04-04 Eric Botcazou + + PR target/20446 + * config/sparc/sparc.h (NEED_INDICATE_EXEC_STACK): Define to 0. + * config/sparc/linux.h (TARGET_ASM_FILE_END): Delete. + (NEED_INDICATE_EXEC_STACK): Define to 1. + * config/sparc/linux64.h (TARGET_ASM_FILE_END): Delete. + (NEED_INDICATE_EXEC_STACK): Define to 1. + * config/sparc/sparc.c (TARGET_ASM_FILE_END): Set to sparc_file_end. + (add_pc_to_pic_symbol): Rename into pic_helper_symbol. + (add_pc_to_pic_symbol_name): Rename into pic_helper_symbol_name. + (pic_helper_emitted_p): New global. + (emit_pic_helper): New function extracted from... + (load_pic_register): ...here. Add 'delay_pic_helper' parameter. + Do not call emit_pic_helper if delay_pic_helper is true. + (sparc_expand_prologue): Pass 'false' to load_pic_register. + (sparc_output_mi_thunk): Pass 'true' to load_pic_register. + (sparc_file_end): New function. + +2005-04-04 Richard Henderson + Jakub Jelinek + + PR rtl-optimization/16104 + * fold-const.c (fold_unary): Fix folding of vector conversions. + +2005-04-04 Nathan Sidwell + + PR debug/20505 + * dwarf2out.c (tree_add_const_value_attribute): Only add if it's + an INTEGER_CST. + +2005-04-03 Gabriel Dos Reis + + PR c++/18644 + * doc/invoke.texi (-Wsynth): Don't document, as it now is void of + semantics. + +2005-04-02 Alexandre Oliva + + PR debug/19345 + * tree-inline.c (remap_type): Remap TYPE_STUB_DECL. + (remap_decl): Insert type decl in map earlier. + +2005-04-02 Alexandre Oliva + + PR tree-optimization/20640 + * tree-ssa-dce.c (remove_dead_stmt): Don't redirect edge to + post-dominator if it has phi nodes. + (eliminate_unnecessary_stmts): Remove dead phis in all blocks + before dead statements. + +2005-04-02 Alexandre Oliva + + PR middle-end/20491 + * final.c (alter_subreg): Don't call subreg_regno for a non-REG. + +2005-04-02 Alexandre Oliva + + PR rtl-optimization/20290 + * loop.c (for_each_insn_in_loop): Don't assume the loop body runs + in every iteration if the entry point is the exit test. + +2005-04-02 Geoffrey Keating + + * config/rs6000/t-darwin (TARGET_LIBGCC2_CFLAGS): Add -pipe. + * config/t-darwin (TARGET_LIBGCC2_CFLAGS): Likewise. + +2005-04-02 Geoffrey Keating + + * config/rs6000/t-darwin8: Comment out ppc64 multilib. + +2005-04-01 Richard Guenther + Jan Hubicka + Steven Bosscher + + * cgraphunit.c (cgraph_estimate_size_after_inlining): Compute + call cost based on argument sizes. + (cgraph_mark_inline_edge): Avoid inline unit from shrinking by + inlining. + * params.def: (max-inline-inssn-single): Set to 450. + (max-inline-insns-auto): Set to 90. + (max-inline-insns-recursive): Set to 450 + (max-inline-insns-recursive-auto): Set to 450. + (large-function-insns): Set to 2700. + (inline-call-cost): New parameter. + * tree-inline.c (estimate_move_cost): New function. + (estimate_num_insns_1): Compute move sizes costs by estimate_move_cost + for non-gimple-regs, set cost to 0 for gimple-regs. Compute call size + based on arguments. + * tree-inline.h (estimate_move_cost): Declare. + * invoke.texi: (max-inline-inssn-single): Change default to 450. + (max-inline-insns-auto): Change default to 90. + (max-inline-insns-recursive): Change default to 450 + (max-inline-insns-recursive-auto): Change default to 450. + (large-function-insns): Change default to 2700. + (inline-call-cost): Document new parameter. + +2005-04-01 Paul Brook + + * config/arm/arm.c (thumb_call_via_label): Include space for SP. + (arm_output_function_epilogue): Allow call_via_SP. + (thumb_call_via_reg, arm_file_end): Ditto. + * config/arm/arm.h (struct machine_function): Include space for SP. + (thumb_call_via_label): Update declaration. + +2005-04-01 Joseph S. Myers + + * c-decl.c (validate_proto_after_old_defn): Look at + TYPE_MAIN_VARIANT of argument types. + +2005-04-01 Jan Hubicka + + PR middle-end/20635 + * varasm.c (mark_decl_referenced): Do not mark extern inline functions + as needed. + +2005-04-01 Paolo Bonzini + + PR middle-end/19454 + PR rtl-optimization/20600 + + * combine.c (gen_binary): Remove. + (known_cond, simplify_shift_const, find_split_point, + combine_simplify_rtx, simplify_if_then_else, simplify_set, + simplify_logical, expand_field_assignment, extract_left_shift, + force_to_mode, if_then_else_cond, apply_distributive_law, + simplify_and_const_int, simplify_shift_const, gen_lowpart_for_combine, + simplify_comparison, reversed_comparison): Replace with + simplify_gen_binary, simplify_gen_relational or + distribute_and_simplify_rtx. + (distribute_and_simplify_rtx): New function. + + * config/i386/i386.c (ix86_decompose_address): Look inside SUBREGs + to fix addresses involving EBP and ESP. + (aligned_operand, legitimate_address_p, ix86_address_cost): Be prepared + for SUBREGed registers. + (legitimate_address_p): Accept SUBREGed registers. + +2005-04-01 Jakub Jelinek + + PR c++/19406 + * dwarf2out.c (gen_type_die_for_member): Handle FIELD_DECL. + (dwarf2out_imported_module_or_decl): Use gen_type_die_for_member + for FIELD_DECLs. + +2005-04-01 Kazu Hirata + + * doc/contrib.texi, doc/invoke.texi, doc/tm.texi: Fix typos. + +2005-04-01 Joseph S. Myers + + PR c/17855 + * gimplify.c (gimplify_expr): Create a temporary for lvalue + COND_EXPR and CALL_EXPR. + +2005-03-31 Kazu Hirata + + * doc/tree-ssa.texi: Fix a typo. + +2005-03-31 Olivier Hainque + + * dwarf2out.c (dwarf2out_frame_finish): Honor DWARF2_FRAME_INFO + defined and non-zero. + +2005-03-31 Alan Modra + + PR target/20611 + * config/rs6000/rs6000.md (load_toc_v4_PIC_1b): Remove inline + label operand. Remove (use (unspec..)). Don't emit a label on + the offset word. + * config/rs6000/rs6000.c (rs6000_legitimize_tls_address): Don't + generate inline label for load_toc_v4_PIC_1b. + (rs6000_emit_load_toc_table): Likewise. + +2005-03-31 Kazu Hirata + + * config.gcc: Obsolete i860-*-sysv4*, ip2k-*-elf, + ns32k-*-netbsdelf*, and ns32k-*-netbsd*. + +2005-03-31 Alan Modra + + * config.gcc (cpu_is_64bit): Set for 64-bit powerpc cpus. + (powerpc64-*-linux*): Use it. Rearrange tm_file assignment. + (powerpc-*-linux*): Build a biarch compiler when --enable-targets + is given with "powerpc64*" or "all", or when --with-cpu chooses + a 64-bit cpu. + +2005-03-30 Richard Henderson + + * cgraph.h (struct cgraph_node): Add alias. + * varasm.c (assemble_alias): Set it. + * cgraphunit.c (cgraph_assemble_pending_functions): Check it and + avoid calling cgraph_expand_function. + +2005-03-30 Joseph S. Myers + + PR c/772 + PR c/17913 + * c-tree.h (C_DECL_UNJUMPABLE_STMT_EXPR, + C_DECL_UNDEFINABLE_STMT_EXPR, struct c_label_list, struct + c_label_context, label_context_stack): New. + * c-decl.c (define_label): Check for jumps into statement + expressions. Add label to list of defined labels. + (start_function): Push context on label_context_stack. + (finish_function): Pop context from label_context_stack. + * c-typeck.c (label_context_stack): New. + (c_finish_goto_label): Check for jumps into statement + expressions. Add label to list of jumped to labels. + (struct c_switch): Add blocked_stmt_expr. + (c_start_case): Initialize it. + (do_case): Check it. + (c_finish_case): Verify !blocked_stmt_expr. + (c_begin_stmt_expr): Push context on label_context_stack. + Increment blocked_stmt_expr. Mark labels jumped to from outside + as undefinable. + (c_finish_stmt_expr): December blocked_stmt_expr. Mark labels + defined in the statement expression and no longer jumpable to. + Mark labels jumped to from just outside the statement expression + as again definable. Pop context from label_context_stack. + * doc/extend.texi (Statement Exprs): Update. + +2005-03-30 Joseph S. Myers + + PR c/20368 + * c-decl.c (start_function): Check for old_decl being + error_mark_node. + +2005-03-30 Mostafa Hagog + + PR middle-end/20177 + * ddg.c (create_ddg_dependence): Ignore reg-anti dependency. + * modulo-sched.c (const_iteration_count): Return on NULL + pre-header. + (print_node_sched_params): Return on NULL dump_file. + (generate_reg_moves): Handle reg-anti dependencies and disregard + closing branch when generating register moves. + (sms_schedule): Mark the SMSed block dirty. + * passes.c (rest_of_handle_sms): Call update_life_info for all + basic-blocks. + * testsuite/gcc.dg/20050321-1.c: New test. + * testsuite/gcc.dg/20050330-1.c: New test. + +2005-03-30 Sebastian Pop + + * tree-scalar-evolution.c (instantiate_parameters_1): Return + as soon as a chrec_dont_know is detected. + +2005-03-30 Alan Modra + + * doc/install.texi: Update binutils requirement for powerpc*-linux. + +2005-03-30 Alan Modra + + PR target/20203 + * builtins.c (get_memory_rtx): Expand address exp using EXPAND_NORMAL. + Remove convert_memory_address call duplicating that in memory_address. + +2005-03-29 Alexandre Oliva + + PR rtl-optimization/20532 + * simplify-rtx.c (simplify_binary_operation): Protect from + overflow when adding coefficients for PLUS or MINUS. Handle + CONST_DOUBLE exact power of two as multiplier. + +2005-03-29 Richard Henderson + + PR c/20519 + * c-decl.c (c_finish_incomplete_decl): Update complete_array_type call. + (build_compound_literal): Likewise. Propagate decl type into the + initializer. + (finish_decl): Likewise. Use new return value from complete_array_type + for zero sized arrays. + (complete_array_type): Move ... + * c-common.c (complete_array_type): ... here. Change first argument + to pointer-to-type-node. Consistently use sizetype for the index + except for zero sized arrays. Detect zero sized arrays for pedantic + mode diagnostics. Create a new type node instead of modifying the + old node in place. + * c-tree.h (complete_array_type): Move decl ... + * c-common.h (complete_array_type): ... here. + +2005-03-29 Richard Henderson + + PR tree-opt/19108 + * tree-sra.c (generate_element_init_1): Handle RANGE_EXPR. + +2005-03-29 Jakub Jelinek + + PR middle-end/20622 + * cgraph.h (struct cgraph_varpool_node): Add alias field. + * cgraph.c (cgraph_varpool_assemble_pending_decls): Don't call + assemble_variable on aliases. + * varasm.c (assemble_alias): Set node->alias. + * toplev.c (wrapup_global_declarations): Don't call + rest_of_decl_compilation on aliases again. + +2005-03-29 Eric Botcazou + + PR middle-end/20263 + * varasm.c (make_decl_rtl) [ASM_DECLARE_REGISTER_GLOBAL]: Use + the DECL_NAME, not the DECL_ASSEMBLER_NAME. + +2005-03-24 Geoffrey Keating + + * c.opt (fvisibility-inlines-hidden): Allow for ObjC++. + + * config/i386/darwin.h (TARGET_SUBTARGET_DEFAULT): Add + MASK_128BIT_LONG_DOUBLE, MASK_ALIGN_DOUBLE. + +2005-03-25 John David Anglin + + PR target/15491 + * vax.c (vax_rtx_costs_1): Merge with vax_rtx_costs. + (vax_rtx_costs): Return false when passed unsupported rtx's. Handle + FLOAT_EXTEND, FLOAT_TRUNCATE and TRUNCATE. Fix costs for POST_INC, + PRE_DEC, NEG and NOT. + +2005-03-25 Zdenek Dvorak + + PR rtl-optimization/20249 + * cse.c (insert_regs): Do not record equivalence of registers in + different modes. + +2005-03-24 James E Wilson + + * doc/install.texi (--enable-altivec): Delete docs. + +2005-03-24 J"orn Rennecke + + Band aid for PR target/20617: + * config/sh/lib1funcs.asm (FUNC, ALIAS): Add .hidden directive. + +2005-03-23 Daniel Berlin + + Fix PR tree-optimization/20601 + + * tree-ssa-pre.c (insert_aux): Add missing condition to + constification. + +2005-03-22 James E Wilson + + PR c++/19769 + * dwarf2out.c (declare_in_namespace): Ignore decls with an abstract + origin. + +2005-03-22 Daniel Berlin + + * c-opts.c (c_common_parse_file): Only start/end main source file + if debug hooks says the writer wants it. + * dbxout.c (dbx_debug_hooks): Add start_end_main_source_file + member. + (xcoff_debug_hooks): Ditto. + * debug.c (do_nothing_hooks): Ditto. + * debug.h (gcc_debug_hooks): Ditto. + * dwarf2out.c (dwarf2_debug_hooks): Ditto. + * sdbout.c (sdb_debug_hooks): Ditto. + * vmsdbgout.c (vmsdbg_debug_hooks): Ditto. + +2005-03-22 Mark Mitchell + + * doc/extend.texi: Deprecate C++ min/max operators. + +2005-03-22 Jakub Jelinek + + PR target/20561 + * cfglayout.c (reemit_insn_block_notes): Don't put block notes in + between jump table and its label. + * final.c (shorten_branches): Handle notes in between ADDR_VEC + resp. ADDR_DIFF_VEC and the label preceeding it. + (final_scan_insn): Likewise. Ensure ADDR_VEC resp. ADDR_DIFF_VEC + is emitted in the right section. + +2005-03-21 Roger Sayle + + PR middle-end/20539 + * fold-const.c (fold_binary): Fix type mismatch between + TRUTH_{AND,OR,XOR}_EXPR nodes an their operands' types. + (fold_binary) : Avoid calling invert_truthvalue + for non-truth-valued expressions. + + * c-common.c (c_common_truthvalue_conversion): Handle ERROR_MARK + and FUNCTION_DECL in the main switch. + : When changing the result type of these tree nodes, + we also need to convert their operands to match. + : Likewise. + +2005-03-21 Roger Sayle + + PR middle-end/20557 + * bb-reorder.c (duplicate_computed_gotos): Use can_duplicate_block_p + to determine whether a block can be duplicated, rather than test + whether the block contains noncopyable insns ourselves. + +2005-03-21 Richard Guenther + + * tree-ssa-loop.c (gate_tree_complete_unroll): Run complete + unrolling if -fpeel-loops is specified, too. + * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): + Remove superfluous check for flag_unroll_loops. + +2005-03-21 Nathan Sidwell + + PR other/20564 + * gcov.c (output_lines): Only output function block summary when + outputting branch information. + * doc/gcov.texi: Document format of preamble and additional block + information lines. + +2005-03-21 Richard Sandiford + + * libgcc2.h (LIBGCC2_HAS_SF_MODE): New macro. + (LIBGCC2_HAS_DF_MODE, LIBGCC2_HAS_TF_MODE, LIBGCC2_HAS_XF_MODE): Make + the defaults false if BITS_PER_UNIT != 8. + (SFtype, SCtype, __fixsfdi, __floatdisf, __fixunssfSI, __fixunssfDI) + (__powisf2, __divsc3, __mulsc3): Guard with LIBGCC2_HAS_SF_MODE rather + than BITS_PER_UNIT != 8. + (L_fixdfdi, L_fixsfdi, L_fixtfdi, L_fixunsdfdi, L_fixunsdfsi) + (L_fixunssfdi, L_fixunssfsi, L_fixunstfdi, L_fixunsxfdi, L_fixunsxfsi) + (L_fixxfdi, L_floatdidf, L_floatdisf, L_floatditf, L_floatdixf): Remove + #undefs. + * libgcc2.c (__fixunssfDI, __fixsfdi, __floatdisf, __fixunssfSI) + (__powisf2, __divsc3, __mulsc3): Guard with LIBGCC2_HAS_SF_MODE. + +2005-03-20 Marek Michalkiewicz + + PR target/18551 + * config/avr/avr.c (avr_output_function_prologue): Do not use + current_function_name() in a label, use a local label instead. + +2005-03-08 Dorit Naishlos + Ira Rosen + + PR tree-optimization/20474 + * tree-vect-analyze.c (vect_analyze_pointer_ref_access): Check the + size_type of the relevant pointer. Check for COMPLETE_TYPE_P. + +2005-03-20 Joseph S. Myers + + * c-decl.c (check_bitfield_type_and_width): Require bit-field + width to have integer type. + (build_enumerator): Require enumerator value to have integer type. + +2005-03-19 Joseph S. Myers + + * doc/extend.texi (__builtin_inf): Move statement about INFINITY + to __builtin_inff. + +2005-03-19 Joseph S. Myers + + * c.opt (ansi, std=iso9899:1990, std=iso9899:1999, + std=iso9899:199x): Correct descriptions. + +2005-03-19 Joseph S. Myers + + * config.gcc: Consistently use solaris2.1[0-9]* instead of + solaris2.1[0-9]. + +2005-03-19 John David Anglin + + PR middle-end/20493 + * fold-const.c (fold_widened_comparison): Don't optimize casts of + function pointers on targets that require function pointer + canonicalization. + (fold_sign_changed_comparison): Likewise. + +2005-03-19 Andy Hutchinson + + PR target/18251 + * config/avr/avr.md (movmemhi): Rewrite as RTL loop. + (*movmemqi_insn): Delete. + (*movmemhi): Delete. + +2005-03-18 Jan Hubicka + + PR middle-end/20225 + * cgraph.c (cgraph_mark_reachable_node): Assert that it is not called + too late. + * varasm.c (find_decl_and_mark_needed): Mark needed only when not + called too late. + +2005-03-18 Ralf Corsepius + + * config/i386/t-rtems-i386 (MULTILIBS): Remove k6, athlon, + mno-fp-ret-in-387 multilib variants. + +2005-03-17 H.J. Lu + + PR target/18380 + * config/ia64/unwind-ia64.c (_Unwind_FindTableEntry): Removed. + +2005-03-17 Richard Henderson + + * doc/extend.texi (Weak Pragmas): New section. + (attribute alias): Clarify that target must be in the same + translation unit. + +2005-03-16 James E. Wilson + + * config/ia64/ia64.c (issue_nops_and_insn): Check first_insn attribute, + and return without creating new state if before_nops_num is nonzero. + * config/ia64/ia64.md (first_insn): New attribute. + (alloc): Set it to yes. + +2005-03-16 Richard Henderson + + PR middle-end/15700 + * varasm.c (struct alias_pair): Rename from struct output_def_pair. + (alias_pairs): Rename from output_defs. + (find_decl_and_mark_needed): Split out from assemble_alias. + (do_assemble_alias): New. + (assemble_output_def): Remove. + (finish_aliases_1, finish_aliases_2): New. + (process_pending_assemble_output_defs): Remove. + (assemble_alias): Defer aliases for which we don't yet have a + non-external decl for the target symbol. + * passes.c (rest_of_decl_compilation): Register variables with cgraph. + * cgraphunit.c (cgraph_finalize_compilation_unit): Use finish_aliases_1. + * toplev.c (compile_file): Use finish_aliases_2 instead of + process_pending_assemble_output_defs. + * tree.h (finish_aliases_1, finish_aliases_2): Declare. + (process_pending_assemble_output_defs): Remove. + +2005-03-16 Andrew Pinski + + * config/i386/emmintrin.h (_mm_extract_epi16): Correct the number + of closing parenthesis. + +2005-03-16 Roger Sayle + + PR tree-optimization/17454 + * tree.c (tree_size): Add case for TREE_BINFO. + * fold-const.c (fold_checksum_tree): Only clear the overloaded + field TYPE_CACHED_VALUES if TYPE_CACHED_VALUES_P is set. + +2005-03-15 Eric Christopher + + * config/mips/mips.h (DWARF_CIE_DATA_ALIGNMENT): Change for + STACK_GROWS_DOWNWARD. + +2005-03-15 Daniel Jacobowitz + + * config/arm/arm.h (CONDITIONAL_REGISTER_USAGE): Don't clear + call_used_regs for wCG registers. + +2005-03-15 Ulrich Weigand + + * config/s390/s390.c (s390_secondary_output_reload_class): Adapt check + for non-offsettable memory references to cope with outstanding reload + replacements, take 2. + +2005-03-14 Alexandre Oliva + + PR c++/20280 + * gimplify.c (gimplify_cond_expr): Add fallback argument. Use a + temporary variable of pointer type if an lvalues is required. + (gimplify_modify_expr_rhs): Request an rvalue from it. + (gimplify_expr): Pass fallback on. + +2005-03-14 Alexandre Oliva + + PR middle-end/18628 + * cse.c (fold_rtx_mem): Don't fold a load from a jumptable into a + register. + +2005-03-14 Richard Sandiford + + * doc/invoke.texi: Document new MIPS -msym32 and -mno-sym32 options. + * config/mips/mips.h (MASK_SYM32, TARGET_SYM32): New macros. + (TARGET_SWITCHES): Add -msym32 and -mno-sym32. + (ABI_HAS_64BIT_SYMBOLS): Set to false if TARGET_SYM32. + (ASM_SPEC): Pass down -msym32 and -mno-sym32. + +2005-03-14 Richard Sandiford + + * config/mips/mips.h (mips_fix_vr4130_string): Declare. + (TARGET_FIX_VR4130): New macro. + (TARGET_OPTIONS): Add -mfix-vr4130. + (ISA_HAS_MACCHI): New macro. + (ASM_SPEC): Add -mfix-vr4130. + * config/mips/mips.c (mips_fix_vr4130_string): New variable. + (override_options): Handle mips_fix_vr4130_string. + (mips_avoid_hazards): Clear all_noreorder_p + if we're working around VR4130 errata and the macc alternatives + are not available. + * config/mips/mips.md (mfhilo_): Turn into a define_expand. + (*mfhilo_, *mfhilo__macc): New insns. + * config/mips/vr.h (DEFAULT_VR_ARCH): Set to mfix-vr4130. + (MULTILIB_DEFAULTS): Remove leading "march=". + (DRIVER_SELF_SPECS): Likewise. Make -mfix-vr4130 imply -march=vr4130 + if no architecture option is given. + * config/mips/t-vr (MULTILIB_OPTIONS): Use -mfix-vr4130 for the + VR4130 multilibs. + (MULTILIB_MATCHES): Map -march=vr4130 to the -mfix-vr4130 multilibs. + * doc/invoke.texi: Document -mfix-vr4130. + +2005-03-13 Roger Sayle + + PR middle-end/19331 + * tree.c (get_unwidened): Treat CONVERT_EXPR and NOP_EXPR identically. + * fold-const.c (fold_sign_changed_comparison): Likewise. + (fold_binary): Optimize comparisons against widened operands if + the extension is represented by a CONVERT_EXPR, same as a NOP_EXPR. + +2005-03-14 Alan Modra + + * config.gcc: Remove excess indentation. + (powerpc*-*-*, rs6000-*-*): Accept --with-cpu/tune power5 and 8548. + +2005-03-13 Marek Michalkiewicz + + PR target/20288 + * config/avr/avr.c (print_operand): Add 'p' and 'r'. + (out_movhi_r_mr): Read low byte of volatile MEM first. + (out_movhi_mr_r): Write high byte of volatile MEM first. + +2005-03-11 David Edelsohn + + PR rtl-optimization/20306 + * expr.c (emit_move_complex): Set try_int false if mode is + MODE_COMPLEX_FLOAT and mov_optab exists for inner mode. Only try + emit_block_move if try_int is true. + +2005-03-11 Richard Henderson + + PR target/20415 + * config/i386/mmx.md (vec_dupv4hi): Fix predicate. + * config/i386/i386.c (ix86_expand_vector_init_duplicate): Update + to match. + +2005-03-11 Richard Sandiford + + * config/mips/mips.c (override_options): Only warn about -mint64 + deprecation if TARGET_INT64. + +2005-03-10 Andrew Pinski + + PR rtl-opt/20412 + * simplify-rtx.c (simplify_relational_operation_1): Fix typo - check the + correct mode. + +2005-03-10 Jakub Jelinek + + PR target/20322 + * combine.c (try_combine): If recog_for_combine added CLOBBERs + to NEWI2PAT, fail to combine if they are used by NEWPAT. + +2005-03-10 Aldy Hernandez + + * doc/invoke.texi: Add 8540 to list of cpus in rs6000 cpu section. + +2005-03-10 Bob Wilson + + * config/xtensa/xtensa.h (MEMBER_TYPE_FORCES_BLK): Define. + +2005-03-10 Nathan Sidwell + + PR c++/20375 + * function.c (struct assign_parm_data_one): Remove last_named + field. + (assign_parm_find_data_types): Don't determine last_named. + Reorder named_parm determination. + (assign_parms): Only setup varargs on the last non-varadic + parameter. + +2005-03-10 Jakub Jelinek + + PR inline-asm/20314 + * gimplify.c (gimplify_asm_expr): Handle input/output constraints + with multiple alternatives. + + * stmt.c (parse_output_constraint): Fix a typo. + +2005-03-09 Ulrich Weigand + + * config/s390/s390.c (s390_secondary_output_reload_class): Adapt check + for non-offsettable memory references to cope with outstanding reload + replacements. + * config/s390/s390.md ("reload_outti"): Call find_replacement to + avoid losing outstanding address reloads. + ("reload_outdi", "reload_outdf"): Likewise. + +2005-03-08 Ira Rosen + + PR tree-optimization/20122 + * tree-vect-analyze.c (vect_object_analysis): Analyze initial + condition of access function instead of base. + +2005-03-07 Aldy Hernandez + + * config/rs6000/rs6000-protos.h: Rename output_e500_flip_eq_bit to + output_e500_flip_gt_bit. + + * config/rs6000/rs6000.c (print_operand): case D: Print out bit 31 + as bit 31. + (rs6000_generate_compare): Fix logic to look at the correct bits. + (output_e500_flip_eq_bit): Rename to output_e500_flip_gt_bit. + Look at GT bit. + (rs6000_emit_sCOND): Rename gen_e500_flip_eq_bit to + gen_e500_flip_gt_bit. Rename gen_move_from_CR_eq_bit to + gen_move_from_CR_gt_bit. + + * config/rs6000/rs6000.md ("move_from_CR_eq_bit"): Change bit + ("move_from_CR_eq_bit"): Rename to move_from_CR_gt_bit. + (UNSPEC_MV_CR_EQ): Rename to UNSPEC_MV_CR_GT. + + * config/rs6000/spe.md ("e500_cr_ior_compare"): New. + (E500_CR_IOR_COMPARE): New constant. + +2005-03-08 Earl Chew + David Billinghurst + + * config/i386/host-cygwin.c: New file to support precompiled + headers on cygwin + * config/i386/x-cygwin: Use host-cygwin.c on cygwin host + * config.host: Use above files for cygwin host. + +2005-03-07 Richard Sandiford + + PR rtl-optimization/19683 + * reload1.c (choose_reload_regs): Pass the number of bits, not the + number of bytes, to smallest_int_for_mode. Fix arguments to + REG_CANNOT_CHANGE_MODE_P. + +2005-03-07 David Billinghurst + + * config/i386/cygwin1.c(mingw_scan): Use xstrdup in calls to putenv. + +2005-03-07 Joseph S. Myers + + * config/ia64/hpux.h (LINK_SPEC): Add -z. + * config/ia64/ia64.c (ia64_function_value): Return a REG not a + PARALLEL for an empty structure. + +2005-03-05 James A. Morrison + + * doc/c-tree.texi: Wrap comments in @r{}. + * doc/cpp.texi: Likewise. + * doc/cppinternals.texi: Likewise. + * doc/extend.texi: Likewise. + * doc/md.texi: Likewise. + * doc/objc.texi: Likewise. + * doc/sourcebuild.texi: Likewise. + * doc/tm.texi: Likewise. + * doc/tree-ssa.texi + +2005-03-04 Devang Patel + + PR tree-optimization/18815 + * tree-if-conv.c (combine_blocks): Adjust loop header edges for + loops with zero exit edges. + +2005-03-05 Joseph S. Myers + + * config.gcc (hppa*64*-*-hpux11*): Use pa/pa-hpux1111.h for + *-*-hpux11.[1-9]*, not just for *-*-hpux11.11. + +2005-03-05 John David Anglin + Joseph S. Myers + + PR c++/19797 + * pa/elf.h, pa64-hpux.h, som.h (ASM_OUTPUT_EXTERNAL_REAL): Define. + (ASM_OUTPUT_EXTERNAL): Call pa_hpux_asm_output_external. + * pa-protos.h (pa_hpux_asm_output_external): Add prototype. + * pa.c (get_plabel): Change argument to symbol_ref. Call + maybe_get_identifier instead of get_identifier. + (pa_hpux_asm_output_external, pa_hpux_file_end): New functions. + (struct deferred_plabel): Replace name field with symbol field. + (TARGET_ASM_FILE_END): Define as pa_hpux_file_end if + ASM_OUTPUT_EXTERNAL_REAL is defined. + (output_global_address): Use output_addr_const for output of all + symbol_refs. + (output_deferred_plabels): Use symbol_ref instead of name for address + output. + * pa.h (SYMBOL_FLAG_REFERENCED, SYMBOL_REF_REFERENCED_P, + ASM_OUTPUT_SYMBOL_REF): New macros. + * som.h (ASM_OUTPUT_EXTERNAL_LIBCALL): Use assemble_name_raw. Update + comment. + (ASM_WEAKEN_LABEL): Use targetm.asm_out.globalize_label to globalize + label. + +2005-03-04 Andrew Haley + + * unwind-dw2-fde-glibc.c (struct + unw_eh_callback_data.check_cache): + (frame_hdr_cache): New. + (_Unwind_IteratePhdrCallback): Add ext_dl_phdr_info. + Cache frame header info. + +2005-03-04 Daniel Jacobowitz + + 2005-03-02 Daniel Jacobowitz + * config/arm/linux-elf.h (ARM_FUNCTION_PROFILER): Do not use (PLT) + for Thumb. + * config/arm/netbsd-elf.h (ARM_FUNCTION_PROFILER): Likewise. + +2005-03-04 Daniel Berlin + + Fix PR debug/20253 + + * c-opts.c (c_common_parse_file): Call start_source_file + and end_source_file at the approriate times. + + * dwarf2out.c (dwarf2out_finish): Don't auto-end + the main file, it will be done for us now. + +2005-03-03 Alan Modra + + PR target/20277 + * config/rs6000/rs6000.c (rs6000_override_options): Don't allow + -mcpu to override any other explicitly given flags. + +2005-03-02 Mark Mitchell + + PR c++/19916 + * varasm.c (initializer_constant_valid_p): Allow conversions + between OFFSET_TYPEs. Tidy. + +2005-03-02 Geoffrey Keating + + * config/darwin8.h (LIB_SPEC): Switch -lmx and -lSystem. + +2005-03-02 Richard Guenther + + * cgraph.h (struct cgraph_edge): Add prev_caller and + prev_callee fields. + (cgraph_node_remove_callees): Export. + * cgraph.c (cgraph_create_edge): Initialize prev_caller + and prev_callee. + (cgraph_edge_remove_callee): New function. + (cgraph_edge_remove_caller): Likewise. + (cgraph_remove_edge): Use. + (cgraph_redirect_edge_callee): Likewise. + (cgraph_node_remove_callees): New function. + (cgraph_node_remove_callers): Likewise. + (cgraph_remove_node): Use. + * tree-optimize.c (tree_rest_of_compilation): Use + cgraph_node_remove_callees instead of manual loop. + * cgraphunit.c (cgraph_finalize_function): Likewise. + (cgraph_expand_function): Likewise. + (cgraph_remove_unreachable_nodes): Likewise. + +2005-03-01 Roger Sayle + + PR tree-optimization/20216 + * tree-chrec.c (tree_fold_factorial): Delete. + (tree_fold_binomial): Change argument list to take a return type + and change the type of K to unsigned int. Rewrite to avoid explicit + evaluation of factorials, and (recursively) calling fold to perform + compile-time arithmetic. Return NULL on (internal) overflow. + (chrec_evaluate): Change type of K to an unsigned int. Avoid + calling tree_fold_binomial unnecessarily. Return chrec_dont_know + if any intermediate calculation overflows. + (chrec_apply): Update call to chrec_evaluate. + +2005-03-01 Hans-Peter Nilsson + + PR target/19065. + * config/cris/cris.h (EXTRA_CONSTRAINT_Q): Accept only (mem (reg)), + not including (reg). Do not check for reg being CRIS_PC_REGNUM. + (EXTRA_MEMORY_CONSTRAINT): Define as 'Q'. + * config/cris/cris.md: Tweak comments referring to Q. + ("cmpsi", "cmphi", "cmpqi", "*movsi_internal", "movhi") + ("movstricthi", "movqi", "movstrictqi", "movsf", "addsi3") + ("addhi3", "addqi3", "subsi3", "subhi3", "subqi3") + ("*expanded_andsi", "*expanded_andhi", "*andhi_lowpart", "andqi3") + ("*andqi_lowpart", "iorsi3", "iorhi3", "iorqi3", "uminsi3"): + Insert spaces in constraints to align alternatives vertically for + readability. + ("cmphi"): Ditto. Add separate alternative for operand 0 "r", + operand 1: "M". + +2005-02-28 Dale Johannesen + Stan Shebs + + Rewrite of 64-bit Darwin structure-by-value pass/return. + * config/rs6000/rs6000.h (CUMULATIVE_ARGS): New fields + intoffset, use_stack, named. + * config/rs6000/rs6000.c (rs6000_darwin64_function_arg): Remove. + (rs6000_darwin64_record_arg_advance_flush): New. + (rs6000_darwin64_record_arg_advance_recurse): New. + (rs6000_darwin64_record_arg_flush): New. + (rs6000_darwin64_record_arg_recurse): New. + (rs6000_darwin64_record_arg): New. + (rs6000_return_in_memory): Remove AGGREGATE_TYPE_P check. + (function_arg_boundary): Handle 128-bit aligned structs. + (function_arg_advance): Rewrite darwin64 struct handling. + (function_arg): Call rs6000_darwin64_record_arg. + (function_arg_partial_nregs): Handle darwin64 structs. + (rs6000_darwin64_function_value): Remove. + (rs6000_function_value): Call rs6000_darwin64_record_arg. + +2005-02-28 John David Anglin + + PR target/19819 + * pa.h (GO_IF_LEGITIMATE_ADDRESS): Allow allow hard registers during + and after reload in REG+REG indexed addresses without REG_POINTER + set in the base and not set in the index. + +2005-02-28 Roger Sayle + + PR middle-end/19874 + * tree-ssa.c (tree_ssa_useless_type_conversion_1): A conversion + between different machine modes is never a "useless" conversion. + +2005-02-27 Zack Weinberg + + * config/alpha/t-osf4, config/arm/t-netbsd, config/ia64/t-hpux + * config/pa/t-hpux-shlib (SHLIB_INSTALL): Create the + installation directory first. + +2005-02-27 John David Anglin + + PR rtl-optimization/17728 + * pa.md (mulsi3, divsi3, udivsi3, modsi3): Change predicate for + operand 0 from general_operand to move_dest_operand. + +2005-02-26 John David Anglin + + * pa/elf.h, pa/som.h (ASM_OUTPUT_EXTERNAL): Use assemble_name_raw + instead of trying to save and restore TREE_SYMBOL_REFERENCED. + * pa/pa64-hpux.h (ASM_OUTPUT_TYPE_DIRECTIVE): Define. + (ASM_OUTPUT_EXTERNAL): Don't save and restore TREE_SYMBOL_REFERENCED. + +2005-02-26 Andrew Pinski + + PR tree-opt/20188 + * tree-ssa-alias.c (count_uses_and_derefs): If we have TREE_LIST + for the lhs, also walk over the tree. Likewise for rhs. + +2005-02-26 Joseph S. Myers + + * doc/invoke.texi, doc/standards.texi: Refer to + gcc-4.0/c99status.html. + +2005-02-26 Paolo Carlini + + * doc/extend.texi (5.24 Declaring Attributes of Functions): + Clarify that the alternative way doesn't work in GNU C++. + +2005-02-25 Steve Ellcey + + PR target/19930 + * doc/tm.texi (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Document. + (LIBGCC2_HAS_DF_MODE): New. + (LIBGCC2_HAS_XF_MODE): New. + (LIBGCC2_HAS_TF_MODE): New. + * libgcc2.h (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE. + (LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE. + * libgcc2.c (LIBGCC2_HAS_XF_MODE): New name for HAVE_XFMODE. + (LIBGCC2_HAS_TF_MODE): New name for HAVE_TFMODE. + (LIBGCC2_HAS_DF_MODE): New name for HAVE_DFMODE. + * config/ia64/t-ia64 (LIB1ASMFUNCS): Remove __compat + and add _fixtfdi, _fixunstfdi, _floatditf + * lib1funcs.asm: Remove L__compat. Add L_fixtfdi, + L_fixunstfdi, L_floatditf. + * config/ia64/hpux.h (LIBGCC2_HAS_XF_MODE): Define. + (LIBGCC2_HAS_TF_MODE): Define. + +2005-02-25 Diego Novillo + + PR tree-optimization/20204 + * tree-into-ssa.c (insert_phi_nodes_for): Do not use + REWRITE_THIS_STMT markers on PHI nodes. + (rewrite_initialize_block): Likewise. + +2005-02-25 Mark Mitchell + + * version.c (version_string): Mark as prerelease. + * doc/include/gcc-common.texi (DEVELOPMENT): @clear it. + * configure.ac (is_release): Set to 1. + * configure: Regenerated. + +2005-02-25 Zdenek Dvorak + + PR tree-optimization/19937 + * tree-ssa-loop-ivopts.c (rewrite_use_compare): Cast the final value + to the type of the induction variable. + +2005-02-25 Kaz Kojima + + PR rtl-optimization/20117 + * bb-reorder.c (duplicate_computed_gotos): Don't duplicate + the block including noncopyable insn. + +2005-02-24 Kazu Hirata + + * cse.c (delete_trivially_dead_insns): Speed up by minimizing + calls to find_reg_note. + +2005-02-24 Richard Henderson + + PR tree-opt/20127 + * tree-sra.c (instantiate_element): Copy TREE_THIS_VOLATILE from + the type. + 2005-02-24 Fariborz Jahanian * config/rs6000/rs6000.c (rs6000_legitimize_reload_address): Check for @@ -177,9 +1520,9 @@ 2005-02-22 Devang Patel PR 19952 - * tree-if-conv.c (process_phi_nodes): Use bsi_after_labels and skip + * tree-if-conv.c (process_phi_nodes): Use bsi_after_labels and skip all labels - + 2005-02-22 David Edelsohn * config/rs6000/aix.h (WINT_TYPE): Define. @@ -225,7 +1568,7 @@ numbering at LAST_VIRTUAL_REGISTER+1 to avoid possibly using hard registers in unsupported ways. * expmed.c (init_expmed): Likewise. - + 2005-02-21 Stan Cox * config/iq2000/iq2000.h (DWARF_FRAME_RETURN_COLUMN): Change to 31. diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 93c33992c23..ac4e047cc35 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -1721,7 +1721,7 @@ tree-ssa-loop-ivopts.o : tree-ssa-loop-ivopts.c $(TREE_FLOW_H) $(CONFIG_H) \ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) varray.h $(EXPR_H) \ output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \ tree-pass.h $(GGC_H) $(RECOG_H) insn-config.h $(HASHTAB_H) $(SCEV_H) \ - cfgloop.h $(PARAMS_H) sbitmap.h + cfgloop.h $(PARAMS_H) sbitmap.h langhooks.h tree-ssa-loop-manip.o : tree-ssa-loop-manip.c $(TREE_FLOW_H) $(CONFIG_H) \ $(SYSTEM_H) $(RTL_H) $(TREE_H) $(TM_P_H) $(CFGLOOP_H) \ output.h diagnostic.h $(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) \ diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a1bab757948..8d0924e2403 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,132 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-07 Laurent GUERBY + John David Anglin + + * Makefile.in: Add make ifeq define for hppa linux tasking support. + * system-hpux.ads: Define Signed_Zeros to be True. + * system-linux-hppa.ads, s-osinte-linux-hppa.ads: New files. + +2005-04-07 Eric Botcazou + + PR ada/18659 + PR ada/18819 + * misc.c (tree_sra_requested): New global. + (gnat_init_options): Detect -ftree-sra. + (gnat_post_options): Enable Tree-SRA only if specifically requested. + +2005-04-04 Eric Botcazou + + PR ada/19956 + Backport from mainline: + + 2005-03-29 Richard Kenner + * utils.c (finish_record_type): Use variable_size when setting sizes. + +2005-03-17 Eric Botcazou + + PR ada/20255 + Backport from mainline: + + 2005-03-15 Eric Botcazou + * utils.c (convert) : Accept slight type variations when + converting to an unchecked union type. + +2005-03-17 Eric Botcazou + + PR ada/18727 + Backport from mainline: + + 2005-03-15 Richard Kenner + * exp_ch13.adb (Expand_N_Freeze_Entity): If Freeze_Type returns True, + replace the N_Freeze_Entity with a null statement. + * exp_ch3.adb (Freeze_Type): Now a function that returns True if + the N_Freeze_Entity is to be deleted. + * exp_ch3.ads (Freeze_Type): Now a function that returns Boolean. + * freeze.adb (Undelay_Type): New Subprogram. + (Set_Small_Size): Pass T, the type to modify; all callers changed. + (Freeze_Entity, Freeze_Record_Type): Change the way we handle types + within records; allow them to have freeze nodes if their base types + aren't frozen yet. + * sem_ch3.adb (Constrain_Access, Constrain_Array): Allow itypes to be + delayed. + * gigi.h (gnat_to_gnu_field_decl): New decl. + * decl.c (gnat_to_gnu_entity, case E_Array_Subtype): Call + copy_alias_set. + (gnat_to_gnu_field_decl): New function. + (substitution_list, annotate_rep): Call it. + (gnat_to_gnu_entity, case E_Record_Subtype): Likewise. + (gnat_to_gnu_entity, case E_Record_Type): Likewise. + No longer update discriminants to not be a COMPONENT_REF. + (copy_alias_set): Strip padding from input type; also handle + unconstrained arrays properly. + * trans.c (gnat_to_gnu, case N_Selected_Component): Call + gnat_to_gnu_field_decl. + (assoc_to_constructor): Likewise. + +2005-03-17 Eric Botcazou + + PR ada/19408 + PR ada/19900 + Backport from mainline: + + 2005-03-15 Richard Kenner + * exp_util.adb (Remove_Side_Effects): Properly test for + Expansion_Delayed and handle case when it's inside an + N_Qualified_Expression. + * decl.c (gnat_to_gnu_entity, case E_Component): Always look at + Original_Record_Component if Present and not the entity. + (gnat_to_gnu_entity, case E_Record_Subtype): Rework handling of subtype + of tagged extension types by not making field for components that are + inside the parent. + * trans.c (gnat_to_gnu, case N_Aggregate): Verify that + Expansion_Delayed is False. + (assoc_to_constructor): Ignore fields that have a + Corresponding_Discriminant. + +2005-03-17 Eric Botcazou + + PR ada/19140 + Backport from mainline: + + 2005-03-15 Eric Botcazou + * decl.c (gnat_to_gnu_entity) : Do not convert again the + expression to the type of the object when the object is constant. + * trans.c (gnat_to_gnu) : Restructure. Set + gnu_result to NULL_TREE on entry. If the function returns "by + target", dereference the target pointer using the type of the + actual return value. + : Be prepared for a null gnu_result. + * utils2.c (build_binary_op): Fix typo. + +2005-03-17 Eric Botcazou + + PR ada/20344 + Backport from mainline: + + 2005-03-15 Eric Botcazou + * lang.opt: Fix specification of -fRTS=. + * misc.c (gnat_handle_option): Accept OPT_fRTS_, not OPT_fRTS. + +2005-03-15 Jakub Jelinek + + * Make-lang.in (ada/treeprs.ads, ada/einfo.h, ada/sinfo.h, + ada/nmake.adb, ada/nmake.ads): Use unique subdirectories of + ada/bldtools to avoid make -jN failures. + +2005-03-08 Laurent Guerby + + * system-linux-sparc.ads: Fix typo in previous commit. + +2005-03-07 James A. Morrison + Laurent Guerby + + PR ada/20035 + * system-linux-sparc.ads: New. + * Makefile.in: Add sparc linux entry. + 2005-02-13 Andrew Pinski PR ada/19942 diff --git a/gcc/ada/Make-lang.in b/gcc/ada/Make-lang.in index 220b3563a29..030c82f406d 100644 --- a/gcc/ada/Make-lang.in +++ b/gcc/ada/Make-lang.in @@ -878,29 +878,29 @@ ada/b_gnatb.c : $(GNATBIND_OBJS) ada/gnatbind.o ada/interfac.o ada/b_gnatb.o : ada/b_gnatb.c ada/treeprs.ads : ada/treeprs.adt ada/sinfo.ads ada/xtreeprs.adb - -$(MKDIR) ada/bldtools - $(CP) $^ ada/bldtools - (cd ada/bldtools; gnatmake -q xtreeprs ; ./xtreeprs ../treeprs.ads ) + -$(MKDIR) ada/bldtools/treeprs + $(CP) $^ ada/bldtools/treeprs + (cd ada/bldtools/treeprs; gnatmake -q xtreeprs ; ./xtreeprs ../../treeprs.ads ) ada/einfo.h : ada/einfo.ads ada/einfo.adb ada/xeinfo.adb - -$(MKDIR) ada/bldtools - $(CP) $^ ada/bldtools - (cd ada/bldtools; gnatmake -q xeinfo ; ./xeinfo ../einfo.h ) + -$(MKDIR) ada/bldtools/einfo + $(CP) $^ ada/bldtools/einfo + (cd ada/bldtools/einfo; gnatmake -q xeinfo ; ./xeinfo ../../einfo.h ) ada/sinfo.h : ada/sinfo.ads ada/xsinfo.adb - -$(MKDIR) ada/bldtools - $(CP) $^ ada/bldtools - (cd ada/bldtools; gnatmake -q xsinfo ; ./xsinfo ../sinfo.h ) + -$(MKDIR) ada/bldtools/sinfo + $(CP) $^ ada/bldtools/sinfo + (cd ada/bldtools/sinfo; gnatmake -q xsinfo ; ./xsinfo ../../sinfo.h ) ada/nmake.adb : ada/sinfo.ads ada/nmake.adt ada/xnmake.adb - -$(MKDIR) ada/bldtools - $(CP) $^ ada/bldtools - (cd ada/bldtools; gnatmake -q xnmake ; ./xnmake -b ../nmake.adb ) + -$(MKDIR) ada/bldtools/nmake_b + $(CP) $^ ada/bldtools/nmake_b + (cd ada/bldtools/nmake_b; gnatmake -q xnmake ; ./xnmake -b ../../nmake.adb ) ada/nmake.ads : ada/sinfo.ads ada/nmake.adt ada/xnmake.adb ada/nmake.adb - -$(MKDIR) ada/bldtools - $(CP) $^ ada/bldtools - (cd ada/bldtools; gnatmake -q xnmake ; ./xnmake -s ../nmake.ads ) + -$(MKDIR) ada/bldtools/nmake_s + $(CP) $^ ada/bldtools/nmake_s + (cd ada/bldtools/nmake_s; gnatmake -q xnmake ; ./xnmake -s ../../nmake.ads ) update-sources : ada/treeprs.ads ada/einfo.h ada/sinfo.h ada/nmake.adb \ ada/nmake.ads diff --git a/gcc/ada/Makefile.in b/gcc/ada/Makefile.in index 1e6e5350f3d..91c8b65b2b4 100644 --- a/gcc/ada/Makefile.in +++ b/gcc/ada/Makefile.in @@ -1341,6 +1341,56 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(arch) $(osys))),) LIBRARY_VERSION := $(LIB_VERSION) endif +ifeq ($(strip $(filter-out sparc% linux%,$(arch) $(osys))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads - return; + return False; end Freeze_Type; ------------------------- diff --git a/gcc/ada/exp_ch3.ads b/gcc/ada/exp_ch3.ads index 59f8ef71008..fcb7c9375ad 100644 --- a/gcc/ada/exp_ch3.ads +++ b/gcc/ada/exp_ch3.ads @@ -82,9 +82,13 @@ package Exp_Ch3 is -- initialization call corresponds to a default initialized component -- of an aggregate. - procedure Freeze_Type (N : Node_Id); - -- This procedure executes the freezing actions associated with the given - -- freeze type node N. + function Freeze_Type (N : Node_Id) return Boolean; + -- This function executes the freezing actions associated with the given + -- freeze type node N and returns True if the node is to be deleted. + -- We delete the node if it is present just for front end purpose and + -- we don't want Gigi to see the node. This function can't delete the + -- node itself since it would confuse any remaining processing of the + -- freeze node. function Needs_Simple_Initialization (T : Entity_Id) return Boolean; -- Certain types need initialization even though there is no specific diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 162b939f125..051c0c86a41 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -29,6 +29,7 @@ with Checks; use Checks; with Einfo; use Einfo; with Elists; use Elists; with Errout; use Errout; +with Exp_Aggr; use Exp_Aggr; with Exp_Ch7; use Exp_Ch7; with Exp_Ch11; use Exp_Ch11; with Exp_Tss; use Exp_Tss; @@ -3706,8 +3707,14 @@ package body Exp_Util is New_Exp := Make_Reference (Loc, E); end if; - if Nkind (E) = N_Aggregate and then Expansion_Delayed (E) then - Set_Expansion_Delayed (E, False); + if Is_Delayed_Aggregate (E) then + if Nkind (E) = N_Qualified_Expression then + Set_Expansion_Delayed (Expression (E), False); + Set_Analyzed (Expression (E), False); + else + Set_Expansion_Delayed (E, False); + end if; + Set_Analyzed (E, False); end if; diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index e49ec85e4c6..b0e1565758b 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2004, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2005, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -164,6 +164,11 @@ package body Freeze is -- needed -- see body for details). Never has any effect on T if the -- Debug_Info_Off flag is set. + procedure Undelay_Type (T : Entity_Id); + -- T is a type of a component that we know to be an Itype. + -- We don't want this to have a Freeze_Node, so ensure it doesn't. + -- Do the same for any Full_View or Corresponding_Record_Type. + procedure Warn_Overlay (Expr : Node_Id; Typ : Entity_Id; @@ -506,9 +511,9 @@ package body Freeze is procedure Check_Compile_Time_Size (T : Entity_Id) is - procedure Set_Small_Size (S : Uint); + procedure Set_Small_Size (T : Entity_Id; S : Uint); -- Sets the compile time known size (32 bits or less) in the Esize - -- field, checking for a size clause that was given which attempts + -- field, of T checking for a size clause that was given which attempts -- to give a smaller size. function Size_Known (T : Entity_Id) return Boolean; @@ -525,7 +530,7 @@ package body Freeze is -- Set_Small_Size -- -------------------- - procedure Set_Small_Size (S : Uint) is + procedure Set_Small_Size (T : Entity_Id; S : Uint) is begin if S > 32 then return; @@ -576,7 +581,8 @@ package body Freeze is elsif Is_Array_Type (T) then if Ekind (T) = E_String_Literal_Subtype then - Set_Small_Size (Component_Size (T) * String_Literal_Length (T)); + Set_Small_Size (T, Component_Size (T) + * String_Literal_Length (T)); return True; elsif not Is_Constrained (T) then @@ -632,7 +638,7 @@ package body Freeze is Next_Index (Index); end loop; - Set_Small_Size (Esiz); + Set_Small_Size (T, Esiz); return True; end; @@ -864,7 +870,7 @@ package body Freeze is end loop; if Packed_Size_Known then - Set_Small_Size (Packed_Size); + Set_Small_Size (T, Packed_Size); end if; return True; @@ -1365,6 +1371,7 @@ package body Freeze is ------------------- function Freeze_Entity (E : Entity_Id; Loc : Source_Ptr) return List_Id is + Test_E : Entity_Id := E; Comp : Entity_Id; F_Node : Node_Id; Result : List_Id; @@ -1460,6 +1467,7 @@ package body Freeze is IR : Node_Id; Junk : Boolean; ADC : Node_Id; + Prev : Entity_Id; Unplaced_Component : Boolean := False; -- Set True if we find at least one component with no component @@ -1537,80 +1545,14 @@ package body Freeze is end if; end if; - -- Freeze components and embedded subtypes + -- Freeze components and embedded subtypes. Comp := First_Entity (Rec); - while Present (Comp) loop - if not Is_Type (Comp) then - Freeze_And_Append (Etype (Comp), Loc, Result); - end if; + Prev := Empty; - -- If the component is an access type with an allocator - -- as default value, the designated type will be frozen - -- by the corresponding expression in init_proc. In order - -- to place the freeze node for the designated type before - -- that for the current record type, freeze it now. - - -- Same process if the component is an array of access types, - -- initialized with an aggregate. If the designated type is - -- private, it cannot contain allocators, and it is premature - -- to freeze the type, so we check for this as well. - - if Is_Access_Type (Etype (Comp)) - and then Present (Parent (Comp)) - and then Present (Expression (Parent (Comp))) - and then Nkind (Expression (Parent (Comp))) = N_Allocator - then - declare - Alloc : constant Node_Id := Expression (Parent (Comp)); - - begin - -- If component is pointer to a classwide type, freeze - -- the specific type in the expression being allocated. - -- The expression may be a subtype indication, in which - -- case freeze the subtype mark. - - if Is_Class_Wide_Type (Designated_Type (Etype (Comp))) then - if Is_Entity_Name (Expression (Alloc)) then - Freeze_And_Append - (Entity (Expression (Alloc)), Loc, Result); - elsif - Nkind (Expression (Alloc)) = N_Subtype_Indication - then - Freeze_And_Append - (Entity (Subtype_Mark (Expression (Alloc))), - Loc, Result); - end if; - - elsif Is_Itype (Designated_Type (Etype (Comp))) then - Check_Itype (Designated_Type (Etype (Comp))); - - else - Freeze_And_Append - (Designated_Type (Etype (Comp)), Loc, Result); - end if; - end; - - elsif Is_Access_Type (Etype (Comp)) - and then Is_Itype (Designated_Type (Etype (Comp))) - then - Check_Itype (Designated_Type (Etype (Comp))); - - elsif Is_Array_Type (Etype (Comp)) - and then Is_Access_Type (Component_Type (Etype (Comp))) - and then Present (Parent (Comp)) - and then Nkind (Parent (Comp)) = N_Component_Declaration - and then Present (Expression (Parent (Comp))) - and then Nkind (Expression (Parent (Comp))) = N_Aggregate - and then Is_Fully_Defined - (Designated_Type (Component_Type (Etype (Comp)))) - then - Freeze_And_Append - (Designated_Type - (Component_Type (Etype (Comp))), Loc, Result); - end if; + while Present (Comp) loop - -- Processing for real components (exclude anonymous subtypes) + -- First handle the (real) component case. if Ekind (Comp) = E_Component or else Ekind (Comp) = E_Discriminant @@ -1619,6 +1561,22 @@ package body Freeze is CC : constant Node_Id := Component_Clause (Comp); begin + -- Freezing a record type freezes the type of each of its + -- components. However, if the type of the component is + -- part of this record, we do not want or need a separate + -- Freeze_Node. Note that Is_Itype is wrong because that's + -- also set in private type cases. We also can't check + -- for the Scope being exactly Rec because of private types + -- and record extensions. + if Is_Itype (Etype (Comp)) + and then Is_Record_Type (Underlying_Type + (Scope (Etype (Comp)))) + then + Undelay_Type (Etype (Comp)); + end if; + + Freeze_And_Append (Etype (Comp), Loc, Result); + -- Check for error of component clause given for variable -- sized type. We have to delay this test till this point, -- since the component type has to be frozen for us to know @@ -1779,6 +1737,133 @@ package body Freeze is end; end if; + -- If the component is an Itype with Delayed_Freeze and is + -- either a record or array subtype and its base type has not + -- yet been frozen, we must remove this from the entity list + -- of this record and put it on the entity list of the scope of + -- its base type. Note that we know that this is not the type + -- of a component since we cleared Has_Delayed_Freeze for it + -- in the previous loop. Thus this must be the Designated_Type + -- of an access type, which is the type of a component. + if Is_Itype (Comp) + and then Is_Type (Scope (Comp)) + and then Is_Composite_Type (Comp) + and then Base_Type (Comp) /= Comp + and then Has_Delayed_Freeze (Comp) + and then not Is_Frozen (Base_Type (Comp)) + then + declare + Will_Be_Frozen : Boolean := False; + S : Entity_Id := Scope (Rec); + + begin + -- We have a pretty bad kludge here. Suppose Rec is a + -- subtype being defined in a subprogram that's created + -- as part of the freezing of Rec'Base. In that case, + -- we know that Comp'Base must have already been frozen by + -- the time we get to elaborate this because Gigi doesn't + -- elaborate any bodies until it has elaborated all of the + -- declarative part. But Is_Frozen will not be set at this + -- point because we are processing code in lexical order. + + -- We detect this case by going up the Scope chain of + -- Rec and seeing if we have a subprogram scope before + -- reaching the top of the scope chain or that of Comp'Base. + -- If we do, then mark that Comp'Base will actually be + -- frozen. If so, we merely undelay it. + while Present (S) loop + if Is_Subprogram (S) then + Will_Be_Frozen := True; + exit; + elsif S = Scope (Base_Type (Comp)) then + exit; + end if; + + S := Scope (S); + end loop; + + if Will_Be_Frozen then + Undelay_Type (Comp); + else + if Present (Prev) then + Set_Next_Entity (Prev, Next_Entity (Comp)); + else + Set_First_Entity (Rec, Next_Entity (Comp)); + end if; + + -- Insert in entity list of scope of base type (which + -- must be an enclosing scope, because still unfrozen). + + Append_Entity (Comp, Scope (Base_Type (Comp))); + end if; + end; + + -- If the component is an access type with an allocator + -- as default value, the designated type will be frozen + -- by the corresponding expression in init_proc. In order + -- to place the freeze node for the designated type before + -- that for the current record type, freeze it now. + + -- Same process if the component is an array of access types, + -- initialized with an aggregate. If the designated type is + -- private, it cannot contain allocators, and it is premature + -- to freeze the type, so we check for this as well. + + elsif Is_Access_Type (Etype (Comp)) + and then Present (Parent (Comp)) + and then Present (Expression (Parent (Comp))) + and then Nkind (Expression (Parent (Comp))) = N_Allocator + then + declare + Alloc : constant Node_Id := Expression (Parent (Comp)); + + begin + -- If component is pointer to a classwide type, freeze + -- the specific type in the expression being allocated. + -- The expression may be a subtype indication, in which + -- case freeze the subtype mark. + + if Is_Class_Wide_Type (Designated_Type (Etype (Comp))) then + if Is_Entity_Name (Expression (Alloc)) then + Freeze_And_Append + (Entity (Expression (Alloc)), Loc, Result); + elsif + Nkind (Expression (Alloc)) = N_Subtype_Indication + then + Freeze_And_Append + (Entity (Subtype_Mark (Expression (Alloc))), + Loc, Result); + end if; + + elsif Is_Itype (Designated_Type (Etype (Comp))) then + Check_Itype (Designated_Type (Etype (Comp))); + + else + Freeze_And_Append + (Designated_Type (Etype (Comp)), Loc, Result); + end if; + end; + + elsif Is_Access_Type (Etype (Comp)) + and then Is_Itype (Designated_Type (Etype (Comp))) + then + Check_Itype (Designated_Type (Etype (Comp))); + + elsif Is_Array_Type (Etype (Comp)) + and then Is_Access_Type (Component_Type (Etype (Comp))) + and then Present (Parent (Comp)) + and then Nkind (Parent (Comp)) = N_Component_Declaration + and then Present (Expression (Parent (Comp))) + and then Nkind (Expression (Parent (Comp))) = N_Aggregate + and then Is_Fully_Defined + (Designated_Type (Component_Type (Etype (Comp)))) + then + Freeze_And_Append + (Designated_Type + (Component_Type (Etype (Comp))), Loc, Result); + end if; + + Prev := Comp; Next_Entity (Comp); end loop; @@ -1882,6 +1967,17 @@ package body Freeze is -- Start of processing for Freeze_Entity begin + -- We are going to test for various reasons why this entity need + -- not be frozen here, but in the case of an Itype that's defined + -- within a record, that test actually applies to the record. + if Is_Itype (E) and then Is_Record_Type (Scope (E)) then + Test_E := Scope (E); + elsif Is_Itype (E) and then Present (Underlying_Type (Scope (E))) + and then Is_Record_Type (Underlying_Type (Scope (E))) + then + Test_E := Underlying_Type (Scope (E)); + end if; + -- Do not freeze if already frozen since we only need one freeze node if Is_Frozen (E) then @@ -1892,7 +1988,7 @@ package body Freeze is -- The entity will be frozen in the proper scope after the current -- generic is analyzed. - elsif Inside_A_Generic and then External_Ref_In_Generic (E) then + elsif Inside_A_Generic and then External_Ref_In_Generic (Test_E) then return No_List; -- Do not freeze a global entity within an inner scope created during @@ -1906,9 +2002,9 @@ package body Freeze is -- comes from source, or is a generic instance, then the freeze point -- is the one mandated by the language. and we freze the entity. - elsif In_Open_Scopes (Scope (E)) - and then Scope (E) /= Current_Scope - and then Ekind (E) /= E_Constant + elsif In_Open_Scopes (Scope (Test_E)) + and then Scope (Test_E) /= Current_Scope + and then Ekind (Test_E) /= E_Constant then declare S : Entity_Id := Current_Scope; @@ -1940,10 +2036,10 @@ package body Freeze is elsif Front_End_Inlining and then In_Instance_Body - and then Present (Scope (E)) + and then Present (Scope (Test_E)) then declare - S : Entity_Id := Scope (E); + S : Entity_Id := Scope (Test_E); begin while Present (S) loop if Is_Generic_Instance (S) then @@ -2694,6 +2790,12 @@ package body Freeze is Freeze_And_Append (Comp, Loc, Result); elsif (Ekind (Comp)) /= E_Function then + if Is_Itype (Etype (Comp)) + and then Underlying_Type (Scope (Etype (Comp))) = E + then + Undelay_Type (Etype (Comp)); + end if; + Freeze_And_Append (Etype (Comp), Loc, Result); end if; @@ -2904,66 +3006,8 @@ package body Freeze is Check_Restriction (No_Standard_Storage_Pools, E); end if; - -- If the current entity is an array or record subtype and has - -- discriminants used to constrain it, it must not freeze, because - -- Freeze_Entity nodes force Gigi to process the frozen type. - if Is_Composite_Type (E) then - if Is_Array_Type (E) then - declare - Index : Node_Id := First_Index (E); - Expr1 : Node_Id; - Expr2 : Node_Id; - - begin - while Present (Index) loop - if Etype (Index) /= Any_Type then - Get_Index_Bounds (Index, Expr1, Expr2); - - for J in 1 .. 2 loop - if Nkind (Expr1) = N_Identifier - and then Ekind (Entity (Expr1)) = E_Discriminant - then - Set_Has_Delayed_Freeze (E, False); - Set_Freeze_Node (E, Empty); - Check_Debug_Info_Needed (E); - return Result; - end if; - - Expr1 := Expr2; - end loop; - end if; - - Next_Index (Index); - end loop; - end; - - elsif Has_Discriminants (E) - and Is_Constrained (E) - then - declare - Constraint : Elmt_Id; - Expr : Node_Id; - - begin - Constraint := First_Elmt (Discriminant_Constraint (E)); - while Present (Constraint) loop - Expr := Node (Constraint); - if Nkind (Expr) = N_Identifier - and then Ekind (Entity (Expr)) = E_Discriminant - then - Set_Has_Delayed_Freeze (E, False); - Set_Freeze_Node (E, Empty); - Check_Debug_Info_Needed (E); - return Result; - end if; - - Next_Elmt (Constraint); - end loop; - end; - end if; - -- AI-117 requires that all new primitives of a tagged type -- must inherit the convention of the full view of the type. -- Inherited and overriding operations are defined to inherit @@ -3065,7 +3109,7 @@ package body Freeze is -- in particular the size and alignment values. This processing is -- not required for generic types, since generic types do not play -- any part in code generation, and so the size and alignment values - -- for suhc types are irrelevant. + -- for such types are irrelevant. if Is_Generic_Type (E) then return Result; @@ -4727,6 +4771,44 @@ package body Freeze is end if; end Set_Debug_Info_Needed; + ------------------ + -- Undelay_Type -- + ------------------ + + procedure Undelay_Type (T : Entity_Id) is + begin + Set_Has_Delayed_Freeze (T, False); + Set_Freeze_Node (T, Empty); + + -- Since we don't want T to have a Freeze_Node, we don't want its + -- Full_View or Corresponding_Record_Type to have one either. + + -- ??? Fundamentally, this whole handling is a kludge. What we really + -- want is to be sure that for an Itype that's part of record R and + -- is a subtype of type T, that it's frozen after the later of the + -- freeze points of R and T. We have no way of doing that directly, + -- so what we do is force most such Itypes to be frozen as part of + -- freezing R via this procedure and only delay the ones that need + -- to be delayed (mostly the designated types of access types that are + -- defined as part of the record). + + if Is_Private_Type (T) + and then Present (Full_View (T)) + and then Is_Itype (Full_View (T)) + and then Is_Record_Type (Scope (Full_View (T))) + then + Undelay_Type (Full_View (T)); + end if; + + if Is_Concurrent_Type (T) + and then Present (Corresponding_Record_Type (T)) + and then Is_Itype (Corresponding_Record_Type (T)) + and then Is_Record_Type (Scope (Corresponding_Record_Type (T))) + then + Undelay_Type (Corresponding_Record_Type (T)); + end if; + end Undelay_Type; + ------------------ -- Warn_Overlay -- ------------------ diff --git a/gcc/ada/gigi.h b/gcc/ada/gigi.h index bb03912a637..2248c9e0654 100644 --- a/gcc/ada/gigi.h +++ b/gcc/ada/gigi.h @@ -6,7 +6,7 @@ * * * C Header File * * * - * Copyright (C) 1992-2004 Free Software Foundation, Inc. * + * Copyright (C) 1992-2005 Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -75,6 +75,10 @@ extern void init_dummy_type (void); the code. */ extern tree gnat_to_gnu_entity (Entity_Id, tree, int); +/* Similar, but if the returned value is a COMPONENT_REF, return the + FIELD_DECL. */ +extern tree gnat_to_gnu_field_decl (Entity_Id); + /* Given GNAT_ENTITY, an entity in the incoming GNAT tree, return a GCC type corresponding to that entity. GNAT_ENTITY is assumed to refer to an Ada type. */ diff --git a/gcc/ada/lang.opt b/gcc/ada/lang.opt index 7ac89f96426..e723631ef11 100644 --- a/gcc/ada/lang.opt +++ b/gcc/ada/lang.opt @@ -57,8 +57,8 @@ nostdlib Ada ; Don't look for object files -fRTS -Ada RejectNegative +fRTS= +Ada Joined RejectNegative gant Ada Joined Undocumented diff --git a/gcc/ada/misc.c b/gcc/ada/misc.c index e63277dc345..4a8c0ded5dc 100644 --- a/gcc/ada/misc.c +++ b/gcc/ada/misc.c @@ -289,7 +289,7 @@ gnat_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED) gnat_argc++; break; - case OPT_fRTS: + case OPT_fRTS_: gnat_argv[gnat_argc] = xstrdup ("-fRTS"); gnat_argc++; break; @@ -322,11 +322,15 @@ gnat_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED) return 1; } +static bool tree_sra_requested = false; + /* Initialize for option processing. */ static unsigned int gnat_init_options (unsigned int argc, const char **argv) { + int i; + /* Initialize gnat_argv with save_argv size. */ gnat_argv = (char **) xmalloc ((argc + 1) * sizeof (argv[0])); gnat_argv[0] = xstrdup (argv[0]); /* name of the command */ @@ -338,6 +342,16 @@ gnat_init_options (unsigned int argc, const char **argv) /* Uninitialized really means uninitialized in Ada. */ flag_zero_initialized_in_bss = 0; + /* Find last option mentioning Tree-SRA. */ + for (i = argc - 1; i > 0; i--) + if (strcmp(argv[i], "-ftree-sra") == 0) + { + tree_sra_requested = true; + break; + } + else if (strcmp(argv[i], "-fno-tree-sra") == 0) + break; + return CL_Ada; } @@ -353,6 +367,11 @@ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED) if (flag_inline_functions) flag_inline_trees = 2; + /* Do not enable Tree-SRA unless specifically requested as it + is known to badly interact with some Ada constructs. */ + if (!tree_sra_requested) + flag_tree_sra = 0; + return false; } diff --git a/gcc/ada/s-osinte-linux-hppa.ads b/gcc/ada/s-osinte-linux-hppa.ads new file mode 100644 index 00000000000..327fd5bd990 --- /dev/null +++ b/gcc/ada/s-osinte-linux-hppa.ads @@ -0,0 +1,533 @@ +------------------------------------------------------------------------------ +-- -- +-- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS -- +-- -- +-- S Y S T E M . O S _ I N T E R F A C E -- +-- -- +-- S p e c -- +-- (GNU/Linux-HPPA Version) -- +-- -- +-- Copyright (C) 1991-1994, Florida State University -- +-- Copyright (C) 1995-2005, Free Software Foundation, Inc. -- +-- -- +-- GNARL is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNARL is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- +-- for more details. You should have received a copy of the GNU General -- +-- Public License distributed with GNARL; see file COPYING. If not, write -- +-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- +-- MA 02111-1307, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNARL was developed by the GNARL team at Florida State University. -- +-- Extensive contributions were provided by Ada Core Technologies, Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This is a GNU/Linux (GNU/LinuxThreads) version of this package + +-- This package encapsulates all direct interfaces to OS services +-- that are needed by children of System. + +-- PLEASE DO NOT add any with-clauses to this package or remove the pragma +-- Preelaborate. This package is designed to be a bottom-level (leaf) package. + +with Interfaces.C; +with Unchecked_Conversion; + +package System.OS_Interface is + pragma Preelaborate; + + pragma Linker_Options ("-lpthread"); + + subtype int is Interfaces.C.int; + subtype char is Interfaces.C.char; + subtype short is Interfaces.C.short; + subtype long is Interfaces.C.long; + subtype unsigned is Interfaces.C.unsigned; + subtype unsigned_short is Interfaces.C.unsigned_short; + subtype unsigned_long is Interfaces.C.unsigned_long; + subtype unsigned_char is Interfaces.C.unsigned_char; + subtype plain_char is Interfaces.C.plain_char; + subtype size_t is Interfaces.C.size_t; + + ----------- + -- Errno -- + ----------- + + function errno return int; + pragma Import (C, errno, "__get_errno"); + + EAGAIN : constant := 11; + EINTR : constant := 4; + EINVAL : constant := 22; + ENOMEM : constant := 12; + EPERM : constant := 1; + ETIMEDOUT : constant := 238; + + ------------- + -- Signals -- + ------------- + + Max_Interrupt : constant := 63; + type Signal is new int range 0 .. Max_Interrupt; + for Signal'Size use int'Size; + + SIGHUP : constant := 1; -- hangup + SIGINT : constant := 2; -- interrupt (rubout) + SIGQUIT : constant := 3; -- quit (ASCD FS) + SIGILL : constant := 4; -- illegal instruction (not reset) + SIGTRAP : constant := 5; -- trace trap (not reset) + SIGIOT : constant := 6; -- IOT instruction + SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future + SIGEMT : constant := 7; -- EMT + SIGFPE : constant := 8; -- floating point exception + SIGKILL : constant := 9; -- kill (cannot be caught or ignored) + SIGBUS : constant := 10; -- bus error + SIGSEGV : constant := 11; -- segmentation violation + SIGSYS : constant := 12; -- bad system call + SIGPIPE : constant := 13; -- write on a pipe with no one to read it + SIGALRM : constant := 14; -- alarm clock + SIGTERM : constant := 15; -- software termination signal from kill + SIGUSR1 : constant := 16; -- user defined signal 1 + SIGUSR2 : constant := 17; -- user defined signal 2 + SIGCLD : constant := 18; -- alias for SIGCHLD + SIGCHLD : constant := 18; -- child status change + SIGPWR : constant := 19; -- power-fail restart + SIGVTALRM : constant := 20; -- virtual timer expired + SIGPROF : constant := 21; -- profiling timer expired + SIGPOLL : constant := 22; -- pollable event occurred + SIGIO : constant := 22; -- I/O now possible (4.2 BSD) + SIGWINCH : constant := 23; -- window size change + SIGSTOP : constant := 24; -- stop (cannot be caught or ignored) + SIGTSTP : constant := 25; -- user stop requested from tty + SIGCONT : constant := 26; -- stopped process has been continued + SIGTTIN : constant := 27; -- background tty read attempted + SIGTTOU : constant := 28; -- background tty write attempted + SIGURG : constant := 29; -- urgent condition on IO channel + SIGLOST : constant := 30; -- File lock lost + SIGUNUSED : constant := 31; -- unused signal (GNU/Linux) + SIGXCPU : constant := 33; -- CPU time limit exceeded + SIGXFSZ : constant := 34; -- filesize limit exceeded + SIGSTKFLT : constant := 36; -- coprocessor stack fault (Linux) + SIGLTHRRES : constant := 37; -- GNU/LinuxThreads restart signal + SIGLTHRCAN : constant := 38; -- GNU/LinuxThreads cancel signal + SIGLTHRDBG : constant := 39; -- GNU/LinuxThreads debugger signal + + SIGADAABORT : constant := SIGABRT; + -- Change this if you want to use another signal for task abort. + -- SIGTERM might be a good one. + + type Signal_Set is array (Natural range <>) of Signal; + + Unmasked : constant Signal_Set := ( + SIGTRAP, + -- To enable debugging on multithreaded applications, mark SIGTRAP to + -- be kept unmasked. + + SIGBUS, + + SIGTTIN, SIGTTOU, SIGTSTP, + -- Keep these three signals unmasked so that background processes + -- and IO behaves as normal "C" applications + + SIGPROF, + -- To avoid confusing the profiler + + SIGKILL, SIGSTOP, + -- These two signals actually cannot be masked; + -- POSIX simply won't allow it. + + SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG); + -- These three signals are used by GNU/LinuxThreads starting from + -- glibc 2.1 (future 2.2). + + Reserved : constant Signal_Set := + -- I am not sure why the following two signals are reserved. + -- I guess they are not supported by this version of GNU/Linux. + (SIGVTALRM, SIGUNUSED); + + type sigset_t is private; + + function sigaddset (set : access sigset_t; sig : Signal) return int; + pragma Import (C, sigaddset, "sigaddset"); + + function sigdelset (set : access sigset_t; sig : Signal) return int; + pragma Import (C, sigdelset, "sigdelset"); + + function sigfillset (set : access sigset_t) return int; + pragma Import (C, sigfillset, "sigfillset"); + + function sigismember (set : access sigset_t; sig : Signal) return int; + pragma Import (C, sigismember, "sigismember"); + + function sigemptyset (set : access sigset_t) return int; + pragma Import (C, sigemptyset, "sigemptyset"); + + type union_type_3 is new String (1 .. 116); + type siginfo_t is record + si_signo : int; + si_code : int; + si_errno : int; + X_data : union_type_3; + end record; + pragma Convention (C, siginfo_t); + + type struct_sigaction is record + sa_handler : System.Address; + sa_flags : unsigned_long; + sa_mask : sigset_t; + end record; + pragma Convention (C, struct_sigaction); + type struct_sigaction_ptr is access all struct_sigaction; + + type Machine_State is record + eip : unsigned_long; + ebx : unsigned_long; + esp : unsigned_long; + ebp : unsigned_long; + esi : unsigned_long; + edi : unsigned_long; + end record; + type Machine_State_Ptr is access all Machine_State; + + SA_SIGINFO : constant := 16; + + SIG_BLOCK : constant := 0; + SIG_UNBLOCK : constant := 1; + SIG_SETMASK : constant := 2; + + SIG_DFL : constant := 0; + SIG_IGN : constant := 1; + + function sigaction + (sig : Signal; + act : struct_sigaction_ptr; + oact : struct_sigaction_ptr) return int; + pragma Import (C, sigaction, "sigaction"); + + ---------- + -- Time -- + ---------- + + type timespec is private; + + function To_Duration (TS : timespec) return Duration; + pragma Inline (To_Duration); + + function To_Timespec (D : Duration) return timespec; + pragma Inline (To_Timespec); + + type struct_timeval is private; + + function To_Duration (TV : struct_timeval) return Duration; + pragma Inline (To_Duration); + + function To_Timeval (D : Duration) return struct_timeval; + pragma Inline (To_Timeval); + + function gettimeofday + (tv : access struct_timeval; + tz : System.Address := System.Null_Address) return int; + pragma Import (C, gettimeofday, "gettimeofday"); + + function sysconf (name : int) return long; + pragma Import (C, sysconf); + + SC_CLK_TCK : constant := 2; + + ------------------------- + -- Priority Scheduling -- + ------------------------- + + SCHED_OTHER : constant := 0; + SCHED_FIFO : constant := 1; + SCHED_RR : constant := 2; + + ------------- + -- Process -- + ------------- + + type pid_t is private; + + function kill (pid : pid_t; sig : Signal) return int; + pragma Import (C, kill, "kill"); + + function getpid return pid_t; + pragma Import (C, getpid, "getpid"); + + ------------- + -- Threads -- + ------------- + + type Thread_Body is access + function (arg : System.Address) return System.Address; + + function Thread_Body_Access is new + Unchecked_Conversion (System.Address, Thread_Body); + + type pthread_t is new unsigned_long; + subtype Thread_Id is pthread_t; + + function To_pthread_t is new Unchecked_Conversion + (unsigned_long, pthread_t); + + type pthread_mutex_t is limited private; + type pthread_cond_t is limited private; + type pthread_attr_t is limited private; + type pthread_mutexattr_t is limited private; + type pthread_condattr_t is limited private; + type pthread_key_t is private; + + PTHREAD_CREATE_DETACHED : constant := 1; + + ----------- + -- Stack -- + ----------- + + function Get_Stack_Base (thread : pthread_t) return Address; + pragma Inline (Get_Stack_Base); + -- This is a dummy procedure to share some GNULLI files + + --------------------------------------- + -- Nonstandard Thread Initialization -- + --------------------------------------- + + procedure pthread_init; + pragma Inline (pthread_init); + -- This is a dummy procedure to share some GNULLI files + + ------------------------- + -- POSIX.1c Section 3 -- + ------------------------- + + function sigwait (set : access sigset_t; sig : access Signal) return int; + pragma Import (C, sigwait, "sigwait"); + + function pthread_kill (thread : pthread_t; sig : Signal) return int; + pragma Import (C, pthread_kill, "pthread_kill"); + + type sigset_t_ptr is access all sigset_t; + + function pthread_sigmask + (how : int; + set : sigset_t_ptr; + oset : sigset_t_ptr) return int; + pragma Import (C, pthread_sigmask, "pthread_sigmask"); + + -------------------------- + -- POSIX.1c Section 11 -- + -------------------------- + + function pthread_mutexattr_init + (attr : access pthread_mutexattr_t) return int; + pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init"); + + function pthread_mutexattr_destroy + (attr : access pthread_mutexattr_t) return int; + pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy"); + + function pthread_mutex_init + (mutex : access pthread_mutex_t; + attr : access pthread_mutexattr_t) return int; + pragma Import (C, pthread_mutex_init, "pthread_mutex_init"); + + function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int; + pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy"); + + function pthread_mutex_lock (mutex : access pthread_mutex_t) return int; + pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock"); + + function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int; + pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock"); + + function pthread_condattr_init + (attr : access pthread_condattr_t) return int; + pragma Import (C, pthread_condattr_init, "pthread_condattr_init"); + + function pthread_condattr_destroy + (attr : access pthread_condattr_t) return int; + pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy"); + + function pthread_cond_init + (cond : access pthread_cond_t; + attr : access pthread_condattr_t) return int; + pragma Import (C, pthread_cond_init, "pthread_cond_init"); + + function pthread_cond_destroy (cond : access pthread_cond_t) return int; + pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy"); + + function pthread_cond_signal (cond : access pthread_cond_t) return int; + pragma Import (C, pthread_cond_signal, "pthread_cond_signal"); + + function pthread_cond_wait + (cond : access pthread_cond_t; + mutex : access pthread_mutex_t) return int; + pragma Import (C, pthread_cond_wait, "pthread_cond_wait"); + + function pthread_cond_timedwait + (cond : access pthread_cond_t; + mutex : access pthread_mutex_t; + abstime : access timespec) return int; + pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait"); + + -------------------------- + -- POSIX.1c Section 13 -- + -------------------------- + + type struct_sched_param is record + sched_priority : int; -- scheduling priority + end record; + pragma Convention (C, struct_sched_param); + + function pthread_setschedparam + (thread : pthread_t; + policy : int; + param : access struct_sched_param) return int; + pragma Import (C, pthread_setschedparam, "pthread_setschedparam"); + + function pthread_attr_setschedpolicy + (attr : access pthread_attr_t; + policy : int) return int; + pragma Import + (C, pthread_attr_setschedpolicy, "pthread_attr_setschedpolicy"); + + function sched_yield return int; + pragma Import (C, sched_yield, "sched_yield"); + + --------------------------- + -- P1003.1c - Section 16 -- + --------------------------- + + function pthread_attr_init + (attributes : access pthread_attr_t) return int; + pragma Import (C, pthread_attr_init, "pthread_attr_init"); + + function pthread_attr_destroy + (attributes : access pthread_attr_t) return int; + pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy"); + + function pthread_attr_setdetachstate + (attr : access pthread_attr_t; + detachstate : int) return int; + pragma Import + (C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate"); + + function pthread_attr_setstacksize + (attr : access pthread_attr_t; + stacksize : size_t) return int; + pragma Import (C, pthread_attr_setstacksize, "pthread_attr_setstacksize"); + + function pthread_create + (thread : access pthread_t; + attributes : access pthread_attr_t; + start_routine : Thread_Body; + arg : System.Address) return int; + pragma Import (C, pthread_create, "pthread_create"); + + procedure pthread_exit (status : System.Address); + pragma Import (C, pthread_exit, "pthread_exit"); + + function pthread_self return pthread_t; + pragma Import (C, pthread_self, "pthread_self"); + + -------------------------- + -- POSIX.1c Section 17 -- + -------------------------- + + function pthread_setspecific + (key : pthread_key_t; + value : System.Address) return int; + pragma Import (C, pthread_setspecific, "pthread_setspecific"); + + function pthread_getspecific (key : pthread_key_t) return System.Address; + pragma Import (C, pthread_getspecific, "pthread_getspecific"); + + type destructor_pointer is access procedure (arg : System.Address); + + function pthread_key_create + (key : access pthread_key_t; + destructor : destructor_pointer) return int; + pragma Import (C, pthread_key_create, "pthread_key_create"); + +private + + type sigset_t is array (0 .. 31) of unsigned_long; + pragma Convention (C, sigset_t); + + type pid_t is new int; + + type time_t is new long; + + type timespec is record + tv_sec : time_t; + tv_nsec : long; + end record; + pragma Convention (C, timespec); + + type struct_timeval is record + tv_sec : time_t; + tv_usec : time_t; + end record; + pragma Convention (C, struct_timeval); + + type pthread_attr_t is record + detachstate : int; + schedpolicy : int; + schedparam : struct_sched_param; + inheritsched : int; + scope : int; + guardsize : size_t; + stackaddr_set : int; + stackaddr : System.Address; + stacksize : size_t; + end record; + pragma Convention (C, pthread_attr_t); + + type pthread_condattr_t is record + dummy : int; + end record; + pragma Convention (C, pthread_condattr_t); + + type pthread_mutexattr_t is record + mutexkind : int; + end record; + pragma Convention (C, pthread_mutexattr_t); + + type lock_array is array (1 .. 4) of int; + type atomic_lock_t is record + lock : lock_array; + end record; + pragma Convention (C, atomic_lock_t); + for atomic_lock_t'Alignment use 8 * 16; + + type struct_pthread_fast_lock is record + spinlock : atomic_lock_t; + status : long; + end record; + pragma Convention (C, struct_pthread_fast_lock); + + type pthread_mutex_t is record + m_reserved : int; + m_count : int; + m_owner : System.Address; + m_kind : int; + m_lock : struct_pthread_fast_lock; + end record; + pragma Convention (C, pthread_mutex_t); + + type pthread_cond_t is array (0 .. 47) of unsigned_char; + pragma Convention (C, pthread_cond_t); + + type pthread_key_t is new unsigned; + +end System.OS_Interface; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 7ac6e268b2d..d99a59d0306 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -7374,12 +7374,7 @@ package body Sem_Ch3 is Set_Depends_On_Private (Def_Id, Has_Private_Component (Def_Id)); Set_Is_Access_Constant (Def_Id, Is_Access_Constant (T)); - -- Itypes created for constrained record components do not receive - -- a freeze node, they are elaborated when first seen. - - if not Is_Record_Type (Current_Scope) then - Conditional_Delay (Def_Id, T); - end if; + Conditional_Delay (Def_Id, T); end Constrain_Access; --------------------- @@ -7474,17 +7469,12 @@ package body Sem_Ch3 is Set_Is_Private_Composite (Def_Id, Is_Private_Composite (T)); Set_Is_Limited_Composite (Def_Id, Is_Limited_Composite (T)); - -- If the subtype is not that of a record component, build a freeze - -- node if parent still needs one. - - -- If the subtype is not that of a record component, make sure + -- Build a freeze node if parent still needs one. Also, make sure -- that the Depends_On_Private status is set (explanation ???) -- and also that a conditional delay is set. - if not Is_Type (Scope (Def_Id)) then - Set_Depends_On_Private (Def_Id, Depends_On_Private (T)); - Conditional_Delay (Def_Id, T); - end if; + Set_Depends_On_Private (Def_Id, Depends_On_Private (T)); + Conditional_Delay (Def_Id, T); end Constrain_Array; diff --git a/gcc/ada/system-hpux.ads b/gcc/ada/system-hpux.ads index e9664f09a45..7f473b17b63 100644 --- a/gcc/ada/system-hpux.ads +++ b/gcc/ada/system-hpux.ads @@ -129,7 +129,7 @@ private Machine_Rounds : constant Boolean := True; OpenVMS : constant Boolean := False; Preallocated_Stacks : constant Boolean := False; - Signed_Zeros : constant Boolean := False; + Signed_Zeros : constant Boolean := True; Stack_Check_Default : constant Boolean := False; Stack_Check_Probes : constant Boolean := False; Support_64_Bit_Divides : constant Boolean := True; diff --git a/gcc/ada/system-linux-hppa.ads b/gcc/ada/system-linux-hppa.ads new file mode 100644 index 00000000000..fde1129b7b5 --- /dev/null +++ b/gcc/ada/system-linux-hppa.ads @@ -0,0 +1,151 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M -- +-- -- +-- S p e c -- +-- (GNU/Linux-HPPA Version) -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- This specification is derived from the Ada Reference Manual for use with -- +-- GNAT. The copyright notice above, and the license provisions that follow -- +-- apply solely to the contents of the part following the private keyword. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- +-- for more details. You should have received a copy of the GNU General -- +-- Public License distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- +-- MA 02111-1307, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package System is +pragma Pure (System); +-- Note that we take advantage of the implementation permission to +-- make this unit Pure instead of Preelaborable, see RM 13.7(36) + + type Name is (SYSTEM_NAME_GNAT); + System_Name : constant Name := SYSTEM_NAME_GNAT; + + -- System-Dependent Named Numbers + + Min_Int : constant := Long_Long_Integer'First; + Max_Int : constant := Long_Long_Integer'Last; + + Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; + Max_Nonbinary_Modulus : constant := Integer'Last; + + Max_Base_Digits : constant := Long_Long_Float'Digits; + Max_Digits : constant := Long_Long_Float'Digits; + + Max_Mantissa : constant := 63; + Fine_Delta : constant := 2.0 ** (-Max_Mantissa); + + Tick : constant := 0.000_001; + + -- Storage-related Declarations + + type Address is private; + Null_Address : constant Address; + + Storage_Unit : constant := 8; + Word_Size : constant := 32; + Memory_Size : constant := 2 ** 32; + + -- Address comparison + + function "<" (Left, Right : Address) return Boolean; + function "<=" (Left, Right : Address) return Boolean; + function ">" (Left, Right : Address) return Boolean; + function ">=" (Left, Right : Address) return Boolean; + function "=" (Left, Right : Address) return Boolean; + + pragma Import (Intrinsic, "<"); + pragma Import (Intrinsic, "<="); + pragma Import (Intrinsic, ">"); + pragma Import (Intrinsic, ">="); + pragma Import (Intrinsic, "="); + + -- Other System-Dependent Declarations + + type Bit_Order is (High_Order_First, Low_Order_First); + Default_Bit_Order : constant Bit_Order := High_Order_First; + + -- Priority-related Declarations (RM D.1) + + Max_Priority : constant Positive := 30; + Max_Interrupt_Priority : constant Positive := 31; + + subtype Any_Priority is Integer range 0 .. 31; + subtype Priority is Any_Priority range 0 .. 30; + subtype Interrupt_Priority is Any_Priority range 31 .. 31; + + Default_Priority : constant Priority := 15; + +private + + type Address is mod Memory_Size; + Null_Address : constant Address := 0; + + -------------------------------------- + -- System Implementation Parameters -- + -------------------------------------- + + -- These parameters provide information about the target that is used + -- by the compiler. They are in the private part of System, where they + -- can be accessed using the special circuitry in the Targparm unit + -- whose source should be consulted for more detailed descriptions + -- of the individual switch values. + + AAMP : constant Boolean := False; + Backend_Divide_Checks : constant Boolean := False; + Backend_Overflow_Checks : constant Boolean := False; + Command_Line_Args : constant Boolean := True; + Configurable_Run_Time : constant Boolean := False; + Denorm : constant Boolean := True; + Duration_32_Bits : constant Boolean := False; + Exit_Status_Supported : constant Boolean := True; + Fractional_Fixed_Ops : constant Boolean := False; + Frontend_Layout : constant Boolean := False; + Functions_Return_By_DSP : constant Boolean := False; + Machine_Overflows : constant Boolean := False; + Machine_Rounds : constant Boolean := True; + OpenVMS : constant Boolean := False; + Preallocated_Stacks : constant Boolean := False; + Signed_Zeros : constant Boolean := True; + Stack_Check_Default : constant Boolean := False; + Stack_Check_Probes : constant Boolean := False; + Support_64_Bit_Divides : constant Boolean := True; + Support_Aggregates : constant Boolean := True; + Support_Composite_Assign : constant Boolean := True; + Support_Composite_Compare : constant Boolean := True; + Support_Long_Shifts : constant Boolean := True; + Suppress_Standard_Library : constant Boolean := False; + Use_Ada_Main_Program_Name : constant Boolean := False; + ZCX_By_Default : constant Boolean := True; + GCC_ZCX_Support : constant Boolean := True; + Front_End_ZCX_Support : constant Boolean := False; + + -- Obsolete entries, to be removed eventually (bootstrap issues!) + + High_Integrity_Mode : constant Boolean := False; + Long_Shifts_Inlined : constant Boolean := False; + +end System; diff --git a/gcc/ada/system-linux-sparc.ads b/gcc/ada/system-linux-sparc.ads new file mode 100644 index 00000000000..048ce9055cd --- /dev/null +++ b/gcc/ada/system-linux-sparc.ads @@ -0,0 +1,151 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M -- +-- -- +-- S p e c -- +-- (GNU/Linux-SPARC Version) -- +-- -- +-- Copyright (C) 1992-2005 Free Software Foundation, Inc. -- +-- -- +-- This specification is derived from the Ada Reference Manual for use with -- +-- GNAT. The copyright notice above, and the license provisions that follow -- +-- apply solely to the contents of the part following the private keyword. -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 2, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- +-- for more details. You should have received a copy of the GNU General -- +-- Public License distributed with GNAT; see file COPYING. If not, write -- +-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- +-- MA 02111-1307, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package System is +pragma Pure (System); +-- Note that we take advantage of the implementation permission to +-- make this unit Pure instead of Preelaborable, see RM 13.7(36) + + type Name is (SYSTEM_NAME_GNAT); + System_Name : constant Name := SYSTEM_NAME_GNAT; + + -- System-Dependent Named Numbers + + Min_Int : constant := Long_Long_Integer'First; + Max_Int : constant := Long_Long_Integer'Last; + + Max_Binary_Modulus : constant := 2 ** Long_Long_Integer'Size; + Max_Nonbinary_Modulus : constant := Integer'Last; + + Max_Base_Digits : constant := Long_Long_Float'Digits; + Max_Digits : constant := Long_Long_Float'Digits; + + Max_Mantissa : constant := 63; + Fine_Delta : constant := 2.0 ** (-Max_Mantissa); + + Tick : constant := 0.000_001; + + -- Storage-related Declarations + + type Address is private; + Null_Address : constant Address; + + Storage_Unit : constant := 8; + Word_Size : constant := 32; + Memory_Size : constant := 2 ** 32; + + -- Address comparison + + function "<" (Left, Right : Address) return Boolean; + function "<=" (Left, Right : Address) return Boolean; + function ">" (Left, Right : Address) return Boolean; + function ">=" (Left, Right : Address) return Boolean; + function "=" (Left, Right : Address) return Boolean; + + pragma Import (Intrinsic, "<"); + pragma Import (Intrinsic, "<="); + pragma Import (Intrinsic, ">"); + pragma Import (Intrinsic, ">="); + pragma Import (Intrinsic, "="); + + -- Other System-Dependent Declarations + + type Bit_Order is (High_Order_First, Low_Order_First); + Default_Bit_Order : constant Bit_Order := High_Order_First; + + -- Priority-related Declarations (RM D.1) + + Max_Priority : constant Positive := 30; + Max_Interrupt_Priority : constant Positive := 31; + + subtype Any_Priority is Integer range 0 .. 31; + subtype Priority is Any_Priority range 0 .. 30; + subtype Interrupt_Priority is Any_Priority range 31 .. 31; + + Default_Priority : constant Priority := 15; + +private + + type Address is mod Memory_Size; + Null_Address : constant Address := 0; + + -------------------------------------- + -- System Implementation Parameters -- + -------------------------------------- + + -- These parameters provide information about the target that is used + -- by the compiler. They are in the private part of System, where they + -- can be accessed using the special circuitry in the Targparm unit + -- whose source should be consulted for more detailed descriptions + -- of the individual switch values. + + AAMP : constant Boolean := False; + Backend_Divide_Checks : constant Boolean := False; + Backend_Overflow_Checks : constant Boolean := False; + Command_Line_Args : constant Boolean := True; + Configurable_Run_Time : constant Boolean := False; + Denorm : constant Boolean := True; + Duration_32_Bits : constant Boolean := False; + Exit_Status_Supported : constant Boolean := True; + Fractional_Fixed_Ops : constant Boolean := False; + Frontend_Layout : constant Boolean := False; + Functions_Return_By_DSP : constant Boolean := False; + Machine_Overflows : constant Boolean := False; + Machine_Rounds : constant Boolean := True; + OpenVMS : constant Boolean := False; + Preallocated_Stacks : constant Boolean := False; + Signed_Zeros : constant Boolean := True; + Stack_Check_Default : constant Boolean := False; + Stack_Check_Probes : constant Boolean := False; + Support_64_Bit_Divides : constant Boolean := True; + Support_Aggregates : constant Boolean := True; + Support_Composite_Assign : constant Boolean := True; + Support_Composite_Compare : constant Boolean := True; + Support_Long_Shifts : constant Boolean := True; + Suppress_Standard_Library : constant Boolean := False; + Use_Ada_Main_Program_Name : constant Boolean := False; + ZCX_By_Default : constant Boolean := True; + GCC_ZCX_Support : constant Boolean := True; + Front_End_ZCX_Support : constant Boolean := False; + + -- Obsolete entries, to be removed eventually (bootstrap issues!) + + High_Integrity_Mode : constant Boolean := False; + Long_Shifts_Inlined : constant Boolean := True; + +end System; diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c index 7446359e90e..f02d454d87c 100644 --- a/gcc/ada/trans.c +++ b/gcc/ada/trans.c @@ -2956,7 +2956,7 @@ gnat_to_gnu (Node_Id gnat_node) NULL_TREE, gnu_prefix); else { - gnu_field = gnat_to_gnu_entity (gnat_field, NULL_TREE, 0); + gnu_field = gnat_to_gnu_field_decl (gnat_field); /* If there are discriminants, the prefix might be evaluated more than once, which is a problem if it has @@ -3013,6 +3013,8 @@ gnat_to_gnu (Node_Id gnat_node) /* ??? It is wrong to evaluate the type now, but there doesn't seem to be any other practical way of doing it. */ + gcc_assert (!Expansion_Delayed (gnat_node)); + gnu_aggr_type = gnu_result_type = get_unpadded_type (Etype (gnat_node)); @@ -3497,11 +3499,9 @@ gnat_to_gnu (Node_Id gnat_node) /* The return value from the subprogram. */ tree gnu_ret_val = NULL_TREE; /* The place to put the return value. */ - tree gnu_lhs - = (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type) - ? build_unary_op (INDIRECT_REF, NULL_TREE, - DECL_ARGUMENTS (current_function_decl)) - : DECL_RESULT (current_function_decl)); + tree gnu_lhs; + /* Avoid passing error_mark_node to RETURN_EXPR. */ + gnu_result = NULL_TREE; /* If we are dealing with a "return;" from an Ada procedure with parameters passed by copy in copy out, we need to return a record @@ -3524,6 +3524,7 @@ gnat_to_gnu (Node_Id gnat_node) else if (TYPE_CI_CO_LIST (gnu_subprog_type)) { + gnu_lhs = DECL_RESULT (current_function_decl); if (list_length (TYPE_CI_CO_LIST (gnu_subprog_type)) == 1) gnu_ret_val = TREE_VALUE (TYPE_CI_CO_LIST (gnu_subprog_type)); else @@ -3543,12 +3544,26 @@ gnat_to_gnu (Node_Id gnat_node) are doing a call, pass that target to the call. */ if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type) && Nkind (Expression (gnat_node)) == N_Function_Call) - gnu_ret_val = call_to_gnu (Expression (gnat_node), - &gnu_result_type, gnu_lhs); + { + gnu_lhs + = build_unary_op (INDIRECT_REF, NULL_TREE, + DECL_ARGUMENTS (current_function_decl)); + gnu_result = call_to_gnu (Expression (gnat_node), + &gnu_result_type, gnu_lhs); + } else { gnu_ret_val = gnat_to_gnu (Expression (gnat_node)); + if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type)) + /* The original return type was unconstrained so dereference + the TARGET pointer in the return value's type. */ + gnu_lhs + = build_unary_op (INDIRECT_REF, TREE_TYPE (gnu_ret_val), + DECL_ARGUMENTS (current_function_decl)); + else + gnu_lhs = DECL_RESULT (current_function_decl); + /* Do not remove the padding from GNU_RET_VAL if the inner type is self-referential since we want to allocate the fixed size in that case. */ @@ -3591,18 +3606,19 @@ gnat_to_gnu (Node_Id gnat_node) gnat_node); } } + } - gnu_result = build2 (MODIFY_EXPR, TREE_TYPE (gnu_ret_val), - gnu_lhs, gnu_ret_val); - if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type)) - { - add_stmt_with_node (gnu_result, gnat_node); - gnu_ret_val = NULL_TREE; - } + if (gnu_ret_val) + gnu_result = build2 (MODIFY_EXPR, TREE_TYPE (gnu_ret_val), + gnu_lhs, gnu_ret_val); + + if (TYPE_RETURNS_BY_TARGET_PTR_P (gnu_subprog_type)) + { + add_stmt_with_node (gnu_result, gnat_node); + gnu_result = NULL_TREE; } - gnu_result = build1 (RETURN_EXPR, void_type_node, - gnu_ret_val ? gnu_result : gnu_ret_val); + gnu_result = build1 (RETURN_EXPR, void_type_node, gnu_result); } break; @@ -4021,12 +4037,13 @@ gnat_to_gnu (Node_Id gnat_node) current_function_decl = NULL_TREE; } - /* Set the location information into the result. If we're supposed to - return something of void_type, it means we have something we're - elaborating for effect, so just return. */ - if (EXPR_P (gnu_result)) + /* Set the location information into the result. Note that we may have + no result if we just expanded a procedure with no side-effects. */ + if (gnu_result && EXPR_P (gnu_result)) annotate_with_node (gnu_result, gnat_node); + /* If we're supposed to return something of void_type, it means we have + something we're elaborating for effect, so just return. */ if (TREE_CODE (gnu_result_type) == VOID_TYPE) return gnu_result; @@ -5439,13 +5456,19 @@ assoc_to_constructor (Node_Id gnat_assoc, tree gnu_type) gnat_assoc = Next (gnat_assoc)) { Node_Id gnat_field = First (Choices (gnat_assoc)); - tree gnu_field = gnat_to_gnu_entity (Entity (gnat_field), NULL_TREE, 0); + tree gnu_field = gnat_to_gnu_field_decl (Entity (gnat_field)); tree gnu_expr = gnat_to_gnu (Expression (gnat_assoc)); /* The expander is supposed to put a single component selector name in every record component association */ gcc_assert (No (Next (gnat_field))); + /* Ignore fields that have Corresponding_Discriminants since we'll + be setting that field in the parent. */ + if (Present (Corresponding_Discriminant (Entity (gnat_field))) + && Is_Tagged_Type (Scope (Entity (gnat_field)))) + continue; + /* Before assigning a value in an aggregate make sure range checks are done if required. Then convert to the type of the field. */ if (Do_Range_Check (Expression (gnat_assoc))) diff --git a/gcc/ada/utils.c b/gcc/ada/utils.c index 6b44189f7d0..4390b00eed1 100644 --- a/gcc/ada/utils.c +++ b/gcc/ada/utils.c @@ -668,10 +668,10 @@ finish_record_type (tree record_type, tree fieldlist, bool has_rep, TYPE_MODE (record_type) = BLKmode; if (!had_size_unit) - TYPE_SIZE_UNIT (record_type) = size_zero_node; - + TYPE_SIZE_UNIT (record_type) = size_zero_node; if (!had_size) TYPE_SIZE (record_type) = bitsize_zero_node; + /* For all-repped records with a size specified, lay the QUAL_UNION_TYPE out just like a UNION_TYPE, since the size will be fixed. */ else if (code == QUAL_UNION_TYPE) @@ -796,9 +796,11 @@ finish_record_type (tree record_type, tree fieldlist, bool has_rep, : convert (sizetype, size_binop (CEIL_DIV_EXPR, size, bitsize_unit_node))); - TYPE_SIZE (record_type) = round_up (size, TYPE_ALIGN (record_type)); + TYPE_SIZE (record_type) + = variable_size (round_up (size, TYPE_ALIGN (record_type))); TYPE_SIZE_UNIT (record_type) - = round_up (size_unit, TYPE_ALIGN (record_type) / BITS_PER_UNIT); + = variable_size (round_up (size_unit, + TYPE_ALIGN (record_type) / BITS_PER_UNIT)); compute_record_mode (record_type); } @@ -2919,10 +2921,13 @@ convert (tree type, tree expr) { if (TREE_TYPE (tem) == etype) return build1 (CONVERT_EXPR, type, expr); - else if (TREE_CODE (TREE_TYPE (tem)) == RECORD_TYPE - && (TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (tem)) - || TYPE_IS_PADDING_P (TREE_TYPE (tem))) - && TREE_TYPE (TYPE_FIELDS (TREE_TYPE (tem))) == etype) + + /* Accept slight type variations. */ + if (TREE_TYPE (tem) == TYPE_MAIN_VARIANT (etype) + || (TREE_CODE (TREE_TYPE (tem)) == RECORD_TYPE + && (TYPE_JUSTIFIED_MODULAR_P (TREE_TYPE (tem)) + || TYPE_IS_PADDING_P (TREE_TYPE (tem))) + && TREE_TYPE (TYPE_FIELDS (TREE_TYPE (tem))) == etype)) return build1 (CONVERT_EXPR, type, convert (TREE_TYPE (tem), expr)); } diff --git a/gcc/ada/utils2.c b/gcc/ada/utils2.c index 008ac6e3ab2..787d01e284a 100644 --- a/gcc/ada/utils2.c +++ b/gcc/ada/utils2.c @@ -679,9 +679,9 @@ build_binary_op (enum tree_code op_code, tree result_type, || (TREE_CODE (TREE_TYPE (TREE_OPERAND (right_operand, 0))) == ARRAY_TYPE)) && (0 == (best_type - == find_common_type (right_type, - TREE_TYPE (TREE_OPERAND - (right_operand, 0)))) + = find_common_type (right_type, + TREE_TYPE (TREE_OPERAND + (right_operand, 0)))) || right_type != best_type)) { right_operand = TREE_OPERAND (right_operand, 0); diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 23cdf095396..00b3112daea 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -2033,31 +2033,49 @@ duplicate_computed_gotos (void) max_size = uncond_jump_length * PARAM_VALUE (PARAM_MAX_GOTO_DUPLICATION_INSNS); candidates = BITMAP_ALLOC (NULL); - /* Build the reorder chain for the original order of blocks. - Look for a computed jump while we are at it. */ + /* Look for blocks that end in a computed jump, and see if such blocks + are suitable for unfactoring. If a block is a candidate for unfactoring, + mark it in the candidates. */ FOR_EACH_BB (bb) { + rtx insn; + edge e; + edge_iterator ei; + int size, all_flags; + + /* Build the reorder chain for the original order of blocks. */ if (bb->next_bb != EXIT_BLOCK_PTR) bb->rbi->next = bb->next_bb; - /* If the block ends in a computed jump and it is small enough, - make it a candidate for duplication. */ - if (computed_jump_p (BB_END (bb))) - { - rtx insn; - int size = 0; + /* Obviously the block has to end in a computed jump. */ + if (!computed_jump_p (BB_END (bb))) + continue; - FOR_BB_INSNS (bb, insn) - { - if (INSN_P (insn)) - size += get_attr_length (insn); - if (size > max_size) - break; - } + /* Only consider blocks that can be duplicated. */ + if (find_reg_note (BB_END (bb), REG_CROSSING_JUMP, NULL_RTX) + || !can_duplicate_block_p (bb)) + continue; - if (size <= max_size) - bitmap_set_bit (candidates, bb->index); - } + /* Make sure that the block is small enough. */ + size = 0; + FOR_BB_INSNS (bb, insn) + if (INSN_P (insn)) + { + size += get_attr_length (insn); + if (size > max_size) + break; + } + if (size > max_size) + continue; + + /* Final check: there must not be any incoming abnormal edges. */ + all_flags = 0; + FOR_EACH_EDGE (e, ei, bb->preds) + all_flags |= e->flags; + if (all_flags & EDGE_COMPLEX) + continue; + + bitmap_set_bit (candidates, bb->index); } /* Nothing to do if there is no computed jump here. */ diff --git a/gcc/builtins.c b/gcc/builtins.c index 078edc39b51..9e7ccaa9149 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -978,12 +978,8 @@ expand_builtin_prefetch (tree arglist) static rtx get_memory_rtx (tree exp) { - rtx addr = expand_expr (exp, NULL_RTX, ptr_mode, EXPAND_SUM); - rtx mem; - - addr = convert_memory_address (Pmode, addr); - - mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr)); + rtx addr = expand_expr (exp, NULL_RTX, ptr_mode, EXPAND_NORMAL); + rtx mem = gen_rtx_MEM (BLKmode, memory_address (BLKmode, addr)); /* Get an expression we can use to find the attributes to assign to MEM. If it is an ADDR_EXPR, use the operand. Otherwise, dereference it if diff --git a/gcc/c-common.c b/gcc/c-common.c index 39868e88659..f5b82d294bc 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -2319,33 +2319,33 @@ pointer_int_sum (enum tree_code resultcode, tree ptrop, tree intop) tree c_common_truthvalue_conversion (tree expr) { - if (TREE_CODE (expr) == ERROR_MARK) - return expr; - - if (TREE_CODE (expr) == FUNCTION_DECL) - expr = build_unary_op (ADDR_EXPR, expr, 0); - switch (TREE_CODE (expr)) { case EQ_EXPR: case NE_EXPR: case UNEQ_EXPR: case LTGT_EXPR: case LE_EXPR: case GE_EXPR: case LT_EXPR: case GT_EXPR: case UNLE_EXPR: case UNGE_EXPR: case UNLT_EXPR: case UNGT_EXPR: case ORDERED_EXPR: case UNORDERED_EXPR: + if (TREE_TYPE (expr) == truthvalue_type_node) + return expr; + return build2 (TREE_CODE (expr), truthvalue_type_node, + TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1)); + case TRUTH_ANDIF_EXPR: case TRUTH_ORIF_EXPR: case TRUTH_AND_EXPR: case TRUTH_OR_EXPR: case TRUTH_XOR_EXPR: - if (TREE_TYPE (expr) != truthvalue_type_node) - return build2 (TREE_CODE (expr), truthvalue_type_node, - TREE_OPERAND (expr, 0), TREE_OPERAND (expr, 1)); - return expr; + if (TREE_TYPE (expr) == truthvalue_type_node) + return expr; + return build2 (TREE_CODE (expr), truthvalue_type_node, + lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0)), + lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 1))); case TRUTH_NOT_EXPR: - if (TREE_TYPE (expr) != truthvalue_type_node) - return build1 (TREE_CODE (expr), truthvalue_type_node, - TREE_OPERAND (expr, 0)); - return expr; + if (TREE_TYPE (expr) == truthvalue_type_node) + return expr; + return build1 (TREE_CODE (expr), truthvalue_type_node, + lang_hooks.truthvalue_conversion (TREE_OPERAND (expr, 0))); case ERROR_MARK: return expr; @@ -2361,6 +2361,10 @@ c_common_truthvalue_conversion (tree expr) ? truthvalue_true_node : truthvalue_false_node; + case FUNCTION_DECL: + expr = build_unary_op (ADDR_EXPR, expr, 0); + /* Fall through. */ + case ADDR_EXPR: { if (TREE_CODE (TREE_OPERAND (expr, 0)) == FUNCTION_DECL @@ -5745,5 +5749,94 @@ lvalue_or_else (tree ref, enum lvalue_use use) return win; } + +/* *PTYPE is an incomplete array. Complete it with a domain based on + INITIAL_VALUE. If INITIAL_VALUE is not present, use 1 if DO_DEFAULT + is true. Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered, + 2 if INITIAL_VALUE was NULL, and 3 if INITIAL_VALUE was empty. */ + +int +complete_array_type (tree *ptype, tree initial_value, bool do_default) +{ + tree maxindex, type, main_type, elt, unqual_elt; + int failure = 0, quals; + + maxindex = size_zero_node; + if (initial_value) + { + if (TREE_CODE (initial_value) == STRING_CST) + { + int eltsize + = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value))); + maxindex = size_int (TREE_STRING_LENGTH (initial_value)/eltsize - 1); + } + else if (TREE_CODE (initial_value) == CONSTRUCTOR) + { + tree elts = CONSTRUCTOR_ELTS (initial_value); + + if (elts == NULL) + { + if (pedantic) + failure = 3; + maxindex = integer_minus_one_node; + } + else + { + tree curindex; + + if (TREE_PURPOSE (elts)) + maxindex = fold_convert (sizetype, TREE_PURPOSE (elts)); + curindex = maxindex; + + for (elts = TREE_CHAIN (elts); elts; elts = TREE_CHAIN (elts)) + { + if (TREE_PURPOSE (elts)) + curindex = fold_convert (sizetype, TREE_PURPOSE (elts)); + else + curindex = size_binop (PLUS_EXPR, curindex, size_one_node); + + if (tree_int_cst_lt (maxindex, curindex)) + maxindex = curindex; + } + } + } + else + { + /* Make an error message unless that happened already. */ + if (initial_value != error_mark_node) + failure = 1; + } + } + else + { + failure = 2; + if (!do_default) + return failure; + } + + type = *ptype; + elt = TREE_TYPE (type); + quals = TYPE_QUALS (strip_array_types (elt)); + if (quals == 0) + unqual_elt = elt; + else + unqual_elt = c_build_qualified_type (elt, TYPE_UNQUALIFIED); + + /* Using build_distinct_type_copy and modifying things afterward instead + of using build_array_type to create a new type preserves all of the + TYPE_LANG_FLAG_? bits that the front end may have set. */ + main_type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type)); + TREE_TYPE (main_type) = unqual_elt; + TYPE_DOMAIN (main_type) = build_index_type (maxindex); + layout_type (main_type); + + if (quals == 0) + type = main_type; + else + type = c_build_qualified_type (main_type, quals); + + *ptype = type; + return failure; +} #include "gt-c-common.h" diff --git a/gcc/c-common.h b/gcc/c-common.h index 91be602066b..502c03dd215 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -889,6 +889,8 @@ enum lvalue_use { extern int lvalue_or_else (tree, enum lvalue_use); +extern int complete_array_type (tree *, tree, bool); + /* In c-gimplify.c */ extern void c_genericize (tree); extern int c_gimplify_expr (tree *, tree *, tree *); diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 0b7b97ede23..2dba38ba70f 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -529,7 +529,7 @@ c_finish_incomplete_decl (tree decl) { warning ("%Jarray %qD assumed to have one element", decl, decl); - complete_array_type (type, NULL_TREE, 1); + complete_array_type (&TREE_TYPE (decl), NULL_TREE, true); layout_decl (decl, 0); } @@ -1043,8 +1043,7 @@ validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype) tree newargs, oldargs; int i; - /* ??? Elsewhere TYPE_MAIN_VARIANT is not used in this context. */ -#define END_OF_ARGLIST(t) (TYPE_MAIN_VARIANT (t) == void_type_node) +#define END_OF_ARGLIST(t) ((t) == void_type_node) oldargs = TYPE_ACTUAL_ARG_TYPES (oldtype); newargs = TYPE_ARG_TYPES (newtype); @@ -1052,8 +1051,8 @@ validate_proto_after_old_defn (tree newdecl, tree newtype, tree oldtype) for (;;) { - tree oldargtype = TREE_VALUE (oldargs); - tree newargtype = TREE_VALUE (newargs); + tree oldargtype = TYPE_MAIN_VARIANT (TREE_VALUE (oldargs)); + tree newargtype = TYPE_MAIN_VARIANT (TREE_VALUE (newargs)); if (END_OF_ARGLIST (oldargtype) && END_OF_ARGLIST (newargtype)) break; @@ -2440,6 +2439,7 @@ define_label (location_t location, tree name) if there is a containing function with a declared label with the same name. */ tree label = I_LABEL_DECL (name); + struct c_label_list *nlist; if (label && ((DECL_CONTEXT (label) == current_function_decl @@ -2456,6 +2456,8 @@ define_label (location_t location, tree name) /* The label has been used or declared already in this function, but not defined. Update its location to point to this definition. */ + if (C_DECL_UNDEFINABLE_STMT_EXPR (label)) + error ("%Jjump into statement expression", label); DECL_SOURCE_LOCATION (label) = location; } else @@ -2473,6 +2475,11 @@ define_label (location_t location, tree name) "identifier %qs conflicts", &location, IDENTIFIER_POINTER (name)); + nlist = XOBNEW (&parser_obstack, struct c_label_list); + nlist->next = label_context_stack->labels_def; + nlist->label = label; + label_context_stack->labels_def = nlist; + /* Mark label as having been defined. */ DECL_INITIAL (label) = error_mark_node; return label; @@ -3178,14 +3185,15 @@ finish_decl (tree decl, tree init, tree asmspec_tree) && TYPE_DOMAIN (type) == 0 && TREE_CODE (decl) != TYPE_DECL) { - int do_default + bool do_default = (TREE_STATIC (decl) /* Even if pedantic, an external linkage array may have incomplete type at first. */ ? pedantic && !TREE_PUBLIC (decl) : !DECL_EXTERNAL (decl)); int failure - = complete_array_type (type, DECL_INITIAL (decl), do_default); + = complete_array_type (&TREE_TYPE (decl), DECL_INITIAL (decl), + do_default); /* Get the completed type made by complete_array_type. */ type = TREE_TYPE (decl); @@ -3206,14 +3214,12 @@ finish_decl (tree decl, tree init, tree asmspec_tree) else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl)) DECL_EXTERNAL (decl) = 1; } - - /* TYPE_MAX_VALUE is always one less than the number of elements - in the array, because we start counting at zero. Therefore, - warn only if the value is less than zero. */ - else if (pedantic && TYPE_DOMAIN (type) != 0 - && tree_int_cst_sgn (TYPE_MAX_VALUE (TYPE_DOMAIN (type))) < 0) + else if (failure == 3) error ("%Jzero or negative size array %qD", decl, decl); + if (DECL_INITIAL (decl)) + TREE_TYPE (DECL_INITIAL (decl)) = type; + layout_decl (decl, 0); } @@ -3266,8 +3272,7 @@ finish_decl (tree decl, tree init, tree asmspec_tree) } /* If #pragma weak was used, mark the decl weak now. */ - if (current_scope == file_scope) - maybe_apply_pragma_weak (decl); + maybe_apply_pragma_weak (decl); /* If this is a variable definition, determine its ELF visibility. */ if (TREE_CODE (decl) == VAR_DECL @@ -3501,17 +3506,19 @@ build_compound_literal (tree type, tree init) if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) { - int failure = complete_array_type (type, DECL_INITIAL (decl), 1); - + int failure = complete_array_type (&TREE_TYPE (decl), + DECL_INITIAL (decl), true); gcc_assert (!failure); + + type = TREE_TYPE (decl); + TREE_TYPE (DECL_INITIAL (decl)) = type; } - type = TREE_TYPE (decl); if (type == error_mark_node || !COMPLETE_TYPE_P (type)) return error_mark_node; stmt = build_stmt (DECL_EXPR, decl); - complit = build1 (COMPOUND_LITERAL_EXPR, TREE_TYPE (decl), stmt); + complit = build1 (COMPOUND_LITERAL_EXPR, type, stmt); TREE_SIDE_EFFECTS (complit) = 1; layout_decl (decl, 0); @@ -3537,73 +3544,6 @@ build_compound_literal (tree type, tree init) return complit; } -/* Make TYPE a complete type based on INITIAL_VALUE. - Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered, - 2 if there was no information (in which case assume 1 if DO_DEFAULT). */ - -int -complete_array_type (tree type, tree initial_value, int do_default) -{ - tree maxindex = NULL_TREE; - int value = 0; - - if (initial_value) - { - /* Note MAXINDEX is really the maximum index, - one less than the size. */ - if (TREE_CODE (initial_value) == STRING_CST) - { - int eltsize - = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value))); - maxindex = build_int_cst (NULL_TREE, - (TREE_STRING_LENGTH (initial_value) - / eltsize) - 1); - } - else if (TREE_CODE (initial_value) == CONSTRUCTOR) - { - tree elts = CONSTRUCTOR_ELTS (initial_value); - maxindex = build_int_cst (NULL_TREE, -1); - for (; elts; elts = TREE_CHAIN (elts)) - { - if (TREE_PURPOSE (elts)) - maxindex = TREE_PURPOSE (elts); - else - maxindex = fold (build2 (PLUS_EXPR, integer_type_node, - maxindex, integer_one_node)); - } - } - else - { - /* Make an error message unless that happened already. */ - if (initial_value != error_mark_node) - value = 1; - - /* Prevent further error messages. */ - maxindex = build_int_cst (NULL_TREE, 0); - } - } - - if (!maxindex) - { - if (do_default) - maxindex = build_int_cst (NULL_TREE, 0); - value = 2; - } - - if (maxindex) - { - TYPE_DOMAIN (type) = build_index_type (maxindex); - - gcc_assert (TREE_TYPE (maxindex)); - } - - /* Lay out the type now that we can get the real answer. */ - - layout_type (type); - - return value; -} - /* Determine whether TYPE is a structure with a flexible array member, or a union containing such a structure (possibly recursively). */ @@ -3652,7 +3592,8 @@ check_bitfield_type_and_width (tree *type, tree *width, const char *orig_name) /* Detect and ignore out of range field width and process valid field widths. */ - if (TREE_CODE (*width) != INTEGER_CST) + if (!INTEGRAL_TYPE_P (TREE_TYPE (*width)) + || TREE_CODE (*width) != INTEGER_CST) { error ("bit-field %qs width not an integer constant", name); *width = integer_one_node; @@ -5644,7 +5585,8 @@ build_enumerator (tree name, tree value) undeclared identifier) - just ignore the value expression. */ if (value == error_mark_node) value = 0; - else if (TREE_CODE (value) != INTEGER_CST) + else if (!INTEGRAL_TYPE_P (TREE_TYPE (value)) + || TREE_CODE (value) != INTEGER_CST) { error ("enumerator value for %qE is not an integer constant", name); value = 0; @@ -5713,6 +5655,7 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, { tree decl1, old_decl; tree restype, resdecl; + struct c_label_context *nstack; current_function_returns_value = 0; /* Assume, until we see it does. */ current_function_returns_null = 0; @@ -5721,6 +5664,12 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, current_extern_inline = 0; c_switch_stack = NULL; + nstack = XOBNEW (&parser_obstack, struct c_label_context); + nstack->labels_def = NULL; + nstack->labels_used = NULL; + nstack->next = label_context_stack; + label_context_stack = nstack; + /* Indicate no valid break/continue context by setting these variables to some non-null, non-label value. We'll notice and emit the proper error message in c_finish_bc_stmt. */ @@ -5773,11 +5722,13 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, /* Optionally warn of old-fashioned def with no previous prototype. */ if (warn_strict_prototypes + && old_decl != error_mark_node && TYPE_ARG_TYPES (TREE_TYPE (decl1)) == 0 && C_DECL_ISNT_PROTOTYPE (old_decl)) warning ("function declaration isn%'t a prototype"); /* Optionally warn of any global def with no previous prototype. */ else if (warn_missing_prototypes + && old_decl != error_mark_node && TREE_PUBLIC (decl1) && !MAIN_NAME_P (DECL_NAME (decl1)) && C_DECL_ISNT_PROTOTYPE (old_decl)) @@ -5785,7 +5736,9 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, /* Optionally warn of any def with no previous prototype if the function has already been used. */ else if (warn_missing_prototypes - && old_decl != 0 && TREE_USED (old_decl) + && old_decl != 0 + && old_decl != error_mark_node + && TREE_USED (old_decl) && TYPE_ARG_TYPES (TREE_TYPE (old_decl)) == 0) warning ("%J%qD was used with no prototype before its definition", decl1, decl1); @@ -5798,7 +5751,9 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, /* Optionally warn of any def with no previous declaration if the function has already been used. */ else if (warn_missing_declarations - && old_decl != 0 && TREE_USED (old_decl) + && old_decl != 0 + && old_decl != error_mark_node + && TREE_USED (old_decl) && C_DECL_IMPLICIT (old_decl)) warning ("%J%qD was used with no declaration before its definition", decl1, decl1); @@ -6296,6 +6251,8 @@ finish_function (void) { tree fndecl = current_function_decl; + label_context_stack = label_context_stack->next; + if (TREE_CODE (fndecl) == FUNCTION_DECL && targetm.calls.promote_prototypes (TREE_TYPE (fndecl))) { diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 575ff4d485b..b1a08621cae 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -1089,13 +1089,18 @@ c_common_parse_file (int set_yydebug) i = 0; for (;;) { + /* Start the main input file, if the debug writer wants it. */ + if (debug_hooks->start_end_main_source_file) + (*debug_hooks->start_source_file) (0, this_input_filename); finish_options (); pch_init (); push_file_scope (); c_parse_file (); finish_file (); pop_file_scope (); - + /* And end the main input file, if the debug writer wants it */ + if (debug_hooks->start_end_main_source_file) + (*debug_hooks->end_source_file) (0); if (++i >= num_in_fnames) break; cpp_undef_all (parse_in); diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 1cde4828348..5394093f806 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -106,6 +106,17 @@ struct lang_type GTY(()) sizeof and typeof it is set for other function decls as well. */ #define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (EXP) +/* Record whether a label was defined in a statement expression which + has finished and so can no longer be jumped to. */ +#define C_DECL_UNJUMPABLE_STMT_EXPR(EXP) \ + DECL_LANG_FLAG_6 (LABEL_DECL_CHECK (EXP)) + +/* Record whether a label was the subject of a goto from outside the + current level of statement expression nesting and so cannot be + defined right now. */ +#define C_DECL_UNDEFINABLE_STMT_EXPR(EXP) \ + DECL_LANG_FLAG_7 (LABEL_DECL_CHECK (EXP)) + /* Nonzero for a decl which either doesn't exist or isn't a prototype. N.B. Could be simplified if all built-in decls had complete prototypes (but this is presently difficult because some of them need FILE*). */ @@ -345,6 +356,27 @@ struct language_function GTY(()) int extern_inline; }; +/* Save lists of labels used or defined in particular statement + expression contexts. Allocated on the parser obstack. */ + +struct c_label_list +{ + /* The label at the head of the list. */ + tree label; + /* The rest of the list. */ + struct c_label_list *next; +}; + +struct c_label_context +{ + /* The labels defined at this level of nesting. */ + struct c_label_list *labels_def; + /* The labels used at this level of nesting. */ + struct c_label_list *labels_used; + /* The next outermost context. */ + struct c_label_context *next; +}; + /* in c-parse.in */ extern void c_parse_init (void); @@ -373,7 +405,6 @@ extern struct c_declarator *build_array_declarator (tree, struct c_declspecs *, extern tree build_enumerator (tree, tree); extern void check_for_loop_decls (void); extern void mark_forward_parm_decls (void); -extern int complete_array_type (tree, tree, int); extern void declare_parm_level (void); extern void undeclared_variable (tree); extern tree declare_label (tree); @@ -448,6 +479,7 @@ extern int in_sizeof; extern int in_typeof; extern struct c_switch *c_switch_stack; +extern struct c_label_context *label_context_stack; extern tree require_complete_type (tree); extern int same_translation_unit_p (tree, tree); diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 3a38d22923b..7f98575937e 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -64,6 +64,8 @@ int in_sizeof; /* The level of nesting inside "typeof". */ int in_typeof; +struct c_label_context *label_context_stack; + /* Nonzero if we've already printed a "missing braces around initializer" message within this initializer. */ static int missing_braces_mentioned; @@ -6479,6 +6481,23 @@ c_finish_goto_label (tree label) if (!decl) return NULL_TREE; + if (C_DECL_UNJUMPABLE_STMT_EXPR (decl)) + { + error ("jump into statement expression"); + return NULL_TREE; + } + + if (!C_DECL_UNDEFINABLE_STMT_EXPR (decl)) + { + /* No jump from outside this statement expression context, so + record that there is a jump from within this context. */ + struct c_label_list *nlist; + nlist = XOBNEW (&parser_obstack, struct c_label_list); + nlist->next = label_context_stack->labels_used; + nlist->label = decl; + label_context_stack->labels_used = nlist; + } + TREE_USED (decl) = 1; return add_stmt (build1 (GOTO_EXPR, void_type_node, decl)); } @@ -6605,6 +6624,11 @@ struct c_switch { of the GNU case range extension. */ splay_tree cases; + /* Number of nested statement expressions within this switch + statement; if nonzero, case and default labels may not + appear. */ + unsigned int blocked_stmt_expr; + /* The next node on the stack. */ struct c_switch *next; }; @@ -6659,6 +6683,7 @@ c_start_case (tree exp) cs->switch_stmt = build_stmt (SWITCH_STMT, exp, NULL_TREE, orig_type); cs->orig_type = orig_type; cs->cases = splay_tree_new (case_compare, NULL, NULL); + cs->blocked_stmt_expr = 0; cs->next = c_switch_stack; c_switch_stack = cs; @@ -6672,7 +6697,7 @@ do_case (tree low_value, tree high_value) { tree label = NULL_TREE; - if (c_switch_stack) + if (c_switch_stack && !c_switch_stack->blocked_stmt_expr) { label = c_add_case_label (c_switch_stack->cases, SWITCH_STMT_COND (c_switch_stack->switch_stmt), @@ -6681,6 +6706,15 @@ do_case (tree low_value, tree high_value) if (label == error_mark_node) label = NULL_TREE; } + else if (c_switch_stack && c_switch_stack->blocked_stmt_expr) + { + if (low_value) + error ("case label in statement expression not containing " + "enclosing switch statement"); + else + error ("% label in statement expression not containing " + "enclosing switch statement"); + } else if (low_value) error ("case label not within a switch statement"); else @@ -6698,6 +6732,8 @@ c_finish_case (tree body) SWITCH_STMT_BODY (cs->switch_stmt) = body; + gcc_assert (!cs->blocked_stmt_expr); + /* Emit warnings as needed. */ c_do_switch_warnings (cs->cases, cs->switch_stmt); @@ -6964,12 +7000,30 @@ tree c_begin_stmt_expr (void) { tree ret; + struct c_label_context *nstack; + struct c_label_list *glist; /* We must force a BLOCK for this level so that, if it is not expanded later, there is a way to turn off the entire subtree of blocks that are contained in it. */ keep_next_level (); ret = c_begin_compound_stmt (true); + if (c_switch_stack) + { + c_switch_stack->blocked_stmt_expr++; + gcc_assert (c_switch_stack->blocked_stmt_expr != 0); + } + for (glist = label_context_stack->labels_used; + glist != NULL; + glist = glist->next) + { + C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 1; + } + nstack = XOBNEW (&parser_obstack, struct c_label_context); + nstack->labels_def = NULL; + nstack->labels_used = NULL; + nstack->next = label_context_stack; + label_context_stack = nstack; /* Mark the current statement list as belonging to a statement list. */ STATEMENT_LIST_STMT_EXPR (ret) = 1; @@ -6982,8 +7036,36 @@ c_finish_stmt_expr (tree body) { tree last, type, tmp, val; tree *last_p; + struct c_label_list *dlist, *glist, *glist_prev = NULL; body = c_end_compound_stmt (body, true); + if (c_switch_stack) + { + gcc_assert (c_switch_stack->blocked_stmt_expr != 0); + c_switch_stack->blocked_stmt_expr--; + } + /* It is no longer possible to jump to labels defined within this + statement expression. */ + for (dlist = label_context_stack->labels_def; + dlist != NULL; + dlist = dlist->next) + { + C_DECL_UNJUMPABLE_STMT_EXPR (dlist->label) = 1; + } + /* It is again possible to define labels with a goto just outside + this statement expression. */ + for (glist = label_context_stack->next->labels_used; + glist != NULL; + glist = glist->next) + { + C_DECL_UNDEFINABLE_STMT_EXPR (glist->label) = 0; + glist_prev = glist; + } + if (glist_prev != NULL) + glist_prev->next = label_context_stack->labels_used; + else + label_context_stack->next->labels_used = label_context_stack->labels_used; + label_context_stack = label_context_stack->next; /* Locate the last statement in BODY. See c_end_compound_stmt about always returning a BIND_EXPR. */ diff --git a/gcc/c.opt b/gcc/c.opt index 8267e0ee497..ab0d5a65552 100644 --- a/gcc/c.opt +++ b/gcc/c.opt @@ -102,7 +102,7 @@ C ObjC C++ ObjC++ Undocumented F C ObjC C++ ObjC++ Joined Separate --F Add to the end of the main framework include path +-F Add to the end of the main framework include path H C ObjC C++ ObjC++ @@ -436,7 +436,7 @@ Warn when a pointer differs in signedness in an assignment. ansi C ObjC C++ ObjC++ -A synonym for -std=c89. In a future version of GCC it will become synonymous with -std=c99 instead +A synonym for -std=c89 (for C) or -std=c++98 (for C++). d C ObjC C++ ObjC++ Joined @@ -508,7 +508,7 @@ C ObjC C++ ObjC++ Joined RejectNegative finput-charset= C ObjC C++ ObjC++ Joined RejectNegative --finput-charset= Specify the default character set for source files. +-finput-charset= Specify the default character set for source files. fexternal-templates @@ -696,7 +696,7 @@ C++ ObjC++ Use __cxa_atexit to register destructors fvisibility-inlines-hidden -C++ +C++ ObjC++ Marks all inlined methods as having hidden visibility fvtable-gc @@ -835,7 +835,7 @@ Deprecated in favor of -std=gnu99 std=iso9899:1990 C ObjC -Deprecated in favor of -std=c89 +Conform to the ISO 1990 C standard std=iso9899:199409 C ObjC @@ -843,11 +843,11 @@ Conform to the ISO 1990 C standard as amended in 1994 std=iso9899:1999 C ObjC -Deprecated in favor of -std=c99 +Conform to the ISO 1999 C standard std=iso9899:199x C ObjC -Deprecated in favor of -std=c99 +Deprecated in favor of -std=iso9899:1999 traditional-cpp C ObjC C++ ObjC++ diff --git a/gcc/calls.c b/gcc/calls.c index 291f88cb835..321ab693214 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1994,8 +1994,10 @@ expand_call (tree exp, rtx target, int ignore) structure_value_addr = expand_expr (return_arg, NULL_RTX, VOIDmode, EXPAND_NORMAL); } +#if 0 else if (target && MEM_P (target)) structure_value_addr = XEXP (target, 0); +#endif else { /* For variable-sized objects, we must be called with a target @@ -2257,10 +2259,14 @@ expand_call (tree exp, rtx target, int ignore) Also, do all pending adjustments now if there is any chance this might be a call to alloca or if we are expanding a sibling call sequence or if we are calling a function that is to return - with stack pointer depressed. */ + with stack pointer depressed. + Also do the adjustments before a throwing call, otherwise + exception handling can fail; PR 19225. */ if (pending_stack_adjust >= 32 || (pending_stack_adjust > 0 && (flags & (ECF_MAY_BE_ALLOCA | ECF_SP_DEPRESSED))) + || (pending_stack_adjust > 0 + && flag_exceptions && !(flags & ECF_NOTHROW)) || pass == 0) do_pending_stack_adjust (); diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c index 241e97628e3..9470506566c 100644 --- a/gcc/cfglayout.c +++ b/gcc/cfglayout.c @@ -523,6 +523,12 @@ reemit_insn_block_notes (void) { tree this_block; + /* Avoid putting scope notes between jump table and its label. */ + if (JUMP_P (insn) + && (GET_CODE (PATTERN (insn)) == ADDR_VEC + || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC)) + continue; + this_block = insn_scope (insn); /* For sequences compute scope resulting from merging all scopes of instructions nested inside. */ diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 7d1cca20df1..3587c8e1f0c 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -96,6 +96,10 @@ The varpool data structure: #include "output.h" #include "intl.h" +static void cgraph_node_remove_callers (struct cgraph_node *node); +static inline void cgraph_edge_remove_caller (struct cgraph_edge *e); +static inline void cgraph_edge_remove_callee (struct cgraph_edge *e); + /* Hash table used to convert declarations into nodes. */ static GTY((param_is (struct cgraph_node))) htab_t cgraph_hash; @@ -289,30 +293,55 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee, edge->caller = caller; edge->callee = callee; edge->call_expr = call_expr; + edge->prev_caller = NULL; edge->next_caller = callee->callers; + if (callee->callers) + callee->callers->prev_caller = edge; + edge->prev_callee = NULL; edge->next_callee = caller->callees; + if (caller->callees) + caller->callees->prev_callee = edge; caller->callees = edge; callee->callers = edge; return edge; } -/* Remove the edge E the cgraph. */ +/* Remove the edge E from the list of the callers of the callee. */ + +static inline void +cgraph_edge_remove_callee (struct cgraph_edge *e) +{ + if (e->prev_caller) + e->prev_caller->next_caller = e->next_caller; + if (e->next_caller) + e->next_caller->prev_caller = e->prev_caller; + if (!e->prev_caller) + e->callee->callers = e->next_caller; +} + +/* Remove the edge E from the list of the callees of the caller. */ + +static inline void +cgraph_edge_remove_caller (struct cgraph_edge *e) +{ + if (e->prev_callee) + e->prev_callee->next_callee = e->next_callee; + if (e->next_callee) + e->next_callee->prev_callee = e->prev_callee; + if (!e->prev_callee) + e->caller->callees = e->next_callee; +} + +/* Remove the edge E in the cgraph. */ void cgraph_remove_edge (struct cgraph_edge *e) { - struct cgraph_edge **edge, **edge2; + /* Remove from callers list of the callee. */ + cgraph_edge_remove_callee (e); - for (edge = &e->callee->callers; *edge && *edge != e; - edge = &((*edge)->next_caller)) - continue; - gcc_assert (*edge); - *edge = (*edge)->next_caller; - for (edge2 = &e->caller->callees; *edge2 && *edge2 != e; - edge2 = &(*edge2)->next_callee) - continue; - gcc_assert (*edge2); - *edge2 = (*edge2)->next_callee; + /* Remove from callees list of the callers. */ + cgraph_edge_remove_caller (e); } /* Redirect callee of E to N. The function does not update underlying @@ -321,16 +350,46 @@ cgraph_remove_edge (struct cgraph_edge *e) void cgraph_redirect_edge_callee (struct cgraph_edge *e, struct cgraph_node *n) { - struct cgraph_edge **edge; + /* Remove from callers list of the current callee. */ + cgraph_edge_remove_callee (e); - for (edge = &e->callee->callers; *edge && *edge != e; - edge = &((*edge)->next_caller)) - continue; - gcc_assert (*edge); - *edge = (*edge)->next_caller; - e->callee = n; + /* Insert to callers list of the new callee. */ + e->prev_caller = NULL; + if (n->callers) + n->callers->prev_caller = e; e->next_caller = n->callers; n->callers = e; + e->callee = n; +} + +/* Remove all callees from the node. */ + +void +cgraph_node_remove_callees (struct cgraph_node *node) +{ + struct cgraph_edge *e; + + /* It is sufficient to remove the edges from the lists of callers of + the callees. The callee list of the node can be zapped with one + assignment. */ + for (e = node->callees; e; e = e->next_callee) + cgraph_edge_remove_callee (e); + node->callees = NULL; +} + +/* Remove all callers from the node. */ + +static void +cgraph_node_remove_callers (struct cgraph_node *node) +{ + struct cgraph_edge *e; + + /* It is sufficient to remove the edges from the lists of callees of + the callers. The caller list of the node can be zapped with one + assignment. */ + for (e = node->callers; e; e = e->next_caller) + cgraph_edge_remove_caller (e); + node->callers = NULL; } /* Remove the node from cgraph. */ @@ -341,10 +400,8 @@ cgraph_remove_node (struct cgraph_node *node) void **slot; bool check_dead = 1; - while (node->callers) - cgraph_remove_edge (node->callers); - while (node->callees) - cgraph_remove_edge (node->callees); + cgraph_node_remove_callers (node); + cgraph_node_remove_callees (node); while (node->nested) cgraph_remove_node (node->nested); if (node->origin) @@ -417,6 +474,7 @@ cgraph_mark_reachable_node (struct cgraph_node *node) { notice_global_symbol (node->decl); node->reachable = 1; + gcc_assert (!cgraph_global_info_ready); node->next_needed = cgraph_nodes_queue; cgraph_nodes_queue = node; @@ -670,11 +728,11 @@ cgraph_varpool_assemble_pending_decls (void) while (cgraph_varpool_nodes_queue) { - tree decl = cgraph_varpool_nodes_queue->decl; struct cgraph_varpool_node *node = cgraph_varpool_nodes_queue; + tree decl = node->decl; cgraph_varpool_nodes_queue = cgraph_varpool_nodes_queue->next_needed; - if (!TREE_ASM_WRITTEN (decl)) + if (!TREE_ASM_WRITTEN (decl) && !node->alias) { assemble_variable (decl, 0, 1, 0); changed = true; diff --git a/gcc/cgraph.h b/gcc/cgraph.h index ae902b2ff6c..eae162ec17d 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -117,13 +117,17 @@ struct cgraph_node GTY((chain_next ("%h.next"), chain_prev ("%h.previous"))) bool analyzed; /* Set when function is scheduled to be assembled. */ bool output; + /* Set for aliases once they got through assemble_alias. */ + bool alias; }; -struct cgraph_edge GTY((chain_next ("%h.next_caller"))) +struct cgraph_edge GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"))) { struct cgraph_node *caller; struct cgraph_node *callee; + struct cgraph_edge *prev_caller; struct cgraph_edge *next_caller; + struct cgraph_edge *prev_callee; struct cgraph_edge *next_callee; tree call_expr; PTR GTY ((skip (""))) aux; @@ -150,6 +154,8 @@ struct cgraph_varpool_node GTY(()) bool finalized; /* Set when function is scheduled to be assembled. */ bool output; + /* Set for aliases once they got through assemble_alias. */ + bool alias; }; extern GTY(()) struct cgraph_node *cgraph_nodes; @@ -165,6 +171,7 @@ void dump_cgraph (FILE *); void dump_cgraph_node (FILE *, struct cgraph_node *); void cgraph_remove_edge (struct cgraph_edge *); void cgraph_remove_node (struct cgraph_node *); +void cgraph_node_remove_callees (struct cgraph_node *node); struct cgraph_edge *cgraph_create_edge (struct cgraph_node *, struct cgraph_node *, tree); diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 3df79a45f37..9fef33e9557 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -300,7 +300,9 @@ cgraph_assemble_pending_functions (void) cgraph_nodes_queue = cgraph_nodes_queue->next_needed; n->next_needed = NULL; - if (!n->global.inlined_to && !DECL_EXTERNAL (n->decl)) + if (!n->global.inlined_to + && !n->alias + && !DECL_EXTERNAL (n->decl)) { cgraph_expand_function (n); output = true; @@ -356,8 +358,7 @@ cgraph_finalize_function (tree decl, bool nested) cgraph_remove_node (n); } - while (node->callees) - cgraph_remove_edge (node->callees); + cgraph_node_remove_callees (node); /* We may need to re-queue the node for assembling in case we already proceeded it and ignored as not needed. */ @@ -681,6 +682,8 @@ cgraph_finalize_compilation_unit (void) { struct cgraph_node *node; + finish_aliases_1 (); + if (!flag_unit_at_a_time) { cgraph_assemble_pending_functions (); @@ -843,8 +846,7 @@ cgraph_expand_function (struct cgraph_node *node) DECL_INITIAL (node->decl) = error_mark_node; /* Eliminate all call edges. This is important so the call_expr no longer points to the dead function body. */ - while (node->callees) - cgraph_remove_edge (node->callees); + cgraph_node_remove_callees (node); } } @@ -1006,8 +1008,7 @@ cgraph_remove_unreachable_nodes (void) DECL_STRUCT_FUNCTION (node->decl) = NULL; DECL_INITIAL (node->decl) = error_mark_node; } - while (node->callees) - cgraph_remove_edge (node->callees); + cgraph_node_remove_callees (node); node->analyzed = false; } else @@ -1031,7 +1032,12 @@ static int cgraph_estimate_size_after_inlining (int times, struct cgraph_node *to, struct cgraph_node *what) { - return (what->global.insns - INSNS_PER_CALL) * times + to->global.insns; + tree fndecl = what->decl; + tree arg; + int call_insns = PARAM_VALUE (PARAM_INLINE_CALL_COST); + for (arg = DECL_ARGUMENTS (fndecl); arg; arg = TREE_CHAIN (arg)) + call_insns += estimate_move_cost (TREE_TYPE (arg)); + return (what->global.insns - call_insns) * times + to->global.insns; } /* Estimate the growth caused by inlining NODE into all callees. */ @@ -1125,7 +1131,8 @@ cgraph_mark_inline_edge (struct cgraph_edge *e) to->global.insns = new_insns; } gcc_assert (what->global.inlined_to == to); - overall_insns += new_insns - old_insns; + if (new_insns > old_insns) + overall_insns += new_insns - old_insns; ncalls_inlined++; } diff --git a/gcc/combine.c b/gcc/combine.c index 73b12bb4f0c..58c82a674a2 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -386,6 +386,7 @@ static rtx known_cond (rtx, enum rtx_code, rtx, rtx); static int rtx_equal_for_field_assignment_p (rtx, rtx); static rtx make_field_assignment (rtx); static rtx apply_distributive_law (rtx); +static rtx distribute_and_simplify_rtx (rtx, int); static rtx simplify_and_const_int (rtx, enum machine_mode, rtx, unsigned HOST_WIDE_INT); static int merge_outer_ops (enum rtx_code *, HOST_WIDE_INT *, enum rtx_code, @@ -394,7 +395,6 @@ static rtx simplify_shift_const (rtx, enum rtx_code, enum machine_mode, rtx, int); static int recog_for_combine (rtx *, rtx, rtx *); static rtx gen_lowpart_for_combine (enum machine_mode, rtx); -static rtx gen_binary (enum rtx_code, enum machine_mode, rtx, rtx); static enum rtx_code simplify_comparison (enum rtx_code, rtx *, rtx *); static void update_table_tick (rtx); static void record_value_for_reg (rtx, rtx, rtx); @@ -1316,9 +1316,9 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ, if (INSN_P (p) && p != succ && volatile_insn_p (PATTERN (p))) return 0; - /* If INSN or I2 contains an autoincrement or autodecrement, - make sure that register is not used between there and I3, - and not already used in I3 either. + /* If INSN contains an autoincrement or autodecrement, make sure that + register is not used between there and I3, and not already used in + I3 either. Neither must it be used in PRED or SUCC, if they exist. Also insist that I3 not be a jump; if it were one and the incremented register were spilled, we would lose. */ @@ -1327,6 +1327,10 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ, if (REG_NOTE_KIND (link) == REG_INC && (JUMP_P (i3) || reg_used_between_p (XEXP (link, 0), insn, i3) + || (pred != NULL_RTX + && reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (pred))) + || (succ != NULL_RTX + && reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (succ))) || reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (i3)))) return 0; #endif @@ -2417,6 +2421,20 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p) SUBST (*split, newdest); i2_code_number = recog_for_combine (&newi2pat, i2, &new_i2_notes); + /* recog_for_combine might have added CLOBBERs to newi2pat. + Make sure NEWPAT does not depend on the clobbered regs. */ + if (GET_CODE (newi2pat) == PARALLEL) + for (i = XVECLEN (newi2pat, 0) - 1; i >= 0; i--) + if (GET_CODE (XVECEXP (newi2pat, 0, i)) == CLOBBER) + { + rtx reg = XEXP (XVECEXP (newi2pat, 0, i), 0); + if (reg_overlap_mentioned_p (reg, newpat)) + { + undo_all (); + return 0; + } + } + /* If the split point was a MULT and we didn't have one before, don't use one now. */ if (i2_code_number >= 0 && ! (split_code == MULT && ! have_mult)) @@ -3177,14 +3195,16 @@ find_split_point (rtx *loc, rtx insn) if (src == mask) SUBST (SET_SRC (x), - gen_binary (IOR, mode, dest, GEN_INT (src << pos))); + simplify_gen_binary (IOR, mode, dest, GEN_INT (src << pos))); else - SUBST (SET_SRC (x), - gen_binary (IOR, mode, - gen_binary (AND, mode, dest, - gen_int_mode (~(mask << pos), - mode)), - GEN_INT (src << pos))); + { + rtx negmask = gen_int_mode (~(mask << pos), mode); + SUBST (SET_SRC (x), + simplify_gen_binary (IOR, mode, + simplify_gen_binary (AND, mode, + dest, negmask), + GEN_INT (src << pos))); + } SUBST (SET_DEST (x), dest); @@ -3720,47 +3740,6 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) SUBST (XEXP (x, 1), temp); } - /* If this is a PLUS, MINUS, or MULT, and the first operand is the - sign extension of a PLUS with a constant, reverse the order of the sign - extension and the addition. Note that this not the same as the original - code, but overflow is undefined for signed values. Also note that the - PLUS will have been partially moved "inside" the sign-extension, so that - the first operand of X will really look like: - (ashiftrt (plus (ashift A C4) C5) C4). - We convert this to - (plus (ashiftrt (ashift A C4) C2) C4) - and replace the first operand of X with that expression. Later parts - of this function may simplify the expression further. - - For example, if we start with (mult (sign_extend (plus A C1)) C2), - we swap the SIGN_EXTEND and PLUS. Later code will apply the - distributive law to produce (plus (mult (sign_extend X) C1) C3). - - We do this to simplify address expressions. */ - - if ((code == PLUS || code == MINUS || code == MULT) - && GET_CODE (XEXP (x, 0)) == ASHIFTRT - && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS - && GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == ASHIFT - && GET_CODE (XEXP (XEXP (XEXP (XEXP (x, 0), 0), 0), 1)) == CONST_INT - && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT - && XEXP (XEXP (XEXP (XEXP (x, 0), 0), 0), 1) == XEXP (XEXP (x, 0), 1) - && GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 1)) == CONST_INT - && (temp = simplify_binary_operation (ASHIFTRT, mode, - XEXP (XEXP (XEXP (x, 0), 0), 1), - XEXP (XEXP (x, 0), 1))) != 0) - { - rtx new - = simplify_shift_const (NULL_RTX, ASHIFT, mode, - XEXP (XEXP (XEXP (XEXP (x, 0), 0), 0), 0), - INTVAL (XEXP (XEXP (x, 0), 1))); - - new = simplify_shift_const (NULL_RTX, ASHIFTRT, mode, new, - INTVAL (XEXP (XEXP (x, 0), 1))); - - SUBST (XEXP (x, 0), gen_binary (PLUS, mode, new, temp)); - } - /* If this is a simple operation applied to an IF_THEN_ELSE, try applying it to the arms of the IF_THEN_ELSE. This often simplifies things. Check for cases where both arms are testing the same @@ -3815,12 +3794,14 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) /* If the result values are STORE_FLAG_VALUE and zero, we can just make the comparison operation. */ if (true_rtx == const_true_rtx && false_rtx == const0_rtx) - x = gen_binary (cond_code, mode, cond, cop1); + x = simplify_gen_relational (cond_code, mode, VOIDmode, + cond, cop1); else if (true_rtx == const0_rtx && false_rtx == const_true_rtx && ((reversed = reversed_comparison_code_parts (cond_code, cond, cop1, NULL)) != UNKNOWN)) - x = gen_binary (reversed, mode, cond, cop1); + x = simplify_gen_relational (reversed, mode, VOIDmode, + cond, cop1); /* Likewise, we can make the negate of a comparison operation if the result values are - STORE_FLAG_VALUE and zero. */ @@ -3828,8 +3809,9 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) && INTVAL (true_rtx) == - STORE_FLAG_VALUE && false_rtx == const0_rtx) x = simplify_gen_unary (NEG, mode, - gen_binary (cond_code, mode, cond, - cop1), + simplify_gen_relational (cond_code, + mode, VOIDmode, + cond, cop1), mode); else if (GET_CODE (false_rtx) == CONST_INT && INTVAL (false_rtx) == - STORE_FLAG_VALUE @@ -3838,13 +3820,17 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) (cond_code, cond, cop1, NULL)) != UNKNOWN)) x = simplify_gen_unary (NEG, mode, - gen_binary (reversed, mode, - cond, cop1), + simplify_gen_relational (reversed, + mode, VOIDmode, + cond, cop1), mode); else return gen_rtx_IF_THEN_ELSE (mode, - gen_binary (cond_code, VOIDmode, - cond, cop1), + simplify_gen_relational (cond_code, + mode, + VOIDmode, + cond, + cop1), true_rtx, false_rtx); code = GET_CODE (x); @@ -3947,7 +3933,7 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) } if (inner) - return gen_binary (code, mode, other, inner); + return simplify_gen_binary (code, mode, other, inner); } } @@ -4049,7 +4035,8 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) if (GET_CODE (XEXP (x, 0)) == XOR && XEXP (XEXP (x, 0), 1) == const1_rtx && nonzero_bits (XEXP (XEXP (x, 0), 0), mode) == 1) - return gen_binary (PLUS, mode, XEXP (XEXP (x, 0), 0), constm1_rtx); + return simplify_gen_binary (PLUS, mode, XEXP (XEXP (x, 0), 0), + constm1_rtx); temp = expand_compound_operation (XEXP (x, 0)); @@ -4277,8 +4264,9 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) in1 = XEXP (XEXP (XEXP (x, 0), 0), 0); in2 = XEXP (XEXP (x, 0), 1); - return gen_binary (MINUS, mode, XEXP (x, 1), - gen_binary (MULT, mode, in1, in2)); + return simplify_gen_binary (MINUS, mode, XEXP (x, 1), + simplify_gen_binary (MULT, mode, + in1, in2)); } /* If we have (plus (plus (A const) B)), associate it so that CONST is @@ -4287,10 +4275,11 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) they are now checked elsewhere. */ if (GET_CODE (XEXP (x, 0)) == PLUS && CONSTANT_ADDRESS_P (XEXP (XEXP (x, 0), 1))) - return gen_binary (PLUS, mode, - gen_binary (PLUS, mode, XEXP (XEXP (x, 0), 0), - XEXP (x, 1)), - XEXP (XEXP (x, 0), 1)); + return simplify_gen_binary (PLUS, mode, + simplify_gen_binary (PLUS, mode, + XEXP (XEXP (x, 0), 0), + XEXP (x, 1)), + XEXP (XEXP (x, 0), 1)); /* (plus (xor (and (const_int pow2 - 1)) ) <-c>) when c is (const_int (pow2 + 1) / 2) is a sign extension of a @@ -4356,7 +4345,7 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) & nonzero_bits (XEXP (x, 1), mode)) == 0) { /* Try to simplify the expression further. */ - rtx tor = gen_binary (IOR, mode, XEXP (x, 0), XEXP (x, 1)); + rtx tor = simplify_gen_binary (IOR, mode, XEXP (x, 0), XEXP (x, 1)); temp = combine_simplify_rtx (tor, mode, in_dest); /* If we could, great. If not, do not go ahead with the IOR @@ -4396,8 +4385,10 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) in1 = XEXP (XEXP (XEXP (x, 1), 0), 0); in2 = XEXP (XEXP (x, 1), 1); - return gen_binary (PLUS, mode, gen_binary (MULT, mode, in1, in2), - XEXP (x, 0)); + return simplify_gen_binary (PLUS, mode, + simplify_gen_binary (MULT, mode, + in1, in2), + XEXP (x, 0)); } /* Canonicalize (minus (neg A) (mult B C)) to @@ -4409,17 +4400,20 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) in1 = simplify_gen_unary (NEG, mode, XEXP (XEXP (x, 1), 0), mode); in2 = XEXP (XEXP (x, 1), 1); - return gen_binary (MINUS, mode, gen_binary (MULT, mode, in1, in2), - XEXP (XEXP (x, 0), 0)); + return simplify_gen_binary (MINUS, mode, + simplify_gen_binary (MULT, mode, + in1, in2), + XEXP (XEXP (x, 0), 0)); } /* Canonicalize (minus A (plus B C)) to (minus (minus A B) C) for integers. */ if (GET_CODE (XEXP (x, 1)) == PLUS && INTEGRAL_MODE_P (mode)) - return gen_binary (MINUS, mode, - gen_binary (MINUS, mode, XEXP (x, 0), - XEXP (XEXP (x, 1), 0)), - XEXP (XEXP (x, 1), 1)); + return simplify_gen_binary (MINUS, mode, + simplify_gen_binary (MINUS, mode, + XEXP (x, 0), + XEXP (XEXP (x, 1), 0)), + XEXP (XEXP (x, 1), 1)); break; case MULT: @@ -4429,17 +4423,11 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) if (GET_CODE (XEXP (x, 0)) == PLUS) { - x = apply_distributive_law - (gen_binary (PLUS, mode, - gen_binary (MULT, mode, - XEXP (XEXP (x, 0), 0), XEXP (x, 1)), - gen_binary (MULT, mode, - XEXP (XEXP (x, 0), 1), - copy_rtx (XEXP (x, 1))))); - - if (GET_CODE (x) != MULT) - return x; + rtx result = distribute_and_simplify_rtx (x, 0); + if (result) + return result; } + /* Try simplify a*(b/c) as (a*b)/c. */ if (FLOAT_MODE_P (mode) && flag_unsafe_math_optimizations && GET_CODE (XEXP (x, 0)) == DIV) @@ -4448,7 +4436,7 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) XEXP (XEXP (x, 0), 0), XEXP (x, 1)); if (tem) - return gen_binary (DIV, mode, tem, XEXP (XEXP (x, 0), 1)); + return simplify_gen_binary (DIV, mode, tem, XEXP (XEXP (x, 0), 1)); } break; @@ -4528,9 +4516,9 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int in_dest) && nonzero_bits (op0, mode) == 1) { op0 = expand_compound_operation (op0); - return gen_binary (XOR, mode, - gen_lowpart (mode, op0), - const1_rtx); + return simplify_gen_binary (XOR, mode, + gen_lowpart (mode, op0), + const1_rtx); } else if (STORE_FLAG_VALUE == 1 @@ -4772,7 +4760,8 @@ simplify_if_then_else (rtx x) /* Simplify storing of the truth value. */ if (comparison_p && true_rtx == const_true_rtx && false_rtx == const0_rtx) - return gen_binary (true_code, mode, XEXP (cond, 0), XEXP (cond, 1)); + return simplify_gen_relational (true_code, mode, VOIDmode, + XEXP (cond, 0), XEXP (cond, 1)); /* Also when the truth value has to be reversed. */ if (comparison_p @@ -4922,16 +4911,16 @@ simplify_if_then_else (rtx x) { case GE: case GT: - return gen_binary (SMAX, mode, true_rtx, false_rtx); + return simplify_gen_binary (SMAX, mode, true_rtx, false_rtx); case LE: case LT: - return gen_binary (SMIN, mode, true_rtx, false_rtx); + return simplify_gen_binary (SMIN, mode, true_rtx, false_rtx); case GEU: case GTU: - return gen_binary (UMAX, mode, true_rtx, false_rtx); + return simplify_gen_binary (UMAX, mode, true_rtx, false_rtx); case LEU: case LTU: - return gen_binary (UMIN, mode, true_rtx, false_rtx); + return simplify_gen_binary (UMIN, mode, true_rtx, false_rtx); default: break; } @@ -5044,12 +5033,14 @@ simplify_if_then_else (rtx x) if (z) { - temp = subst (gen_binary (true_code, m, cond_op0, cond_op1), + temp = subst (simplify_gen_relational (true_code, m, VOIDmode, + cond_op0, cond_op1), pc_rtx, pc_rtx, 0, 0); - temp = gen_binary (MULT, m, temp, - gen_binary (MULT, m, c1, const_true_rtx)); + temp = simplify_gen_binary (MULT, m, temp, + simplify_gen_binary (MULT, m, c1, + const_true_rtx)); temp = subst (temp, pc_rtx, pc_rtx, 0, 0); - temp = gen_binary (op, m, gen_lowpart (m, z), temp); + temp = simplify_gen_binary (op, m, gen_lowpart (m, z), temp); if (extend_op != UNKNOWN) temp = simplify_gen_unary (extend_op, mode, temp, m); @@ -5234,7 +5225,8 @@ simplify_set (rtx x) PUT_CODE (*cc_use, old_code); other_changed = 0; - op0 = gen_binary (XOR, GET_MODE (op0), op0, GEN_INT (mask)); + op0 = simplify_gen_binary (XOR, GET_MODE (op0), + op0, GEN_INT (mask)); } } } @@ -5398,18 +5390,19 @@ simplify_set (rtx x) && rtx_equal_p (XEXP (false_rtx, 1), true_rtx)) term1 = true_rtx, false_rtx = XEXP (false_rtx, 0), true_rtx = const0_rtx; - term2 = gen_binary (AND, GET_MODE (src), - XEXP (XEXP (src, 0), 0), true_rtx); - term3 = gen_binary (AND, GET_MODE (src), - simplify_gen_unary (NOT, GET_MODE (src), - XEXP (XEXP (src, 0), 0), - GET_MODE (src)), - false_rtx); + term2 = simplify_gen_binary (AND, GET_MODE (src), + XEXP (XEXP (src, 0), 0), true_rtx); + term3 = simplify_gen_binary (AND, GET_MODE (src), + simplify_gen_unary (NOT, GET_MODE (src), + XEXP (XEXP (src, 0), 0), + GET_MODE (src)), + false_rtx); SUBST (SET_SRC (x), - gen_binary (IOR, GET_MODE (src), - gen_binary (IOR, GET_MODE (src), term1, term2), - term3)); + simplify_gen_binary (IOR, GET_MODE (src), + simplify_gen_binary (IOR, GET_MODE (src), + term1, term2), + term3)); src = SET_SRC (x); } @@ -5444,29 +5437,31 @@ simplify_logical (rtx x) if (GET_CODE (op0) == XOR && rtx_equal_p (XEXP (op0, 0), op1) && ! side_effects_p (op1)) - x = gen_binary (AND, mode, - simplify_gen_unary (NOT, mode, XEXP (op0, 1), mode), - op1); + x = simplify_gen_binary (AND, mode, + simplify_gen_unary (NOT, mode, + XEXP (op0, 1), mode), + op1); if (GET_CODE (op0) == XOR && rtx_equal_p (XEXP (op0, 1), op1) && ! side_effects_p (op1)) - x = gen_binary (AND, mode, - simplify_gen_unary (NOT, mode, XEXP (op0, 0), mode), - op1); + x = simplify_gen_binary (AND, mode, + simplify_gen_unary (NOT, mode, + XEXP (op0, 0), mode), + op1); /* Similarly for (~(A ^ B)) & A. */ if (GET_CODE (op0) == NOT && GET_CODE (XEXP (op0, 0)) == XOR && rtx_equal_p (XEXP (XEXP (op0, 0), 0), op1) && ! side_effects_p (op1)) - x = gen_binary (AND, mode, XEXP (XEXP (op0, 0), 1), op1); + x = simplify_gen_binary (AND, mode, XEXP (XEXP (op0, 0), 1), op1); if (GET_CODE (op0) == NOT && GET_CODE (XEXP (op0, 0)) == XOR && rtx_equal_p (XEXP (XEXP (op0, 0), 1), op1) && ! side_effects_p (op1)) - x = gen_binary (AND, mode, XEXP (XEXP (op0, 0), 0), op1); + x = simplify_gen_binary (AND, mode, XEXP (XEXP (op0, 0), 0), op1); /* We can call simplify_and_const_int only if we don't lose any (sign) bits when converting INTVAL (op1) to @@ -5486,8 +5481,9 @@ simplify_logical (rtx x) && GET_CODE (XEXP (op0, 1)) == CONST_INT && GET_CODE (op1) == CONST_INT && (INTVAL (XEXP (op0, 1)) & INTVAL (op1)) != 0) - return gen_binary (IOR, mode, - gen_binary (AND, mode, XEXP (op0, 0), + return simplify_gen_binary (IOR, mode, + simplify_gen_binary + (AND, mode, XEXP (op0, 0), GEN_INT (INTVAL (XEXP (op0, 1)) & ~INTVAL (op1))), op1); @@ -5506,54 +5502,21 @@ simplify_logical (rtx x) && ! side_effects_p (XEXP (op0, 1))) return op1; - /* In the following group of tests (and those in case IOR below), - we start with some combination of logical operations and apply - the distributive law followed by the inverse distributive law. - Most of the time, this results in no change. However, if some of - the operands are the same or inverses of each other, simplifications - will result. - - For example, (and (ior A B) (not B)) can occur as the result of - expanding a bit field assignment. When we apply the distributive - law to this, we get (ior (and (A (not B))) (and (B (not B)))), - which then simplifies to (and (A (not B))). - - If we have (and (ior A B) C), apply the distributive law and then - the inverse distributive law to see if things simplify. */ - + /* If we have any of (and (ior A B) C) or (and (xor A B) C), + apply the distributive law and then the inverse distributive + law to see if things simplify. */ if (GET_CODE (op0) == IOR || GET_CODE (op0) == XOR) { - x = apply_distributive_law - (gen_binary (GET_CODE (op0), mode, - gen_binary (AND, mode, XEXP (op0, 0), op1), - gen_binary (AND, mode, XEXP (op0, 1), - copy_rtx (op1)))); - if (GET_CODE (x) != AND) - return x; + rtx result = distribute_and_simplify_rtx (x, 0); + if (result) + return result; } - if (GET_CODE (op1) == IOR || GET_CODE (op1) == XOR) - return apply_distributive_law - (gen_binary (GET_CODE (op1), mode, - gen_binary (AND, mode, XEXP (op1, 0), op0), - gen_binary (AND, mode, XEXP (op1, 1), - copy_rtx (op0)))); - - /* Similarly, taking advantage of the fact that - (and (not A) (xor B C)) == (xor (ior A B) (ior A C)) */ - - if (GET_CODE (op0) == NOT && GET_CODE (op1) == XOR) - return apply_distributive_law - (gen_binary (XOR, mode, - gen_binary (IOR, mode, XEXP (op0, 0), XEXP (op1, 0)), - gen_binary (IOR, mode, copy_rtx (XEXP (op0, 0)), - XEXP (op1, 1)))); - - else if (GET_CODE (op1) == NOT && GET_CODE (op0) == XOR) - return apply_distributive_law - (gen_binary (XOR, mode, - gen_binary (IOR, mode, XEXP (op1, 0), XEXP (op0, 0)), - gen_binary (IOR, mode, copy_rtx (XEXP (op1, 0)), XEXP (op0, 1)))); + { + rtx result = distribute_and_simplify_rtx (x, 1); + if (result) + return result; + } break; case IOR: @@ -5576,28 +5539,16 @@ simplify_logical (rtx x) if (GET_CODE (op0) == AND) { - rtx tmp = apply_distributive_law - (gen_binary (AND, mode, - gen_binary (IOR, mode, XEXP (op0, 0), op1), - gen_binary (IOR, mode, XEXP (op0, 1), - copy_rtx (op1)))); - - if (GET_CODE (tmp) != IOR - && rtx_cost (tmp, SET) < rtx_cost (x, SET)) - return tmp; + rtx result = distribute_and_simplify_rtx (x, 0); + if (result) + return result; } if (GET_CODE (op1) == AND) { - rtx tmp = apply_distributive_law - (gen_binary (AND, mode, - gen_binary (IOR, mode, XEXP (op1, 0), op0), - gen_binary (IOR, mode, XEXP (op1, 1), - copy_rtx (op0)))); - - if (GET_CODE (tmp) != IOR - && rtx_cost (tmp, SET) < rtx_cost (x, SET)) - return tmp; + rtx result = distribute_and_simplify_rtx (x, 1); + if (result) + return result; } /* Convert (ior (ashift A CX) (lshiftrt A CY)) where CX+CY equals the @@ -5646,7 +5597,7 @@ simplify_logical (rtx x) if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT && (nonzero_bits (op0, mode) & nonzero_bits (op1, mode)) == 0) - return (gen_binary (IOR, mode, op0, op1)); + return (simplify_gen_binary (IOR, mode, op0, op1)); /* Convert (XOR (NOT x) (NOT y)) to (XOR x y). Also convert (XOR (NOT x) y) to (NOT (XOR x y)), similarly for @@ -5666,7 +5617,8 @@ simplify_logical (rtx x) } else if (num_negated == 1) return - simplify_gen_unary (NOT, mode, gen_binary (XOR, mode, op0, op1), + simplify_gen_unary (NOT, mode, + simplify_gen_binary (XOR, mode, op0, op1), mode); } @@ -5677,16 +5629,18 @@ simplify_logical (rtx x) if (GET_CODE (op0) == AND && rtx_equal_p (XEXP (op0, 1), op1) && ! side_effects_p (op1)) - return gen_binary (AND, mode, - simplify_gen_unary (NOT, mode, XEXP (op0, 0), mode), - op1); + return simplify_gen_binary (AND, mode, + simplify_gen_unary (NOT, mode, + XEXP (op0, 0), mode), + op1); else if (GET_CODE (op0) == AND && rtx_equal_p (XEXP (op0, 0), op1) && ! side_effects_p (op1)) - return gen_binary (AND, mode, - simplify_gen_unary (NOT, mode, XEXP (op0, 1), mode), - op1); + return simplify_gen_binary (AND, mode, + simplify_gen_unary (NOT, mode, + XEXP (op0, 1), mode), + op1); /* (xor (comparison foo bar) (const_int 1)) can become the reversed comparison if STORE_FLAG_VALUE is 1. */ @@ -5958,7 +5912,7 @@ expand_field_assignment (rtx x) rtx inner; rtx pos; /* Always counts from low bit. */ int len; - rtx mask; + rtx mask, cleared, masked; enum machine_mode compute_mode; /* Loop until we find something we can't simplify. */ @@ -5996,10 +5950,11 @@ expand_field_assignment (rtx x) /* If position is ADJUST - X, new position is X. */ pos = XEXP (pos, 0); else - pos = gen_binary (MINUS, GET_MODE (pos), - GEN_INT (GET_MODE_BITSIZE (GET_MODE (inner)) - - len), - pos); + pos = simplify_gen_binary (MINUS, GET_MODE (pos), + GEN_INT (GET_MODE_BITSIZE ( + GET_MODE (inner)) + - len), + pos); } } @@ -6046,30 +6001,30 @@ expand_field_assignment (rtx x) } /* Compute a mask of LEN bits, if we can do this on the host machine. */ - if (len < HOST_BITS_PER_WIDE_INT) - mask = GEN_INT (((HOST_WIDE_INT) 1 << len) - 1); - else + if (len >= HOST_BITS_PER_WIDE_INT) break; /* Now compute the equivalent expression. Make a copy of INNER for the SET_DEST in case it is a MEM into which we will substitute; we don't want shared RTL in that case. */ - x = gen_rtx_SET - (VOIDmode, copy_rtx (inner), - gen_binary (IOR, compute_mode, - gen_binary (AND, compute_mode, - simplify_gen_unary (NOT, compute_mode, - gen_binary (ASHIFT, - compute_mode, - mask, pos), - compute_mode), - inner), - gen_binary (ASHIFT, compute_mode, - gen_binary (AND, compute_mode, - gen_lowpart - (compute_mode, SET_SRC (x)), - mask), - pos))); + mask = GEN_INT (((HOST_WIDE_INT) 1 << len) - 1); + cleared = simplify_gen_binary (AND, compute_mode, + simplify_gen_unary (NOT, compute_mode, + simplify_gen_binary (ASHIFT, + compute_mode, + mask, pos), + compute_mode), + inner); + masked = simplify_gen_binary (ASHIFT, compute_mode, + simplify_gen_binary ( + AND, compute_mode, + gen_lowpart (compute_mode, SET_SRC (x)), + mask), + pos); + + x = gen_rtx_SET (VOIDmode, copy_rtx (inner), + simplify_gen_binary (IOR, compute_mode, + cleared, masked)); } return x; @@ -6525,8 +6480,8 @@ extract_left_shift (rtx x, int count) if (GET_CODE (XEXP (x, 1)) == CONST_INT && (INTVAL (XEXP (x, 1)) & ((((HOST_WIDE_INT) 1 << count)) - 1)) == 0 && (tem = extract_left_shift (XEXP (x, 0), count)) != 0) - return gen_binary (code, mode, tem, - GEN_INT (INTVAL (XEXP (x, 1)) >> count)); + return simplify_gen_binary (code, mode, tem, + GEN_INT (INTVAL (XEXP (x, 1)) >> count)); break; @@ -7012,7 +6967,8 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, && (cval & ((HOST_WIDE_INT) 1 << (width - 1))) != 0) cval |= (HOST_WIDE_INT) -1 << width; - y = gen_binary (AND, GET_MODE (x), XEXP (x, 0), GEN_INT (cval)); + y = simplify_gen_binary (AND, GET_MODE (x), + XEXP (x, 0), GEN_INT (cval)); if (rtx_cost (y, SET) < rtx_cost (x, SET)) x = y; } @@ -7104,10 +7060,10 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, { temp = GEN_INT ((INTVAL (XEXP (x, 1)) & mask) << INTVAL (XEXP (XEXP (x, 0), 1))); - temp = gen_binary (GET_CODE (x), GET_MODE (x), - XEXP (XEXP (x, 0), 0), temp); - x = gen_binary (LSHIFTRT, GET_MODE (x), temp, - XEXP (XEXP (x, 0), 1)); + temp = simplify_gen_binary (GET_CODE (x), GET_MODE (x), + XEXP (XEXP (x, 0), 0), temp); + x = simplify_gen_binary (LSHIFTRT, GET_MODE (x), temp, + XEXP (XEXP (x, 0), 1)); return force_to_mode (x, mode, mask, reg, next_select); } @@ -7123,7 +7079,7 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, reg, next_select)); if (op_mode != GET_MODE (x) || op0 != XEXP (x, 0) || op1 != XEXP (x, 1)) - x = gen_binary (code, op_mode, op0, op1); + x = simplify_gen_binary (code, op_mode, op0, op1); break; case ASHIFT: @@ -7157,7 +7113,7 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, mask, reg, next_select)); if (op_mode != GET_MODE (x) || op0 != XEXP (x, 0)) - x = gen_binary (code, op_mode, op0, XEXP (x, 1)); + x = simplify_gen_binary (code, op_mode, op0, XEXP (x, 1)); break; case LSHIFTRT: @@ -7184,7 +7140,7 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, inner = force_to_mode (inner, op_mode, inner_mask, reg, next_select); if (GET_MODE (x) != op_mode || inner != XEXP (x, 0)) - x = gen_binary (LSHIFTRT, op_mode, inner, XEXP (x, 1)); + x = simplify_gen_binary (LSHIFTRT, op_mode, inner, XEXP (x, 1)); } /* If we have (and (lshiftrt FOO C1) C2) where the combination of the @@ -7206,9 +7162,9 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, /* Must be more sign bit copies than the mask needs. */ && ((int) num_sign_bit_copies (XEXP (x, 0), GET_MODE (XEXP (x, 0))) >= exact_log2 (mask + 1))) - x = gen_binary (LSHIFTRT, GET_MODE (x), XEXP (x, 0), - GEN_INT (GET_MODE_BITSIZE (GET_MODE (x)) - - exact_log2 (mask + 1))); + x = simplify_gen_binary (LSHIFTRT, GET_MODE (x), XEXP (x, 0), + GEN_INT (GET_MODE_BITSIZE (GET_MODE (x)) + - exact_log2 (mask + 1))); goto shiftrt; @@ -7273,7 +7229,8 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, /* If MASK is 1, convert this to an LSHIFTRT. This can be done even if the shift count isn't a constant. */ if (mask == 1) - x = gen_binary (LSHIFTRT, GET_MODE (x), XEXP (x, 0), XEXP (x, 1)); + x = simplify_gen_binary (LSHIFTRT, GET_MODE (x), + XEXP (x, 0), XEXP (x, 1)); shiftrt: @@ -7338,8 +7295,10 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, { temp = gen_int_mode (mask << INTVAL (XEXP (XEXP (x, 0), 1)), GET_MODE (x)); - temp = gen_binary (XOR, GET_MODE (x), XEXP (XEXP (x, 0), 0), temp); - x = gen_binary (LSHIFTRT, GET_MODE (x), temp, XEXP (XEXP (x, 0), 1)); + temp = simplify_gen_binary (XOR, GET_MODE (x), + XEXP (XEXP (x, 0), 0), temp); + x = simplify_gen_binary (LSHIFTRT, GET_MODE (x), + temp, XEXP (XEXP (x, 0), 1)); return force_to_mode (x, mode, mask, reg, next_select); } @@ -7450,8 +7409,19 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse) else if (cond1 == 0) true1 = copy_rtx (true1); - *ptrue = gen_binary (code, mode, true0, true1); - *pfalse = gen_binary (code, mode, false0, false1); + if (COMPARISON_P (x)) + { + *ptrue = simplify_gen_relational (code, mode, VOIDmode, + true0, true1); + *pfalse = simplify_gen_relational (code, mode, VOIDmode, + false0, false1); + } + else + { + *ptrue = simplify_gen_binary (code, mode, true0, true1); + *pfalse = simplify_gen_binary (code, mode, false0, false1); + } + return cond0 ? cond0 : cond1; } @@ -7481,13 +7451,13 @@ if_then_else_cond (rtx x, rtx *ptrue, rtx *pfalse) && rtx_equal_p (XEXP (cond0, 1), XEXP (cond1, 0)))) && ! side_effects_p (x)) { - *ptrue = gen_binary (MULT, mode, op0, const_true_rtx); - *pfalse = gen_binary (MULT, mode, - (code == MINUS - ? simplify_gen_unary (NEG, mode, op1, - mode) - : op1), - const_true_rtx); + *ptrue = simplify_gen_binary (MULT, mode, op0, const_true_rtx); + *pfalse = simplify_gen_binary (MULT, mode, + (code == MINUS + ? simplify_gen_unary (NEG, mode, + op1, mode) + : op1), + const_true_rtx); return cond0; } } @@ -8022,8 +7992,8 @@ apply_distributive_law (rtx x) || GET_MODE_SIZE (GET_MODE (SUBREG_REG (lhs))) > UNITS_PER_WORD) return x; - tem = gen_binary (code, GET_MODE (SUBREG_REG (lhs)), - SUBREG_REG (lhs), SUBREG_REG (rhs)); + tem = simplify_gen_binary (code, GET_MODE (SUBREG_REG (lhs)), + SUBREG_REG (lhs), SUBREG_REG (rhs)); return gen_lowpart (GET_MODE (x), tem); default: @@ -8049,7 +8019,7 @@ apply_distributive_law (rtx x) return x; /* Form the new inner operation, seeing if it simplifies first. */ - tem = gen_binary (code, GET_MODE (x), lhs, rhs); + tem = simplify_gen_binary (code, GET_MODE (x), lhs, rhs); /* There is one exception to the general way of distributing: (a | c) ^ (b | c) -> (a ^ b) & ~c */ @@ -8062,8 +8032,76 @@ apply_distributive_law (rtx x) /* We may be able to continuing distributing the result, so call ourselves recursively on the inner operation before forming the outer operation, which we return. */ - return gen_binary (inner_code, GET_MODE (x), - apply_distributive_law (tem), other); + return simplify_gen_binary (inner_code, GET_MODE (x), + apply_distributive_law (tem), other); +} + +/* See if X is of the form (* (+ A B) C), and if so convert to + (+ (* A C) (* B C)) and try to simplify. + + Most of the time, this results in no change. However, if some of + the operands are the same or inverses of each other, simplifications + will result. + + For example, (and (ior A B) (not B)) can occur as the result of + expanding a bit field assignment. When we apply the distributive + law to this, we get (ior (and (A (not B))) (and (B (not B)))), + which then simplifies to (and (A (not B))). + + Note that no checks happen on the validity of applying the inverse + distributive law. This is pointless since we can do it in the + few places where this routine is called. + + N is the index of the term that is decomposed (the arithmetic operation, + i.e. (+ A B) in the first example above). !N is the index of the term that + is distributed, i.e. of C in the first example above. */ +static rtx +distribute_and_simplify_rtx (rtx x, int n) +{ + enum machine_mode mode; + enum rtx_code outer_code, inner_code; + rtx decomposed, distributed, inner_op0, inner_op1, new_op0, new_op1, tmp; + + decomposed = XEXP (x, n); + if (!ARITHMETIC_P (decomposed)) + return NULL_RTX; + + mode = GET_MODE (x); + outer_code = GET_CODE (x); + distributed = XEXP (x, !n); + + inner_code = GET_CODE (decomposed); + inner_op0 = XEXP (decomposed, 0); + inner_op1 = XEXP (decomposed, 1); + + /* Special case (and (xor B C) (not A)), which is equivalent to + (xor (ior A B) (ior A C)) */ + if (outer_code == AND && inner_code == XOR && GET_CODE (distributed) == NOT) + { + distributed = XEXP (distributed, 0); + outer_code = IOR; + } + + if (n == 0) + { + /* Distribute the second term. */ + new_op0 = simplify_gen_binary (outer_code, mode, inner_op0, distributed); + new_op1 = simplify_gen_binary (outer_code, mode, inner_op1, distributed); + } + else + { + /* Distribute the first term. */ + new_op0 = simplify_gen_binary (outer_code, mode, distributed, inner_op0); + new_op1 = simplify_gen_binary (outer_code, mode, distributed, inner_op1); + } + + tmp = apply_distributive_law (simplify_gen_binary (inner_code, mode, + new_op0, new_op1)); + if (GET_CODE (tmp) != outer_code + && rtx_cost (tmp, SET) < rtx_cost (x, SET)) + return tmp; + + return NULL_RTX; } /* We have X, a logical `and' of VAROP with the constant CONSTOP, to be done @@ -8130,11 +8168,15 @@ simplify_and_const_int (rtx x, enum machine_mode mode, rtx varop, gen_lowpart (mode, apply_distributive_law - (gen_binary (GET_CODE (varop), GET_MODE (varop), - simplify_and_const_int (NULL_RTX, GET_MODE (varop), - XEXP (varop, 0), constop), - simplify_and_const_int (NULL_RTX, GET_MODE (varop), - XEXP (varop, 1), constop)))); + (simplify_gen_binary (GET_CODE (varop), GET_MODE (varop), + simplify_and_const_int (NULL_RTX, + GET_MODE (varop), + XEXP (varop, 0), + constop), + simplify_and_const_int (NULL_RTX, + GET_MODE (varop), + XEXP (varop, 1), + constop)))); /* If VAROP is PLUS, and the constant is a mask of low bite, distribute the AND and see if one of the operands simplifies to zero. If so, we @@ -8175,7 +8217,7 @@ simplify_and_const_int (rtx x, enum machine_mode mode, rtx varop, constop = trunc_int_for_mode (constop, mode); /* See how much, if any, of X we can use. */ if (x == 0 || GET_CODE (x) != AND || GET_MODE (x) != mode) - x = gen_binary (AND, mode, varop, GEN_INT (constop)); + x = simplify_gen_binary (AND, mode, varop, GEN_INT (constop)); else { @@ -8694,8 +8736,10 @@ simplify_shift_const (rtx x, enum rtx_code code, && exact_log2 (INTVAL (XEXP (varop, 1))) >= 0) { varop - = gen_binary (ASHIFT, GET_MODE (varop), XEXP (varop, 0), - GEN_INT (exact_log2 (INTVAL (XEXP (varop, 1))))); + = simplify_gen_binary (ASHIFT, GET_MODE (varop), + XEXP (varop, 0), + GEN_INT (exact_log2 ( + INTVAL (XEXP (varop, 1))))); continue; } break; @@ -8706,8 +8750,10 @@ simplify_shift_const (rtx x, enum rtx_code code, && exact_log2 (INTVAL (XEXP (varop, 1))) >= 0) { varop - = gen_binary (LSHIFTRT, GET_MODE (varop), XEXP (varop, 0), - GEN_INT (exact_log2 (INTVAL (XEXP (varop, 1))))); + = simplify_gen_binary (LSHIFTRT, GET_MODE (varop), + XEXP (varop, 0), + GEN_INT (exact_log2 ( + INTVAL (XEXP (varop, 1))))); continue; } break; @@ -8962,7 +9008,8 @@ simplify_shift_const (rtx x, enum rtx_code code, rtx rhs = simplify_shift_const (NULL_RTX, code, shift_mode, XEXP (varop, 1), count); - varop = gen_binary (GET_CODE (varop), shift_mode, lhs, rhs); + varop = simplify_gen_binary (GET_CODE (varop), shift_mode, + lhs, rhs); varop = apply_distributive_law (varop); count = 0; @@ -9237,7 +9284,8 @@ simplify_shift_const (rtx x, enum rtx_code code, else if (GET_RTX_CLASS (outer_op) == RTX_UNARY) x = simplify_gen_unary (outer_op, result_mode, x, result_mode); else - x = gen_binary (outer_op, result_mode, x, GEN_INT (outer_const)); + x = simplify_gen_binary (outer_op, result_mode, x, + GEN_INT (outer_const)); } return x; @@ -9471,63 +9519,6 @@ gen_lowpart_for_combine (enum machine_mode omode, rtx x) return gen_rtx_CLOBBER (imode, const0_rtx); } -/* These routines make binary and unary operations by first seeing if they - fold; if not, a new expression is allocated. */ - -static rtx -gen_binary (enum rtx_code code, enum machine_mode mode, rtx op0, rtx op1) -{ - rtx result; - rtx tem; - - if (GET_CODE (op0) == CLOBBER) - return op0; - else if (GET_CODE (op1) == CLOBBER) - return op1; - - if (GET_RTX_CLASS (code) == RTX_COMM_ARITH - && swap_commutative_operands_p (op0, op1)) - tem = op0, op0 = op1, op1 = tem; - - if (GET_RTX_CLASS (code) == RTX_COMPARE - || GET_RTX_CLASS (code) == RTX_COMM_COMPARE) - { - enum machine_mode op_mode = GET_MODE (op0); - - /* Strip the COMPARE from (REL_OP (compare X Y) 0) to get - just (REL_OP X Y). */ - if (GET_CODE (op0) == COMPARE && op1 == const0_rtx) - { - op1 = XEXP (op0, 1); - op0 = XEXP (op0, 0); - op_mode = GET_MODE (op0); - } - - if (op_mode == VOIDmode) - op_mode = GET_MODE (op1); - result = simplify_relational_operation (code, mode, op_mode, op0, op1); - } - else - result = simplify_binary_operation (code, mode, op0, op1); - - if (result) - return result; - - /* Put complex operands first and constants second. */ - if (GET_RTX_CLASS (code) == RTX_COMM_ARITH - && swap_commutative_operands_p (op0, op1)) - return gen_rtx_fmt_ee (code, mode, op1, op0); - - /* If we are turning off bits already known off in OP0, we need not do - an AND. */ - else if (code == AND && GET_CODE (op1) == CONST_INT - && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT - && (nonzero_bits (op0, mode) & ~INTVAL (op1)) == 0) - return op0; - - return gen_rtx_fmt_ee (code, mode, op0, op1); -} - /* Simplify a comparison between *POP0 and *POP1 where CODE is the comparison code that will be tested. @@ -10396,9 +10387,9 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) && c1 != mask && c1 != GET_MODE_MASK (tmode)) { - op0 = gen_binary (AND, tmode, - SUBREG_REG (XEXP (op0, 0)), - gen_int_mode (c1, tmode)); + op0 = simplify_gen_binary (AND, tmode, + SUBREG_REG (XEXP (op0, 0)), + gen_int_mode (c1, tmode)); op0 = gen_lowpart (mode, op0); continue; } @@ -10542,12 +10533,12 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) { rtx inner = XEXP (XEXP (XEXP (op0, 0), 0), 0); rtx add_const = XEXP (XEXP (op0, 0), 1); - rtx new_const = gen_binary (ASHIFTRT, GET_MODE (op0), add_const, - XEXP (op0, 1)); + rtx new_const = simplify_gen_binary (ASHIFTRT, GET_MODE (op0), + add_const, XEXP (op0, 1)); - op0 = gen_binary (PLUS, tmode, - gen_lowpart (tmode, inner), - new_const); + op0 = simplify_gen_binary (PLUS, tmode, + gen_lowpart (tmode, inner), + new_const); continue; } @@ -10700,11 +10691,11 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) make a new AND in the proper mode. */ if (GET_CODE (op0) == AND && !have_insn_for (AND, mode)) - op0 = gen_binary (AND, tmode, - gen_lowpart (tmode, - XEXP (op0, 0)), - gen_lowpart (tmode, - XEXP (op0, 1))); + op0 = simplify_gen_binary (AND, tmode, + gen_lowpart (tmode, + XEXP (op0, 0)), + gen_lowpart (tmode, + XEXP (op0, 1))); op0 = gen_lowpart (tmode, op0); if (zero_extended && GET_CODE (op1) == CONST_INT) @@ -10719,10 +10710,11 @@ simplify_comparison (enum rtx_code code, rtx *pop0, rtx *pop1) if (op1 == const0_rtx && (code == LT || code == GE) && GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT) { - op0 = gen_binary (AND, tmode, - gen_lowpart (tmode, op0), - GEN_INT ((HOST_WIDE_INT) 1 - << (GET_MODE_BITSIZE (mode) - 1))); + op0 = simplify_gen_binary (AND, tmode, + gen_lowpart (tmode, op0), + GEN_INT ((HOST_WIDE_INT) 1 + << (GET_MODE_BITSIZE (mode) + - 1))); code = (code == LT) ? NE : EQ; break; } @@ -10769,7 +10761,7 @@ reversed_comparison (rtx exp, enum machine_mode mode, rtx op0, rtx op1) if (reversed_code == UNKNOWN) return NULL_RTX; else - return gen_binary (reversed_code, mode, op0, op1); + return simplify_gen_relational (reversed_code, mode, VOIDmode, op0, op1); } /* Utility function for record_value_for_reg. Count number of diff --git a/gcc/common.opt b/gcc/common.opt index f94643d509e..af61f90f617 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -714,7 +714,7 @@ Allow premature scheduling of queued insns fsched-stalled-insns= Common RejectNegative Joined UInteger --fsched-stalled-insns= Set number of queued insns that can be prematurely scheduled +-fsched-stalled-insns= Set number of queued insns that can be prematurely scheduled ; sched_stalled_insns_dep controls how many recently scheduled cycles will ; be examined for a dependency on a stalled insn that is candidate for @@ -726,7 +726,7 @@ Set dependence distance checking in premature scheduling of queued insns fsched-stalled-insns-dep= Common RejectNegative Joined UInteger --fsched-stalled-insns-dep= Set dependence distance checking in premature scheduling of queued insns +-fsched-stalled-insns-dep= Set dependence distance checking in premature scheduling of queued insns fshared-data Common Report Var(flag_shared_data) @@ -922,7 +922,7 @@ Enable loop vectorization on trees ftree-vectorizer-verbose= Common RejectNegative Joined --ftree-vectorizer-verbose= Set the verbosity level of the vectorizer +-ftree-vectorizer-verbose= Set the verbosity level of the vectorizer ; -fverbose-asm causes extra commentary information to be produced in ; the generated assembly code (to make it more readable). This option diff --git a/gcc/config.gcc b/gcc/config.gcc index 0bbd958bacc..cad9bc8f067 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -185,6 +185,10 @@ case ${target} in | sparclite-*-elf* \ | sparc86x-*-elf* \ | sparc-*-openbsd* \ + | i860-*-sysv4* \ + | ip2k-*-elf \ + | ns32k-*-netbsdelf* \ + | ns32k-*-netbsd* \ ) if test "x$enable_obsolete" != xyes; then echo "*** Configuration ${target} is obsolete." >&2 @@ -228,6 +232,7 @@ esac # machines. tm_p_file= cpu_type=`echo ${target} | sed 's/-.*$//'` +cpu_is_64bit= case ${target} in alpha*-*-*) cpu_type=alpha @@ -284,6 +289,11 @@ powerpc*-*-*) cpu_type=rs6000 extra_headers="ppc-asm.h altivec.h spe.h" need_64bit_hwint=yes + case x$with_cpu in + xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[345]|xrs64a) + cpu_is_64bit=yes + ;; + esac ;; rs6000*-*-*) need_64bit_hwint=yes @@ -857,7 +867,7 @@ hppa*64*-*-hpux11*) pa/pa64-regs.h pa/pa-hpux.h pa/pa-hpux11.h" fi case ${target} in - *-*-hpux11.11) + *-*-hpux11.[1-9]*) tm_file="${tm_file} pa/pa-hpux1111.h pa/pa-64.h pa/pa64-hpux.h" ;; *) @@ -1054,12 +1064,12 @@ i[34567]86-*-solaris2*) tmake_file="$tmake_file t-slibgcc-sld" fi case ${target} in - *-*-solaris2.[789] | *-*-solaris2.1[0-9]) + *-*-solaris2.[789] | *-*-solaris2.1[0-9]*) tm_file="$tm_file tm-dwarf2.h" ;; esac case ${target} in - *-*-solaris2.1[0-9]) + *-*-solaris2.1[0-9]*) tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h" tm_defines="${tm_defines} TARGET_BI_ARCH=1" tmake_file="$tmake_file i386/t-sol2-10" @@ -1528,12 +1538,10 @@ avr-*-*) # extra_headers= # ;; powerpc64-*-linux*) - tm_file="rs6000/biarch64.h ${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h" - case x$with_cpu in - x|xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[345]|xrs64a) - tm_file="${tm_file} rs6000/default64.h";; - esac - tm_file="${tm_file} rs6000/linux64.h" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h" + test x$with_cpu != x || cpu_is_64bit=yes + test x$cpu_is_64bit != xyes || tm_file="${tm_file} rs6000/default64.h" + tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h" tmake_file="rs6000/t-fprules ${tmake_file} rs6000/t-ppccomm rs6000/t-linux64" ;; powerpc64-*-gnu*) @@ -1612,8 +1620,20 @@ powerpc-*-linux*spe*) tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" ;; powerpc-*-linux*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/linux.h" + tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h" tmake_file="rs6000/t-fprules rs6000/t-ppcos ${tmake_file} rs6000/t-ppccomm" + case ${enable_targets}:${cpu_is_64bit} in + *powerpc64* | all:* | *:yes) + if test x$cpu_is_64bit = xyes; then + tm_file="${tm_file} rs6000/default64.h" + fi + tm_file="rs6000/biarch64.h ${tm_file} rs6000/linux64.h" + tmake_file="$tmake_file rs6000/t-linux64" + ;; + *) + tm_file="${tm_file} rs6000/linux.h" + ;; + esac ;; powerpc-*-gnu-gnualtivec*) tm_file="${cpu_type}/${cpu_type}.h elfos.h svr4.h freebsd-spec.h gnu.h rs6000/sysv4.h rs6000/linux.h rs6000/linuxaltivec.h rs6000/gnu.h" @@ -1964,7 +1984,7 @@ sparc-*-solaris2*) tm_file="${tm_file} sparc/sol26-sld.h" fi ;; - *-*-solaris2.[789] | *-*-solaris2.1[0-9]) + *-*-solaris2.[789] | *-*-solaris2.1[0-9]*) tm_file="sparc/biarch64.h ${tm_file} sparc/sol2-bi.h tm-dwarf2.h" if test x$gnu_ld = xyes; then tm_file="${tm_file} sparc/sol2-gld-bi.h" @@ -2313,24 +2333,24 @@ if test x$with_float = x; then esac fi - # Similarly for --with-schedule. - if test x$with_schedule = x; then - case ${target} in - hppa1* | parisc1*) - # Override default PA8000 scheduling model. - with_schedule=7100LC - ;; - esac - fi +# Similarly for --with-schedule. +if test x$with_schedule = x; then + case ${target} in + hppa1* | parisc1*) + # Override default PA8000 scheduling model. + with_schedule=7100LC + ;; + esac +fi - # Validate and mark as valid any --with options supported - # by this target. In order to use a particular --with option - # you must list it in supported_defaults; validating the value - # is optional. This case statement should set nothing besides - # supported_defaults. +# Validate and mark as valid any --with options supported +# by this target. In order to use a particular --with option +# you must list it in supported_defaults; validating the value +# is optional. This case statement should set nothing besides +# supported_defaults. - supported_defaults= - case "${target}" in +supported_defaults= +case "${target}" in alpha*-*-*) supported_defaults="cpu tune" for which in cpu tune; do @@ -2538,13 +2558,12 @@ fi eval $with_which= ;; "" | common \ - | power | power2 | power3 | power4 \ - | powerpc | powerpc64 \ + | power | power[2345] | powerpc | powerpc64 \ | rios | rios1 | rios2 | rsc | rsc1 | rs64a \ | 401 | 403 | 405 | 405fp | 440 | 440fp | 505 \ | 601 | 602 | 603 | 603e | ec603e | 604 \ | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \ - | 8540 | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5) + | 854[08] | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5) # OK ;; *) @@ -2643,11 +2662,11 @@ fi ;; esac ;; - esac +esac - # Set some miscellaneous flags for particular targets. - target_cpu_default2= - case ${target} in +# Set some miscellaneous flags for particular targets. +target_cpu_default2= +case ${target} in alpha*-*-*) if test x$gas = xyes then @@ -2768,44 +2787,45 @@ fi ;; esac ;; - esac +esac - t= - all_defaults="abi cpu arch tune schedule float mode fpu divide" - for option in $all_defaults - do - eval "val=\$with_$option" - if test -n "$val"; then - case " $supported_defaults " in - *" $option "*) - ;; - *) - echo "This target does not support --with-$option." 2>&1 - exit 1 - ;; - esac +t= +all_defaults="abi cpu arch tune schedule float mode fpu divide" +for option in $all_defaults +do + eval "val=\$with_$option" + if test -n "$val"; then + case " $supported_defaults " in + *" $option "*) + ;; + *) + echo "This target does not support --with-$option." 2>&1 + exit 1 + ;; + esac - if test "x$t" = x - then - t="{ \"$option\", \"$val\" }" - else - t="${t}, { \"$option\", \"$val\" }" - fi + if test "x$t" = x + then + t="{ \"$option\", \"$val\" }" + else + t="${t}, { \"$option\", \"$val\" }" fi - done - if test "x$t" = x - then - configure_default_options="{ { NULL, NULL} }" - else - configure_default_options="{ ${t} }" fi +done + +if test "x$t" = x +then + configure_default_options="{ { NULL, NULL} }" +else + configure_default_options="{ ${t} }" +fi - if test "$target_cpu_default2" != "" +if test "$target_cpu_default2" != "" +then + if test "$target_cpu_default" != "" then - if test "$target_cpu_default" != "" - then - target_cpu_default="(${target_cpu_default}|${target_cpu_default2})" - else - target_cpu_default=$target_cpu_default2 - fi + target_cpu_default="(${target_cpu_default}|${target_cpu_default2})" + else + target_cpu_default=$target_cpu_default2 fi +fi diff --git a/gcc/config.host b/gcc/config.host index 9024ec1c5e8..cb1e9a6058b 100644 --- a/gcc/config.host +++ b/gcc/config.host @@ -146,6 +146,8 @@ case ${host} in ;; i[34567]86-*-pe | i[34567]86-*-cygwin*) host_xm_file=i386/xm-cygwin.h + out_host_hook_obj=host-cygwin.o + host_xmake_file=i386/x-cygwin host_exeext=.exe ;; i[34567]86-*-mingw32*) diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index 037dc4ad33e..ce08d6734e7 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -5543,22 +5543,24 @@ alpha_build_builtin_va_list (void) variable number of arguments. */ static void -alpha_setup_incoming_varargs (CUMULATIVE_ARGS *pcum, - enum machine_mode mode ATTRIBUTE_UNUSED, - tree type ATTRIBUTE_UNUSED, - int *pretend_size, int no_rtl) +alpha_setup_incoming_varargs (CUMULATIVE_ARGS *pcum, enum machine_mode mode, + tree type, int *pretend_size, int no_rtl) { + CUMULATIVE_ARGS cum = *pcum; + + /* Skip the current argument. */ + FUNCTION_ARG_ADVANCE (cum, mode, type, 1); + #if TARGET_ABI_UNICOSMK /* On Unicos/Mk, the standard subroutine __T3E_MISMATCH stores all register arguments on the stack. Unfortunately, it doesn't always store the first one (i.e. the one that arrives in $16 or $f16). This is not a problem with stdargs as we always have at least one named argument there. */ - int num_reg_words = pcum->num_reg_words; - if (num_reg_words < 6) + if (cum.num_reg_words < 6) { if (!no_rtl) { - emit_insn (gen_umk_mismatch_args (GEN_INT (num_reg_words + 1))); + emit_insn (gen_umk_mismatch_args (GEN_INT (cum.num_reg_words))); emit_insn (gen_arg_home_umk ()); } *pretend_size = 0; @@ -5570,7 +5572,7 @@ alpha_setup_incoming_varargs (CUMULATIVE_ARGS *pcum, This is not only because we won't need the space, but because AP includes the current_pretend_args_size and we don't want to mess up any ap-relative addresses already made. */ - if (pcum->num_args < 6) + if (cum.num_args < 6) { if (!no_rtl) { @@ -5591,8 +5593,6 @@ alpha_setup_incoming_varargs (CUMULATIVE_ARGS *pcum, not the most efficient way to implement varargs with just one register class, but it isn't worth doing anything more efficient in this rare case. */ - CUMULATIVE_ARGS cum = *pcum; - if (cum >= 6) return; @@ -5602,18 +5602,17 @@ alpha_setup_incoming_varargs (CUMULATIVE_ARGS *pcum, rtx tmp; tmp = gen_rtx_MEM (BLKmode, - plus_constant (virtual_incoming_args_rtx, - (cum + 6) * UNITS_PER_WORD)); + plus_constant (virtual_incoming_args_rtx, + (cum + 6) * UNITS_PER_WORD)); set_mem_alias_set (tmp, set); move_block_from_reg (16 + cum, tmp, 6 - cum); tmp = gen_rtx_MEM (BLKmode, - plus_constant (virtual_incoming_args_rtx, - cum * UNITS_PER_WORD)); + plus_constant (virtual_incoming_args_rtx, + cum * UNITS_PER_WORD)); set_mem_alias_set (tmp, set); - move_block_from_reg (16 + (TARGET_FPREGS ? 32 : 0) + cum, tmp, - 6 - cum); - } + move_block_from_reg (16 + cum + TARGET_FPREGS*32, tmp, 6 - cum); + } *pretend_size = 12 * UNITS_PER_WORD; #endif } @@ -5642,7 +5641,7 @@ alpha_va_start (tree valist, rtx nextarg ATTRIBUTE_UNUSED) integer argument register; that futzes with pretend_args_size, which changes the meaning of AP. */ - if (NUM_ARGS <= 6) + if (NUM_ARGS < 6) offset = TARGET_ABI_OPEN_VMS ? UNITS_PER_WORD : 6 * UNITS_PER_WORD; else offset = -6 * UNITS_PER_WORD + current_function_pretend_args_size; diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 884156f7f97..7b298b77e69 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -156,99 +156,99 @@ extern int alpha_tls_size; /* This means that floating-point support exists in the target implementation of the Alpha architecture. This is usually the default. */ #define MASK_FP (1 << 0) -#define TARGET_FP (target_flags & MASK_FP) +#define TARGET_FP ((target_flags & MASK_FP) != 0) /* This means that floating-point registers are allowed to be used. Note that Alpha implementations without FP operations are required to provide the FP registers. */ #define MASK_FPREGS (1 << 1) -#define TARGET_FPREGS (target_flags & MASK_FPREGS) +#define TARGET_FPREGS ((target_flags & MASK_FPREGS) != 0) /* This means that gas is used to process the assembler file. */ #define MASK_GAS (1 << 2) -#define TARGET_GAS (target_flags & MASK_GAS) +#define TARGET_GAS ((target_flags & MASK_GAS) != 0) /* This means that we should mark procedures as IEEE conformant. */ #define MASK_IEEE_CONFORMANT (1 << 3) -#define TARGET_IEEE_CONFORMANT (target_flags & MASK_IEEE_CONFORMANT) +#define TARGET_IEEE_CONFORMANT ((target_flags & MASK_IEEE_CONFORMANT) != 0) /* This means we should be IEEE-compliant except for inexact. */ #define MASK_IEEE (1 << 4) -#define TARGET_IEEE (target_flags & MASK_IEEE) +#define TARGET_IEEE ((target_flags & MASK_IEEE) != 0) /* This means we should be fully IEEE-compliant. */ #define MASK_IEEE_WITH_INEXACT (1 << 5) -#define TARGET_IEEE_WITH_INEXACT (target_flags & MASK_IEEE_WITH_INEXACT) +#define TARGET_IEEE_WITH_INEXACT ((target_flags & MASK_IEEE_WITH_INEXACT) != 0) /* This means we must construct all constants rather than emitting them as literal data. */ #define MASK_BUILD_CONSTANTS (1 << 6) -#define TARGET_BUILD_CONSTANTS (target_flags & MASK_BUILD_CONSTANTS) +#define TARGET_BUILD_CONSTANTS ((target_flags & MASK_BUILD_CONSTANTS) != 0) /* This means we handle floating points in VAX F- (float) or G- (double) Format. */ #define MASK_FLOAT_VAX (1 << 7) -#define TARGET_FLOAT_VAX (target_flags & MASK_FLOAT_VAX) +#define TARGET_FLOAT_VAX ((target_flags & MASK_FLOAT_VAX) != 0) /* This means that the processor has byte and half word loads and stores (the BWX extension). */ #define MASK_BWX (1 << 8) -#define TARGET_BWX (target_flags & MASK_BWX) +#define TARGET_BWX ((target_flags & MASK_BWX) != 0) /* This means that the processor has the MAX extension. */ #define MASK_MAX (1 << 9) -#define TARGET_MAX (target_flags & MASK_MAX) +#define TARGET_MAX ((target_flags & MASK_MAX) != 0) /* This means that the processor has the FIX extension. */ #define MASK_FIX (1 << 10) -#define TARGET_FIX (target_flags & MASK_FIX) +#define TARGET_FIX ((target_flags & MASK_FIX) != 0) /* This means that the processor has the CIX extension. */ #define MASK_CIX (1 << 11) -#define TARGET_CIX (target_flags & MASK_CIX) +#define TARGET_CIX ((target_flags & MASK_CIX) != 0) /* This means use !literal style explicit relocations. */ #define MASK_EXPLICIT_RELOCS (1 << 12) -#define TARGET_EXPLICIT_RELOCS (target_flags & MASK_EXPLICIT_RELOCS) +#define TARGET_EXPLICIT_RELOCS ((target_flags & MASK_EXPLICIT_RELOCS) != 0) /* This means use 16-bit relocations to .sdata/.sbss. */ #define MASK_SMALL_DATA (1 << 13) -#define TARGET_SMALL_DATA (target_flags & MASK_SMALL_DATA) +#define TARGET_SMALL_DATA ((target_flags & MASK_SMALL_DATA) != 0) /* This means emit thread pointer loads for kernel not user. */ #define MASK_TLS_KERNEL (1 << 14) -#define TARGET_TLS_KERNEL (target_flags & MASK_TLS_KERNEL) +#define TARGET_TLS_KERNEL ((target_flags & MASK_TLS_KERNEL) != 0) /* This means use direct branches to local functions. */ #define MASK_SMALL_TEXT (1 << 15) -#define TARGET_SMALL_TEXT (target_flags & MASK_SMALL_TEXT) +#define TARGET_SMALL_TEXT ((target_flags & MASK_SMALL_TEXT) != 0) /* This means use IEEE quad-format for long double. Assumes the presence of the GEM support library routines. */ #define MASK_LONG_DOUBLE_128 (1 << 16) -#define TARGET_LONG_DOUBLE_128 (target_flags & MASK_LONG_DOUBLE_128) +#define TARGET_LONG_DOUBLE_128 ((target_flags & MASK_LONG_DOUBLE_128) != 0) /* This means that the processor is an EV5, EV56, or PCA56. Unlike alpha_cpu this is not affected by -mtune= setting. */ #define MASK_CPU_EV5 (1 << 28) -#define TARGET_CPU_EV5 (target_flags & MASK_CPU_EV5) +#define TARGET_CPU_EV5 ((target_flags & MASK_CPU_EV5) != 0) /* Likewise for EV6. */ #define MASK_CPU_EV6 (1 << 29) -#define TARGET_CPU_EV6 (target_flags & MASK_CPU_EV6) +#define TARGET_CPU_EV6 ((target_flags & MASK_CPU_EV6) != 0) /* This means we support the .arch directive in the assembler. Only defined in TARGET_CPU_DEFAULT. */ #define MASK_SUPPORT_ARCH (1 << 30) -#define TARGET_SUPPORT_ARCH (target_flags & MASK_SUPPORT_ARCH) +#define TARGET_SUPPORT_ARCH ((target_flags & MASK_SUPPORT_ARCH) != 0) /* These are for target os support and cannot be changed at runtime. */ #define TARGET_ABI_WINDOWS_NT 0 diff --git a/gcc/config/alpha/t-osf4 b/gcc/config/alpha/t-osf4 index 58ce6c2d8d6..ead38d1237c 100644 --- a/gcc/config/alpha/t-osf4 +++ b/gcc/config/alpha/t-osf4 @@ -25,6 +25,8 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ $(LN_S) $(SHLIB_NAME) $(SHLIB_SONAME) # $(slibdir) double quoted to protect it from expansion while building # libgcc.mk. We want this delayed until actual install time. -SHLIB_INSTALL = $(INSTALL_DATA) $(SHLIB_NAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME); \ +SHLIB_INSTALL = \ + $$(mkinstalldirs) $$(DESTDIR)$$(slibdir); \ + $(INSTALL_DATA) $(SHLIB_NAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME); \ rm -f $$(DESTDIR)$$(slibdir)/$(SHLIB_NAME); \ $(LN_S) $(SHLIB_SONAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_NAME) diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index f8907befd61..063055c335e 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -373,7 +373,7 @@ const char * structure_size_string = NULL; int arm_structure_size_boundary = DEFAULT_STRUCTURE_SIZE_BOUNDARY; /* Used for Thumb call_via trampolines. */ -rtx thumb_call_via_label[13]; +rtx thumb_call_via_label[14]; static int thumb_call_reg_needed; /* Bit values used to identify processor capabilities. */ @@ -9624,7 +9624,7 @@ arm_output_function_epilogue (FILE *file ATTRIBUTE_UNUSED, /* Emit any call-via-reg trampolines that are needed for v4t support of call_reg and call_value_reg type insns. */ - for (regno = 0; regno < SP_REGNUM; regno++) + for (regno = 0; regno < LR_REGNUM; regno++) { rtx label = cfun->machine->call_via[regno]; @@ -13696,7 +13696,7 @@ thumb_call_via_reg (rtx reg) int regno = REGNO (reg); rtx *labelp; - gcc_assert (regno < SP_REGNUM); + gcc_assert (regno < LR_REGNUM); /* If we are in the normal text section we can use a single instance per compilation unit. If we are doing function sections, then we need @@ -13842,7 +13842,7 @@ arm_file_end (void) asm_fprintf (asm_out_file, "\t.code 16\n"); ASM_OUTPUT_ALIGN (asm_out_file, 1); - for (regno = 0; regno < SP_REGNUM; regno++) + for (regno = 0; regno < LR_REGNUM; regno++) { rtx label = thumb_call_via_label[regno]; diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 2db95373c9f..f8edcccd968 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -900,7 +900,7 @@ extern const char * structure_size_string; scratch registers. */ \ for (regno = FIRST_IWMMXT_GR_REGNUM; \ regno <= LAST_IWMMXT_GR_REGNUM; ++ regno) \ - fixed_regs[regno] = call_used_regs[regno] = 0; \ + fixed_regs[regno] = 0; \ /* The XScale ABI has wR0 - wR9 as scratch registers, \ the rest as call-preserved registers. */ \ for (regno = FIRST_IWMMXT_REGNUM; \ @@ -1708,14 +1708,15 @@ typedef struct machine_function GTY(()) register is needed to preserve stack alignment. */ int sibcall_blocked; /* Labels for per-function Thumb call-via stubs. One per potential calling - register. We can never call via SP, LR or PC. */ - rtx call_via[13]; + register. We can never call via LR or PC. We can call via SP if a + trampoline happens to be on the top of the stack. */ + rtx call_via[14]; } machine_function; /* As in the machine_function, a global set of call-via labels, for code that is in text_section(). */ -extern GTY(()) rtx thumb_call_via_label[13]; +extern GTY(()) rtx thumb_call_via_label[14]; /* A C type for declaring a variable that is used as the first argument of `FUNCTION_ARG' and other related values. For some target machines, the diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h index e85b6d035c6..48b0f016401 100644 --- a/gcc/config/arm/linux-elf.h +++ b/gcc/config/arm/linux-elf.h @@ -1,5 +1,6 @@ /* Definitions for ARM running Linux-based GNU systems using ELF - Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 + Copyright (C) 1993, 1994, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005 Free Software Foundation, Inc. Contributed by Philip Blundell @@ -123,7 +124,8 @@ #undef ARM_FUNCTION_PROFILER #define ARM_FUNCTION_PROFILER(STREAM, LABELNO) \ { \ - fprintf (STREAM, "\tbl\tmcount%s\n", NEED_PLT_RELOC ? "(PLT)" : ""); \ + fprintf (STREAM, "\tbl\tmcount%s\n", \ + (TARGET_ARM && NEED_PLT_RELOC) ? "(PLT)" : ""); \ } /* The linux profiler clobbers the link register. Make sure the diff --git a/gcc/config/arm/netbsd-elf.h b/gcc/config/arm/netbsd-elf.h index cc69064c70f..9cf47c76188 100644 --- a/gcc/config/arm/netbsd-elf.h +++ b/gcc/config/arm/netbsd-elf.h @@ -1,5 +1,5 @@ /* Definitions of target machine for GNU compiler, NetBSD/arm ELF version. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. This file is part of GCC. @@ -97,7 +97,8 @@ { \ asm_fprintf (STREAM, "\tmov\t%Rip, %Rlr\n"); \ asm_fprintf (STREAM, "\tbl\t__mcount%s\n", \ - NEED_PLT_RELOC ? "(PLT)" : ""); \ + (TARGET_ARM && NEED_PLT_RELOC) \ + ? "(PLT)" : ""); \ } /* VERY BIG NOTE: Change of structure alignment for NetBSD/arm. diff --git a/gcc/config/arm/t-netbsd b/gcc/config/arm/t-netbsd index 533fab947a1..ef613902153 100644 --- a/gcc/config/arm/t-netbsd +++ b/gcc/config/arm/t-netbsd @@ -20,6 +20,8 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ $(LN_S) $(SHLIB_NAME) $(SHLIB_SONAME) # $(slibdir) double quoted to protect it from expansion while building # libgcc.mk. We want this delayed until actual install time. -SHLIB_INSTALL = $(INSTALL_DATA) $(SHLIB_NAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME); \ +SHLIB_INSTALL = \ + $$(mkinstalldirs) $$(DESTDIR)$$(slibdir); \ + $(INSTALL_DATA) $(SHLIB_NAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME); \ rm -f $$(DESTDIR)$$(slibdir)/$(SHLIB_NAME); \ $(LN_S) $(SHLIB_SONAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_NAME) diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 42dbf0295c7..c8627860289 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -681,14 +681,12 @@ avr_output_function_prologue (FILE *file, HOST_WIDE_INT size) } else if (minimize && (frame_pointer_needed || live_seq > 6)) { - const char *cfun_name = current_function_name (); fprintf (file, ("\t" AS1 (ldi, r26) ",lo8(" HOST_WIDE_INT_PRINT_DEC ")" CR_TAB AS1 (ldi, r27) ",hi8(" HOST_WIDE_INT_PRINT_DEC ")" CR_TAB), size, size); - fprintf (file, (AS2 (ldi, r30, pm_lo8(.L_%s_body)) CR_TAB - AS2 (ldi, r31, pm_hi8(.L_%s_body)) CR_TAB), - cfun_name, cfun_name); + fputs ((AS2 (ldi,r30,pm_lo8(1f)) CR_TAB + AS2 (ldi,r31,pm_hi8(1f)) CR_TAB), file); prologue_size += 4; @@ -704,7 +702,7 @@ avr_output_function_prologue (FILE *file, HOST_WIDE_INT size) (18 - live_seq) * 2); ++prologue_size; } - fprintf (file, ".L_%s_body:\n", cfun_name); + fputs ("1:\n", file); } else { @@ -1120,6 +1118,16 @@ print_operand (FILE *file, rtx x, int code) print_operand (file, XEXP (addr, 1), 0); } + else if (code == 'p' || code == 'r') + { + if (GET_CODE (addr) != POST_INC && GET_CODE (addr) != PRE_DEC) + fatal_insn ("bad address, not post_inc or pre_dec:", addr); + + if (code == 'p') + print_operand_address (file, XEXP (addr, 0)); /* X, Y, Z */ + else + print_operand (file, XEXP (addr, 0), 0); /* r26, r28, r30 */ + } else if (GET_CODE (addr) == PLUS) { print_operand_address (file, XEXP (addr,0)); @@ -1835,6 +1843,9 @@ out_movhi_r_mr (rtx insn, rtx op[], int *l) rtx base = XEXP (src, 0); int reg_dest = true_regnum (dest); int reg_base = true_regnum (base); + /* "volatile" forces reading low byte first, even if less efficient, + for correct operation with 16-bit I/O registers. */ + int mem_volatile_p = MEM_VOLATILE_P (src); int tmp; if (!l) @@ -1928,6 +1939,25 @@ out_movhi_r_mr (rtx insn, rtx op[], int *l) if (reg_overlap_mentioned_p (dest, XEXP (base, 0))) fatal_insn ("incorrect insn:", insn); + if (mem_volatile_p) + { + if (REGNO (XEXP (base, 0)) == REG_X) + { + *l = 4; + return (AS2 (sbiw,r26,2) CR_TAB + AS2 (ld,%A0,X+) CR_TAB + AS2 (ld,%B0,X) CR_TAB + AS2 (sbiw,r26,1)); + } + else + { + *l = 3; + return (AS2 (sbiw,%r1,2) CR_TAB + AS2 (ld,%A0,%p1) CR_TAB + AS2 (ldd,%B0,%p1+1)); + } + } + *l = 2; return (AS2 (ld,%B0,%1) CR_TAB AS2 (ld,%A0,%1)); @@ -2508,7 +2538,11 @@ out_movhi_mr_r (rtx insn, rtx op[], int *l) rtx base = XEXP (dest, 0); int reg_base = true_regnum (base); int reg_src = true_regnum (src); + /* "volatile" forces writing high byte first, even if less efficient, + for correct operation with 16-bit I/O registers. */ + int mem_volatile_p = MEM_VOLATILE_P (dest); int tmp; + if (!l) l = &tmp; if (CONSTANT_ADDRESS_P (base)) @@ -2528,33 +2562,33 @@ out_movhi_mr_r (rtx insn, rtx op[], int *l) { if (reg_src == REG_X) { - /* "st X+,r26" is undefined */ - if (reg_unused_after (insn, src)) + /* "st X+,r26" and "st -X,r26" are undefined. */ + if (!mem_volatile_p && reg_unused_after (insn, src)) return *l=4, (AS2 (mov,__tmp_reg__,r27) CR_TAB AS2 (st,X,r26) CR_TAB AS2 (adiw,r26,1) CR_TAB AS2 (st,X,__tmp_reg__)); else return *l=5, (AS2 (mov,__tmp_reg__,r27) CR_TAB - AS2 (st,X,r26) CR_TAB AS2 (adiw,r26,1) CR_TAB AS2 (st,X,__tmp_reg__) CR_TAB - AS2 (sbiw,r26,1)); + AS2 (sbiw,r26,1) CR_TAB + AS2 (st,X,r26)); } else { - if (reg_unused_after (insn, base)) + if (!mem_volatile_p && reg_unused_after (insn, base)) return *l=2, (AS2 (st,X+,%A1) CR_TAB AS2 (st,X,%B1)); else - return *l=3, (AS2 (st ,X+,%A1) CR_TAB - AS2 (st ,X,%B1) CR_TAB - AS2 (sbiw,r26,1)); + return *l=3, (AS2 (adiw,r26,1) CR_TAB + AS2 (st,X,%B1) CR_TAB + AS2 (st,-X,%A1)); } } else - return *l=2, (AS2 (st ,%0,%A1) CR_TAB - AS2 (std,%0+1,%B1)); + return *l=2, (AS2 (std,%0+1,%B1) CR_TAB + AS2 (st,%0,%A1)); } else if (GET_CODE (base) == PLUS) { @@ -2567,14 +2601,14 @@ out_movhi_mr_r (rtx insn, rtx op[], int *l) if (disp <= 63 + MAX_LD_OFFSET (GET_MODE (dest))) return *l = 4, (AS2 (adiw,r28,%o0-62) CR_TAB - AS2 (std,Y+62,%A1) CR_TAB AS2 (std,Y+63,%B1) CR_TAB + AS2 (std,Y+62,%A1) CR_TAB AS2 (sbiw,r28,%o0-62)); return *l = 6, (AS2 (subi,r28,lo8(-%o0)) CR_TAB AS2 (sbci,r29,hi8(-%o0)) CR_TAB - AS2 (st,Y,%A1) CR_TAB AS2 (std,Y+1,%B1) CR_TAB + AS2 (st,Y,%A1) CR_TAB AS2 (subi,r28,lo8(%o0)) CR_TAB AS2 (sbci,r29,hi8(%o0))); } @@ -2582,31 +2616,53 @@ out_movhi_mr_r (rtx insn, rtx op[], int *l) { /* (X + d) = R */ if (reg_src == REG_X) - { + { *l = 7; return (AS2 (mov,__tmp_reg__,r26) CR_TAB AS2 (mov,__zero_reg__,r27) CR_TAB - AS2 (adiw,r26,%o0) CR_TAB - AS2 (st,X+,__tmp_reg__) CR_TAB + AS2 (adiw,r26,%o0+1) CR_TAB AS2 (st,X,__zero_reg__) CR_TAB + AS2 (st,-X,__tmp_reg__) CR_TAB AS1 (clr,__zero_reg__) CR_TAB - AS2 (sbiw,r26,%o0+1)); + AS2 (sbiw,r26,%o0)); } *l = 4; - return (AS2 (adiw,r26,%o0) CR_TAB - AS2 (st,X+,%A1) CR_TAB - AS2 (st,X,%B1) CR_TAB - AS2 (sbiw,r26,%o0+1)); + return (AS2 (adiw,r26,%o0+1) CR_TAB + AS2 (st,X,%B1) CR_TAB + AS2 (st,-X,%A1) CR_TAB + AS2 (sbiw,r26,%o0)); } - return *l=2, (AS2 (std,%A0,%A1) CR_TAB - AS2 (std,%B0,%B1)); + return *l=2, (AS2 (std,%B0,%B1) CR_TAB + AS2 (std,%A0,%A1)); } else if (GET_CODE (base) == PRE_DEC) /* (--R) */ return *l=2, (AS2 (st,%0,%B1) CR_TAB AS2 (st,%0,%A1)); else if (GET_CODE (base) == POST_INC) /* (R++) */ - return *l=2, (AS2 (st,%0,%A1) CR_TAB - AS2 (st,%0,%B1)); + { + if (mem_volatile_p) + { + if (REGNO (XEXP (base, 0)) == REG_X) + { + *l = 4; + return (AS2 (adiw,r26,1) CR_TAB + AS2 (st,X,%B1) CR_TAB + AS2 (st,-X,%A1) CR_TAB + AS2 (adiw,r26,2)); + } + else + { + *l = 3; + return (AS2 (std,%p0+1,%B1) CR_TAB + AS2 (st,%p0,%A1) CR_TAB + AS2 (adiw,%r0,2)); + } + } + + *l = 2; + return (AS2 (st,%0,%A1) CR_TAB + AS2 (st,%0,%B1)); + } fatal_insn ("unknown move insn:",insn); return ""; } diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md index c6da08aef4a..b6fb1796f0e 100644 --- a/gcc/config/avr/avr.md +++ b/gcc/config/avr/avr.md @@ -30,6 +30,8 @@ ;; j Branch condition. ;; k Reverse branch condition. ;; o Displacement for (mem (plus (reg) (const_int))) operands. +;; p POST_INC or PRE_DEC address as a pointer (X, Y, Z) +;; r POST_INC or PRE_DEC address as a register (r26, r28, r30) ;; ~ Output 'r' if not AVR_MEGA. ;; UNSPEC usage: @@ -344,75 +346,69 @@ ;;========================================================================= ;; move string (like memcpy) +;; implement as RTL loop (define_expand "movmemhi" [(parallel [(set (match_operand:BLK 0 "memory_operand" "") - (match_operand:BLK 1 "memory_operand" "")) - (use (match_operand:HI 2 "const_int_operand" "")) - (use (match_operand:HI 3 "const_int_operand" "")) - (clobber (match_scratch:HI 4 "")) - (clobber (match_scratch:HI 5 "")) - (clobber (match_dup 6))])] + (match_operand:BLK 1 "memory_operand" "")) + (use (match_operand:HI 2 "const_int_operand" "")) + (use (match_operand:HI 3 "const_int_operand" ""))])] "" "{ - rtx addr0, addr1; - int cnt8; + int prob; + HOST_WIDE_INT count; enum machine_mode mode; + rtx label = gen_label_rtx (); + rtx loop_reg; + rtx jump; + + /* Copy pointers into new psuedos - they will be changed. */ + rtx addr0 = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); + rtx addr1 = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); + + /* Create rtx for tmp register - we use this as scratch. */ + rtx tmp_reg_rtx = gen_rtx_REG (QImode, TMP_REGNO); if (GET_CODE (operands[2]) != CONST_INT) FAIL; - cnt8 = byte_immediate_operand (operands[2], GET_MODE (operands[2])); - mode = cnt8 ? QImode : HImode; - operands[6] = gen_rtx_SCRATCH (mode); - operands[2] = copy_to_mode_reg (mode, - gen_int_mode (INTVAL (operands[2]), mode)); - addr0 = copy_to_mode_reg (Pmode, XEXP (operands[0], 0)); - addr1 = copy_to_mode_reg (Pmode, XEXP (operands[1], 0)); - operands[0] = gen_rtx_MEM (BLKmode, addr0); - operands[1] = gen_rtx_MEM (BLKmode, addr1); -}") - -(define_insn "*movmemqi_insn" - [(set (mem:BLK (match_operand:HI 0 "register_operand" "e")) - (mem:BLK (match_operand:HI 1 "register_operand" "e"))) - (use (match_operand:QI 2 "register_operand" "r")) - (use (match_operand:QI 3 "const_int_operand" "i")) - (clobber (match_scratch:HI 4 "=0")) - (clobber (match_scratch:HI 5 "=1")) - (clobber (match_scratch:QI 6 "=2"))] - "" - "ld __tmp_reg__,%a1+ - st %a0+,__tmp_reg__ - dec %2 - brne .-8" - [(set_attr "length" "4") - (set_attr "cc" "clobber")]) + count = INTVAL (operands[2]); + if (count <= 0) + FAIL; -(define_insn "*movmemhi" - [(set (mem:BLK (match_operand:HI 0 "register_operand" "e,e")) - (mem:BLK (match_operand:HI 1 "register_operand" "e,e"))) - (use (match_operand:HI 2 "register_operand" "!w,d")) - (use (match_operand:HI 3 "const_int_operand" "")) - (clobber (match_scratch:HI 4 "=0,0")) - (clobber (match_scratch:HI 5 "=1,1")) - (clobber (match_scratch:HI 6 "=2,2"))] - "" - "*{ - if (which_alternative==0) - return (AS2 (ld,__tmp_reg__,%a1+) CR_TAB - AS2 (st,%a0+,__tmp_reg__) CR_TAB - AS2 (sbiw,%A2,1) CR_TAB - AS1 (brne,.-8)); - else - return (AS2 (ld,__tmp_reg__,%a1+) CR_TAB - AS2 (st,%a0+,__tmp_reg__) CR_TAB - AS2 (subi,%A2,1) CR_TAB - AS2 (sbci,%B2,0) CR_TAB - AS1 (brne,.-10)); -}" - [(set_attr "length" "4,5") - (set_attr "cc" "clobber,clobber")]) + /* Work out branch probability for latter use. */ + prob = REG_BR_PROB_BASE - REG_BR_PROB_BASE / count; + + /* See if constant fit 8 bits. */ + mode = (count < 0x100) ? QImode : HImode; + /* Create loop counter register. */ + loop_reg = copy_to_mode_reg (mode, gen_int_mode (count, mode)); + + /* Now create RTL code for move loop. */ + /* Label at top of loop. */ + emit_label (label); + + /* Move one byte into scratch and inc pointer. */ + emit_move_insn (tmp_reg_rtx, gen_rtx_MEM (QImode, addr1)); + emit_move_insn (addr1, gen_rtx_PLUS (Pmode, addr1, const1_rtx)); + + /* Move to mem and inc pointer. */ + emit_move_insn (gen_rtx_MEM (QImode, addr0), tmp_reg_rtx); + emit_move_insn (addr0, gen_rtx_PLUS (Pmode, addr0, const1_rtx)); + + /* Decrement count. */ + emit_move_insn (loop_reg, gen_rtx_PLUS (mode, loop_reg, constm1_rtx)); + + /* Compare with zero and jump if not equal. */ + emit_cmp_and_jump_insns (loop_reg, const0_rtx, NE, NULL_RTX, mode, 1, + label); + /* Set jump probability based on loop count. */ + jump = get_last_insn (); + REG_NOTES (jump) = gen_rtx_EXPR_LIST (REG_BR_PROB, + GEN_INT (prob), + REG_NOTES (jump)); + DONE; +}") ;; =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 =0 ;; memset (%0, 0, %1) diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index c0435f7e65c..faad7364a34 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -772,14 +772,14 @@ enum reg_class {NO_REGS, ALL_REGS, LIM_REG_CLASSES}; (C) == 'U' ? EXTRA_CONSTRAINT_U (X) : \ 0) +#define EXTRA_MEMORY_CONSTRAINT(X, STR) ((X) == 'Q') + #define EXTRA_CONSTRAINT_Q(X) \ ( \ - /* Slottable addressing modes: \ - A register? FIXME: Unnecessary. */ \ - (BASE_P (X) && REGNO (X) != CRIS_PC_REGNUM) \ - /* Indirect register: [reg]? */ \ - || (GET_CODE (X) == MEM && BASE_P (XEXP (X, 0)) \ - && REGNO (XEXP (X, 0)) != CRIS_PC_REGNUM) \ + /* Just an indirect register (happens to also be \ + "all" slottable memory addressing modes not \ + covered by other constraints, i.e. '>'). */ \ + GET_CODE (X) == MEM && BASE_P (XEXP (X, 0)) \ ) #define EXTRA_CONSTRAINT_R(X) \ diff --git a/gcc/config/cris/cris.md b/gcc/config/cris/cris.md index 03ca50aedb7..69f31ea1627 100644 --- a/gcc/config/cris/cris.md +++ b/gcc/config/cris/cris.md @@ -1,5 +1,5 @@ ;; GCC machine description for CRIS cpu cores. -;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 +;; Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 ;; Free Software Foundation, Inc. ;; Contributed by Axis Communications. @@ -91,9 +91,9 @@ ;; mode, but that would need more attributes and hairier, more error ;; prone code. ;; -;; There is an extra constraint, 'Q', which recognizes indirect reg, -;; except when the reg is pc. The constraints 'Q' and '>' together match -;; all possible memory operands that are slottable. +;; There is an extra memory constraint, 'Q', which recognizes an indirect +;; register. The constraints 'Q' and '>' together match all possible +;; memory operands that are slottable. ;; For other operands, you need to check if it has a valid "slottable" ;; quick-immediate operand, where the particular signedness-variation ;; may match the constraints 'I' or 'J'.), and include it in the @@ -268,8 +268,8 @@ (define_insn "cmpsi" [(set (cc0) (compare - (match_operand:SI 0 "nonimmediate_operand" "r,r,r,r,Q>,Q>,r,r,m,m") - (match_operand:SI 1 "general_operand" "I,r,Q>,M,M,r,P,g,M,r")))] + (match_operand:SI 0 "nonimmediate_operand" "r,r,r, r,Q>,Q>,r,r,m,m") + (match_operand:SI 1 "general_operand" "I,r,Q>,M,M, r, P,g,M,r")))] "" "@ cmpq %1,%0 @@ -286,24 +286,25 @@ (define_insn "cmphi" [(set (cc0) - (compare (match_operand:HI 0 "nonimmediate_operand" "r,r,Q>,Q>,r,m,m") - (match_operand:HI 1 "general_operand" "r,Q>,M,r,g,M,r")))] + (compare (match_operand:HI 0 "nonimmediate_operand" "r,r, r,Q>,Q>,r,m,m") + (match_operand:HI 1 "general_operand" "r,Q>,M,M, r, g,M,r")))] "" "@ cmp.w %1,%0 cmp.w %1,%0 test.w %0 + test.w %0 cmp.w %0,%1 cmp.w %1,%0 test.w %0 cmp.w %0,%1" - [(set_attr "slottable" "yes,yes,yes,yes,no,no,no")]) + [(set_attr "slottable" "yes,yes,yes,yes,yes,no,no,no")]) (define_insn "cmpqi" [(set (cc0) (compare - (match_operand:QI 0 "nonimmediate_operand" "r,r,r,Q>,Q>,r,m,m") - (match_operand:QI 1 "general_operand" "r,Q>,M,M,r,g,M,r")))] + (match_operand:QI 0 "nonimmediate_operand" "r,r, r,Q>,Q>,r,m,m") + (match_operand:QI 1 "general_operand" "r,Q>,M,M, r, g,M,r")))] "" "@ cmp.b %1,%0 @@ -993,11 +994,11 @@ (define_insn "*movsi_internal" [(set - (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,Q>,r,Q>,g,r,r,r,g") + (match_operand:SI 0 "nonimmediate_operand" "=r,r, r,Q>,r,Q>,g,r,r,r,g") (match_operand:SI 1 ;; FIXME: We want to put S last, but apparently g matches S. ;; It's a bug: an S is not a general_operand and shouldn't match g. - "cris_general_operand_or_gotless_symbol" "r,Q>,M,M,I,r,M,n,!S,g,r"))] + "cris_general_operand_or_gotless_symbol" "r,Q>,M,M, I,r, M,n,!S,g,r"))] "" "* { @@ -1206,8 +1207,8 @@ (define_insn "movhi" [(set - (match_operand:HI 0 "nonimmediate_operand" "=r,r,r,Q>,r,Q>,r,r,r,g,g,r") - (match_operand:HI 1 "general_operand" "r,Q>,M,M,I,r,L,O,n,M,r,g"))] + (match_operand:HI 0 "nonimmediate_operand" "=r,r, r,Q>,r,Q>,r,r,r,g,g,r") + (match_operand:HI 1 "general_operand" "r,Q>,M,M, I,r, L,O,n,M,r,g"))] "" "* { @@ -1249,8 +1250,8 @@ (define_insn "movstricthi" [(set (strict_low_part - (match_operand:HI 0 "nonimmediate_operand" "+r,r,r,Q>,Q>,g,r,g")) - (match_operand:HI 1 "general_operand" "r,Q>,M,M,r,M,g,r"))] + (match_operand:HI 0 "nonimmediate_operand" "+r,r, r,Q>,Q>,g,r,g")) + (match_operand:HI 1 "general_operand" "r,Q>,M,M, r, M,g,r"))] "" "@ move.w %1,%0 @@ -1264,8 +1265,8 @@ [(set_attr "slottable" "yes,yes,yes,yes,yes,no,no,no")]) (define_insn "movqi" - [(set (match_operand:QI 0 "nonimmediate_operand" "=r,Q>,r,r,Q>,r,g,g,r,r") - (match_operand:QI 1 "general_operand" "r,r,Q>,M,M,I,M,r,O,g"))] + [(set (match_operand:QI 0 "nonimmediate_operand" "=r,Q>,r, r,Q>,r,g,g,r,r") + (match_operand:QI 1 "general_operand" "r,r, Q>,M,M, I,M,r,O,g"))] "" "@ move.b %1,%0 @@ -1286,8 +1287,8 @@ (define_insn "movstrictqi" [(set (strict_low_part - (match_operand:QI 0 "nonimmediate_operand" "+r,Q>,r,r,Q>,g,g,r")) - (match_operand:QI 1 "general_operand" "r,r,Q>,M,M,M,r,g"))] + (match_operand:QI 0 "nonimmediate_operand" "+r,Q>,r, r,Q>,g,g,r")) + (match_operand:QI 1 "general_operand" "r,r, Q>,M,M, M,r,g"))] "" "@ move.b %1,%0 @@ -1306,8 +1307,8 @@ ;; It will use clear, so we know ALL types of immediate 0 never change cc. (define_insn "movsf" - [(set (match_operand:SF 0 "nonimmediate_operand" "=r,Q>,r,r,Q>,g,g,r") - (match_operand:SF 1 "general_operand" "r,r,Q>,G,G,G,r,g"))] + [(set (match_operand:SF 0 "nonimmediate_operand" "=r,Q>,r, r,Q>,g,g,r") + (match_operand:SF 1 "general_operand" "r,r, Q>,G,G, G,r,g"))] "" "@ move.d %1,%0 @@ -1720,10 +1721,10 @@ add.d %M2,%M1,%M0\;ax\;add.d %H2,%H1,%H0") (define_insn "addsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r") + [(set (match_operand:SI 0 "register_operand" "=r,r, r,r,r,r,r, r") (plus:SI - (match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,r,r") - (match_operand:SI 2 "general_operand" "r,Q>,J,N,n,g,!To,0")))] + (match_operand:SI 1 "register_operand" "%0,0, 0,0,0,0,r, r") + (match_operand:SI 2 "general_operand" "r,Q>,J,N,n,g,!To,0")))] ;; The last constraint is due to that after reload, the '%' is not ;; honored, and canonicalization doesn't care about keeping the same @@ -1773,9 +1774,9 @@ [(set_attr "slottable" "yes,yes,yes,yes,no,no,no,yes")]) (define_insn "addhi3" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r") - (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,r") - (match_operand:HI 2 "general_operand" "r,Q>,J,N,g,!To")))] + [(set (match_operand:HI 0 "register_operand" "=r,r, r,r,r,r") + (plus:HI (match_operand:HI 1 "register_operand" "%0,0, 0,0,0,r") + (match_operand:HI 2 "general_operand" "r,Q>,J,N,g,!To")))] "" "@ add.w %2,%0 @@ -1788,9 +1789,9 @@ (set_attr "cc" "normal,normal,clobber,clobber,normal,normal")]) (define_insn "addqi3" - [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r,r") - (plus:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,0,r") - (match_operand:QI 2 "general_operand" "r,Q>,J,N,O,g,!To")))] + [(set (match_operand:QI 0 "register_operand" "=r,r, r,r,r,r,r") + (plus:QI (match_operand:QI 1 "register_operand" "%0,0, 0,0,0,0,r") + (match_operand:QI 2 "general_operand" "r,Q>,J,N,O,g,!To")))] "" "@ add.b %2,%0 @@ -1824,10 +1825,10 @@ sub.d %M2,%M1,%M0\;ax\;sub.d %H2,%H1,%H0") (define_insn "subsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r,r,r") + [(set (match_operand:SI 0 "register_operand" "=r,r, r,r,r,r,r,r") (minus:SI - (match_operand:SI 1 "register_operand" "0,0,0,0,0,0,0,r") - (match_operand:SI 2 "general_operand" "r,Q>,J,N,P,n,g,!To")))] + (match_operand:SI 1 "register_operand" "0,0, 0,0,0,0,0,r") + (match_operand:SI 2 "general_operand" "r,Q>,J,N,P,n,g,!To")))] "" ;; This does not do the optimal: "addu.w 65535,r0" when %2 is negative. @@ -1845,9 +1846,9 @@ [(set_attr "slottable" "yes,yes,yes,yes,no,no,no,no")]) (define_insn "subhi3" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r") - (minus:HI (match_operand:HI 1 "register_operand" "0,0,0,0,0,r") - (match_operand:HI 2 "general_operand" "r,Q>,J,N,g,!To")))] + [(set (match_operand:HI 0 "register_operand" "=r,r, r,r,r,r") + (minus:HI (match_operand:HI 1 "register_operand" "0,0, 0,0,0,r") + (match_operand:HI 2 "general_operand" "r,Q>,J,N,g,!To")))] "" "@ sub.w %2,%0 @@ -1860,9 +1861,9 @@ (set_attr "cc" "normal,normal,clobber,clobber,normal,normal")]) (define_insn "subqi3" - [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r") - (minus:QI (match_operand:QI 1 "register_operand" "0,0,0,0,0,r") - (match_operand:QI 2 "general_operand" "r,Q>,J,N,g,!To")))] + [(set (match_operand:QI 0 "register_operand" "=r,r, r,r,r,r") + (minus:QI (match_operand:QI 1 "register_operand" "0,0, 0,0,0,r") + (match_operand:QI 2 "general_operand" "r,Q>,J,N,g,!To")))] "" "@ sub.b %2,%0 @@ -2734,9 +2735,9 @@ ;; improved reload pass. (define_insn "*expanded_andsi" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r") - (and:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,r") - (match_operand:SI 2 "general_operand" "I,r,Q>,g,!To")))] + [(set (match_operand:SI 0 "register_operand" "=r,r,r, r,r") + (and:SI (match_operand:SI 1 "register_operand" "%0,0,0, 0,r") + (match_operand:SI 2 "general_operand" "I,r,Q>,g,!To")))] "" "@ andq %2,%0 @@ -2810,9 +2811,9 @@ ;; Catch-all andhi3 pattern. (define_insn "*expanded_andhi" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r") - (and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0,r") - (match_operand:HI 2 "general_operand" "I,r,Q>,L,O,g,!To")))] + [(set (match_operand:HI 0 "register_operand" "=r,r,r, r,r,r,r") + (and:HI (match_operand:HI 1 "register_operand" "%0,0,0, 0,0,0,r") + (match_operand:HI 2 "general_operand" "I,r,Q>,L,O,g,!To")))] ;; Sidenote: the tightening from "general_operand" to ;; "register_operand" for operand 1 actually increased the register @@ -2835,9 +2836,9 @@ (define_insn "*andhi_lowpart" [(set (strict_low_part - (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r")) - (and:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,r") - (match_operand:HI 2 "general_operand" "r,Q>,L,O,g,!To")))] + (match_operand:HI 0 "register_operand" "=r,r, r,r,r,r")) + (and:HI (match_operand:HI 1 "register_operand" "%0,0, 0,0,0,r") + (match_operand:HI 2 "general_operand" "r,Q>,L,O,g,!To")))] "" "@ and.w %2,%0 @@ -2850,9 +2851,9 @@ (set_attr "cc" "normal,normal,normal,clobber,normal,normal")]) (define_insn "andqi3" - [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r") - (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,r") - (match_operand:QI 2 "general_operand" "I,r,Q>,O,g,!To")))] + [(set (match_operand:QI 0 "register_operand" "=r,r,r, r,r,r") + (and:QI (match_operand:QI 1 "register_operand" "%0,0,0, 0,0,r") + (match_operand:QI 2 "general_operand" "I,r,Q>,O,g,!To")))] "" "@ andq %2,%0 @@ -2866,9 +2867,9 @@ (define_insn "*andqi_lowpart" [(set (strict_low_part - (match_operand:QI 0 "register_operand" "=r,r,r,r,r")) - (and:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,r") - (match_operand:QI 2 "general_operand" "r,Q>,O,g,!To")))] + (match_operand:QI 0 "register_operand" "=r,r, r,r,r")) + (and:QI (match_operand:QI 1 "register_operand" "%0,0, 0,0,r") + (match_operand:QI 2 "general_operand" "r,Q>,O,g,!To")))] "" "@ and.b %2,%0 @@ -2887,9 +2888,9 @@ ;; with andsi3. (define_insn "iorsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r,r") - (ior:SI (match_operand:SI 1 "register_operand" "%0,0,0,0,0,r") - (match_operand:SI 2 "general_operand" "I,r,Q>,n,g,!To")))] + [(set (match_operand:SI 0 "register_operand" "=r,r,r, r,r,r") + (ior:SI (match_operand:SI 1 "register_operand" "%0,0,0, 0,0,r") + (match_operand:SI 2 "general_operand" "I, r,Q>,n,g,!To")))] "" "@ orq %2,%0 @@ -2902,9 +2903,9 @@ (set_attr "cc" "normal,normal,normal,clobber,normal,normal")]) (define_insn "iorhi3" - [(set (match_operand:HI 0 "register_operand" "=r,r,r,r,r,r,r") - (ior:HI (match_operand:HI 1 "register_operand" "%0,0,0,0,0,0,r") - (match_operand:HI 2 "general_operand" "I,r,Q>,L,O,g,!To")))] + [(set (match_operand:HI 0 "register_operand" "=r,r,r, r,r,r,r") + (ior:HI (match_operand:HI 1 "register_operand" "%0,0,0, 0,0,0,r") + (match_operand:HI 2 "general_operand" "I,r,Q>,L,O,g,!To")))] "" "@ orq %2,%0 @@ -2918,9 +2919,9 @@ (set_attr "cc" "clobber,normal,normal,normal,clobber,normal,normal")]) (define_insn "iorqi3" - [(set (match_operand:QI 0 "register_operand" "=r,r,r,r,r,r") - (ior:QI (match_operand:QI 1 "register_operand" "%0,0,0,0,0,r") - (match_operand:QI 2 "general_operand" "I,r,Q>,O,g,!To")))] + [(set (match_operand:QI 0 "register_operand" "=r,r,r, r,r,r") + (ior:QI (match_operand:QI 1 "register_operand" "%0,0,0, 0,0,r") + (match_operand:QI 2 "general_operand" "I,r,Q>,O,g,!To")))] "" "@ orq %2,%0 @@ -3340,9 +3341,9 @@ ;; normal code too. (define_insn "uminsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") - (umin:SI (match_operand:SI 1 "register_operand" "%0,0,0,r") - (match_operand:SI 2 "general_operand" "r,Q>,g,!STo")))] + [(set (match_operand:SI 0 "register_operand" "=r,r, r,r") + (umin:SI (match_operand:SI 1 "register_operand" "%0,0, 0,r") + (match_operand:SI 2 "general_operand" "r,Q>,g,!STo")))] "" "* { @@ -3858,7 +3859,7 @@ }") ;; Accept *anything* as operand 1. Accept operands for operand 0 in -;; order of preference (Q includes r, but r is shorter, faster) +;; order of preference. (define_insn "*expanded_call" [(call (mem:QI (match_operand:SI diff --git a/gcc/config/darwin8.h b/gcc/config/darwin8.h index 6a061a41caf..639cb911c66 100644 --- a/gcc/config/darwin8.h +++ b/gcc/config/darwin8.h @@ -22,11 +22,13 @@ Boston, MA 02111-1307, USA. */ /* Darwin 7.0 and above have C99 functions. */ #define TARGET_C99_FUNCTIONS 1 -/* Machine dependent libraries. Include libmx when compiling on Darwin 7.0 - and above. Include libSystemStubs when compiling on 8.0 and above and - not 64-bit long double. */ +/* Machine dependent libraries. Include libmx when compiling on + Darwin 7.0 and above, but before libSystem, since the functions are + actually in libSystem but for 7.x compatibility we want them to be + looked for in libmx first. Include libSystemStubs when compiling + on 8.0 and above and not 64-bit long double. */ #undef LIB_SPEC #define LIB_SPEC "%{!static:\ %{!mlong-double-64:%{pg:-lSystemStubs_profile;:-lSystemStubs}} \ - -lSystem -lmx}" + -lmx -lSystem}" diff --git a/gcc/config/i386/cygwin1.c b/gcc/config/i386/cygwin1.c index 2cab96c195c..88c44fc9fbf 100644 --- a/gcc/config/i386/cygwin1.c +++ b/gcc/config/i386/cygwin1.c @@ -30,13 +30,13 @@ mingw_scan (int argc ATTRIBUTE_UNUSED, const char *const *argv, char **spec_machine) { - putenv ("GCC_CYGWIN_MINGW=0"); + putenv (xstrdup ("GCC_CYGWIN_MINGW=0")); while (*++argv) if (strcmp (*argv, "-mno-win32") == 0) - putenv ("GCC_CYGWIN_WIN32=0"); + putenv (xstrdup ("GCC_CYGWIN_WIN32=0")); else if (strcmp (*argv, "-mwin32") == 0) - putenv ("GCC_CYGWIN_WIN32=1"); + putenv (xstrdup ("GCC_CYGWIN_WIN32=1")); else if (strcmp (*argv, "-mno-cygwin") == 0) { char *p = strstr (*spec_machine, "-cygwin"); @@ -48,7 +48,7 @@ mingw_scan (int argc ATTRIBUTE_UNUSED, strcpy (s + len, "-mingw32"); *spec_machine = s; } - putenv ("GCC_CYGWIN_MINGW=1"); + putenv (xstrdup ("GCC_CYGWIN_MINGW=1")); } return; } diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index ec816259bde..7d16c36fa8f 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -76,7 +76,7 @@ Boston, MA 02111-1307, USA. */ /* By default, target has a 80387, uses IEEE compatible arithmetic, and returns float values in the 387. */ -#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) +#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_128BIT_LONG_DOUBLE | MASK_ALIGN_DOUBLE) /* TARGET_DEEP_BRANCH_PREDICTION is incompatible with Mach-O PIC. */ diff --git a/gcc/config/i386/emmintrin.h b/gcc/config/i386/emmintrin.h index 3bf5fd81ff1..45624d20190 100644 --- a/gcc/config/i386/emmintrin.h +++ b/gcc/config/i386/emmintrin.h @@ -1266,7 +1266,7 @@ _mm_insert_epi16 (__m128i const __A, int const __D, int const __N) } #else #define _mm_extract_epi16(A, N) \ - ((int) __builtin_ia32_vec_ext_v8hi ((__v8hi)(A), (N)) + ((int) __builtin_ia32_vec_ext_v8hi ((__v8hi)(A), (N))) #define _mm_insert_epi16(A, D, N) \ ((__m128i) __builtin_ia32_vec_set_v8hi ((__v8hi)(A), (D), (N))) #endif diff --git a/gcc/config/i386/host-cygwin.c b/gcc/config/i386/host-cygwin.c new file mode 100755 index 00000000000..4f6de6fd893 --- /dev/null +++ b/gcc/config/i386/host-cygwin.c @@ -0,0 +1,81 @@ +/* Cygwin host-specific hook definitions. + Copyright (C) 2004 Free Software Foundation, Inc. + + 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 2, 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. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the + Free Software Foundation, 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. */ + +#include "config.h" +#include "system.h" +#include "coretypes.h" +#include +#include "hosthooks.h" +#include "hosthooks-def.h" +#include "toplev.h" +#include "diagnostic.h" + +static void * cygwin_gt_pch_get_address (size_t, int fd); +static size_t cygwin_gt_pch_alloc_granularity (void); + +#undef HOST_HOOKS_GT_PCH_GET_ADDRESS +#define HOST_HOOKS_GT_PCH_GET_ADDRESS cygwin_gt_pch_get_address +#undef HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY +#define HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY cygwin_gt_pch_alloc_granularity + +/* Granularity for reserving address space. */ +static const size_t va_granularity = 0x10000; + +/* Return the alignment required for allocating virtual memory. */ +static size_t +cygwin_gt_pch_alloc_granularity (void) +{ + return va_granularity; +} + +/* Identify an address that's likely to be free in a subsequent invocation + of the compiler. The area should be able to hold SIZE bytes. FD is an + open file descriptor if the host would like to probe with mmap. */ +static void * +cygwin_gt_pch_get_address (size_t sz, int fd) +{ + void *base; + off_t p = lseek(fd, 0, SEEK_CUR); + + if (p == (off_t) -1) + fatal_error ("can't get position in PCH file: %m"); + + /* Cygwin requires that the underlying file be at least + as large as the requested mapping. */ + if ((size_t) p < sz) + { + if ( ftruncate (fd, sz) == -1 ) + fatal_error ("can't extend PCH file: %m"); + } + + base = mmap (NULL, sz, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); + + if (base == MAP_FAILED) + base = NULL; + else + munmap (base, sz); + + if (lseek (fd, p, SEEK_SET) == (off_t) -1 ) + fatal_error ("can't set position in PCH file: %m"); + + return base; +} + +const struct host_hooks host_hooks = HOST_HOOKS_INITIALIZER; diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index bc680c80df9..24a025ecbd8 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2657,6 +2657,11 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode, abort (); } } + + /* Empty aligned struct, union or class. */ + if (nexps == 0) + return NULL; + ret = gen_rtx_PARALLEL (mode, rtvec_alloc (nexps)); for (i = 0; i < nexps; i++) XVECEXP (ret, 0, i) = exp [i]; @@ -4661,9 +4666,8 @@ ix86_output_function_epilogue (FILE *file ATTRIBUTE_UNUSED, int ix86_decompose_address (rtx addr, struct ix86_address *out) { - rtx base = NULL_RTX; - rtx index = NULL_RTX; - rtx disp = NULL_RTX; + rtx base = NULL_RTX, index = NULL_RTX, disp = NULL_RTX; + rtx base_reg, index_reg; HOST_WIDE_INT scale = 1; rtx scale_rtx = NULL_RTX; int retval = 1; @@ -4765,34 +4769,37 @@ ix86_decompose_address (rtx addr, struct ix86_address *out) scale = INTVAL (scale_rtx); } + base_reg = base && GET_CODE (base) == SUBREG ? SUBREG_REG (base) : base; + index_reg = index && GET_CODE (index) == SUBREG ? SUBREG_REG (index) : index; + /* Allow arg pointer and stack pointer as index if there is not scaling. */ - if (base && index && scale == 1 - && (index == arg_pointer_rtx - || index == frame_pointer_rtx - || (REG_P (index) && REGNO (index) == STACK_POINTER_REGNUM))) + if (base_reg && index_reg && scale == 1 + && (index_reg == arg_pointer_rtx + || index_reg == frame_pointer_rtx + || (REG_P (index_reg) && REGNO (index_reg) == STACK_POINTER_REGNUM))) { - rtx tmp = base; - base = index; - index = tmp; + rtx tmp; + tmp = base, base = index, index = tmp; + tmp = base_reg, base_reg = index_reg, index_reg = tmp; } /* Special case: %ebp cannot be encoded as a base without a displacement. */ - if ((base == hard_frame_pointer_rtx - || base == frame_pointer_rtx - || base == arg_pointer_rtx) && !disp) + if ((base_reg == hard_frame_pointer_rtx + || base_reg == frame_pointer_rtx + || base_reg == arg_pointer_rtx) && !disp) disp = const0_rtx; /* Special case: on K6, [%esi] makes the instruction vector decoded. Avoid this by transforming to [%esi+0]. */ if (ix86_tune == PROCESSOR_K6 && !optimize_size - && base && !index && !disp - && REG_P (base) - && REGNO_REG_CLASS (REGNO (base)) == SIREG) + && base_reg && !index_reg && !disp + && REG_P (base_reg) + && REGNO_REG_CLASS (REGNO (base_reg)) == SIREG) disp = const0_rtx; /* Special case: encode reg+reg instead of reg*2. */ if (!base && index && scale && scale == 2) - base = index, scale = 1; + base = index, base_reg = index_reg, scale = 1; /* Special case: scaling cannot be encoded without base or displacement. */ if (!base && !disp && index && scale != 1) @@ -4821,6 +4828,11 @@ ix86_address_cost (rtx x) if (!ix86_decompose_address (x, &parts)) abort (); + if (parts.base && GET_CODE (parts.base) == SUBREG) + parts.base = SUBREG_REG (parts.base); + if (parts.index && GET_CODE (parts.index) == SUBREG) + parts.index = SUBREG_REG (parts.index); + /* More complex memory references are better. */ if (parts.disp && parts.disp != const0_rtx) cost--; @@ -5170,15 +5182,23 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) /* Validate base register. - Don't allow SUBREG's here, it can lead to spill failures when the base - is one word out of a two word structure, which is represented internally - as a DImode int. */ + Don't allow SUBREG's that span more than a word here. It can lead to spill + failures when the base is one word out of a two word structure, which is + represented internally as a DImode int. */ if (base) { + rtx reg; reason_rtx = base; - - if (GET_CODE (base) != REG) + + if (REG_P (base)) + reg = base; + else if (GET_CODE (base) == SUBREG + && REG_P (SUBREG_REG (base)) + && GET_MODE_SIZE (GET_MODE (SUBREG_REG (base))) + <= UNITS_PER_WORD) + reg = SUBREG_REG (base); + else { reason = "base is not a register"; goto report_error; @@ -5190,8 +5210,8 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) goto report_error; } - if ((strict && ! REG_OK_FOR_BASE_STRICT_P (base)) - || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (base))) + if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg)) + || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (reg))) { reason = "base is not valid"; goto report_error; @@ -5200,15 +5220,21 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) /* Validate index register. - Don't allow SUBREG's here, it can lead to spill failures when the index - is one word out of a two word structure, which is represented internally - as a DImode int. */ + Don't allow SUBREG's that span more than a word here -- same as above. */ if (index) { + rtx reg; reason_rtx = index; - if (GET_CODE (index) != REG) + if (REG_P (index)) + reg = index; + else if (GET_CODE (index) == SUBREG + && REG_P (SUBREG_REG (index)) + && GET_MODE_SIZE (GET_MODE (SUBREG_REG (index))) + <= UNITS_PER_WORD) + reg = SUBREG_REG (index); + else { reason = "index is not a register"; goto report_error; @@ -5220,8 +5246,8 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) goto report_error; } - if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (index)) - || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (index))) + if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg)) + || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (reg))) { reason = "index is not valid"; goto report_error; @@ -6703,6 +6729,17 @@ print_operand (FILE *file, rtx x, int code) else { + /* We have patterns that allow zero sets of memory, for instance. + In 64-bit mode, we should probably support all 8-byte vectors, + since we can in fact encode that into an immediate. */ + if (GET_CODE (x) == CONST_VECTOR) + { + if (x == CONST0_RTX (GET_MODE (x))) + x = const0_rtx; + else + abort (); + } + if (code != 'P') { if (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) @@ -10272,8 +10309,18 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode) operand = copy_rtx (operand); PUT_MODE (operand, Pmode); parts[0] = parts[1] = parts[2] = operand; + return size; } - else if (!TARGET_64BIT) + + if (GET_CODE (operand) == CONST_VECTOR) + { + enum machine_mode imode = int_mode_for_mode (mode); + operand = simplify_subreg (imode, operand, mode, 0); + gcc_assert (operand != NULL); + mode = imode; + } + + if (!TARGET_64BIT) { if (mode == DImode) split_di (&operand, 1, &parts[0], &parts[1]); @@ -11828,6 +11875,11 @@ memory_address_length (rtx addr) if (! ix86_decompose_address (addr, &parts)) abort (); + if (parts.base && GET_CODE (parts.base) == SUBREG) + parts.base = SUBREG_REG (parts.base); + if (parts.index && GET_CODE (parts.index) == SUBREG) + parts.index = SUBREG_REG (parts.index); + base = parts.base; index = parts.index; disp = parts.disp; @@ -15028,15 +15080,30 @@ ix86_hard_regno_mode_ok (int regno, enum machine_mode mode) return (VALID_MMX_REG_MODE (mode) || VALID_MMX_REG_MODE_3DNOW (mode)); } - /* We handle both integer and floats in the general purpose registers. - In future we should be able to handle vector modes as well. */ - if (!VALID_INT_MODE_P (mode) && !VALID_FP_MODE_P (mode)) - return 0; - /* Take care for QImode values - they can be in non-QI regs, but then - they do cause partial register stalls. */ - if (regno < 4 || mode != QImode || TARGET_64BIT) + + if (mode == QImode) + { + /* Take care for QImode values - they can be in non-QI regs, + but then they do cause partial register stalls. */ + if (regno < 4 || TARGET_64BIT) + return 1; + if (!TARGET_PARTIAL_REG_STALL) + return 1; + return reload_in_progress || reload_completed; + } + /* We handle both integer and floats in the general purpose registers. */ + else if (VALID_INT_MODE_P (mode)) + return 1; + else if (VALID_FP_MODE_P (mode)) + return 1; + /* Lots of MMX code casts 8 byte vector modes to DImode. If we then go + on to use that value in smaller contexts, this can easily force a + pseudo to be allocated to GENERAL_REGS. Since this is no worse than + supporting DImode, allow it. */ + else if (VALID_MMX_REG_MODE_3DNOW (mode) || VALID_MMX_REG_MODE (mode)) return 1; - return reload_in_progress || reload_completed || !TARGET_PARTIAL_REG_STALL; + + return 0; } /* A subroutine of ix86_modes_tieable_p. Return true if MODE is a @@ -15089,12 +15156,14 @@ ix86_modes_tieable_p (enum machine_mode mode1, enum machine_mode mode2) /* If MODE2 is only appropriate for an SSE register, then tie with any other mode acceptable to SSE registers. */ - if (SSE_REG_MODE_P (mode2)) + if (GET_MODE_SIZE (mode2) >= 8 + && ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode2)) return ix86_hard_regno_mode_ok (FIRST_SSE_REG, mode1); /* If MODE2 is appropriate for an MMX (or SSE) register, then tie with any other mode acceptable to MMX registers. */ - if (MMX_REG_MODE_P (mode2)) + if (GET_MODE_SIZE (mode2) == 8 + && ix86_hard_regno_mode_ok (FIRST_MMX_REG, mode2)) return ix86_hard_regno_mode_ok (FIRST_MMX_REG, mode1); return false; @@ -16198,11 +16267,21 @@ ix86_expand_vector_init_duplicate (bool mmx_ok, enum machine_mode mode, case V4HImode: if (!mmx_ok) return false; - val = gen_lowpart (SImode, val); - x = gen_rtx_TRUNCATE (HImode, val); - x = gen_rtx_VEC_DUPLICATE (mode, x); - emit_insn (gen_rtx_SET (VOIDmode, target, x)); - return true; + if (TARGET_SSE || TARGET_3DNOW_A) + { + val = gen_lowpart (SImode, val); + x = gen_rtx_TRUNCATE (HImode, val); + x = gen_rtx_VEC_DUPLICATE (mode, x); + emit_insn (gen_rtx_SET (VOIDmode, target, x)); + return true; + } + else + { + smode = HImode; + wsmode = SImode; + wvmode = V2SImode; + goto widen; + } case V8QImode: if (!mmx_ok) diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 5c2046a49d7..de22587474d 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -1107,11 +1107,6 @@ do { \ || (MODE) == V8HImode || (MODE) == V2DFmode || (MODE) == V2DImode \ || (MODE) == V4SFmode || (MODE) == V4SImode) -/* Return true for modes passed in MMX registers. */ -#define MMX_REG_MODE_P(MODE) \ - ((MODE) == V8QImode || (MODE) == V4HImode || (MODE) == V2SImode \ - || (MODE) == V2SFmode) - /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. */ #define HARD_REGNO_MODE_OK(REGNO, MODE) \ diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index d9a4ce599ed..d859ddfcc76 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3770,6 +3770,22 @@ [(set_attr "type" "fmov,multi") (set_attr "mode" "SF")]) +(define_insn "*truncdfsf2_i387_1" + [(set (match_operand:SF 0 "memory_operand" "=m") + (float_truncate:SF + (match_operand:DF 1 "register_operand" "f")))] + "TARGET_80387 + && !(TARGET_SSE2 && TARGET_SSE_MATH) + && !TARGET_MIX_SSE_I387" +{ + if (find_regno_note (insn, REG_DEAD, REGNO (operands[1]))) + return "fstp%z0\t%y0"; + else + return "fst%z0\t%y0"; +} + [(set_attr "type" "fmov") + (set_attr "mode" "SF")]) + (define_split [(set (match_operand:SF 0 "register_operand" "") (float_truncate:SF @@ -16297,7 +16313,33 @@ DONE; }) -(define_insn "frndintxf2_floor" +;; Rounding mode control word calculation could clobber FLAGS_REG. +(define_insn_and_split "frndintxf2_floor" + [(set (match_operand:XF 0 "register_operand" "=f") + (unspec:XF [(match_operand:XF 1 "register_operand" "0")] + UNSPEC_FRNDINT_FLOOR)) + (clobber (reg:CC FLAGS_REG))] + "TARGET_USE_FANCY_MATH_387 + && flag_unsafe_math_optimizations + && !(reload_completed || reload_in_progress)" + "#" + "&& 1" + [(const_int 0)] +{ + ix86_optimize_mode_switching = 1; + + operands[2] = assign_386_stack_local (HImode, 1); + operands[3] = assign_386_stack_local (HImode, 2); + + emit_insn (gen_frndintxf2_floor_i387 (operands[0], operands[1], + operands[2], operands[3])); + DONE; +} + [(set_attr "type" "frndint") + (set_attr "i387_cw" "floor") + (set_attr "mode" "XF")]) + +(define_insn "frndintxf2_floor_i387" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_FRNDINT_FLOOR)) @@ -16310,6 +16352,16 @@ (set_attr "i387_cw" "floor") (set_attr "mode" "XF")]) +(define_expand "floorxf2" + [(use (match_operand:XF 0 "register_operand" "")) + (use (match_operand:XF 1 "register_operand" ""))] + "TARGET_USE_FANCY_MATH_387 + && flag_unsafe_math_optimizations" +{ + emit_insn (gen_frndintxf2_floor (operands[0], operands[1])); + DONE; +}) + (define_expand "floordf2" [(use (match_operand:DF 0 "register_operand" "")) (use (match_operand:DF 1 "register_operand" ""))] @@ -16319,13 +16371,9 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extenddfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_floor (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_floor (op0, op1)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0)); DONE; @@ -16340,34 +16388,41 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extendsfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_floor (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_floor (op0, op1)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0)); DONE; }) -(define_expand "floorxf2" - [(use (match_operand:XF 0 "register_operand" "")) - (use (match_operand:XF 1 "register_operand" ""))] +;; Rounding mode control word calculation could clobber FLAGS_REG. +(define_insn_and_split "frndintxf2_ceil" + [(set (match_operand:XF 0 "register_operand" "=f") + (unspec:XF [(match_operand:XF 1 "register_operand" "0")] + UNSPEC_FRNDINT_CEIL)) + (clobber (reg:CC FLAGS_REG))] "TARGET_USE_FANCY_MATH_387 - && flag_unsafe_math_optimizations" + && flag_unsafe_math_optimizations + && !(reload_completed || reload_in_progress)" + "#" + "&& 1" + [(const_int 0)] { - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - ix86_optimize_mode_switching = 1; - emit_insn (gen_frndintxf2_floor (operands[0], operands[1], op2, op3)); + operands[2] = assign_386_stack_local (HImode, 1); + operands[3] = assign_386_stack_local (HImode, 2); + + emit_insn (gen_frndintxf2_ceil_i387 (operands[0], operands[1], + operands[2], operands[3])); DONE; -}) +} + [(set_attr "type" "frndint") + (set_attr "i387_cw" "ceil") + (set_attr "mode" "XF")]) -(define_insn "frndintxf2_ceil" +(define_insn "frndintxf2_ceil_i387" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_FRNDINT_CEIL)) @@ -16380,6 +16435,16 @@ (set_attr "i387_cw" "ceil") (set_attr "mode" "XF")]) +(define_expand "ceilxf2" + [(use (match_operand:XF 0 "register_operand" "")) + (use (match_operand:XF 1 "register_operand" ""))] + "TARGET_USE_FANCY_MATH_387 + && flag_unsafe_math_optimizations" +{ + emit_insn (gen_frndintxf2_ceil (operands[0], operands[1])); + DONE; +}) + (define_expand "ceildf2" [(use (match_operand:DF 0 "register_operand" "")) (use (match_operand:DF 1 "register_operand" ""))] @@ -16389,13 +16454,9 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extenddfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_ceil (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_ceil (op0, op1)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0)); DONE; @@ -16410,34 +16471,41 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extendsfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_ceil (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_ceil (op0, op1)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0)); DONE; }) -(define_expand "ceilxf2" - [(use (match_operand:XF 0 "register_operand" "")) - (use (match_operand:XF 1 "register_operand" ""))] +;; Rounding mode control word calculation could clobber FLAGS_REG. +(define_insn_and_split "frndintxf2_trunc" + [(set (match_operand:XF 0 "register_operand" "=f") + (unspec:XF [(match_operand:XF 1 "register_operand" "0")] + UNSPEC_FRNDINT_TRUNC)) + (clobber (reg:CC FLAGS_REG))] "TARGET_USE_FANCY_MATH_387 - && flag_unsafe_math_optimizations" + && flag_unsafe_math_optimizations + && !(reload_completed || reload_in_progress)" + "#" + "&& 1" + [(const_int 0)] { - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - ix86_optimize_mode_switching = 1; - emit_insn (gen_frndintxf2_ceil (operands[0], operands[1], op2, op3)); + operands[2] = assign_386_stack_local (HImode, 1); + operands[3] = assign_386_stack_local (HImode, 2); + + emit_insn (gen_frndintxf2_trunc_i387 (operands[0], operands[1], + operands[2], operands[3])); DONE; -}) +} + [(set_attr "type" "frndint") + (set_attr "i387_cw" "trunc") + (set_attr "mode" "XF")]) -(define_insn "frndintxf2_trunc" +(define_insn "frndintxf2_trunc_i387" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_FRNDINT_TRUNC)) @@ -16450,6 +16518,16 @@ (set_attr "i387_cw" "trunc") (set_attr "mode" "XF")]) +(define_expand "btruncxf2" + [(use (match_operand:XF 0 "register_operand" "")) + (use (match_operand:XF 1 "register_operand" ""))] + "TARGET_USE_FANCY_MATH_387 + && flag_unsafe_math_optimizations" +{ + emit_insn (gen_frndintxf2_trunc (operands[0], operands[1])); + DONE; +}) + (define_expand "btruncdf2" [(use (match_operand:DF 0 "register_operand" "")) (use (match_operand:DF 1 "register_operand" ""))] @@ -16459,13 +16537,9 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extenddfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_trunc (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_trunc (op0, op1)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0)); DONE; @@ -16480,34 +16554,41 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extendsfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_trunc (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_trunc (op0, op1)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0)); DONE; }) -(define_expand "btruncxf2" - [(use (match_operand:XF 0 "register_operand" "")) - (use (match_operand:XF 1 "register_operand" ""))] +;; Rounding mode control word calculation could clobber FLAGS_REG. +(define_insn_and_split "frndintxf2_mask_pm" + [(set (match_operand:XF 0 "register_operand" "=f") + (unspec:XF [(match_operand:XF 1 "register_operand" "0")] + UNSPEC_FRNDINT_MASK_PM)) + (clobber (reg:CC FLAGS_REG))] "TARGET_USE_FANCY_MATH_387 - && flag_unsafe_math_optimizations" + && flag_unsafe_math_optimizations + && !(reload_completed || reload_in_progress)" + "#" + "&& 1" + [(const_int 0)] { - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - ix86_optimize_mode_switching = 1; - emit_insn (gen_frndintxf2_trunc (operands[0], operands[1], op2, op3)); + operands[2] = assign_386_stack_local (HImode, 1); + operands[3] = assign_386_stack_local (HImode, 2); + + emit_insn (gen_frndintxf2_mask_pm_i387 (operands[0], operands[1], + operands[2], operands[3])); DONE; -}) +} + [(set_attr "type" "frndint") + (set_attr "i387_cw" "mask_pm") + (set_attr "mode" "XF")]) -(define_insn "frndintxf2_mask_pm" +(define_insn "frndintxf2_mask_pm_i387" [(set (match_operand:XF 0 "register_operand" "=f") (unspec:XF [(match_operand:XF 1 "register_operand" "0")] UNSPEC_FRNDINT_MASK_PM)) @@ -16520,6 +16601,17 @@ (set_attr "i387_cw" "mask_pm") (set_attr "mode" "XF")]) +(define_expand "nearbyintxf2" + [(use (match_operand:XF 0 "register_operand" "")) + (use (match_operand:XF 1 "register_operand" ""))] + "TARGET_USE_FANCY_MATH_387 + && flag_unsafe_math_optimizations" +{ + emit_insn (gen_frndintxf2_mask_pm (operands[0], operands[1])); + + DONE; +}) + (define_expand "nearbyintdf2" [(use (match_operand:DF 0 "register_operand" "")) (use (match_operand:DF 1 "register_operand" ""))] @@ -16529,13 +16621,9 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extenddfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_mask_pm (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_mask_pm (op0, op1)); emit_insn (gen_truncxfdf2_i387_noop (operands[0], op0)); DONE; @@ -16550,34 +16638,14 @@ { rtx op0 = gen_reg_rtx (XFmode); rtx op1 = gen_reg_rtx (XFmode); - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; emit_insn (gen_extendsfxf2 (op1, operands[1])); - emit_insn (gen_frndintxf2_mask_pm (op0, op1, op2, op3)); + emit_insn (gen_frndintxf2_mask_pm (op0, op1)); emit_insn (gen_truncxfsf2_i387_noop (operands[0], op0)); DONE; }) -(define_expand "nearbyintxf2" - [(use (match_operand:XF 0 "register_operand" "")) - (use (match_operand:XF 1 "register_operand" ""))] - "TARGET_USE_FANCY_MATH_387 - && flag_unsafe_math_optimizations" -{ - rtx op2 = assign_386_stack_local (HImode, 1); - rtx op3 = assign_386_stack_local (HImode, 2); - - ix86_optimize_mode_switching = 1; - - emit_insn (gen_frndintxf2_mask_pm (operands[0], operands[1], - op2, op3)); - DONE; -}) - ;; Block operation instructions @@ -18537,18 +18605,16 @@ ;; Attempt to always use XOR for zeroing registers. (define_peephole2 [(set (match_operand 0 "register_operand" "") - (const_int 0))] - "(GET_MODE (operands[0]) == QImode - || GET_MODE (operands[0]) == HImode - || GET_MODE (operands[0]) == SImode - || (GET_MODE (operands[0]) == DImode && TARGET_64BIT)) + (match_operand 1 "const0_operand" ""))] + "GET_MODE_SIZE (GET_MODE (operands[0])) <= UNITS_PER_WORD && (! TARGET_USE_MOV0 || optimize_size) && GENERAL_REG_P (operands[0]) && peep2_regno_dead_p (0, FLAGS_REG)" [(parallel [(set (match_dup 0) (const_int 0)) (clobber (reg:CC FLAGS_REG))])] - "operands[0] = gen_lowpart (GET_MODE (operands[0]) == DImode ? DImode : SImode, - operands[0]);") +{ + operands[0] = gen_lowpart (word_mode, operands[0]); +}) (define_peephole2 [(set (strict_low_part (match_operand 0 "register_operand" "")) diff --git a/gcc/config/i386/mmx.md b/gcc/config/i386/mmx.md index 9e374e44ebf..403501bf4dc 100644 --- a/gcc/config/i386/mmx.md +++ b/gcc/config/i386/mmx.md @@ -1111,7 +1111,7 @@ (vec_duplicate:V4HI (truncate:HI (match_operand:SI 1 "register_operand" "0"))))] - "TARGET_MMX" + "TARGET_SSE || TARGET_3DNOW_A" "pshufw\t{$0, %0, %0|%0, %0, 0}" [(set_attr "type" "mmxcvt") (set_attr "mode" "DI")]) diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 66f25058182..668c7c061e5 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -499,8 +499,12 @@ ;; Match exactly zero. (define_predicate "const0_operand" - (and (match_code "const_int,const_double,const_vector") - (match_test "op == CONST0_RTX (mode)"))) + (match_code "const_int,const_double,const_vector") +{ + if (mode == VOIDmode) + mode = GET_MODE (op); + return op == CONST0_RTX (mode); +}) ;; Match exactly one. (define_predicate "const1_operand" diff --git a/gcc/config/i386/scodbx.h b/gcc/config/i386/scodbx.h deleted file mode 100644 index 7da93053256..00000000000 --- a/gcc/config/i386/scodbx.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Definitions for Intel 386 running SCO Unix System V, - using dbx-in-coff encapsulation. - Copyright (C) 1992, 1995, 1996, 1999 Free Software Foundation, Inc. - -This file is part of GNU CC. - -GNU CC 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 2, or (at your option) -any later version. - -GNU CC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#include "i386/svr3dbx.h" - -/* Overridden defines for SCO systems from sco.h. */ - -/* By default, target has a 80387, uses IEEE compatible arithmetic, - and returns float values in the 387, ie, - (TARGET_80387 | TARGET_FLOAT_RETURNS_IN_80387) - - SCO's software emulation of a 387 fails to handle the `fucomp' - opcode. fucomp is only used when generating IEEE compliant code. - So don't make TARGET_IEEE_FP default for SCO. */ - -#undef TARGET_SUBTARGET_DEFAULT -#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_FLOAT_RETURNS) - -/* Use crt1.o as a startup file and crtn.o as a closing file. */ - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC \ - "%{!r:%{!z:svr3.ifile%s}%{z:svr3z.ifile%s}}\ - %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}" - -/* Library spec, including SCO international language support. */ - -#undef LIB_SPEC -#define LIB_SPEC \ - "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} %{scointl:libintl.a%s} -lc" - -/* Specify predefined symbols in preprocessor. */ - -#undef CPP_PREDEFINES -#define CPP_PREDEFINES "-Dunix -DM_UNIX -DM_I386 -DM_COFF -DM_WORDSWAP -Asystem=svr3" - -#undef CPP_SPEC -#define CPP_SPEC "%(cpp_cpu) %{scointl:-DM_INTERNAT}" - -/* This spec is used for telling cpp whether char is signed or not. */ - -#undef SIGNED_CHAR_SPEC -#if DEFAULT_SIGNED_CHAR -#define SIGNED_CHAR_SPEC \ - "%{funsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" -#else -#define SIGNED_CHAR_SPEC \ - "%{!fsigned-char:-D__CHAR_UNSIGNED__ -D_CHAR_UNSIGNED}" -#endif - -/* caller has to pop the extra argument passed to functions that return - structures. */ - -#undef RETURN_POPS_ARGS -#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \ - ((FUNDECL) && TREE_CODE (FUNDECL) == IDENTIFIER_NODE ? 0 \ - : (TARGET_RTD \ - && (TYPE_ARG_TYPES (FUNTYPE) == 0 \ - || (TREE_VALUE (tree_last (TYPE_ARG_TYPES (FUNTYPE))) \ - == void_type_node))) ? (SIZE) \ - : 0) -/* On other 386 systems, the last line looks like this: - : (aggregate_value_p (TREE_TYPE (FUNTYPE))) ? GET_MODE_SIZE (Pmode) : 0) */ - -/* Handle #pragma pack. */ -#define HANDLE_SYSV_PRAGMA diff --git a/gcc/config/i386/t-rtems-i386 b/gcc/config/i386/t-rtems-i386 index d32928c53aa..9400be8f508 100644 --- a/gcc/config/i386/t-rtems-i386 +++ b/gcc/config/i386/t-rtems-i386 @@ -36,17 +36,14 @@ xp-bit.c: $(srcdir)/config/fp-bit.c echo '#define EXTENDED_FLOAT_STUBS' > xp-bit.c cat $(srcdir)/config/fp-bit.c >> xp-bit.c -MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro/mtune=k6/mtune=athlon \ -msoft-float mno-fp-ret-in-387 -MULTILIB_DIRNAMES= m486 mpentium mpentiumpro k6 athlon soft-float nofp +MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \ +msoft-float +MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float MULTILIB_MATCHES = msoft-float=mno-m80387 +MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon MULTILIB_EXCEPTIONS = \ -mno-fp-ret-in-387 \ -mtune=i486/*mno-fp-ret-in-387* \ -mtune=pentium/*msoft-float* mtune=pentium/*mno-fp-ret-in-387* \ -mtune=pentiumpro/*msoft-float* mtune=pentiumpro/*mno-fp-ret-in-387* \ -mtune=k6/*msoft-float* mtune=k6/*mno-fp-ret-in-387* \ -mtune=athlon/*msoft-float* mtune=athlon/*mno-fp-ret-in-387* +mtune=pentium/*msoft-float* \ +mtune=pentiumpro/*msoft-float* EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o diff --git a/gcc/config/i386/x-cygwin b/gcc/config/i386/x-cygwin new file mode 100644 index 00000000000..1547f5f5bec --- /dev/null +++ b/gcc/config/i386/x-cygwin @@ -0,0 +1,4 @@ +host-cygwin.o : $(srcdir)/config/i386/host-cygwin.c $(CONFIG_H) $(SYSTEM_H) \ + coretypes.h hosthooks.h hosthooks-def.h toplev.h diagnostic.h + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + $(srcdir)/config/i386/host-cygwin.c diff --git a/gcc/config/i386/xm-dgux.h b/gcc/config/i386/xm-dgux.h deleted file mode 100644 index 881c5c7be9d..00000000000 --- a/gcc/config/i386/xm-dgux.h +++ /dev/null @@ -1,4 +0,0 @@ -/* Configuration for GCC for Intel i386 running DG/ux */ - -/* looks just like sysv4 for now */ -#include "xm-svr4.h" diff --git a/gcc/config/i386/xm-sun.h b/gcc/config/i386/xm-sun.h deleted file mode 100644 index 6c0f0a25630..00000000000 --- a/gcc/config/i386/xm-sun.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Configuration for GNU C-compiler for Intel 80386 running SunOS 4.0. - Copyright (C) 1988, 1997 Free Software Foundation, Inc. - -This file is part of GNU CC. - -GNU CC 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 2, or (at your option) -any later version. - -GNU CC 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 GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ - -#define USG diff --git a/gcc/config/i386/xm-sysv3.h b/gcc/config/i386/xm-sysv3.h deleted file mode 100644 index 9a655443ff5..00000000000 --- a/gcc/config/i386/xm-sysv3.h +++ /dev/null @@ -1,3 +0,0 @@ -/* Configuration for GCC for Intel i386 running System V Release 3. */ - -#include "xm-svr3.h" diff --git a/gcc/config/ia64/hpux.h b/gcc/config/ia64/hpux.h index 9b66a633ba1..1618eb892b0 100644 --- a/gcc/config/ia64/hpux.h +++ b/gcc/config/ia64/hpux.h @@ -75,7 +75,7 @@ do { \ #undef LINK_SPEC #define LINK_SPEC \ - "+Accept TypeMismatch \ + "-z +Accept TypeMismatch \ %{shared:-b} \ %{!shared: \ -u main \ @@ -202,3 +202,11 @@ do { \ #define TARGET_INIT_LIBFUNCS ia64_hpux_init_libfuncs #define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) ((MODE) == TFmode) + +/* Put all *xf routines in libgcc, regardless of long double size. */ +#undef LIBGCC2_HAS_XF_MODE +#define LIBGCC2_HAS_XF_MODE 1 + +/* Put all *tf routines in libgcc, regardless of long double size. */ +#undef LIBGCC2_HAS_TF_MODE +#define LIBGCC2_HAS_TF_MODE 1 diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index d67bb1f9620..8cbacf945ff 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -3915,6 +3915,10 @@ ia64_function_value (tree valtype, tree func ATTRIBUTE_UNUSED) offset = 0; bytesize = int_size_in_bytes (valtype); + /* An empty PARALLEL is invalid here, but the return value + doesn't matter for empty structs. */ + if (bytesize == 0) + return gen_rtx_REG (mode, GR_RET_FIRST); for (i = 0; offset < bytesize; i++) { loc[i] = gen_rtx_EXPR_LIST (VOIDmode, @@ -5239,8 +5243,8 @@ rtx_needs_barrier (rtx x, struct reg_flags flags, int pred) break; case SUBREG: - x = SUBREG_REG (x); - /* FALLTHRU */ + need_barrier |= rtx_needs_barrier (SUBREG_REG (x), flags, pred); + break; case REG: if (REGNO (x) == AR_UNAT_REGNUM) { @@ -6429,6 +6433,17 @@ issue_nops_and_insn (struct bundle_state *originator, int before_nops_num, } else { + /* If this is an insn that must be first in a group, then don't allow + nops to be emitted before it. Currently, alloc is the only such + supported instruction. */ + /* ??? The bundling automatons should handle this for us, but they do + not yet have support for the first_insn attribute. */ + if (before_nops_num > 0 && get_attr_first_insn (insn) == FIRST_INSN_YES) + { + free_bundle_state (curr_state); + return; + } + state_transition (curr_state->dfa_state, dfa_pre_cycle_insn); state_transition (curr_state->dfa_state, NULL); curr_state->cost++; diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md index cb5dd10abc2..ef06b4596ab 100644 --- a/gcc/config/ia64/ia64.md +++ b/gcc/config/ia64/ia64.md @@ -163,6 +163,11 @@ (define_attr "empty" "no,yes" (const_string "no")) +;; True iff this insn must be the first insn of an instruction group. +;; This is true for the alloc instruction, and will also be true of others +;; when we have full intrinsics support. + +(define_attr "first_insn" "no,yes" (const_string "no")) ;; DFA descriptions of ia64 processors used for insn scheduling and ;; bundling. @@ -2694,7 +2699,7 @@ [(parallel [(set (match_dup 6) (div:XF (const_int 1) (match_dup 8))) (set (match_dup 5) (unspec:BI [(match_dup 7) (match_dup 8)] UNSPEC_FR_RECIP_APPROX)) - (use (const_int 1))]) + (use (const_int 0))]) (cond_exec (ne (match_dup 5) (const_int 0)) (parallel [(set (match_dup 3) (mult:XF (match_dup 7) (match_dup 6))) (use (const_int 1))])) @@ -2751,7 +2756,7 @@ [(parallel [(set (match_dup 6) (div:XF (const_int 1) (match_dup 8))) (set (match_dup 5) (unspec:BI [(match_dup 7) (match_dup 8)] UNSPEC_FR_RECIP_APPROX)) - (use (const_int 1))]) + (use (const_int 0))]) (cond_exec (ne (match_dup 5) (const_int 0)) (parallel [(set (match_dup 3) (minus:XF (match_dup 10) @@ -3177,7 +3182,7 @@ [(parallel [(set (match_dup 7) (div:XF (const_int 1) (match_dup 9))) (set (match_dup 6) (unspec:BI [(match_dup 8) (match_dup 9)] UNSPEC_FR_RECIP_APPROX)) - (use (const_int 1))]) + (use (const_int 0))]) (cond_exec (ne (match_dup 6) (const_int 0)) (parallel [(set (match_dup 3) (mult:XF (match_dup 8) (match_dup 7))) (use (const_int 1))])) @@ -3257,7 +3262,7 @@ [(parallel [(set (match_dup 6) (div:XF (const_int 1) (match_dup 8))) (set (match_dup 5) (unspec:BI [(match_dup 7) (match_dup 8)] UNSPEC_FR_RECIP_APPROX)) - (use (const_int 1))]) + (use (const_int 0))]) (cond_exec (ne (match_dup 5) (const_int 0)) (parallel [(set (match_dup 3) (minus:XF (match_dup 10) @@ -3842,7 +3847,7 @@ [(parallel [(set (match_dup 0) (div:XF (const_int 1) (match_dup 2))) (set (match_dup 7) (unspec:BI [(match_dup 1) (match_dup 2)] UNSPEC_FR_RECIP_APPROX)) - (use (const_int 1))]) + (use (const_int 0))]) (cond_exec (ne (match_dup 7) (const_int 0)) (parallel [(set (match_dup 3) (minus:XF (match_dup 8) @@ -3920,7 +3925,7 @@ [(parallel [(set (match_dup 0) (div:XF (const_int 1) (match_dup 2))) (set (match_dup 5) (unspec:BI [(match_dup 1) (match_dup 2)] UNSPEC_FR_RECIP_APPROX)) - (use (const_int 1))]) + (use (const_int 0))]) (cond_exec (ne (match_dup 5) (const_int 0)) (parallel [(set (match_dup 3) (minus:XF (match_dup 6) @@ -5703,7 +5708,8 @@ "" "alloc %0 = ar.pfs, %1, %2, %3, %4" [(set_attr "itanium_class" "syst_m0") - (set_attr "predicable" "no")]) + (set_attr "predicable" "no") + (set_attr "first_insn" "yes")]) ;; Modifies ar.unat (define_expand "gr_spill" diff --git a/gcc/config/ia64/lib1funcs.asm b/gcc/config/ia64/lib1funcs.asm index e3d348ba722..68ee421ff65 100644 --- a/gcc/config/ia64/lib1funcs.asm +++ b/gcc/config/ia64/lib1funcs.asm @@ -706,9 +706,8 @@ __ia64_trampoline: .endp __ia64_trampoline #endif -#ifdef L__compat // Thunks for backward compatibility. - +#ifdef L_fixtfdi .text .align 16 .global __fixtfti @@ -719,7 +718,8 @@ __fixtfti: ;; } .endp __fixtfti - +#endif +#ifdef L_fixunstfdi .align 16 .global __fixunstfti .proc __fixunstfti @@ -729,7 +729,8 @@ __fixunstfti: ;; } .endp __fixunstfti - +#endif +#if L_floatditf .align 16 .global __floattitf .proc __floattitf @@ -739,5 +740,4 @@ __floattitf: ;; } .endp __floattitf - #endif diff --git a/gcc/config/ia64/t-hpux b/gcc/config/ia64/t-hpux index e84a09a7476..2897739fda1 100644 --- a/gcc/config/ia64/t-hpux +++ b/gcc/config/ia64/t-hpux @@ -38,7 +38,9 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ $(LN_S) @shlib_base_name@.so @multilib_dir@/@shlib_base_name@.so.0 # $(slibdir) double quoted to protect it from expansion while building # libgcc.mk. We want this delayed until actual install time. -SHLIB_INSTALL = $(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.so \ +SHLIB_INSTALL = \ + $$(mkinstalldirs) $$(DESTDIR)$$(slibdir)@shlib_slibdir_qual@; \ + $(INSTALL_DATA) @multilib_dir@/@shlib_base_name@.so \ $$(DESTDIR)$$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so.0; \ rm -f $$(DESTDIR)$$(slibdir)@shlib_slibdir_qual@/@shlib_base_name@.so; \ $(LN_S) @shlib_base_name@.so.0 \ diff --git a/gcc/config/ia64/t-ia64 b/gcc/config/ia64/t-ia64 index 04cfc21592d..824cc4113c4 100644 --- a/gcc/config/ia64/t-ia64 +++ b/gcc/config/ia64/t-ia64 @@ -8,7 +8,8 @@ LIB1ASMSRC = ia64/lib1funcs.asm LIB1ASMFUNCS = __divxf3 __divdf3 __divsf3 \ __divdi3 __moddi3 __udivdi3 __umoddi3 \ __divsi3 __modsi3 __udivsi3 __umodsi3 __save_stack_nonlocal \ - __nonlocal_goto __restore_stack_nonlocal __trampoline __compat + __nonlocal_goto __restore_stack_nonlocal __trampoline \ + _fixtfdi _fixunstfdi _floatditf # ??? Hack to get -P option used when compiling lib1funcs.asm, because Intel # assembler does not accept # line number as a comment. diff --git a/gcc/config/ia64/unwind-ia64.c b/gcc/config/ia64/unwind-ia64.c index 31b0e4cdf58..4c06ff7263a 100644 --- a/gcc/config/ia64/unwind-ia64.c +++ b/gcc/config/ia64/unwind-ia64.c @@ -2275,6 +2275,8 @@ uw_install_context (struct _Unwind_Context *current __attribute__((unused)), "(p6) ldf.fill f22 = [r28] \n\t" "cmp.ne p7, p0 = r0, r29 \n\t" ";; \n\t" + "ld8 r27 = [r20], 8 \n\t" + ";; \n\t" "ld8 r28 = [r20], 8 \n\t" "(p7) ldf.fill f23 = [r29] \n\t" "cmp.ne p6, p0 = r0, r22 \n\t" @@ -2387,7 +2389,6 @@ uw_identify_context (struct _Unwind_Context *context) alias (_Unwind_Backtrace); alias (_Unwind_DeleteException); alias (_Unwind_FindEnclosingFunction); -alias (_Unwind_FindTableEntry); alias (_Unwind_ForcedUnwind); alias (_Unwind_GetBSP); alias (_Unwind_GetCFA); diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h index ff051255c9c..b64d371b8f3 100644 --- a/gcc/config/mips/iris6.h +++ b/gcc/config/mips/iris6.h @@ -38,6 +38,11 @@ Boston, MA 02111-1307, USA. */ compiling -g. This guarantees that we can unwind the stack. */ #define DWARF2_FRAME_INFO 1 +/* The system unwinder in libexc requires a specific dwarf return address + column to work. */ +#undef DWARF_FRAME_RETURN_COLUMN +#define DWARF_FRAME_RETURN_COLUMN (FP_REG_LAST + 1) + #undef MACHINE_TYPE #define MACHINE_TYPE "SGI running IRIX 6.x" diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index acd6ae0a704..79dabbeb493 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -562,6 +562,9 @@ int mips16_hard_float; const char *mips_cache_flush_func = CACHE_FLUSH_FUNC; +/* Holds string if -mfix-vr4130 was passed on the command line. */ +const char *mips_fix_vr4130_string; + /* If TRUE, we split addresses into their high and low parts in the RTL. */ int mips_split_addresses; @@ -4132,9 +4135,12 @@ override_options (void) } /* Deprecate -mint64. Remove after 4.0 branches. */ - if ((target_flags_explicit & MASK_INT64) != 0) + if (TARGET_INT64) warning ("-mint64 is a deprecated option"); + if (mips_fix_vr4130_string && mips_fix_vr4130_string[0] != 0) + error ("unrecognized option %<-mfix-vr4130%s%>", mips_fix_vr4130_string); + if (MIPS_MARCH_CONTROLS_SOFT_FLOAT && (target_flags_explicit & MASK_SOFT_FLOAT) == 0) { @@ -6039,8 +6045,18 @@ mips_set_frame_expr (rtx frame_pattern) static rtx mips_frame_set (rtx mem, rtx reg) { - rtx set = gen_rtx_SET (VOIDmode, mem, reg); + rtx set; + + /* If we're saving the return address register and the dwarf return + address column differs from the hard register number, adjust the + note reg to refer to the former. */ + if (REGNO (reg) == GP_REG_FIRST + 31 + && DWARF_FRAME_RETURN_COLUMN != GP_REG_FIRST + 31) + reg = gen_rtx_REG (GET_MODE (reg), DWARF_FRAME_RETURN_COLUMN); + + set = gen_rtx_SET (VOIDmode, mem, reg); RTX_FRAME_RELATED_P (set) = 1; + return set; } @@ -7741,11 +7757,7 @@ dump_constants (struct mips16_constant *constants, rtx insn) emit_barrier_after (insn); } -/* Return the length of instruction INSN. - - ??? MIPS16 switch tables go in .text, but we don't define - JUMP_TABLES_IN_TEXT_SECTION, so get_attr_length will not - compute their lengths correctly. */ +/* Return the length of instruction INSN. */ static int mips16_insn_length (rtx insn) @@ -8294,10 +8306,24 @@ mips_avoid_hazards (void) cfun->machine->ignore_hazard_length_p = true; shorten_branches (get_insns ()); - /* The profiler code uses assembler macros. -mfix-vr4120 relies on - assembler nop insertion. */ - cfun->machine->all_noreorder_p = (!current_function_profile - && !TARGET_FIX_VR4120); + cfun->machine->all_noreorder_p = true; + + /* Profiled functions can't be all noreorder because the profiler + support uses assembler macros. */ + if (current_function_profile) + cfun->machine->all_noreorder_p = false; + + /* Code compiled with -mfix-vr4120 can't be all noreorder because + we rely on the assembler to work around some errata. */ + if (TARGET_FIX_VR4120) + cfun->machine->all_noreorder_p = false; + + /* The same is true for -mfix-vr4130 if we might generate mflo or + mfhi instructions. Note that we avoid using mflo and mfhi if + the VR4130 macc and dmacc instructions are available instead; + see the *mfhilo_{si,di}_macc patterns. */ + if (TARGET_FIX_VR4130 && !ISA_HAS_MACCHI) + cfun->machine->all_noreorder_p = false; last_insn = 0; hilo_delay = 2; diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 495b8190f4b..3ed4c56d4bd 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -111,6 +111,7 @@ extern const char *mips_tune_string; /* for -mtune= */ extern const char *mips_isa_string; /* for -mips{1,2,3,4} */ extern const char *mips_abi_string; /* for -mabi={32,n32,64} */ extern const char *mips_cache_flush_func;/* for -mflush-func= and -mno-flush-func */ +extern const char *mips_fix_vr4130_string; extern const struct mips_cpu_info mips_cpu_info_table[]; extern const struct mips_cpu_info *mips_arch_info; extern const struct mips_cpu_info *mips_tune_info; @@ -164,6 +165,7 @@ extern const struct mips_cpu_info *mips_tune_info; break instead of trap. */ #define MASK_PAIRED_SINGLE 0x10000000 /* Support paired-single FPU. */ #define MASK_MIPS3D 0x20000000 /* Support MIPS-3D instructions. */ +#define MASK_SYM32 0x40000000 /* Assume 32-bit symbol values. */ /* Debug switches, not documented */ #define MASK_DEBUG 0 /* unused */ @@ -235,6 +237,7 @@ extern const struct mips_cpu_info *mips_tune_info; /* Work around R4400 errata. */ #define TARGET_FIX_R4400 ((target_flags & MASK_FIX_R4400) != 0) #define TARGET_FIX_VR4120 ((target_flags & MASK_FIX_VR4120) != 0) +#define TARGET_FIX_VR4130 (mips_fix_vr4130_string != 0) #define TARGET_VR4130_ALIGN ((target_flags & MASK_VR4130_ALIGN) != 0) #define TARGET_FP_EXCEPTIONS ((target_flags & MASK_FP_EXCEPTIONS) != 0) @@ -242,6 +245,7 @@ extern const struct mips_cpu_info *mips_tune_info; #define TARGET_PAIRED_SINGLE_FLOAT \ ((target_flags & MASK_PAIRED_SINGLE) != 0) #define TARGET_MIPS3D ((target_flags & MASK_MIPS3D) != 0) +#define TARGET_SYM32 ((target_flags & MASK_SYM32) != 0) /* True if we should use NewABI-style relocation operators for symbolic addresses. This is never true for mips16 code, @@ -669,6 +673,10 @@ extern const struct mips_cpu_info *mips_tune_info; N_("FP exceptions are enabled") }, \ {"no-fp-exceptions", -MASK_FP_EXCEPTIONS, \ N_("FP exceptions are not enabled") }, \ + {"sym32", MASK_SYM32, \ + N_("Assume all symbols have 32-bit values") }, \ + {"no-sym32", -MASK_SYM32, \ + N_("Don't assume all symbols have 32-bit values") }, \ {"debug", MASK_DEBUG, \ NULL}, \ {"debugd", MASK_DEBUG_D, \ @@ -788,6 +796,8 @@ extern const struct mips_cpu_info *mips_tune_info; N_("Don't call any cache flush functions"), 0}, \ { "flush-func=", &mips_cache_flush_func, \ N_("Specify cache flush function"), 0}, \ + { "fix-vr4130", &mips_fix_vr4130_string, \ + N_("Work around VR4130 mflo/mfhi errata"), 0}, \ } /* This is meant to be redefined in the host dependent files. */ @@ -843,7 +853,7 @@ extern const struct mips_cpu_info *mips_tune_info; /* True if symbols are 64 bits wide. At present, n64 is the only ABI for which this is true. */ -#define ABI_HAS_64BIT_SYMBOLS (mips_abi == ABI_64) +#define ABI_HAS_64BIT_SYMBOLS (mips_abi == ABI_64 && !TARGET_SYM32) /* ISA has instructions for managing 64 bit fp and gp regs (e.g. mips3). */ #define ISA_HAS_64BIT_REGS (ISA_MIPS3 \ @@ -933,6 +943,11 @@ extern const struct mips_cpu_info *mips_tune_info; || TARGET_SR71K \ ) +/* ISA has NEC VR-style MACC, MACCHI, DMACC and DMACCHI instructions. */ +#define ISA_HAS_MACCHI (!TARGET_MIPS16 \ + && (TARGET_MIPS4120 \ + || TARGET_MIPS4130)) + /* ISA has 32-bit rotate right instruction. */ #define ISA_HAS_ROTR_SI (!TARGET_MIPS16 \ && (ISA_MIPS32R2 \ @@ -1088,11 +1103,12 @@ extern const struct mips_cpu_info *mips_tune_info; %{mips32} %{mips32r2} %{mips64} \ %{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \ %{mips3d:-mips3d} \ -%{mfix-vr4120} \ +%{mfix-vr4120} %{mfix-vr4130} \ %(subtarget_asm_optimizing_spec) \ %(subtarget_asm_debugging_spec) \ %{mabi=*} %{!mabi*: %(asm_abi_default_spec)} \ %{mgp32} %{mgp64} %{march=*} %{mxgot:-xgot} \ +%{msym32} %{mno-sym32} \ %{mtune=*} %{v} \ %(subtarget_asm_spec)" @@ -1218,7 +1234,7 @@ extern const struct mips_cpu_info *mips_tune_info; /* Offsets recorded in opcodes are a multiple of this alignment factor. The default for this in 64-bit mode is 8, which causes problems with SFmode register saves. */ -#define DWARF_CIE_DATA_ALIGNMENT 4 +#define DWARF_CIE_DATA_ALIGNMENT -4 /* Correct the offset of automatic variables and arguments. Note that the MIPS debug format wants all automatic variables and arguments @@ -2873,18 +2889,9 @@ do { \ LOCAL_LABEL_PREFIX, VALUE); \ } while (0) -/* When generating mips16 code we want to put the jump table in the .text - section. In all other cases, we want to put the jump table in the .rdata - section. Unfortunately, we can't use JUMP_TABLES_IN_TEXT_SECTION, because - it is not conditional. Instead, we use ASM_OUTPUT_CASE_LABEL to switch back - to the .text section if appropriate. */ -#undef ASM_OUTPUT_CASE_LABEL -#define ASM_OUTPUT_CASE_LABEL(FILE, PREFIX, NUM, INSN) \ -do { \ - if (TARGET_MIPS16) \ - function_section (current_function_decl); \ - (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM); \ -} while (0) +/* When generating MIPS16 code, we want the jump table to be in the text + section so that we can load its address using a PC-relative addition. */ +#define JUMP_TABLES_IN_TEXT_SECTION TARGET_MIPS16 /* This is how to output an assembler line that says to advance the location counter diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 8c3a80ab634..0a63df09c1a 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -3729,17 +3729,42 @@ beq\t%2,%.,1b\;\ ;; ;; We cope with this by making the mflo and mfhi patterns use both HI and LO. ;; Operand 1 is the register we want, operand 2 is the other one. +;; +;; When generating VR4120 or VR4130 code, we use macc{,hi} and +;; dmacc{,hi} instead of mfhi and mflo. This avoids both the normal +;; MIPS III hi/lo hazards and the errata related to -mfix-vr4130. + +(define_expand "mfhilo_" + [(set (match_operand:GPR 0 "register_operand") + (unspec:GPR [(match_operand:GPR 1 "register_operand") + (match_operand:GPR 2 "register_operand")] + UNSPEC_MFHILO))]) -(define_insn "mfhilo_" +(define_insn "*mfhilo_" [(set (match_operand:GPR 0 "register_operand" "=d,d") (unspec:GPR [(match_operand:GPR 1 "register_operand" "h,l") (match_operand:GPR 2 "register_operand" "l,h")] UNSPEC_MFHILO))] - "" + "!ISA_HAS_MACCHI" "mf%1\t%0" [(set_attr "type" "mfhilo") (set_attr "mode" "")]) +(define_insn "*mfhilo__macc" + [(set (match_operand:GPR 0 "register_operand" "=d,d") + (unspec:GPR [(match_operand:GPR 1 "register_operand" "h,l") + (match_operand:GPR 2 "register_operand" "l,h")] + UNSPEC_MFHILO))] + "ISA_HAS_MACCHI" +{ + if (REGNO (operands[1]) == HI_REGNUM) + return "macchi\t%0,%.,%."; + else + return "macc\t%0,%.,%."; +} + [(set_attr "type" "mfhilo") + (set_attr "mode" "")]) + ;; Patterns for loading or storing part of a paired floating point ;; register. We need them because odd-numbered floating-point registers ;; are not fully independent: see mips_split_64bit_move. diff --git a/gcc/config/mips/t-vr b/gcc/config/mips/t-vr index dd4affe57e4..9c046b0eb04 100644 --- a/gcc/config/mips/t-vr +++ b/gcc/config/mips/t-vr @@ -35,7 +35,7 @@ $(T)crtn.o: $(srcdir)/config/mips/crtn.asm $(GCC_PASSES) # mabi=eabi/mgp32/mlong64 # # Architecture: march=vr4120 with -mfix-vr4120 -# march=vr4130 (default) +# march=vr4130 with -mfix-vr4130 (default) # march=vr5000 # march=vr5400 # march=vr5500 @@ -65,7 +65,7 @@ $(T)crtn.o: $(srcdir)/config/mips/crtn.asm $(GCC_PASSES) # mabi=eabi/mgp32 # # Architecture: march=vr4120 with -mfix-vr4120 -# march=vr4130 (default) +# march=vr4130 with -mfix-vr4130 (default) # # Total: 2 * 3 * 2 = 12 multilibs. MULTILIB_OPTIONS = \ @@ -74,7 +74,7 @@ MULTILIB_OPTIONS = \ mgp32 \ mlong64 \ mips16 \ - mfix-vr4120/march=vr4130/march=vr4300/march=vr5000/march=vr5400/march=vr5500 + mfix-vr4120/mfix-vr4130/march=vr4300/march=vr5000/march=vr5400/march=vr5500 MULTILIB_DIRNAMES = \ el eb \ @@ -84,7 +84,8 @@ MULTILIB_DIRNAMES = \ mips16 \ vr4120 vr4130 vr4300 vr5000 vr5400 vr5500 -MULTILIB_MATCHES = EL=mel EB=meb mfix-vr4120=march?vr4120 +MULTILIB_MATCHES = EL=mel EB=meb mfix-vr4120=march?vr4120 \ + mfix-vr4130=march?vr4130 # Assume a 41xx-series is the default: we'd need a *mips16 entry if # the default processor didn't support mips16. Also assume the diff --git a/gcc/config/mips/vr.h b/gcc/config/mips/vr.h index 7d2fb6379be..bb182923af8 100644 --- a/gcc/config/mips/vr.h +++ b/gcc/config/mips/vr.h @@ -19,20 +19,28 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ -#define DEFAULT_VR_ARCH "vr4130" +#define DEFAULT_VR_ARCH "mfix-vr4130" #define MIPS_ABI_DEFAULT ABI_EABI #define MIPS_MARCH_CONTROLS_SOFT_FLOAT 1 #define MULTILIB_DEFAULTS \ { MULTILIB_ENDIAN_DEFAULT, \ MULTILIB_ABI_DEFAULT, \ - "march=" DEFAULT_VR_ARCH } + DEFAULT_VR_ARCH } #define DRIVER_SELF_SPECS \ + /* Enforce the default architecture. This is mostly for \ + the assembler's benefit. */ \ + "%{!march=*:%{!mfix-vr4120:%{!mfix-vr4130:" \ + "-" DEFAULT_VR_ARCH "}}}", \ + \ /* Make -mfix-vr4120 imply -march=vr4120. This cuts down \ on command-line tautology and makes it easier for t-vr to \ provide a -mfix-vr4120 multilib. */ \ "%{mfix-vr4120:%{!march=*:-march=vr4120}}", \ \ + /* Same idea for -mfix-vr4130. */ \ + "%{mfix-vr4130:%{!march=*:-march=vr4130}}", \ + \ /* Make -mabi=eabi -mlong32 the default. */ \ "%{!mabi=*:-mabi=eabi %{!mlong*:-mlong32}}", \ \ @@ -41,8 +49,4 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ "%{mabi=eabi:%{!mlong*:%{!mgp32:-mlong64}}}", \ \ /* Remove -mgp32 if it is redundant. */ \ - "%{mabi=32:%internal_label; xoperands[1] = gen_label_rtx (); @@ -7599,7 +7609,7 @@ output_call (rtx insn, rtx call_dest, int sibcall) essentially an inline implementation of $$dyncall. We don't actually try to call $$dyncall as this is as difficult as calling the function itself. */ - struct deferred_plabel *p = get_plabel (XSTR (call_dest, 0)); + struct deferred_plabel *p = get_plabel (call_dest); xoperands[0] = p->internal_label; xoperands[1] = gen_label_rtx (); @@ -9492,4 +9502,63 @@ pa_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED) || int_size_in_bytes (type) <= 0); } +/* Structure to hold declaration and name of external symbols that are + emitted by GCC. We generate a vector of these symbols and output them + at the end of the file if and only if SYMBOL_REF_REFERENCED_P is true. + This avoids putting out names that are never really used. */ + +struct extern_symbol GTY(()) +{ + tree decl; + const char *name; +}; +typedef struct extern_symbol *extern_symbol; + +/* Define gc'd vector type for extern_symbol. */ +DEF_VEC_GC_P(extern_symbol); + +/* Vector of extern_symbol pointers. */ +static GTY(()) VEC(extern_symbol) *extern_symbols; + +#ifdef ASM_OUTPUT_EXTERNAL_REAL +/* Mark DECL (name NAME) as an external reference (assembler output + file FILE). This saves the names to output at the end of the file + if actually referenced. */ + +void +pa_hpux_asm_output_external (FILE *file, tree decl, const char *name) +{ + extern_symbol p = ggc_alloc (sizeof (struct extern_symbol)); + + gcc_assert (file == asm_out_file); + p->decl = decl; + p->name = name; + VEC_safe_push (extern_symbol, extern_symbols, p); +} + +/* Output text required at the end of an assembler file. + This includes deferred plabels and .import directives for + all external symbols that were actually referenced. */ + +static void +pa_hpux_file_end (void) +{ + unsigned int i; + extern_symbol p; + + output_deferred_plabels (); + + for (i = 0; VEC_iterate (extern_symbol, extern_symbols, i, p); i++) + { + tree decl = p->decl; + + if (!TREE_ASM_WRITTEN (decl) + && SYMBOL_REF_REFERENCED_P (XEXP (DECL_RTL (decl), 0))) + ASM_OUTPUT_EXTERNAL_REAL (asm_out_file, decl, p->name); + } + + extern_symbols = NULL; +} +#endif + #include "gt-pa.h" diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index 9130d6177ee..30b982a0aec 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1262,6 +1262,13 @@ extern int may_call_alloca; || cint_ok_for_move (INTVAL (X)))) \ && !function_label_operand (X, VOIDmode)) +/* Target flags set on a symbol_ref. */ + +/* Set by ASM_OUTPUT_SYMBOL_REF when a symbol_ref is output. */ +#define SYMBOL_FLAG_REFERENCED (1 << SYMBOL_FLAG_MACH_DEP_SHIFT) +#define SYMBOL_REF_REFERENCED_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_REFERENCED) != 0) + /* Subroutines for EXTRA_CONSTRAINT. Return 1 iff OP is a pseudo which did not get a hard register and @@ -1532,7 +1539,12 @@ extern int may_call_alloca; && (TARGET_NO_SPACE_REGS \ ? (base && REG_P (index)) \ : (base == XEXP (X, 1) && REG_P (index) \ - && REG_POINTER (base) && !REG_POINTER (index))) \ + && (reload_completed \ + || (reload_in_progress && HARD_REGISTER_P (base)) \ + || REG_POINTER (base)) \ + && (reload_completed \ + || (reload_in_progress && HARD_REGISTER_P (index)) \ + || !REG_POINTER (index)))) \ && MODE_OK_FOR_UNSCALED_INDEXING_P (MODE) \ && REG_OK_FOR_INDEX_P (index) \ && borx_reg_operand (base, Pmode) \ @@ -1949,6 +1961,14 @@ forget_section (void) \ fputs (xname, FILE); \ } while (0) +/* This how we output the symbol_ref X. */ + +#define ASM_OUTPUT_SYMBOL_REF(FILE,X) \ + do { \ + SYMBOL_REF_FLAGS (X) |= SYMBOL_FLAG_REFERENCED; \ + assemble_name (FILE, XSTR (X, 0)); \ + } while (0) + /* This is how to store into the string LABEL the symbol_ref name of an internal numbered label where PREFIX is the class of label and NUM is the number within the class. diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 9a434a6095f..6f8f42dd3e7 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -5101,7 +5101,7 @@ (clobber (reg:SI 26)) (clobber (reg:SI 25)) (clobber (match_dup 4))]) - (set (match_operand:SI 0 "general_operand" "") (reg:SI 29))] + (set (match_operand:SI 0 "move_dest_operand" "") (reg:SI 29))] "" " { @@ -5227,7 +5227,7 @@ (clobber (reg:SI 26)) (clobber (reg:SI 25)) (clobber (match_dup 5))]) - (set (match_operand:SI 0 "general_operand" "") (reg:SI 29))] + (set (match_operand:SI 0 "move_dest_operand" "") (reg:SI 29))] "" " { @@ -5283,7 +5283,7 @@ (clobber (reg:SI 26)) (clobber (reg:SI 25)) (clobber (match_dup 5))]) - (set (match_operand:SI 0 "general_operand" "") (reg:SI 29))] + (set (match_operand:SI 0 "move_dest_operand" "") (reg:SI 29))] "" " { @@ -5340,7 +5340,7 @@ (clobber (reg:SI 26)) (clobber (reg:SI 25)) (clobber (match_dup 5))]) - (set (match_operand:SI 0 "general_operand" "") (reg:SI 29))] + (set (match_operand:SI 0 "move_dest_operand" "") (reg:SI 29))] "" " { @@ -5392,7 +5392,7 @@ (clobber (reg:SI 26)) (clobber (reg:SI 25)) (clobber (match_dup 5))]) - (set (match_operand:SI 0 "general_operand" "") (reg:SI 29))] + (set (match_operand:SI 0 "move_dest_operand" "") (reg:SI 29))] "" " { diff --git a/gcc/config/pa/pa64-hpux.h b/gcc/config/pa/pa64-hpux.h index 75573ed6cba..f322e7e4b12 100644 --- a/gcc/config/pa/pa64-hpux.h +++ b/gcc/config/pa/pa64-hpux.h @@ -174,6 +174,20 @@ Boston, MA 02111-1307, USA. */ /* This is how we globalize a label. */ #define GLOBAL_ASM_OP "\t.globl\t" +/* Hacked version from defaults.h that uses assemble_name_raw + instead of assemble_name. A symbol in a type directive that + isn't otherwise referenced doesn't cause the symbol to be + placed in the symbol table of the assembled object. */ +#undef ASM_OUTPUT_TYPE_DIRECTIVE +#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE) \ +do { \ + fputs (TYPE_ASM_OP, STREAM); \ + assemble_name_raw (STREAM, NAME); \ + fputs (", ", STREAM); \ + fprintf (STREAM, TYPE_OPERAND_FMT, TYPE); \ + putc ('\n', STREAM); \ +} while (0) + /* Hacked version from elfos.h that doesn't output a label. */ #undef ASM_DECLARE_FUNCTION_NAME #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ @@ -186,15 +200,14 @@ do { \ dynamic loader to work correctly. This is equivalent to the HP assembler's .IMPORT directive but relates more directly to ELF object file types. */ -#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ -do { \ - int save_referenced; \ - save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL));\ - if (FUNCTION_NAME_P (NAME)) \ - ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ - else \ - ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ - TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)) = save_referenced;\ +#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ + pa_hpux_asm_output_external ((FILE), (DECL), (NAME)) +#define ASM_OUTPUT_EXTERNAL_REAL(FILE, DECL, NAME) \ +do { \ + if (FUNCTION_NAME_P (NAME)) \ + ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ + else \ + ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ } while (0) /* We need set the type for external libcalls. Also note that not all diff --git a/gcc/config/pa/som.h b/gcc/config/pa/som.h index e06a0912493..d937876d0e5 100644 --- a/gcc/config/pa/som.h +++ b/gcc/config/pa/som.h @@ -216,38 +216,47 @@ do { \ So, we force exception information into the data section. */ #define TARGET_ASM_EXCEPTION_SECTION data_section -/* This is how to output a command to make the user-level label named NAME - defined for reference from other files. - - We call assemble_name, which in turn sets TREE_SYMBOL_REFERENCED. This - macro will restore the original value of TREE_SYMBOL_REFERENCED to avoid - placing useless function definitions in the output file. - - Also note that the SOM based tools need the symbol imported as a CODE - symbol, while the ELF based tools require the symbol to be imported as - an ENTRY symbol. What a crock. */ - -#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ - do { int save_referenced; \ - save_referenced = TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)); \ - fputs ("\t.IMPORT ", FILE); \ - assemble_name (FILE, NAME); \ - if (FUNCTION_NAME_P (NAME)) \ - fputs (",CODE\n", FILE); \ - else \ - fputs (",DATA\n", FILE); \ - TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (DECL)) = save_referenced; \ +/* This is how to output a command to make the user-level label + named NAME defined for reference from other files. We use + assemble_name_raw instead of assemble_name since a symbol in + a .IMPORT directive that isn't otherwise referenced is not + placed in the symbol table of the assembled object. + + Failure to import a function reference can cause the HP linker + to segmentation fault! + + Note that the SOM based tools need the symbol imported as a + CODE symbol, while the ELF based tools require the symbol to + be imported as an ENTRY symbol. */ + +#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \ + pa_hpux_asm_output_external ((FILE), (DECL), (NAME)) +#define ASM_OUTPUT_EXTERNAL_REAL(FILE, DECL, NAME) \ + do { fputs ("\t.IMPORT ", FILE); \ + assemble_name_raw (FILE, NAME); \ + if (FUNCTION_NAME_P (NAME)) \ + fputs (",CODE\n", FILE); \ + else \ + fputs (",DATA\n", FILE); \ } while (0) /* The bogus HP assembler requires ALL external references to be - "imported", even library calls. They look a bit different, so + "imported", even library calls. They look a bit different, so here's this macro. Also note not all libcall names are passed to pa_encode_section_info (__main for example). To make sure all libcall names have section - info recorded in them, we do it here. We must also ensure that - we don't import a libcall that has been previously exported since - the HP assembler may change an ENTRY symbol to a CODE symbol. */ + info recorded in them, we do it here. + + We must also ensure that a libcall that has been previously + exported is not subsequently imported since the HP assembler may + change the type from an ENTRY to a CODE symbol. This would make + the symbol local. We are forced to use the identifier node + associated with the real assembler name for this check as the + symbol_ref available in ASM_DECLARE_FUNCTION_NAME is not the + same as the one used here. As a result, we can't use flags + in the symbol_ref for this check. The identifier check assumes + assemble_external_libcall is called before the symbol is used. */ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, RTL) \ do { const char *name; \ @@ -261,7 +270,7 @@ do { \ if (!id || !TREE_SYMBOL_REFERENCED (id)) \ { \ fputs ("\t.IMPORT ", FILE); \ - assemble_name (FILE, XSTR ((RTL), 0)); \ + assemble_name_raw (FILE, XSTR ((RTL), 0)); \ fputs (",CODE\n", FILE); \ } \ } while (0) @@ -358,12 +367,7 @@ do { \ do { fputs ("\t.weak\t", FILE); \ assemble_name (FILE, NAME); \ fputc ('\n', FILE); \ - if (! FUNCTION_NAME_P (NAME)) \ - { \ - fputs ("\t.EXPORT ", FILE); \ - assemble_name (FILE, NAME); \ - fputs (",DATA\n", FILE); \ - } \ + targetm.asm_out.globalize_label (FILE, NAME); \ } while (0) /* We can't handle weak aliases, and therefore can't support pragma weak. diff --git a/gcc/config/pa/t-hpux-shlib b/gcc/config/pa/t-hpux-shlib index 2a42ed6efc9..9673c8e8da3 100644 --- a/gcc/config/pa/t-hpux-shlib +++ b/gcc/config/pa/t-hpux-shlib @@ -19,9 +19,10 @@ SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ # $(slibdir) double quoted to protect it from expansion while building # libgcc.mk. We want this delayed until actual install time. -SHLIB_INSTALL = $(INSTALL_DATA) -m 555 $(SHLIB_DIR)/$(SHLIB_NAME) \ +SHLIB_INSTALL = \ + $$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \ + $(INSTALL_DATA) -m 555 $(SHLIB_DIR)/$(SHLIB_NAME) \ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \ rm -f $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME); \ $(LN_S) $(SHLIB_SONAME) \ $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_NAME) - diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h index 4a4fcde8e2d..a27e4b7ba0d 100644 --- a/gcc/config/rs6000/rs6000-protos.h +++ b/gcc/config/rs6000/rs6000-protos.h @@ -121,7 +121,7 @@ extern enum rtx_code rs6000_reverse_condition (enum machine_mode, extern void rs6000_emit_sCOND (enum rtx_code, rtx); extern void rs6000_emit_cbranch (enum rtx_code, rtx); extern char * output_cbranch (rtx, const char *, int, rtx); -extern char * output_e500_flip_eq_bit (rtx, rtx); +extern char * output_e500_flip_gt_bit (rtx, rtx); extern rtx rs6000_emit_set_const (rtx, enum machine_mode, rtx, int); extern int rs6000_emit_cmove (rtx, rtx, rtx, rtx); extern int rs6000_emit_vector_cond_expr (rtx, rtx, rtx, rtx, rtx, rtx); diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index e07ac501107..ea0062f04a0 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -748,8 +748,17 @@ static int rs6000_get_some_local_dynamic_name_1 (rtx *, void *); static rtx rs6000_complex_function_value (enum machine_mode); static rtx rs6000_spe_function_arg (CUMULATIVE_ARGS *, enum machine_mode, tree); -static rtx rs6000_darwin64_function_arg (CUMULATIVE_ARGS *, - enum machine_mode, tree, int); +static void rs6000_darwin64_record_arg_advance_flush (CUMULATIVE_ARGS *, + HOST_WIDE_INT); +static void rs6000_darwin64_record_arg_advance_recurse (CUMULATIVE_ARGS *, + tree, HOST_WIDE_INT); +static void rs6000_darwin64_record_arg_flush (CUMULATIVE_ARGS *, + HOST_WIDE_INT, + rtx[], int *); +static void rs6000_darwin64_record_arg_recurse (CUMULATIVE_ARGS *, + tree, HOST_WIDE_INT, + rtx[], int *); +static rtx rs6000_darwin64_record_arg (CUMULATIVE_ARGS *, tree, int, bool); static rtx rs6000_mixed_function_arg (enum machine_mode, tree, int); static void rs6000_move_block_from_reg (int regno, rtx x, int nregs); static void setup_incoming_varargs (CUMULATIVE_ARGS *, @@ -1198,9 +1207,8 @@ rs6000_override_options (const char *default_cpu) set_masks &= ~MASK_ALTIVEC; #endif - /* Don't override these by the processor default if given explicitly. */ - set_masks &= ~(target_flags_explicit - & (MASK_MULTIPLE | MASK_STRING | MASK_SOFT_FLOAT)); + /* Don't override by the processor default if given explicitly. */ + set_masks &= ~target_flags_explicit; /* Identify the processor type. */ rs6000_select[0].string = default_cpu; @@ -3663,21 +3671,16 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model) rs6000_emit_move (got, gsym, Pmode); else { - char buf[30]; - static int tls_got_labelno = 0; - rtx tempLR, lab, tmp3, mem; + rtx tempLR, tmp3, mem; rtx first, last; - ASM_GENERATE_INTERNAL_LABEL (buf, "LTLS", tls_got_labelno++); - lab = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf)); tempLR = gen_reg_rtx (Pmode); tmp1 = gen_reg_rtx (Pmode); tmp2 = gen_reg_rtx (Pmode); tmp3 = gen_reg_rtx (Pmode); mem = gen_const_mem (Pmode, tmp1); - first = emit_insn (gen_load_toc_v4_PIC_1b (tempLR, lab, - gsym)); + first = emit_insn (gen_load_toc_v4_PIC_1b (tempLR, gsym)); emit_move_insn (tmp1, tempLR); emit_move_insn (tmp2, mem); emit_insn (gen_addsi3 (tmp3, tmp1, tmp2)); @@ -4728,12 +4731,23 @@ rs6000_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED) { /* In the darwin64 abi, try to use registers for larger structs if possible. */ - if (AGGREGATE_TYPE_P (type) - && rs6000_darwin64_abi + if (rs6000_darwin64_abi && TREE_CODE (type) == RECORD_TYPE - && ((unsigned HOST_WIDE_INT) int_size_in_bytes (type) <= 32) - && ((unsigned HOST_WIDE_INT) int_size_in_bytes (type) > 0)) - return false; + && int_size_in_bytes (type) > 0) + { + CUMULATIVE_ARGS valcum; + rtx valret; + + valcum.words = 0; + valcum.fregno = FP_ARG_MIN_REG; + valcum.vregno = ALTIVEC_ARG_MIN_REG; + /* Do a trial code generation as if this were going to be passed + as an argument; if any part goes in memory, we return NULL. */ + valret = rs6000_darwin64_record_arg (&valcum, type, 1, true); + if (valret) + return false; + /* Otherwise fall through to more conventional ABI rules. */ + } if (AGGREGATE_TYPE_P (type) && (TARGET_AIX_STRUCT_RET @@ -4924,6 +4938,9 @@ function_arg_boundary (enum machine_mode mode, tree type) || (type && TREE_CODE (type) == VECTOR_TYPE && int_size_in_bytes (type) >= 16)) return 128; + else if (rs6000_darwin64_abi && mode == BLKmode + && type && TYPE_ALIGN (type) > 64) + return 128; else return PARM_BOUNDARY; } @@ -4946,46 +4963,84 @@ rs6000_arg_size (enum machine_mode mode, tree type) return (size + 7) >> 3; } -/* The darwin64 ABI calls for us to recurse down through structs, - applying the same rules to struct elements as if a reference to - each were being passed directly. */ +/* Use this to flush pending int fields. */ static void -darwin64_function_arg_advance (CUMULATIVE_ARGS *cum, tree type, - int named, int depth) +rs6000_darwin64_record_arg_advance_flush (CUMULATIVE_ARGS *cum, + HOST_WIDE_INT bitpos) { - tree f, ftype; - int i, tot; + unsigned int startbit, endbit; + int intregs, intoffset; + enum machine_mode mode; - switch (TREE_CODE (type)) - { - case RECORD_TYPE: - for (f = TYPE_FIELDS (type); f ; f = TREE_CHAIN (f)) - if (TREE_CODE (f) == FIELD_DECL) - { - ftype = TREE_TYPE (f); - function_arg_advance (cum, TYPE_MODE (ftype), ftype, - named, depth + 1); - } - break; + if (cum->intoffset == -1) + return; - case ARRAY_TYPE: - tot = int_size_in_bytes (type); - if (tot <= 0) - return; - ftype = TREE_TYPE (type); - tot /= int_size_in_bytes (ftype); - - for (i = 0; i < tot; ++i) + intoffset = cum->intoffset; + cum->intoffset = -1; + + if (intoffset % BITS_PER_WORD != 0) + { + mode = mode_for_size (BITS_PER_WORD - intoffset % BITS_PER_WORD, + MODE_INT, 0); + if (mode == BLKmode) { - function_arg_advance (cum, TYPE_MODE (ftype), ftype, - named, depth + 1); + /* We couldn't find an appropriate mode, which happens, + e.g., in packed structs when there are 3 bytes to load. + Back intoffset back to the beginning of the word in this + case. */ + intoffset = intoffset & -BITS_PER_WORD; } - break; - - default: - abort (); } + + startbit = intoffset & -BITS_PER_WORD; + endbit = (bitpos + BITS_PER_WORD - 1) & -BITS_PER_WORD; + intregs = (endbit - startbit) / BITS_PER_WORD; + cum->words += intregs; +} + +/* The darwin64 ABI calls for us to recurse down through structs, + looking for elements passed in registers. Unfortunately, we have + to track int register count here also because of misalignments + in powerpc alignment mode. */ + +static void +rs6000_darwin64_record_arg_advance_recurse (CUMULATIVE_ARGS *cum, + tree type, + HOST_WIDE_INT startbitpos) +{ + tree f; + + for (f = TYPE_FIELDS (type); f ; f = TREE_CHAIN (f)) + if (TREE_CODE (f) == FIELD_DECL) + { + HOST_WIDE_INT bitpos = startbitpos; + tree ftype = TREE_TYPE (f); + enum machine_mode mode = TYPE_MODE (ftype); + + if (DECL_SIZE (f) != 0 + && host_integerp (bit_position (f), 1)) + bitpos += int_bit_position (f); + + /* ??? FIXME: else assume zero offset. */ + + if (TREE_CODE (ftype) == RECORD_TYPE) + rs6000_darwin64_record_arg_advance_recurse (cum, ftype, bitpos); + else if (USE_FP_FOR_ARG_P (cum, mode, ftype)) + { + rs6000_darwin64_record_arg_advance_flush (cum, bitpos); + cum->fregno += (GET_MODE_SIZE (mode) + 7) >> 3; + cum->words += (GET_MODE_SIZE (mode) + 7) >> 3; + } + else if (USE_ALTIVEC_FOR_ARG_P (cum, mode, type, 1)) + { + rs6000_darwin64_record_arg_advance_flush (cum, bitpos); + cum->vregno++; + cum->words += 2; + } + else if (cum->intoffset == -1) + cum->intoffset = bitpos; + } } /* Update the data in CUM to advance over an argument @@ -5000,6 +5055,8 @@ void function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, int named, int depth) { + int size; + /* Only tick off an argument if we're not recursing. */ if (depth == 0) cum->nargs_prototype--; @@ -5063,10 +5120,30 @@ function_arg_advance (CUMULATIVE_ARGS *cum, enum machine_mode mode, else if (rs6000_darwin64_abi && mode == BLKmode - && (TREE_CODE (type) == RECORD_TYPE - || TREE_CODE (type) == ARRAY_TYPE)) - darwin64_function_arg_advance (cum, type, named, depth); - + && TREE_CODE (type) == RECORD_TYPE + && (size = int_size_in_bytes (type)) > 0) + { + /* Variable sized types have size == -1 and are + treated as if consisting entirely of ints. + Pad to 16 byte boundary if needed. */ + if (TYPE_ALIGN (type) >= 2 * BITS_PER_WORD + && (cum->words % 2) != 0) + cum->words++; + /* For varargs, we can just go up by the size of the struct. */ + if (!named) + cum->words += (size + 7) / 8; + else + { + /* It is tempting to say int register count just goes up by + sizeof(type)/8, but this is wrong in a case such as + { int; double; int; } [powerpc alignment]. We have to + grovel through the fields for these too. */ + cum->intoffset = 0; + rs6000_darwin64_record_arg_advance_recurse (cum, type, 0); + rs6000_darwin64_record_arg_advance_flush (cum, + size * BITS_PER_UNIT); + } + } else if (DEFAULT_ABI == ABI_V4) { if (TARGET_HARD_FLOAT && TARGET_FPRS @@ -5225,136 +5302,184 @@ rs6000_spe_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, } } -/* For the darwin64 ABI, we want to construct a PARALLEL consisting of - the register(s) to be used for each field and subfield of a struct - being passed by value, along with the offset of where the - register's value may be found in the block. */ +/* A subroutine of rs6000_darwin64_record_arg. Assign the bits of the + structure between cum->intoffset and bitpos to integer registers. */ -static rtx -rs6000_darwin64_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, - tree type, int named) +static void +rs6000_darwin64_record_arg_flush (CUMULATIVE_ARGS *cum, + HOST_WIDE_INT bitpos, rtx rvec[], int *k) { - tree f, ftype, offset; - rtx rvec[FIRST_PSEUDO_REGISTER], sub, suboff, roffset; - int k = 0, i, j, bytepos, subbytepos, tot; - CUMULATIVE_ARGS saved_cum = *cum; - enum machine_mode submode; + enum machine_mode mode; + unsigned int regno; + unsigned int startbit, endbit; + int this_regno, intregs, intoffset; + rtx reg; + + if (cum->intoffset == -1) + return; + + intoffset = cum->intoffset; + cum->intoffset = -1; + + /* If this is the trailing part of a word, try to only load that + much into the register. Otherwise load the whole register. Note + that in the latter case we may pick up unwanted bits. It's not a + problem at the moment but may wish to revisit. */ + + if (intoffset % BITS_PER_WORD != 0) + { + mode = mode_for_size (BITS_PER_WORD - intoffset % BITS_PER_WORD, + MODE_INT, 0); + if (mode == BLKmode) + { + /* We couldn't find an appropriate mode, which happens, + e.g., in packed structs when there are 3 bytes to load. + Back intoffset back to the beginning of the word in this + case. */ + intoffset = intoffset & -BITS_PER_WORD; + mode = word_mode; + } + } + else + mode = word_mode; + + startbit = intoffset & -BITS_PER_WORD; + endbit = (bitpos + BITS_PER_WORD - 1) & -BITS_PER_WORD; + intregs = (endbit - startbit) / BITS_PER_WORD; + this_regno = cum->words + intoffset / BITS_PER_WORD; + + if (intregs > 0 && intregs > GP_ARG_NUM_REG - this_regno) + cum->use_stack = 1; + + intregs = MIN (intregs, GP_ARG_NUM_REG - this_regno); + if (intregs <= 0) + return; - switch (TREE_CODE (type)) + intoffset /= BITS_PER_UNIT; + do { - case RECORD_TYPE: - for (f = TYPE_FIELDS (type); f ; f = TREE_CHAIN (f)) - if (TREE_CODE (f) == FIELD_DECL) + regno = GP_ARG_MIN_REG + this_regno; + reg = gen_rtx_REG (mode, regno); + rvec[(*k)++] = + gen_rtx_EXPR_LIST (VOIDmode, reg, GEN_INT (intoffset)); + + this_regno += 1; + intoffset = (intoffset | (UNITS_PER_WORD-1)) + 1; + mode = word_mode; + intregs -= 1; + } + while (intregs > 0); +} + +/* Recursive workhorse for the following. */ + +static void +rs6000_darwin64_record_arg_recurse (CUMULATIVE_ARGS *cum, tree type, + HOST_WIDE_INT startbitpos, rtx rvec[], + int *k) +{ + tree f; + + for (f = TYPE_FIELDS (type); f ; f = TREE_CHAIN (f)) + if (TREE_CODE (f) == FIELD_DECL) + { + HOST_WIDE_INT bitpos = startbitpos; + tree ftype = TREE_TYPE (f); + enum machine_mode mode = TYPE_MODE (ftype); + + if (DECL_SIZE (f) != 0 + && host_integerp (bit_position (f), 1)) + bitpos += int_bit_position (f); + + /* ??? FIXME: else assume zero offset. */ + + if (TREE_CODE (ftype) == RECORD_TYPE) + rs6000_darwin64_record_arg_recurse (cum, ftype, bitpos, rvec, k); + else if (cum->named && USE_FP_FOR_ARG_P (cum, mode, ftype)) { - ftype = TREE_TYPE (f); - offset = DECL_FIELD_OFFSET (f); - bytepos = int_bit_position (f) / BITS_PER_UNIT; - /* Force substructs to be handled as BLKmode even if - they're small enough to be recorded as DImode, so we - drill through to non-record fields. */ - submode = TYPE_MODE (ftype); - if (TREE_CODE (ftype) == RECORD_TYPE) - submode = BLKmode; - sub = function_arg (cum, submode, ftype, named); - if (sub == NULL_RTX) - return NULL_RTX; - if (GET_CODE (sub) == PARALLEL) - { - for (i = 0; i < XVECLEN (sub, 0); i++) - { - rtx subsub = XVECEXP (sub, 0, i); - suboff = XEXP (subsub, 1); - subbytepos = INTVAL (suboff); - subbytepos += bytepos; - roffset = gen_rtx_CONST_INT (SImode, subbytepos); - subsub = XEXP (subsub, 0); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, subsub, roffset); - } - } - else +#if 0 + switch (mode) { - roffset = gen_rtx_CONST_INT (SImode, bytepos); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, sub, roffset); + case SCmode: mode = SFmode; break; + case DCmode: mode = DFmode; break; + case TCmode: mode = TFmode; break; + default: break; } - /* Now do an arg advance to get all the cumulative arg - stuff set correctly for the next subfield. Note that it - has no lasting effect, because it is being done on a - temporary copy of the cumulative arg data. */ - function_arg_advance (cum, submode, ftype, named, 1); +#endif + rs6000_darwin64_record_arg_flush (cum, bitpos, rvec, k); + rvec[(*k)++] + = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (mode, cum->fregno++), + GEN_INT (bitpos / BITS_PER_UNIT)); + if (mode == TFmode) + cum->fregno++; } - break; + else if (cum->named && USE_ALTIVEC_FOR_ARG_P (cum, mode, ftype, 1)) + { + rs6000_darwin64_record_arg_flush (cum, bitpos, rvec, k); + rvec[(*k)++] + = gen_rtx_EXPR_LIST (VOIDmode, + gen_rtx_REG (mode, cum->vregno++), + GEN_INT (bitpos / BITS_PER_UNIT)); + } + else if (cum->intoffset == -1) + cum->intoffset = bitpos; + } +} - case UNION_TYPE: - tot = rs6000_arg_size (mode, type); - if (tot <= 0) - return NULL_RTX; - bytepos = 0; +/* For the darwin64 ABI, we want to construct a PARALLEL consisting of + the register(s) to be used for each field and subfield of a struct + being passed by value, along with the offset of where the + register's value may be found in the block. FP fields go in FP + register, vector fields go in vector registers, and everything + else goes in int registers, packed as in memory. - for (j = 0; j < tot; ++j) - { - sub = gen_rtx_REG ((TARGET_64BIT ? DImode : SImode), GP_ARG_MIN_REG + cum->words++); - roffset = gen_rtx_CONST_INT (SImode, bytepos); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, sub, roffset); - if (cum->words >= GP_ARG_NUM_REG) - break; - bytepos += (TARGET_64BIT ? 8 : 4); - } - break; + This code is also used for function return values. RETVAL indicates + whether this is the case. - case ARRAY_TYPE: - tot = int_size_in_bytes (type); - if (tot <= 0) - return NULL_RTX; - ftype = TREE_TYPE (type); - tot /= int_size_in_bytes (ftype); - bytepos = 0; + Much of this is taken from the Sparc V9 port, which has a similar + calling convention. */ - for (j = 0; j < tot; ++j) - { - /* Force substructs to be handled as BLKmode even if - they're small enough to be recorded as DImode, so we - drill through to non-record fields. */ - submode = TYPE_MODE (ftype); - if (TREE_CODE (ftype) == RECORD_TYPE) - submode = BLKmode; - sub = function_arg (cum, submode, ftype, named); - if (sub == NULL_RTX) - return NULL_RTX; - if (GET_CODE (sub) == PARALLEL) - { - for (i = 0; i < XVECLEN (sub, 0); i++) - { - rtx subsub = XVECEXP (sub, 0, i); - - suboff = XEXP (subsub, 1); - subbytepos = INTVAL (suboff); - subbytepos += bytepos; - roffset = gen_rtx_CONST_INT (SImode, subbytepos); - subsub = XEXP (subsub, 0); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, subsub, roffset); - } - } - else - { - roffset = gen_rtx_CONST_INT (SImode, bytepos); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, sub, roffset); - } - /* Now do an arg advance to get all the cumulative arg - stuff set correctly for the next subfield. Note that it - has no lasting effect, because it is being done on a - temporary copy of the cumulative arg data. */ - function_arg_advance (cum, submode, ftype, named, 1); - bytepos += int_size_in_bytes (ftype); - } - break; - - default: - abort (); - } - - *cum = saved_cum; - if (k > 0) - return gen_rtx_PARALLEL (mode, gen_rtvec_v (k, rvec)); +static rtx +rs6000_darwin64_record_arg (CUMULATIVE_ARGS *orig_cum, tree type, + int named, bool retval) +{ + rtx rvec[FIRST_PSEUDO_REGISTER]; + int k = 1, kbase = 1; + HOST_WIDE_INT typesize = int_size_in_bytes (type); + /* This is a copy; modifications are not visible to our caller. */ + CUMULATIVE_ARGS copy_cum = *orig_cum; + CUMULATIVE_ARGS *cum = ©_cum; + + /* Pad to 16 byte boundary if needed. */ + if (!retval && TYPE_ALIGN (type) >= 2 * BITS_PER_WORD + && (cum->words % 2) != 0) + cum->words++; + + cum->intoffset = 0; + cum->use_stack = 0; + cum->named = named; + + /* Put entries into rvec[] for individual FP and vector fields, and + for the chunks of memory that go in int regs. Note we start at + element 1; 0 is reserved for an indication of using memory, and + may or may not be filled in below. */ + rs6000_darwin64_record_arg_recurse (cum, type, 0, rvec, &k); + rs6000_darwin64_record_arg_flush (cum, typesize * BITS_PER_UNIT, rvec, &k); + + /* If any part of the struct went on the stack put all of it there. + This hack is because the generic code for + FUNCTION_ARG_PARTIAL_NREGS cannot handle cases where the register + parts of the struct are not at the beginning. */ + if (cum->use_stack) + { + if (retval) + return NULL_RTX; /* doesn't go in registers at all */ + kbase = 0; + rvec[0] = gen_rtx_EXPR_LIST (VOIDmode, NULL_RTX, const0_rtx); + } + if (k > 1 || cum->use_stack) + return gen_rtx_PARALLEL (BLKmode, gen_rtvec_v (k - kbase, &rvec[kbase])); else return NULL_RTX; } @@ -5418,7 +5543,8 @@ rs6000_mixed_function_arg (enum machine_mode mode, tree type, int align_words) This is null for libcalls where that information may not be available. CUM is a variable of type CUMULATIVE_ARGS which gives info about - the preceding args and about the function being called. + the preceding args and about the function being called. It is + not modified in this routine. NAMED is nonzero if this argument is a named parameter (otherwise it is an extra parameter matching an ellipsis). @@ -5466,13 +5592,10 @@ function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode, return GEN_INT (cum->call_cookie); } - if (mode == BLKmode - && rs6000_darwin64_abi - && (TREE_CODE (type) == RECORD_TYPE - || TREE_CODE (type) == UNION_TYPE - || TREE_CODE (type) == ARRAY_TYPE)) + if (rs6000_darwin64_abi && mode == BLKmode + && TREE_CODE (type) == RECORD_TYPE) { - rtx rslt = rs6000_darwin64_function_arg (cum, mode, type, named); + rtx rslt = rs6000_darwin64_record_arg (cum, type, named, false); if (rslt != NULL_RTX) return rslt; /* Else fall through to usual handling. */ @@ -5713,6 +5836,12 @@ rs6000_arg_partial_bytes (CUMULATIVE_ARGS *cum, enum machine_mode mode, && cum->nargs_prototype >= 0) return 0; + /* In this complicated case we just disable the partial_nregs code. */ + if (rs6000_darwin64_abi && mode == BLKmode + && TREE_CODE (type) == RECORD_TYPE + && int_size_in_bytes (type) > 0) + return 0; + align = function_arg_boundary (mode, type) / PARM_BOUNDARY - 1; parm_offset = TARGET_32BIT ? 2 : 0; align_words = cum->words + ((parm_offset - cum->words) & align); @@ -10547,8 +10676,7 @@ print_operand (FILE *file, rtx x, int code) /* Bit 1 is EQ bit. */ i = 4 * (REGNO (x) - CR0_REGNO) + 2; - /* If we want bit 31, write a shift count of zero, not 32. */ - fprintf (file, "%d", i == 31 ? 0 : i + 1); + fprintf (file, "%d", i); return; case 'E': @@ -11353,7 +11481,7 @@ rs6000_generate_compare (enum rtx_code code) if ((TARGET_E500 && !TARGET_FPRS && TARGET_HARD_FLOAT) && rs6000_compare_fp_p) { - rtx cmp, or1, or2, or_result, compare_result2; + rtx cmp, or_result, compare_result2; enum machine_mode op_mode = GET_MODE (rs6000_compare_op0); if (op_mode == VOIDmode) @@ -11427,9 +11555,6 @@ rs6000_generate_compare (enum rtx_code code) default: abort (); } - or1 = gen_reg_rtx (SImode); - or2 = gen_reg_rtx (SImode); - or_result = gen_reg_rtx (CCEQmode); compare_result2 = gen_reg_rtx (CCFPmode); /* Do the EQ. */ @@ -11448,14 +11573,10 @@ rs6000_generate_compare (enum rtx_code code) else abort (); emit_insn (cmp); - or1 = gen_rtx_GT (SImode, compare_result, const0_rtx); - or2 = gen_rtx_GT (SImode, compare_result2, const0_rtx); - /* OR them together. */ - cmp = gen_rtx_SET (VOIDmode, or_result, - gen_rtx_COMPARE (CCEQmode, - gen_rtx_IOR (SImode, or1, or2), - const_true_rtx)); + or_result = gen_reg_rtx (CCFPmode); + cmp = gen_e500_cr_ior_compare (or_result, compare_result, + compare_result2); compare_result = or_result; code = EQ; } @@ -11565,9 +11686,9 @@ rs6000_emit_sCOND (enum rtx_code code, rtx result) abort (); if (cond_code == NE) - emit_insn (gen_e500_flip_eq_bit (t, t)); + emit_insn (gen_e500_flip_gt_bit (t, t)); - emit_insn (gen_move_from_CR_eq_bit (result, t)); + emit_insn (gen_move_from_CR_gt_bit (result, t)); return; } @@ -11748,9 +11869,9 @@ output_cbranch (rtx op, const char *label, int reversed, rtx insn) return string; } -/* Return the string to flip the EQ bit on a CR. */ +/* Return the string to flip the GT bit on a CR. */ char * -output_e500_flip_eq_bit (rtx dst, rtx src) +output_e500_flip_gt_bit (rtx dst, rtx src) { static char string[64]; int a, b; @@ -11759,9 +11880,9 @@ output_e500_flip_eq_bit (rtx dst, rtx src) || GET_CODE (src) != REG || ! CR_REGNO_P (REGNO (src))) abort (); - /* EQ bit. */ - a = 4 * (REGNO (dst) - CR0_REGNO) + 2; - b = 4 * (REGNO (src) - CR0_REGNO) + 2; + /* GT bit. */ + a = 4 * (REGNO (dst) - CR0_REGNO) + 1; + b = 4 * (REGNO (src) - CR0_REGNO) + 1; sprintf (string, "crnot %d,%d", a, b); return string; @@ -13337,11 +13458,10 @@ rs6000_emit_load_toc_table (int fromprolog) rtx temp0 = (fromprolog ? gen_rtx_REG (Pmode, 0) : gen_reg_rtx (Pmode)); - rtx symF; if (fromprolog) { - rtx symL; + rtx symF, symL; ASM_GENERATE_INTERNAL_LABEL (buf, "LCF", rs6000_pic_labelno); symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf)); @@ -13359,14 +13479,9 @@ rs6000_emit_load_toc_table (int fromprolog) else { rtx tocsym; - static int reload_toc_labelno = 0; tocsym = gen_rtx_SYMBOL_REF (Pmode, toc_label_name); - - ASM_GENERATE_INTERNAL_LABEL (buf, "LCG", reload_toc_labelno++); - symF = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf)); - - emit_insn (gen_load_toc_v4_PIC_1b (tempLR, symF, tocsym)); + emit_insn (gen_load_toc_v4_PIC_1b (tempLR, tocsym)); emit_move_insn (dest, tempLR); emit_move_insn (temp0, gen_rtx_MEM (Pmode, dest)); } @@ -18617,128 +18732,6 @@ rs6000_complex_function_value (enum machine_mode mode) return gen_rtx_PARALLEL (mode, gen_rtvec (2, r1, r2)); } -/* Compose a PARALLEL for a darwin64 struct being returned by - value. */ - -static rtx -rs6000_darwin64_function_value (CUMULATIVE_ARGS *cum, tree valtype) -{ - tree f, ftype; - rtx rvec[FIRST_PSEUDO_REGISTER], sub, roffset, suboff; - int k = 0, bytepos, tot, elt, i, subbytepos; - enum machine_mode fmode; - - switch (TREE_CODE (valtype)) - { - case RECORD_TYPE: - for (f = TYPE_FIELDS (valtype); f ; f = TREE_CHAIN (f)) - if (TREE_CODE (f) == FIELD_DECL) - { - ftype = TREE_TYPE (f); - fmode = TYPE_MODE (ftype); - bytepos = int_bit_position (f) / BITS_PER_UNIT; - if (USE_FP_FOR_ARG_P (cum, fmode, ftype)) - { - sub = gen_rtx_REG (fmode, cum->fregno++); - cum->sysv_gregno++; - } - else if (USE_ALTIVEC_FOR_ARG_P (cum, fmode, ftype, 1)) - { - sub = gen_rtx_REG (fmode, cum->vregno++); - cum->sysv_gregno++; - } - else if (fmode == BLKmode - && (TREE_CODE (ftype) == RECORD_TYPE - || TREE_CODE (ftype) == ARRAY_TYPE)) - sub = rs6000_darwin64_function_value (cum, ftype); - else - sub = gen_rtx_REG (fmode, cum->sysv_gregno++); - if (sub == NULL_RTX) - return sub; - else if (GET_CODE (sub) == PARALLEL) - { - for (i = 0; i < XVECLEN (sub, 0); i++) - { - rtx subsub = XVECEXP (sub, 0, i); - - suboff = XEXP (subsub, 1); - subbytepos = INTVAL (suboff); - subbytepos += bytepos; - roffset = gen_rtx_CONST_INT (SImode, subbytepos); - subsub = XEXP (subsub, 0); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, subsub, roffset); - } - } - else - { - roffset = gen_rtx_CONST_INT (SImode, bytepos); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, sub, roffset); - } - } - if (k > 0) - return gen_rtx_PARALLEL (TYPE_MODE (valtype), gen_rtvec_v (k, rvec)); - else - return NULL_RTX; - - case ARRAY_TYPE: - /* If passing by value won't work, give up. */ - if (int_size_in_bytes (valtype) <= 0) - return NULL_RTX; - ftype = TREE_TYPE (valtype); - fmode = TYPE_MODE (ftype); - tot = int_size_in_bytes (valtype) / int_size_in_bytes (ftype); - bytepos = 0; - for (elt = 0; elt < tot; ++elt) - { - if (USE_FP_FOR_ARG_P (cum, fmode, ftype)) - { - sub = gen_rtx_REG (fmode, cum->fregno++); - cum->sysv_gregno++; - } - else if (USE_ALTIVEC_FOR_ARG_P (cum, fmode, ftype, 1)) - { - sub = gen_rtx_REG (fmode, cum->vregno++); - cum->sysv_gregno++; - } - else if (fmode == BLKmode - && (TREE_CODE (ftype) == RECORD_TYPE - || TREE_CODE (ftype) == ARRAY_TYPE)) - sub = rs6000_darwin64_function_value (cum, ftype); - else - sub = gen_rtx_REG (fmode, cum->sysv_gregno++); - if (sub == NULL_RTX) - return sub; - else if (GET_CODE (sub) == PARALLEL) - { - for (i = 0; i < XVECLEN (sub, 0); i++) - { - rtx subsub = XVECEXP (sub, 0, i); - - suboff = XEXP (subsub, 1); - subbytepos = INTVAL (suboff); - subbytepos += bytepos; - roffset = gen_rtx_CONST_INT (SImode, subbytepos); - subsub = XEXP (subsub, 0); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, subsub, roffset); - } - } - else - { - roffset = gen_rtx_CONST_INT (SImode, bytepos); - rvec[k++] = gen_rtx_EXPR_LIST (VOIDmode, sub, roffset); - } - bytepos += int_size_in_bytes (ftype); - } - if (k > 0) - return gen_rtx_PARALLEL (TYPE_MODE (valtype), gen_rtvec_v (k, rvec)); - else - return NULL_RTX; - - default: - abort (); - } -} - /* Define how to find the value returned by a function. VALTYPE is the data type of the value (as a tree). If the precise function being called is known, FUNC is its FUNCTION_DECL; @@ -18758,16 +18751,18 @@ rs6000_function_value (tree valtype, tree func ATTRIBUTE_UNUSED) /* Special handling for structs in darwin64. */ if (rs6000_darwin64_abi && TYPE_MODE (valtype) == BLKmode - && (TREE_CODE (valtype) == RECORD_TYPE - || TREE_CODE (valtype) == ARRAY_TYPE)) + && TREE_CODE (valtype) == RECORD_TYPE + && int_size_in_bytes (valtype) > 0) { CUMULATIVE_ARGS valcum; rtx valret; - valcum.sysv_gregno = GP_ARG_RETURN; + valcum.words = 0; valcum.fregno = FP_ARG_MIN_REG; valcum.vregno = ALTIVEC_ARG_MIN_REG; - valret = rs6000_darwin64_function_value (&valcum, valtype); + /* Do a trial code generation as if this were going to be passed as + an argument; if any part goes in memory, we return NULL. */ + valret = rs6000_darwin64_record_arg (&valcum, valtype, 1, true); if (valret) return valret; /* Otherwise fall through to standard ABI rules. */ diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 1a2d12df2ce..74c940fe067 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -1696,6 +1696,9 @@ typedef struct rs6000_args int stdarg; /* Whether function is a stdarg function. */ int call_cookie; /* Do special things for this call */ int sysv_gregno; /* next available GP register */ + int intoffset; /* running offset in struct (darwin64) */ + int use_stack; /* any part of struct on stack (darwin64) */ + int named; /* false for varargs params */ } CUMULATIVE_ARGS; /* Initialize a variable CUM of type CUMULATIVE_ARGS diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index bf2bf4ce37b..d5ae89d90e1 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -50,7 +50,7 @@ (UNSPEC_TLSGOTTPREL 28) (UNSPEC_TLSTLS 29) (UNSPEC_FIX_TRUNC_TF 30) ; fadd, rounding towards zero - (UNSPEC_MV_CR_EQ 31) ; move_from_CR_eq_bit + (UNSPEC_MV_CR_GT 31) ; move_from_CR_eq_bit ]) ;; @@ -10140,11 +10140,10 @@ (define_insn "load_toc_v4_PIC_1b" [(set (match_operand:SI 0 "register_operand" "=l") - (match_operand:SI 1 "immediate_operand" "s")) - (use (unspec [(match_dup 1) (match_operand 2 "immediate_operand" "s")] + (unspec:SI [(match_operand:SI 1 "immediate_operand" "s")] UNSPEC_TOCPTR))] "TARGET_ELF && DEFAULT_ABI != ABI_AIX && flag_pic == 2" - "bcl 20,31,%1+4\\n%1:\\n\\t.long %2-%1" + "bcl 20,31,$+8\\n\\t.long %1-$" [(set_attr "type" "branch") (set_attr "length" "8")]) @@ -11473,11 +11472,11 @@ (set_attr "length" "8")]) ;; Same as above, but get the GT bit. -(define_insn "move_from_CR_eq_bit" +(define_insn "move_from_CR_gt_bit" [(set (match_operand:SI 0 "gpc_reg_operand" "=r") - (unspec:SI [(match_operand 1 "cc_reg_operand" "y")] UNSPEC_MV_CR_EQ))] + (unspec:SI [(match_operand 1 "cc_reg_operand" "y")] UNSPEC_MV_CR_GT))] "TARGET_E500" - "mfcr %0\;{rlinm|rlwinm} %0,%0,%D1,1" + "mfcr %0\;{rlinm|rlwinm} %0,%0,%D1,31,31" [(set_attr "type" "mfcr") (set_attr "length" "8")]) diff --git a/gcc/config/rs6000/spe.md b/gcc/config/rs6000/spe.md index b0459829372..79d03ff623f 100644 --- a/gcc/config/rs6000/spe.md +++ b/gcc/config/rs6000/spe.md @@ -29,6 +29,7 @@ (TSTDFGT_GPR 1009) (CMPDFLT_GPR 1010) (TSTDFLT_GPR 1011) + (E500_CR_IOR_COMPARE 1012) ]) (define_insn "*negsf2_gpr" @@ -2615,14 +2616,14 @@ ;; FP comparison stuff. ;; Flip the GT bit. -(define_insn "e500_flip_eq_bit" +(define_insn "e500_flip_gt_bit" [(set (match_operand:CCFP 0 "cc_reg_operand" "=y") (unspec:CCFP [(match_operand:CCFP 1 "cc_reg_operand" "y")] 999))] "!TARGET_FPRS && TARGET_HARD_FLOAT" "* { - return output_e500_flip_eq_bit (operands[0], operands[1]); + return output_e500_flip_gt_bit (operands[0], operands[1]); }" [(set_attr "type" "cr_logical")]) @@ -2751,3 +2752,13 @@ "TARGET_HARD_FLOAT && TARGET_E500_DOUBLE && flag_unsafe_math_optimizations" "efdtstlt %0,%1,%2" [(set_attr "type" "veccmpsimple")]) + +;; Like cceq_ior_compare, but compare the GT bits. +(define_insn "e500_cr_ior_compare" + [(set (match_operand:CCFP 0 "cc_reg_operand" "=y") + (unspec:CCFP [(match_operand 1 "cc_reg_operand" "y") + (match_operand 2 "cc_reg_operand" "y")] + E500_CR_IOR_COMPARE))] + "TARGET_E500" + "cror 4*%0+gt,4*%1+gt,4*%2+gt" + [(set_attr "type" "cr_logical")]) diff --git a/gcc/config/rs6000/t-darwin b/gcc/config/rs6000/t-darwin index 467c426f976..74ded0f2793 100644 --- a/gcc/config/rs6000/t-darwin +++ b/gcc/config/rs6000/t-darwin @@ -9,7 +9,12 @@ LIB2FUNCS_STATIC_EXTRA = \ # The .asm files above are designed to run on all processors, # even though they use AltiVec instructions. -Wa is used because # -force_cpusubtype_ALL doesn't work with -dynamiclib. -TARGET_LIBGCC2_CFLAGS = -Wa,-force_cpusubtype_ALL +# +# -pipe because there's an assembler bug, 4077127, which causes +# it to not properly process the first # directive, causing temporary +# file names to appear in stabs, causing the bootstrap to fail. Using -pipe +# works around this by not having any temporary file names. +TARGET_LIBGCC2_CFLAGS = -Wa,-force_cpusubtype_ALL -pipe # Export the _xlq* symbols from darwin-ldouble.c. SHLIB_MAPFILES += $(srcdir)/config/rs6000/libgcc-ppc64.ver diff --git a/gcc/config/rs6000/t-darwin8 b/gcc/config/rs6000/t-darwin8 index 2f3bb32f821..873da5deadc 100644 --- a/gcc/config/rs6000/t-darwin8 +++ b/gcc/config/rs6000/t-darwin8 @@ -1,3 +1,5 @@ # 64-bit libraries can only be built in Darwin 8.x or later. -MULTILIB_OPTIONS = m64 -MULTILIB_DIRNAMES = ppc64 +# Unfortunately, though, libjava and libffi haven't been ported to -m64 +# yet. +# MULTILIB_OPTIONS = m64 +# MULTILIB_DIRNAMES = ppc64 diff --git a/gcc/config/s390/s390-modes.def b/gcc/config/s390/s390-modes.def index 1cb0f199032..6520dda8e90 100644 --- a/gcc/config/s390/s390-modes.def +++ b/gcc/config/s390/s390-modes.def @@ -23,6 +23,9 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA /* 256-bit integer mode is needed for STACK_SAVEAREA_MODE. */ INT_MODE (OI, 32); +/* Define TFmode to work around reload problem PR 20927. */ +FLOAT_MODE (TF, 16, ieee_quad_format); + /* Add any extra modes needed to represent the condition code. */ /* diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index a5896e878d2..2514a43a940 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -2557,8 +2557,11 @@ s390_secondary_output_reload_class (enum reg_class class, : (mode == DImode || mode == DFmode)) && reg_classes_intersect_p (GENERAL_REGS, class) && GET_CODE (out) == MEM - && !offsettable_memref_p (out) - && !s_operand (out, VOIDmode)) + && GET_CODE (XEXP (out, 0)) == PLUS + && GET_CODE (XEXP (XEXP (out, 0), 0)) == PLUS + && GET_CODE (XEXP (XEXP (out, 0), 1)) == CONST_INT + && !DISP_IN_RANGE (INTVAL (XEXP (XEXP (out, 0), 1)) + + GET_MODE_SIZE (mode) - 1)) return ADDR_REGS; if (reg_classes_intersect_p (CC_REGS, class)) diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index a0b9a3143a0..0fc7b807c99 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -833,7 +833,7 @@ "TARGET_64BIT" { gcc_assert (MEM_P (operands[0])); - s390_load_address (operands[2], XEXP (operands[0], 0)); + s390_load_address (operands[2], find_replacement (&XEXP (operands[0], 0))); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); DONE; @@ -992,7 +992,7 @@ "!TARGET_64BIT" { gcc_assert (MEM_P (operands[0])); - s390_load_address (operands[2], XEXP (operands[0], 0)); + s390_load_address (operands[2], find_replacement (&XEXP (operands[0], 0))); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); DONE; @@ -1451,7 +1451,7 @@ "!TARGET_64BIT" { gcc_assert (MEM_P (operands[0])); - s390_load_address (operands[2], XEXP (operands[0], 0)); + s390_load_address (operands[2], find_replacement (&XEXP (operands[0], 0))); operands[0] = replace_equiv_address (operands[0], operands[2]); emit_move_insn (operands[0], operands[1]); DONE; @@ -7780,18 +7780,18 @@ (define_expand "set_tp_64" [(set (reg:DI 36) (match_operand:DI 0 "nonimmediate_operand" "")) - (unspec_volatile [(reg:DI 36)] UNSPECV_SET_TP)] + (set (reg:DI 36) (unspec_volatile:DI [(reg:DI 36)] UNSPECV_SET_TP))] "TARGET_64BIT" "") (define_expand "set_tp_31" [(set (reg:SI 36) (match_operand:SI 0 "nonimmediate_operand" "")) - (unspec_volatile [(reg:SI 36)] UNSPECV_SET_TP)] + (set (reg:SI 36) (unspec_volatile:SI [(reg:SI 36)] UNSPECV_SET_TP))] "!TARGET_64BIT" "") (define_insn "*set_tp" - [(unspec_volatile [(reg 36)] UNSPECV_SET_TP)] + [(set (reg 36) (unspec_volatile [(reg 36)] UNSPECV_SET_TP))] "" "" [(set_attr "type" "none") diff --git a/gcc/config/s390/tpf.h b/gcc/config/s390/tpf.h index 33a50b47498..38df1b4bcbf 100644 --- a/gcc/config/s390/tpf.h +++ b/gcc/config/s390/tpf.h @@ -101,6 +101,9 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #undef CPLUSPLUS_CPP_SPEC #define CPLUSPLUS_CPP_SPEC "-D_GNU_SOURCE %(cpp)" +#undef ASM_SPEC +#define ASM_SPEC "%{m31&m64}%{mesa&mzarch}%{march=*}" + #undef LIB_SPEC #define LIB_SPEC "%{pthread:-lpthread} -lc" diff --git a/gcc/config/sh/lib1funcs.asm b/gcc/config/sh/lib1funcs.asm index 30f10a992cd..9b47a2e2619 100644 --- a/gcc/config/sh/lib1funcs.asm +++ b/gcc/config/sh/lib1funcs.asm @@ -37,9 +37,19 @@ Boston, MA 02111-1307, USA. */ ELF local label prefixes by J"orn Rennecke amylaar@cygnus.com */ +#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y) + #ifdef __ELF__ #define LOCAL(X) .L_##X -#define FUNC(X) .type X,@function + +#if 1 /* ??? The export list mechanism is broken, everything that is not + hidden is exported. See PR target/20617. */ +#undef FUNC +#define FUNC(X) .type X,@function; .hidden X +#undef ALIAS +#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y); .hidden GLOBAL(X) +#endif + #define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X #define ENDFUNC(X) ENDFUNC0(X) #else @@ -52,7 +62,6 @@ Boston, MA 02111-1307, USA. */ #define GLOBAL0(U,X) CONCAT(U,__##X) #define GLOBAL(X) GLOBAL0(__USER_LABEL_PREFIX__,X) -#define ALIAS(X,Y) .global GLOBAL(X); .set GLOBAL(X),GLOBAL(Y) #if defined __SH5__ && ! defined __SH4_NOFPU__ && ! defined (__LITTLE_ENDIAN__) #define FMOVD_WORKS diff --git a/gcc/config/sparc/linux.h b/gcc/config/sparc/linux.h index 5b7244707d2..feec79c06b7 100644 --- a/gcc/config/sparc/linux.h +++ b/gcc/config/sparc/linux.h @@ -209,8 +209,6 @@ do { \ #undef CTORS_SECTION_ASM_OP #undef DTORS_SECTION_ASM_OP -#define TARGET_ASM_FILE_END file_end_indicate_exec_stack - /* Determine whether the the entire c99 runtime is present in the runtime library. */ #define TARGET_C99_FUNCTIONS 1 @@ -233,3 +231,6 @@ do { \ change their minds. */ #undef SPARC_RELAXED_ORDERING #define SPARC_RELAXED_ORDERING true + +#undef NEED_INDICATE_EXEC_STACK +#define NEED_INDICATE_EXEC_STACK 1 diff --git a/gcc/config/sparc/linux64.h b/gcc/config/sparc/linux64.h index 4a266dfc61c..ac3a21ac877 100644 --- a/gcc/config/sparc/linux64.h +++ b/gcc/config/sparc/linux64.h @@ -343,8 +343,6 @@ do { \ #undef CTORS_SECTION_ASM_OP #undef DTORS_SECTION_ASM_OP -#define TARGET_ASM_FILE_END file_end_indicate_exec_stack - /* Determine whether the the entire c99 runtime is present in the runtime library. */ #define TARGET_C99_FUNCTIONS 1 @@ -367,3 +365,6 @@ do { \ change their minds. */ #undef SPARC_RELAXED_ORDERING #define SPARC_RELAXED_ORDERING true + +#undef NEED_INDICATE_EXEC_STACK +#define NEED_INDICATE_EXEC_STACK 1 diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 43aa2f17c87..faadcf700f6 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -311,7 +311,8 @@ static rtx sparc_builtin_saveregs (void); static int epilogue_renumber (rtx *, int); static bool sparc_assemble_integer (rtx, unsigned int, int); static int set_extends (rtx); -static void load_pic_register (void); +static void emit_pic_helper (void); +static void load_pic_register (bool); static int save_or_restore_regs (int, int, rtx, int, int); static void emit_save_regs (void); static void emit_restore_regs (void); @@ -359,6 +360,7 @@ static bool sparc_pass_by_reference (CUMULATIVE_ARGS *, static int sparc_arg_partial_bytes (CUMULATIVE_ARGS *, enum machine_mode, tree, bool); static void sparc_dwarf_handle_frame_unspec (const char *, rtx, int); +static void sparc_file_end (void); #ifdef SUBTARGET_ATTRIBUTE_TABLE const struct attribute_spec sparc_attribute_table[]; #endif @@ -501,6 +503,9 @@ enum processor_type sparc_cpu; #undef TARGET_RELAXED_ORDERING #define TARGET_RELAXED_ORDERING SPARC_RELAXED_ORDERING +#undef TARGET_ASM_FILE_END +#define TARGET_ASM_FILE_END sparc_file_end + struct gcc_target targetm = TARGET_INITIALIZER; /* Validate and override various options, and do some machine dependent @@ -3351,13 +3356,12 @@ sparc_cannot_force_const_mem (rtx x) } } -/* The table we use to reference PIC data. */ +/* PIC support. */ +static GTY(()) char pic_helper_symbol_name[256]; +static GTY(()) rtx pic_helper_symbol; +static GTY(()) bool pic_helper_emitted_p = false; static GTY(()) rtx global_offset_table; -/* The function we use to get at it. */ -static GTY(()) rtx add_pc_to_pic_symbol; -static GTY(()) char add_pc_to_pic_symbol_name[256]; - /* Ensure that we are not using patterns that are not OK with PIC. */ int @@ -3492,7 +3496,7 @@ legitimate_pic_operand_p (rtx x) int legitimate_address_p (enum machine_mode mode, rtx addr, int strict) { - rtx rs1 = NULL, rs2 = NULL, imm1 = NULL, imm2; + rtx rs1 = NULL, rs2 = NULL, imm1 = NULL; if (REG_P (addr) || GET_CODE (addr) == SUBREG) rs1 = addr; @@ -3556,7 +3560,6 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) && ! TARGET_CM_MEDMID && RTX_OK_FOR_OLO10_P (rs2)) { - imm2 = rs2; rs2 = NULL; imm1 = XEXP (rs1, 1); rs1 = XEXP (rs1, 0); @@ -3572,25 +3575,10 @@ legitimate_address_p (enum machine_mode mode, rtx addr, int strict) if (! CONSTANT_P (imm1) || tls_symbolic_operand (rs1)) return 0; - if (USE_AS_OFFSETABLE_LO10) - { - /* We can't allow TFmode, because an offset greater than or equal to - the alignment (8) may cause the LO_SUM to overflow if !v9. */ - if (mode == TFmode && ! TARGET_V9) - return 0; - } - else - { - /* We prohibit LO_SUM for TFmode when there are no quad move insns - and we consequently need to split. We do this because LO_SUM - is not an offsettable address. If we get the situation in reload - where source and destination of a movtf pattern are both MEMs with - LO_SUM address, then only one of them gets converted to an - offsettable address. */ - if (mode == TFmode - && ! (TARGET_FPU && TARGET_ARCH64 && TARGET_HARD_QUAD)) - return 0; - } + /* We can't allow TFmode in 32-bit mode, because an offset greater + than the alignment (8) may cause the LO_SUM to overflow. */ + if (mode == TFmode && TARGET_ARCH32) + return 0; } else if (GET_CODE (addr) == CONST_INT && SMALL_INT (addr)) return 1; @@ -3947,46 +3935,57 @@ legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED, enum machine_mode mode) return x; } -/* Emit the special PIC prologue. */ +/* Emit the special PIC helper function. */ static void -load_pic_register (void) +emit_pic_helper (void) { - int orig_flag_pic = flag_pic; + const char *pic_name = reg_names[REGNO (pic_offset_table_rtx)]; + int align; - /* If we haven't emitted the special helper function, do so now. */ - if (add_pc_to_pic_symbol_name[0] == 0) - { - const char *pic_name = reg_names[REGNO (pic_offset_table_rtx)]; - int align; + text_section (); - ASM_GENERATE_INTERNAL_LABEL (add_pc_to_pic_symbol_name, "LADDPC", 0); - text_section (); + align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT); + if (align > 0) + ASM_OUTPUT_ALIGN (asm_out_file, align); + ASM_OUTPUT_LABEL (asm_out_file, pic_helper_symbol_name); + if (flag_delayed_branch) + fprintf (asm_out_file, "\tjmp\t%%o7+8\n\t add\t%%o7, %s, %s\n", + pic_name, pic_name); + else + fprintf (asm_out_file, "\tadd\t%%o7, %s, %s\n\tjmp\t%%o7+8\n\t nop\n", + pic_name, pic_name); - align = floor_log2 (FUNCTION_BOUNDARY / BITS_PER_UNIT); - if (align > 0) - ASM_OUTPUT_ALIGN (asm_out_file, align); - ASM_OUTPUT_LABEL (asm_out_file, add_pc_to_pic_symbol_name); - if (flag_delayed_branch) - fprintf (asm_out_file, "\tjmp %%o7+8\n\t add\t%%o7, %s, %s\n", - pic_name, pic_name); - else - fprintf (asm_out_file, "\tadd\t%%o7, %s, %s\n\tjmp %%o7+8\n\t nop\n", - pic_name, pic_name); + pic_helper_emitted_p = true; +} + +/* Emit code to load the PIC register. */ + +static void +load_pic_register (bool delay_pic_helper) +{ + int orig_flag_pic = flag_pic; + + /* If we haven't initialized the special PIC symbols, do so now. */ + if (!pic_helper_symbol_name[0]) + { + ASM_GENERATE_INTERNAL_LABEL (pic_helper_symbol_name, "LADDPC", 0); + pic_helper_symbol = gen_rtx_SYMBOL_REF (Pmode, pic_helper_symbol_name); + global_offset_table = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_"); } - /* Initialize every time through, since we can't easily - know this to be permanent. */ - global_offset_table = gen_rtx_SYMBOL_REF (Pmode, "_GLOBAL_OFFSET_TABLE_"); - add_pc_to_pic_symbol = gen_rtx_SYMBOL_REF (Pmode, add_pc_to_pic_symbol_name); + /* If we haven't emitted the special PIC helper function, do so now unless + we are requested to delay it. */ + if (!delay_pic_helper && !pic_helper_emitted_p) + emit_pic_helper (); flag_pic = 0; if (TARGET_ARCH64) emit_insn (gen_load_pcrel_symdi (pic_offset_table_rtx, global_offset_table, - add_pc_to_pic_symbol)); + pic_helper_symbol)); else emit_insn (gen_load_pcrel_symsi (pic_offset_table_rtx, global_offset_table, - add_pc_to_pic_symbol)); + pic_helper_symbol)); flag_pic = orig_flag_pic; /* Need to emit this whether or not we obey regdecls, @@ -4635,7 +4634,7 @@ sparc_expand_prologue (void) /* Load the PIC register if needed. */ if (flag_pic && current_function_uses_pic_offset_table) - load_pic_register (); + load_pic_register (false); } /* This function generates the assembly code for function entry, which boils @@ -9052,7 +9051,9 @@ sparc_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED, { spill_reg = gen_rtx_REG (word_mode, 15); /* %o7 */ start_sequence (); - load_pic_register (); /* clobbers %o7 */ + /* Delay emitting the PIC helper function because it needs to + change the section and we are emitting assembly code. */ + load_pic_register (true); /* clobbers %o7 */ scratch = legitimize_pic_address (funexp, Pmode, scratch); seq = get_insns (); end_sequence (); @@ -9203,4 +9204,15 @@ sparc_output_dwarf_dtprel (FILE *file, int size, rtx x) fputs (")", file); } +static +void sparc_file_end (void) +{ + /* If we haven't emitted the special PIC helper function, do so now. */ + if (pic_helper_symbol_name[0] && !pic_helper_emitted_p) + emit_pic_helper (); + + if (NEED_INDICATE_EXEC_STACK) + file_end_indicate_exec_stack (); +} + #include "gt-sparc.h" diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index cddf48a927d..e7f19a3ecb9 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -214,6 +214,9 @@ extern enum cmodel sparc_cmodel; total memory ordering (TMO). */ #define SPARC_RELAXED_ORDERING false +/* Do not use the .note.GNU-stack convention by default. */ +#define NEED_INDICATE_EXEC_STACK 0 + /* This is call-clobbered in the normal ABI, but is reserved in the home grown (aka upward compatible) embedded ABI. */ #define EMBMEDANY_BASE_REG "%g4" @@ -1677,7 +1680,7 @@ extern char leaf_reg_remap[]; /* Define the size of space to allocate for the return value of an untyped_call. */ -#define APPLY_RESULT_SIZE 16 +#define APPLY_RESULT_SIZE (TARGET_ARCH64 ? 24 : 16) /* 1 if N is a possible register number for function argument passing. On SPARC, these are the "output" registers. v9 also uses %f0-%f31. */ @@ -1795,7 +1798,7 @@ extern GTY(()) rtx sparc_compare_op1; case of a global register variable occupying more than one register we prefix the second and following registers with .gnu.part1. etc. */ -extern char sparc_hard_reg_printed[8]; +extern GTY(()) char sparc_hard_reg_printed[8]; #ifdef HAVE_AS_REGISTER_PSEUDO_OP #define ASM_DECLARE_REGISTER_GLOBAL(FILE, DECL, REGNO, NAME) \ diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md index 6153b5adbe6..dcb5de11385 100644 --- a/gcc/config/sparc/sparc.md +++ b/gcc/config/sparc/sparc.md @@ -7626,21 +7626,22 @@ (define_expand "untyped_call" [(parallel [(call (match_operand 0 "" "") (const_int 0)) - (match_operand 1 "" "") + (match_operand:BLK 1 "memory_operand" "") (match_operand 2 "" "")])] "" { - int i; + rtx valreg1 = gen_rtx_REG (DImode, 8); + rtx valreg2 = gen_rtx_REG (TARGET_ARCH64 ? TFmode : DFmode, 32); + rtx result = operands[1]; /* Pass constm1 to indicate that it may expect a structure value, but we don't know what size it is. */ emit_call_insn (GEN_CALL (operands[0], const0_rtx, NULL, constm1_rtx)); - for (i = 0; i < XVECLEN (operands[2], 0); i++) - { - rtx set = XVECEXP (operands[2], 0, i); - emit_move_insn (SET_DEST (set), SET_SRC (set)); - } + /* Save the function value registers. */ + emit_move_insn (adjust_address (result, DImode, 0), valreg1); + emit_move_insn (adjust_address (result, TARGET_ARCH64 ? TFmode : DFmode, 8), + valreg2); /* The optimizer does not know that the call sets the function value registers we stored in the result block. We avoid problems by diff --git a/gcc/config/t-darwin b/gcc/config/t-darwin index ab2e6ae05c1..fc8735bd9c0 100644 --- a/gcc/config/t-darwin +++ b/gcc/config/t-darwin @@ -22,4 +22,8 @@ LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-darwin.c \ $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.c -TARGET_LIBGCC2_CFLAGS = -fPIC +# -pipe because there's an assembler bug, 4077127, which causes +# it to not properly process the first # directive, causing temporary +# file names to appear in stabs, causing the bootstrap to fail. Using -pipe +# works around this by not having any temporary file names. +TARGET_LIBGCC2_CFLAGS = -fPIC -pipe diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c index ca5fb6ac629..38dd8155487 100644 --- a/gcc/config/vax/vax.c +++ b/gcc/config/vax/vax.c @@ -50,7 +50,6 @@ static void vax_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree); static int vax_address_cost_1 (rtx); static int vax_address_cost (rtx); -static int vax_rtx_costs_1 (rtx, enum rtx_code, enum rtx_code); static bool vax_rtx_costs (rtx, int, int, int *); static rtx vax_struct_value_rtx (tree, int); @@ -529,179 +528,228 @@ vax_address_cost (rtx x) /* Cost of an expression on a VAX. This version has costs tuned for the CVAX chip (found in the VAX 3 series) with comments for variations on - other models. */ + other models. -static int -vax_rtx_costs_1 (register rtx x, enum rtx_code code, enum rtx_code outer_code) + FIXME: The costs need review, particularly for TRUNCATE, FLOAT_EXTEND + and FLOAT_TRUNCATE. We need a -mcpu option to allow provision of + costs on a per cpu basis. */ + +static bool +vax_rtx_costs (rtx x, int code, int outer_code, int *total) { enum machine_mode mode = GET_MODE (x); - register int c; - int i = 0; /* may be modified in switch */ + int i = 0; /* may be modified in switch */ const char *fmt = GET_RTX_FORMAT (code); /* may be modified in switch */ switch (code) { /* On a VAX, constants from 0..63 are cheap because they can use the - 1 byte literal constant format. compare to -1 should be made cheap - so that decrement-and-branch insns can be formed more easily (if - the value -1 is copied to a register some decrement-and-branch + 1 byte literal constant format. Compare to -1 should be made cheap + so that decrement-and-branch insns can be formed more easily (if + the value -1 is copied to a register some decrement-and-branch patterns will not match). */ case CONST_INT: if (INTVAL (x) == 0) - return 0; + return true; if (outer_code == AND) - return ((unsigned HOST_WIDE_INT) ~INTVAL (x) <= 077) ? 1 : 2; - if ((unsigned HOST_WIDE_INT) INTVAL (x) <= 077) - return 1; - if (outer_code == COMPARE && INTVAL (x) == -1) - return 1; - if (outer_code == PLUS && (unsigned HOST_WIDE_INT) -INTVAL (x) <= 077) - return 1; + { + *total = ((unsigned HOST_WIDE_INT) ~INTVAL (x) <= 077) ? 1 : 2; + return true; + } + if ((unsigned HOST_WIDE_INT) INTVAL (x) <= 077 + || (outer_code == COMPARE + && INTVAL (x) == -1) + || ((outer_code == PLUS || outer_code == MINUS) + && (unsigned HOST_WIDE_INT) -INTVAL (x) <= 077)) + { + *total = 1; + return true; + } /* FALLTHRU */ case CONST: case LABEL_REF: case SYMBOL_REF: - return 3; + *total = 3; + return true; case CONST_DOUBLE: if (GET_MODE_CLASS (GET_MODE (x)) == MODE_FLOAT) - return vax_float_literal (x) ? 5 : 8; + *total = vax_float_literal (x) ? 5 : 8; else - return (((CONST_DOUBLE_HIGH (x) == 0 - && (unsigned HOST_WIDE_INT) CONST_DOUBLE_LOW (x) < 64) - || (outer_code == PLUS - && CONST_DOUBLE_HIGH (x) == -1 \ - && (unsigned HOST_WIDE_INT)-CONST_DOUBLE_LOW (x) < 64)) - ? 2 : 5); + *total = ((CONST_DOUBLE_HIGH (x) == 0 + && (unsigned HOST_WIDE_INT) CONST_DOUBLE_LOW (x) < 64) + || (outer_code == PLUS + && CONST_DOUBLE_HIGH (x) == -1 + && (unsigned HOST_WIDE_INT)-CONST_DOUBLE_LOW (x) < 64)) + ? 2 : 5; + return true; case POST_INC: - return 2; + *total = 2; + return true; /* Implies register operand. */ + case PRE_DEC: - return 3; + *total = 3; + return true; /* Implies register operand. */ + case MULT: switch (mode) { case DFmode: - c = 16; /* 4 on VAX 9000 */ + *total = 16; /* 4 on VAX 9000 */ break; case SFmode: - c = 9; /* 4 on VAX 9000, 12 on VAX 2 */ + *total = 9; /* 4 on VAX 9000, 12 on VAX 2 */ break; case DImode: - c = 16; /* 6 on VAX 9000, 28 on VAX 2 */ + *total = 16; /* 6 on VAX 9000, 28 on VAX 2 */ break; case SImode: case HImode: case QImode: - c = 10; /* 3-4 on VAX 9000, 20-28 on VAX 2 */ + *total = 10; /* 3-4 on VAX 9000, 20-28 on VAX 2 */ break; default: - return MAX_COST; /* Mode is not supported. */ + *total = MAX_COST; /* Mode is not supported. */ + return true; } break; + case UDIV: if (mode != SImode) - return MAX_COST; /* Mode is not supported. */ - c = 17; + { + *total = MAX_COST; /* Mode is not supported. */ + return true; + } + *total = 17; break; + case DIV: if (mode == DImode) - c = 30; /* highly variable */ + *total = 30; /* Highly variable. */ else if (mode == DFmode) /* divide takes 28 cycles if the result is not zero, 13 otherwise */ - c = 24; + *total = 24; else - c = 11; /* 25 on VAX 2 */ + *total = 11; /* 25 on VAX 2 */ break; + case MOD: - c = 23; + *total = 23; break; + case UMOD: if (mode != SImode) - return MAX_COST; /* Mode is not supported. */ - c = 29; + { + *total = MAX_COST; /* Mode is not supported. */ + return true; + } + *total = 29; break; + case FLOAT: - c = 6 + (mode == DFmode) + (GET_MODE (XEXP (x, 0)) != SImode); - /* 4 on VAX 9000 */ + *total = (6 /* 4 on VAX 9000 */ + + (mode == DFmode) + (GET_MODE (XEXP (x, 0)) != SImode)); break; + case FIX: - c = 7; /* 17 on VAX 2 */ + *total = 7; /* 17 on VAX 2 */ break; + case ASHIFT: case LSHIFTRT: case ASHIFTRT: if (mode == DImode) - c = 12; + *total = 12; else - c = 10; /* 6 on VAX 9000 */ + *total = 10; /* 6 on VAX 9000 */ break; + case ROTATE: case ROTATERT: - c = 6; /* 5 on VAX 2, 4 on VAX 9000 */ + *total = 6; /* 5 on VAX 2, 4 on VAX 9000 */ if (GET_CODE (XEXP (x, 1)) == CONST_INT) - fmt = "e"; /* all constant rotate counts are short */ + fmt = "e"; /* all constant rotate counts are short */ break; + case PLUS: case MINUS: - c = (mode == DFmode) ? 13 : 8; /* 6/8 on VAX 9000, 16/15 on VAX 2 */ + *total = (mode == DFmode) ? 13 : 8; /* 6/8 on VAX 9000, 16/15 on VAX 2 */ /* Small integer operands can use subl2 and addl2. */ if ((GET_CODE (XEXP (x, 1)) == CONST_INT) && (unsigned HOST_WIDE_INT)(INTVAL (XEXP (x, 1)) + 63) < 127) fmt = "e"; break; + case IOR: case XOR: - c = 3; + *total = 3; break; + case AND: /* AND is special because the first operand is complemented. */ - c = 3; + *total = 3; if (GET_CODE (XEXP (x, 0)) == CONST_INT) { if ((unsigned HOST_WIDE_INT)~INTVAL (XEXP (x, 0)) > 63) - c = 4; + *total = 4; fmt = "e"; i = 1; } break; + case NEG: if (mode == DFmode) - return 9; + *total = 9; else if (mode == SFmode) - return 6; + *total = 6; else if (mode == DImode) - return 4; + *total = 4; + else + *total = 2; + break; + case NOT: - return 2; + *total = 2; + break; + case ZERO_EXTRACT: case SIGN_EXTRACT: - c = 15; + *total = 15; break; + case MEM: if (mode == DImode || mode == DFmode) - c = 5; /* 7 on VAX 2 */ + *total = 5; /* 7 on VAX 2 */ else - c = 3; /* 4 on VAX 2 */ + *total = 3; /* 4 on VAX 2 */ x = XEXP (x, 0); - if (GET_CODE (x) == REG || GET_CODE (x) == POST_INC) - return c; - return c + vax_address_cost_1 (x); - default: - c = 3; + if (GET_CODE (x) != REG && GET_CODE (x) != POST_INC) + *total += vax_address_cost_1 (x); + return true; + + case FLOAT_EXTEND: + case FLOAT_TRUNCATE: + case TRUNCATE: + *total = 3; /* FIXME: Costs need to be checked */ break; + + default: + return false; } /* Now look inside the expression. Operands which are not registers or short constants add to the cost. FMT and I may have been adjusted in the switch above for instructions - which require special handling */ + which require special handling. */ while (*fmt++ == 'e') { - register rtx op = XEXP (x, i++); + rtx op = XEXP (x, i); + + i += 1; code = GET_CODE (op); /* A NOT is likely to be found as the first operand of an AND @@ -715,12 +763,12 @@ vax_rtx_costs_1 (register rtx x, enum rtx_code code, enum rtx_code outer_code) case CONST_INT: if ((unsigned HOST_WIDE_INT)INTVAL (op) > 63 && GET_MODE (x) != QImode) - c += 1; /* 2 on VAX 2 */ + *total += 1; /* 2 on VAX 2 */ break; case CONST: case LABEL_REF: case SYMBOL_REF: - c += 1; /* 2 on VAX 2 */ + *total += 1; /* 2 on VAX 2 */ break; case CONST_DOUBLE: if (GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT) @@ -728,37 +776,30 @@ vax_rtx_costs_1 (register rtx x, enum rtx_code code, enum rtx_code outer_code) /* Registers are faster than floating point constants -- even those constants which can be encoded in a single byte. */ if (vax_float_literal (op)) - c++; + *total += 1; else - c += (GET_MODE (x) == DFmode) ? 3 : 2; + *total += (GET_MODE (x) == DFmode) ? 3 : 2; } else { if (CONST_DOUBLE_HIGH (op) != 0 || (unsigned)CONST_DOUBLE_LOW (op) > 63) - c += 2; + *total += 2; } break; case MEM: - c += 1; /* 2 on VAX 2 */ + *total += 1; /* 2 on VAX 2 */ if (GET_CODE (XEXP (op, 0)) != REG) - c += vax_address_cost_1 (XEXP (op, 0)); + *total += vax_address_cost_1 (XEXP (op, 0)); break; case REG: case SUBREG: break; default: - c += 1; + *total += 1; break; } } - return c; -} - -static bool -vax_rtx_costs (rtx x, int code, int outer_code, int * total) -{ - *total = vax_rtx_costs_1 (x, code, outer_code); return true; } diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 01c0caef91d..776fb5feb23 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -209,6 +209,15 @@ extern unsigned xtensa_current_frame_size; bitfields and the structures that contain them. */ #define PCC_BITFIELD_TYPE_MATTERS 1 +/* Disable the use of word-sized or smaller complex modes for structures, + and for function arguments in particular, where they cause problems with + register a7. The xtensa_copy_incoming_a7 function assumes that there is + a single reference to an argument in a7, but with small complex modes the + real and imaginary components may be extracted separately, leading to two + uses of the register, only one of which would be replaced. */ +#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) \ + ((MODE) == CQImode || (MODE) == CHImode) + /* Align string constants and constructors to at least a word boundary. The typical use of this macro is to increase alignment for string constants to be word aligned so that 'strcpy' calls that copy diff --git a/gcc/configure b/gcc/configure index a59f4520531..e706ca6a453 100755 --- a/gcc/configure +++ b/gcc/configure @@ -1032,7 +1032,7 @@ esac else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi - cd "$ac_popdir" + cd $ac_popdir done fi @@ -1384,7 +1384,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu #Set to 1 on a release branch -is_release= +is_release=1 # Determine the host, build, and target systems ac_aux_dir= @@ -2401,7 +2401,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2459,7 +2460,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2575,7 +2577,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2629,7 +2632,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2674,7 +2678,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -2718,7 +2723,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3140,7 +3146,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3211,7 +3218,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3270,7 +3278,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3352,7 +3361,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3522,7 +3532,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3587,7 +3598,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3649,7 +3661,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3689,7 +3702,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3745,7 +3759,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3785,7 +3800,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3849,7 +3865,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -3880,8 +3897,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -3993,7 +4012,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4055,7 +4075,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4095,7 +4116,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4151,7 +4173,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4191,7 +4214,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4255,7 +4279,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4286,8 +4311,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -4399,7 +4426,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4461,7 +4489,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4501,7 +4530,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4557,7 +4587,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4597,7 +4628,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4661,7 +4693,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4692,8 +4725,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -4805,7 +4840,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4867,7 +4903,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4907,7 +4944,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -4963,7 +5001,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5003,7 +5042,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5067,7 +5107,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5098,8 +5139,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -5212,7 +5255,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5274,7 +5318,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5314,7 +5359,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5370,7 +5416,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5410,7 +5457,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5474,7 +5522,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5505,8 +5554,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -5620,7 +5671,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5682,7 +5734,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5722,7 +5775,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5778,7 +5832,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5818,7 +5873,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5882,7 +5938,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -5913,8 +5970,10 @@ See \`config.log' for more details." >&2;} esac else if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 -echo "$as_me: error: internal error: not reached in cross-compile" >&2;} + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF @@ -6030,7 +6089,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6080,7 +6140,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6138,7 +6199,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -6356,7 +6418,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7326,7 +7389,7 @@ if test "${gcc_cv_prog_makeinfo_modern+set}" = set; then else ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` - echo "configure:7329: version of makeinfo is $ac_prog_version" >&5 + echo "configure:7392: version of makeinfo is $ac_prog_version" >&5 case $ac_prog_version in '') gcc_cv_prog_makeinfo_modern=no;; 4.[2-9]*) @@ -7581,7 +7644,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7651,7 +7715,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7816,7 +7881,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7877,7 +7943,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -7947,7 +8014,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8222,7 +8290,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8295,7 +8364,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8336,7 +8406,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8538,7 +8609,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8612,7 +8684,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8666,7 +8739,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8744,7 +8818,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8798,7 +8873,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8866,7 +8942,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -8996,7 +9073,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9117,7 +9195,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9468,7 +9547,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9585,7 +9665,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9697,7 +9778,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -9855,7 +9937,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10727,7 +10810,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10777,7 +10861,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10867,7 +10952,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10936,7 +11022,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -10999,7 +11086,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11102,7 +11190,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11187,7 +11276,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11256,7 +11346,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11331,7 +11422,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11414,7 +11506,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11490,7 +11583,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11556,7 +11650,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -11692,7 +11787,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12001,7 +12097,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12267,7 +12364,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -12321,7 +12419,8 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? @@ -16250,6 +16349,11 @@ esac + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ @@ -16288,12 +16392,6 @@ echo "$as_me: error: cannot find input file: $f" >&2;} fi;; esac done` || { (exit 1); exit 1; } - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub diff --git a/gcc/configure.ac b/gcc/configure.ac index 6c81f210474..99f1b9a3c9e 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -31,7 +31,7 @@ AC_CONFIG_SRCDIR(tree.c) AC_CONFIG_HEADER(auto-host.h:config.in) #Set to 1 on a release branch -is_release= +is_release=1 # Determine the host, build, and target systems AC_CANONICAL_BUILD diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d11e3215997..d23d3f2adb5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,243 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-16 Mark Mitchell + + PR c++/21025 + * typeck.c (cxx_sizeof_or_alignof_type): Check whether the type to + which sizeof/alignof is dependent, rather than just whether we are + processing_template_decl. + +2005-04-14 Dale Johannesen + + * tree.c (cp_tree_equal): Handle SSA_NAME. + +2005-04-08 Mark Mitchell + + PR c++/20905 + * parser.c (cp_parser_type_specifier_seq): Add is_condition + parameter. + (cp_parser_new_type_id): Pass it. + (cp_parser_condition): Likewise. + (cp_parser_conversion_type_id): Likewise. + (cp_parser_type_id): Likewise. + (cp_parser_type_specifier_seq): In a condition, do not allow + invalid type-specifier combinations. + (cp_parser_exception_declaration): Adjust call to + cp_parser_type_specifier_seq. + + * cp-tree.def (TINST_LEVEL): Document TINST_IN_SYSTEM_HEADER_P. + * cp-tree.h (struct tinst_level): Add in_system_header_p. + (TINST_IN_SYSTEM_HEADER_P): New macro. + (make_tinst_level): Remove. + * pt.c (lookup_template_class): Preserve DECL_IN_SYSTEM_HEADER on + the instantiated class. + (push_tinst_level): Do not use make_tinst_level. Set + TINST_IN_SYSTEM_HEADER_P. + (pop_tinst_level): Likewise. + (instantiate_class_template): Set in_system_header. + (instantiate_pending_templates): Likewise. + * tree.c (make_tinst_level): Remove. + +2005-04-06 Joseph S. Myers + + * decl.c (start_decl): Apply pending #pragma weak regardless of + scope. + +2005-04-06 Mark Mitchell + + PR c++/20212 + * pt.c (regenerate_decl_from_template): Copy attributes for + parameters from the pattern to the instantiation. + +2005-04-05 Mark Mitchell + + PR c++/20734 + * cp-tree.def (OFFSET_REF): Correct comments. + * init.c (build_offset_ref): Remove misleading comment. + * typeck.c (build_unary_op): Handle pointer-to-member creation + here, rather than ... + (unary_complex_lvalue): ... here. + +2005-04-06 Jason Merrill + + PR c++/19312 + * tree.c (stabilize_init): Don't bother trying to stabilize + something with no side-effects. + +2005-04-05 Mark Mitchell + + PR c++/20763 + * decl.c (grokdeclarator): Correct attribute handling. + + PR c++/19159 + * decl2.c (import_export_decl): Use non-COMDAT external linkage + for virtual tables, typeinfo, etc. that will be emitted in only + one translation unit on systems without weak symbols. + +2005-04-05 Steven Bosscher + + * typeck.c (comptypes): First determine if the types are compatible + from a target-independent point of view. Check target attributes + last. + +2005-04-04 Mark Mitchell + + PR c++/20679 + * parser.c (cp_parser_template_name): Fix thinko. + +2005-04-03 Gabriel Dos Reis + + PR c++/18644 + * call.c (build_new_op): Remove check for -Wsynth. + +2005-03-29 Richard Henderson + + PR c/20519 + * decl.c (cp_complete_array_type): Rename from complete_array_type. + Use the new complete_array_type in c-common.c. Update all callers. + * cp-tree.h (cp_complete_array_type): Update to match. + +2005-03-24 Geoffrey Keating + + * typeck.c (build_static_cast_1): Allow scalar_cast between + any integral, floating, or enumeration type. + +2005-03-22 Mark Mitchell + + * parser.c (cp_parser_warn_min_max): New function. + (cp_parser_binary_expression): Use it. + (cp_parser_assignment_operator_opt): Likewise. + (cp_parser_operator): Likewise. + +2005-03-22 Volker Reichelt + + PR c++/19980 + * decl.c (start_preparsed_function): Robustify. + +2005-03-22 Volker Reichelt + + PR c++/20499 + * parser.c (cp_parser_class_head): Return NULL_TREE when + encountering a redefinition. + +2005-03-22 Nathan Sidwell + + PR c++/20465 + PR c++/20381 + * typeck.c (build_ptrmemfunc): Allow OFFSET_REF when processing a + template. + +2005-03-22 Paolo Carlini + + PR c++/20461 + PR c++/20536 + * init.c (emit_mem_initializers): Don't crash on undefined + types. + +2005-03-22 Paolo Carlini + + PR c++/20463 + * parser.c (cp_parser_diagnose_invalid_type_name): + Check TYPE_BINFO (current_class_type) before attempting + to emit inform messages. + +2005-03-21 Paolo Carlini + + PR c++/20147 + * semantics.c (finish_stmt_expr_expr): Return immediately + if error_operand_p (expr). + +2005-03-19 Kriang Lerdsuwanakij + + PR c++/20240 + * decl.c (decls_match): Compare context of VAR_DECL. + +2005-03-19 Kriang Lerdsuwanakij + + PR c++/20333 + * parser.c (cp_parser_postfix_expression) : + Check the return value of cp_parser_nested_name_specifier. + +2005-03-17 Nathan Sidwell + + PR c++/20186 + * pt.c (contains_dependent_cast_p): Remove. + (fold_non_dependent_expr): Don't use it. + (value_dependent_expression_p): Reference_exprs can be dependent. + +2005-03-13 Mark Mitchell + + PR c++/20157 + * pt.c (determine_specialization): Reject non-specializations. + +2005-03-10 Jakub Jelinek + + PR c++/18384, c++/18327 + * decl.c (reshape_init_array): Use UHWI type for max_index_cst + and index. Convert max_index to size_type_node if it isn't + host_integerp (, 1). + +2005-03-09 Mark Mitchell + + PR c++/20208 + * pt.c (tsubst_decl): Apply array-to-pointer and + function-to-pointer conversions to function arguments. + (regenerate_decl_from_template): Likewise. + +2005-03-08 Nathan Sidwell + + PR c++/20186 + * pt.c (contains_dependent_cast_p): New. + (fold_non_dependent_expr): Call it. + +2005-03-08 Mark Mitchell + + PR c++/20142 + * init.c (build_vec_init): When determining whether or not the + element type has an asignment operator, look through all array + dimensions. + +2005-03-07 Mark Mitchell + + * class.c (finish_struct_1): Do not warn about non-virtual + destructors in Java classes. + +2005-03-06 Kriang Lerdsuwanakij + + PR c++/19311 + * init.c (build_offset_ref): Don't build non-dependent SCOPE_REF. + * pt.c (build_non_dependent_expr): Don't build NON_DEPENDENT_EXPR + for OFFSET_TYPE. + * typeck.c (build_x_unary_op): Don't build non-dependent SCOPE_REF. + Also set PTRMEM_OK_P for NON_DEPENDENT_EXPR. + (build_unary_op): Handle building ADDR_EXPR of OFFSET_REF inside + template. + +2005-03-02 Alexandre Oliva + + * name-lookup.c (push_overloaded_decl): Don't error if the new + decl matches the old one. + * decl.c (redeclaration_error_message): Likewise. + +2005-03-01 Nathan Sidwell + + PR c++/20232 + * class.c (update_vtable_entry_for_fn): Don't crash on invalid + covariancy. + + * cp-tree.g (THUNK_TARGET): Expand comment. + * method.c (use_thunk): Make sure we also use the target, if that + is a thunk. + +2005-02-27 Jakub Jelinek + + PR c++/20206 + * decl.c (cxx_comdat_group): Put thunks for + TARGET_USE_LOCAL_THUNK_ALIAS_P (function) functions into the same + comdat group as the thunk target. + 2005-02-24 Volker Reichelt * call.c, class.c, cp-tree.h, decl2.c, error.c, init.c, mangle.c, @@ -65,7 +305,7 @@ Add qualifiers when declaring a typedef of a function type. Member function pointers pick up the qualifiers of the typedef used to declare them. - Don't complain about creating cv-qualified function types. + Don't complain about creating cv-qualified function types. Complain about qualified function typedefs that are used to declare non-static member functions or free functions. Use cp_apply_type_quals_to_decl. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 5737e4fc0a1..131e175631e 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3750,20 +3750,6 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3, if (overloaded_p) *overloaded_p = true; - if (warn_synth - && fnname == ansi_assopname (NOP_EXPR) - && DECL_ARTIFICIAL (cand->fn) - && candidates->next - && ! candidates->next->next) - { - warning ("using synthesized %q#D for copy assignment", - cand->fn); - cp_warning_at (" where cfront would use %q#D", - cand == candidates - ? candidates->next->fn - : candidates->fn); - } - result = build_over_call (cand, LOOKUP_NORMAL); } else diff --git a/gcc/cp/class.c b/gcc/cp/class.c index f6ba914cb84..89346d6cf4a 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -2048,14 +2048,17 @@ update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals, tree thunk_binfo, base_binfo; /* Find the base binfo within the overriding function's - return type. */ + return type. We will always find a thunk_binfo, except + when the covariancy is invalid (which we will have + already diagnosed). */ for (base_binfo = TYPE_BINFO (base_return), thunk_binfo = TYPE_BINFO (over_return); - !SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo), - BINFO_TYPE (base_binfo)); + thunk_binfo; thunk_binfo = TREE_CHAIN (thunk_binfo)) - continue; - + if (SAME_BINFO_TYPE_P (BINFO_TYPE (thunk_binfo), + BINFO_TYPE (base_binfo))) + break; + /* See if virtual inheritance is involved. */ for (virtual_offset = thunk_binfo; virtual_offset; @@ -2063,7 +2066,8 @@ update_vtable_entry_for_fn (tree t, tree binfo, tree fn, tree* virtuals, if (BINFO_VIRTUAL_P (virtual_offset)) break; - if (virtual_offset || !BINFO_OFFSET_ZEROP (thunk_binfo)) + if (virtual_offset + || (thunk_binfo && !BINFO_OFFSET_ZEROP (thunk_binfo))) { tree offset = convert (ssizetype, BINFO_OFFSET (thunk_binfo)); @@ -5025,7 +5029,9 @@ finish_struct_1 (tree t) /* Build the VTT for T. */ build_vtt (t); - if (warn_nonvdtor && TYPE_POLYMORPHIC_P (t)) + /* This warning does not make sense for Java classes, since they + cannot have destructors. */ + if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t)) { tree dtor; diff --git a/gcc/cp/cp-tree.def b/gcc/cp/cp-tree.def index 1abc77bfcad..b7c580ab5b8 100644 --- a/gcc/cp/cp-tree.def +++ b/gcc/cp/cp-tree.def @@ -31,10 +31,8 @@ Boston, MA 02111-1307, USA. */ BASELINK, or TEMPLATE_ID_EXPR (corresponding to `m'). The expression is a pointer-to-member if its address is taken, - but simply denotes a member of the object if its address isnot - taken. In the latter case, resolve_offset_ref is used to - convert it to a representation of the member referred to by the - OFFSET_REF. + but simply denotes a member of the object if its address is not + taken. This form is only used during the parsing phase; once semantic analysis has taken place they are eliminated. @@ -291,6 +289,7 @@ DEFTREECODE (TAG_DEFN, "tag_defn", tcc_expression, 0) TINST_DECL contains the original DECL node. TINST_LOCATION contains the location where the template is instantiated. + TINST_IN_SYSTEM_HEADER_P is true if the location is in a system header. A stack of template instantiation nodes is kept through the TREE_CHAIN fields of these nodes. */ diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index caac8b24fb6..bbd821674a0 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -221,6 +221,7 @@ struct tinst_level_s GTY(()) struct tree_common common; tree decl; location_t locus; + int in_system_header_p; }; typedef struct tinst_level_s * tinst_level_t; @@ -2913,7 +2914,8 @@ struct lang_decl GTY(()) #define THUNK_ALIAS(DECL) \ (DECL_LANG_SPECIFIC (FUNCTION_DECL_CHECK (DECL))->decl_flags.u.template_info) -/* For thunk NODE, this is the FUNCTION_DECL thunked to. */ +/* For thunk NODE, this is the FUNCTION_DECL thunked to. It is + possible for the target to be a thunk too. */ #define THUNK_TARGET(NODE) \ (DECL_LANG_SPECIFIC (NODE)->u.f.befriending_classes) @@ -3121,6 +3123,8 @@ typedef enum unification_kind_t { (((tinst_level_t) TINST_LEVEL_CHECK (NODE))->decl) #define TINST_LOCATION(NODE) \ (((tinst_level_t) TINST_LEVEL_CHECK (NODE))->locus) +#define TINST_IN_SYSTEM_HEADER_P(NODE) \ + (((tinst_level_t) TINST_LEVEL_CHECK (NODE))->in_system_header_p) /* in class.c */ @@ -3785,7 +3789,7 @@ extern tree start_decl (const cp_declarator *, cp_decl_specifier_seq *, int, extern void start_decl_1 (tree); extern void cp_finish_decl (tree, tree, tree, int); extern void finish_decl (tree, tree, tree); -extern int complete_array_type (tree, tree, int); +extern int cp_complete_array_type (tree *, tree, bool); extern tree build_ptrmemfunc_type (tree); extern tree build_ptrmem_type (tree, tree); /* the grokdeclarator prototype is in decl.h */ @@ -4243,7 +4247,6 @@ extern tree build_dummy_object (tree); extern tree maybe_dummy_object (tree, tree *); extern int is_dummy_object (tree); extern const struct attribute_spec cxx_attribute_table[]; -extern tree make_tinst_level (tree, location_t); extern tree make_ptrmem_cst (tree, tree); extern tree cp_build_type_attribute_variant (tree, tree); extern tree cp_build_qualified_type_real (tree, int, tsubst_flags_t); diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d767125ad10..48b12f97afd 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -948,6 +948,12 @@ decls_match (tree newdecl, tree olddecl) } else { + /* Need to check scope for variable declaration (VAR_DECL). + For typedef (TYPE_DECL), scope is ignored. */ + if (TREE_CODE (newdecl) == VAR_DECL + && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)) + return 0; + if (TREE_TYPE (newdecl) == error_mark_node) types_match = TREE_TYPE (olddecl) == error_mark_node; else if (TREE_TYPE (olddecl) == NULL_TREE) @@ -1920,7 +1926,8 @@ redeclaration_error_message (tree newdecl, tree olddecl) /* If both functions come from different namespaces, this is not a redeclaration - this is a conflict with a used function. */ if (DECL_NAMESPACE_SCOPE_P (olddecl) - && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)) + && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl) + && ! decls_match (olddecl, newdecl)) return "%qD conflicts with used function"; /* We'll complain about linkage mismatches in @@ -3647,8 +3654,7 @@ start_decl (const cp_declarator *declarator, cplus_decl_attributes (&decl, attributes, 0); /* If #pragma weak was used, mark the decl weak now. */ - if (global_scope_p (current_binding_level)) - maybe_apply_pragma_weak (decl); + maybe_apply_pragma_weak (decl); if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl) @@ -3906,7 +3912,8 @@ maybe_deduce_size_from_array_init (tree decl, tree init) But let's leave it here to ease the eventual merge. */ int do_default = !DECL_EXTERNAL (decl); tree initializer = init ? init : DECL_INITIAL (decl); - int failure = complete_array_type (type, initializer, do_default); + int failure = cp_complete_array_type (&TREE_TYPE (decl), initializer, + do_default); if (failure == 1) error ("initializer fails to determine size of %qD", decl); @@ -3923,9 +3930,7 @@ maybe_deduce_size_from_array_init (tree decl, tree init) DECL_EXTERNAL (decl) = 1; } - if (pedantic && TYPE_DOMAIN (type) != NULL_TREE - && tree_int_cst_lt (TYPE_MAX_VALUE (TYPE_DOMAIN (type)), - integer_zero_node)) + if (failure == 3) error ("zero-size array %qD", decl); layout_decl (decl, 0); @@ -4103,13 +4108,18 @@ reshape_init_array (tree elt_type, tree max_index, tree *initp, tree new_init) { bool sized_array_p = (max_index != NULL_TREE); - HOST_WIDE_INT max_index_cst = 0; - HOST_WIDE_INT index; + unsigned HOST_WIDE_INT max_index_cst = 0; + unsigned HOST_WIDE_INT index; if (sized_array_p) - /* HWI is either 32bit or 64bit, so it must be enough to represent the - array size. */ - max_index_cst = tree_low_cst (max_index, 1); + { + if (host_integerp (max_index, 1)) + max_index_cst = tree_low_cst (max_index, 1); + /* sizetype is sign extended, not zero extended. */ + else + max_index_cst = tree_low_cst (fold_convert (size_type_node, max_index), + 1); + } /* Loop until there are no more initializers. */ for (index = 0; @@ -4126,27 +4136,16 @@ reshape_init_array (tree elt_type, tree max_index, CONSTRUCTOR_ELTS (new_init) = element_init; designated_index = TREE_PURPOSE (element_init); if (designated_index) - { + { /* Handle array designated initializers (GNU extension). */ if (TREE_CODE (designated_index) == IDENTIFIER_NODE) { error ("name %qD used in a GNU-style designated " - "initializer for an array", designated_index); + "initializer for an array", designated_index); TREE_PURPOSE (element_init) = NULL_TREE; } else - { - gcc_assert (TREE_CODE (designated_index) == INTEGER_CST); - if (sized_array_p - && tree_int_cst_lt (max_index, designated_index)) - { - error ("Designated initializer %qE larger than array " - "size", designated_index); - TREE_PURPOSE (element_init) = NULL_TREE; - } - else - index = tree_low_cst (designated_index, 1); - } + gcc_unreachable (); } } @@ -5339,99 +5338,41 @@ expand_static_init (tree decl, tree init) 2 if there was no information (in which case assume 0 if DO_DEFAULT). */ int -complete_array_type (tree type, tree initial_value, int do_default) +cp_complete_array_type (tree *ptype, tree initial_value, bool do_default) { - tree maxindex = NULL_TREE; - int value = 0; + int failure; + tree type, elt_type; if (initial_value) { /* An array of character type can be initialized from a brace-enclosed string constant. */ - if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))) + if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype))) && TREE_CODE (initial_value) == CONSTRUCTOR && CONSTRUCTOR_ELTS (initial_value) && (TREE_CODE (TREE_VALUE (CONSTRUCTOR_ELTS (initial_value))) == STRING_CST) && TREE_CHAIN (CONSTRUCTOR_ELTS (initial_value)) == NULL_TREE) initial_value = TREE_VALUE (CONSTRUCTOR_ELTS (initial_value)); - - /* Note MAXINDEX is really the maximum index, one less than the - size. */ - if (TREE_CODE (initial_value) == STRING_CST) - { - int eltsize - = int_size_in_bytes (TREE_TYPE (TREE_TYPE (initial_value))); - maxindex = build_int_cst (NULL_TREE, - (TREE_STRING_LENGTH (initial_value) - / eltsize) - 1); - } - else if (TREE_CODE (initial_value) == CONSTRUCTOR) - { - tree elts = CONSTRUCTOR_ELTS (initial_value); - - maxindex = ssize_int (-1); - for (; elts; elts = TREE_CHAIN (elts)) - { - if (TREE_PURPOSE (elts)) - maxindex = TREE_PURPOSE (elts); - else - maxindex = size_binop (PLUS_EXPR, maxindex, ssize_int (1)); - } - } - else - { - /* Make an error message unless that happened already. */ - if (initial_value != error_mark_node) - value = 1; - else - initial_value = NULL_TREE; - - /* Prevent further error messages. */ - maxindex = build_int_cst (NULL_TREE, 0); - } - } - - if (!maxindex) - { - if (do_default) - maxindex = build_int_cst (NULL_TREE, 0); - value = 2; } - - if (maxindex) + + failure = complete_array_type (ptype, initial_value, do_default); + + /* We can create the array before the element type is complete, which + means that we didn't have these two bits set in the original type + either. In completing the type, we are expected to propagate these + bits. See also complete_type which does the same thing for arrays + of fixed size. */ + type = *ptype; + if (TYPE_DOMAIN (type)) { - tree itype; - tree domain; - tree elt_type; - - domain = build_index_type (maxindex); - TYPE_DOMAIN (type) = domain; - - if (initial_value) - itype = TREE_TYPE (initial_value); - else - itype = NULL; - if (itype && !TYPE_DOMAIN (itype)) - TYPE_DOMAIN (itype) = domain; - /* The type of the main variant should never be used for arrays - of different sizes. It should only ever be completed with the - size of the array. */ - if (! TYPE_DOMAIN (TYPE_MAIN_VARIANT (type))) - TYPE_DOMAIN (TYPE_MAIN_VARIANT (type)) = domain; - elt_type = TREE_TYPE (type); - TYPE_NEEDS_CONSTRUCTING (type) - = TYPE_NEEDS_CONSTRUCTING (TYPE_MAIN_VARIANT (elt_type)); + TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type); TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type) - = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TYPE_MAIN_VARIANT (elt_type)); + = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type); } - /* Lay out the type now that we can get the real answer. */ - - layout_type (type); - - return value; + return failure; } /* Return zero if something is declared to be a member of type @@ -7124,9 +7065,7 @@ grokdeclarator (const cp_declarator *declarator, /* Determine the type of the entity declared by recurring on the declarator. */ - for (; - declarator && declarator->kind != cdk_id; - declarator = declarator->declarator) + for (; declarator; declarator = declarator->declarator) { const cp_declarator *inner_declarator; tree attrs; @@ -7134,8 +7073,6 @@ grokdeclarator (const cp_declarator *declarator, if (type == error_mark_node) return error_mark_node; - inner_declarator = declarator->declarator; - attrs = declarator->attributes; if (attrs) { @@ -7153,6 +7090,11 @@ grokdeclarator (const cp_declarator *declarator, attr_flags); } + if (declarator->kind == cdk_id) + break; + + inner_declarator = declarator->declarator; + switch (declarator->kind) { case cdk_array: @@ -9991,7 +9933,12 @@ start_preparsed_function (tree decl1, tree attrs, int flags) class scope, current_class_type will be NULL_TREE until set above by push_nested_class.) */ if (processing_template_decl) - decl1 = push_template_decl (decl1); + { + /* FIXME: Handle error_mark_node more gracefully. */ + tree newdecl1 = push_template_decl (decl1); + if (newdecl1 != error_mark_node) + decl1 = newdecl1; + } /* We are now in the scope of the function being defined. */ current_function_decl = decl1; @@ -11115,7 +11062,22 @@ cxx_comdat_group (tree decl) /* For all other DECLs, the COMDAT group is the mangled name of the declaration itself. */ else - name = DECL_ASSEMBLER_NAME (decl); + { + while (DECL_THUNK_P (decl)) + { + /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk + into the same section as the target function. In that case + we must return target's name. */ + tree target = THUNK_TARGET (decl); + if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target) + && DECL_SECTION_NAME (target) != NULL + && DECL_ONE_ONLY (target)) + decl = target; + else + break; + } + name = DECL_ASSEMBLER_NAME (decl); + } return IDENTIFIER_POINTER (name); } diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 474e04e2faa..edad1477651 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1780,29 +1780,43 @@ import_export_decl (tree decl) else if (CLASSTYPE_INTERFACE_KNOWN (type) && CLASSTYPE_INTERFACE_ONLY (type)) import_p = true; - else if (TARGET_WEAK_NOT_IN_ARCHIVE_TOC + else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC) && !CLASSTYPE_USE_TEMPLATE (type) && CLASSTYPE_KEY_METHOD (type) && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))) /* The ABI requires that all virtual tables be emitted with COMDAT linkage. However, on systems where COMDAT symbols don't show up in the table of contents for a static - archive, the linker will report errors about undefined - symbols because it will not see the virtual table - definition. Therefore, in the case that we know that the - virtual table will be emitted in only one translation - unit, we make the virtual table an ordinary definition - with external linkage. */ + archive, or on systems without weak symbols (where we + approximate COMDAT linkage by using internal linkage), the + linker will report errors about undefined symbols because + it will not see the virtual table definition. Therefore, + in the case that we know that the virtual table will be + emitted in only one translation unit, we make the virtual + table an ordinary definition with external linkage. */ DECL_EXTERNAL (decl) = 0; else if (CLASSTYPE_INTERFACE_KNOWN (type)) { /* TYPE is being exported from this translation unit, so DECL - should be defined here. The ABI requires COMDAT - linkage. Normally, we only emit COMDAT things when they - are needed; make sure that we realize that this entity is - indeed needed. */ - comdat_p = true; - mark_needed (decl); + should be defined here. */ + if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (type)) + /* If a class is declared in a header with the "extern + template" extension, then it will not be instantiated, + even in translation units that would normally require + it. Often such classes are explicitly instantiated in + one translation unit. Therefore, the explicit + instantiation must be made visible to other translation + units. */ + DECL_EXTERNAL (decl) = 0; + else + { + /* The ABI requires COMDAT linkage. Normally, we only + emit COMDAT things when they are needed; make sure + that we realize that this entity is indeed + needed. */ + comdat_p = true; + mark_needed (decl); + } } else if (!flag_implicit_templates && CLASSTYPE_IMPLICIT_INSTANTIATION (type)) @@ -1830,7 +1844,14 @@ import_export_decl (tree decl) comdat_p = true; if (CLASSTYPE_INTERFACE_KNOWN (type) && !CLASSTYPE_INTERFACE_ONLY (type)) - mark_needed (decl); + { + mark_needed (decl); + if (!flag_weak) + { + comdat_p = false; + DECL_EXTERNAL (decl) = 0; + } + } } } else diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 087868674f3..39555c8cb90 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -655,6 +655,11 @@ sort_mem_initializers (tree t, tree mem_inits) void emit_mem_initializers (tree mem_inits) { + /* We will already have issued an error message about the fact that + the type is incomplete. */ + if (!COMPLETE_TYPE_P (current_class_type)) + return; + /* Sort the mem-initializers into the order in which the initializations should be performed. */ mem_inits = sort_mem_initializers (current_class_type, mem_inits); @@ -1417,14 +1422,6 @@ build_offset_ref (tree type, tree name, bool address_p) return error_mark_node; } - if (processing_template_decl) - { - if (TREE_CODE (orig_name) == TEMPLATE_ID_EXPR) - return build_min (SCOPE_REF, TREE_TYPE (member), type, orig_name); - else - return build_min (SCOPE_REF, TREE_TYPE (member), type, name); - } - if (TREE_CODE (member) == TYPE_DECL) { TREE_USED (member) = 1; @@ -1554,9 +1551,6 @@ build_offset_ref (tree type, tree name, bool address_p) return member; } - /* In member functions, the form `type::name' is no longer - equivalent to `this->type::name', at least not until - resolve_offset_ref. */ member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member); PTRMEM_OK_P (member) = 1; return member; @@ -2396,6 +2390,9 @@ build_vec_init (tree base, tree maxindex, tree init, int from_array) tree atype = TREE_TYPE (base); /* The type of an element in the array. */ tree type = TREE_TYPE (atype); + /* The element type reached after removing all outer array + types. */ + tree inner_elt_type; /* The type of a pointer to an element in the array. */ tree ptype; tree stmt_expr; @@ -2411,15 +2408,17 @@ build_vec_init (tree base, tree maxindex, tree init, int from_array) if (maxindex == NULL_TREE || maxindex == error_mark_node) return error_mark_node; + inner_elt_type = strip_array_types (atype); if (init && (from_array == 2 - ? (!CLASS_TYPE_P (type) || !TYPE_HAS_COMPLEX_ASSIGN_REF (type)) + ? (!CLASS_TYPE_P (inner_elt_type) + || !TYPE_HAS_COMPLEX_ASSIGN_REF (inner_elt_type)) : !TYPE_NEEDS_CONSTRUCTING (type)) && ((TREE_CODE (init) == CONSTRUCTOR /* Don't do this if the CONSTRUCTOR might contain something that might throw and require us to clean up. */ && (CONSTRUCTOR_ELTS (init) == NULL_TREE - || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (target_type (type)))) + || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type))) || from_array)) { /* Do non-default initialization of POD arrays resulting from @@ -2610,14 +2609,12 @@ build_vec_init (tree base, tree maxindex, tree init, int from_array) /* Flatten multi-dimensional array since build_vec_delete only expects one-dimensional array. */ if (TREE_CODE (type) == ARRAY_TYPE) - { - m = cp_build_binary_op (MULT_EXPR, m, - array_type_nelts_total (type)); - type = strip_array_types (type); - } + m = cp_build_binary_op (MULT_EXPR, m, + array_type_nelts_total (type)); finish_cleanup_try_block (try_block); - e = build_vec_delete_1 (rval, m, type, sfk_base_destructor, + e = build_vec_delete_1 (rval, m, + inner_elt_type, sfk_base_destructor, /*use_global_delete=*/0); finish_cleanup (e, try_block); } diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 85e2b3f8787..7a99c262471 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -328,6 +328,10 @@ use_thunk (tree thunk_fndecl, bool emit_p) There's no need to process this thunk again. */ return; + if (DECL_THUNK_P (function)) + /* The target is itself a thunk, process it now. */ + use_thunk (function, emit_p); + /* Thunks are always addressable; they only appear in vtables. */ TREE_ADDRESSABLE (thunk_fndecl) = 1; diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 7d944d05451..accd35210ec 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -1875,7 +1875,8 @@ push_overloaded_decl (tree decl, int flags) if (TREE_CODE (tmp) == OVERLOAD && OVL_USED (tmp) && !(flags & PUSH_USING) && compparms (TYPE_ARG_TYPES (TREE_TYPE (fn)), - TYPE_ARG_TYPES (TREE_TYPE (decl)))) + TYPE_ARG_TYPES (TREE_TYPE (decl))) + && ! decls_match (fn, decl)) error ("%q#D conflicts with previous using declaration %q#D", decl, fn); diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 3db7f2ee9f6..944efe185a3 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -1510,7 +1510,7 @@ static tree cp_parser_declarator_id static tree cp_parser_type_id (cp_parser *); static void cp_parser_type_specifier_seq - (cp_parser *, cp_decl_specifier_seq *); + (cp_parser *, bool, cp_decl_specifier_seq *); static cp_parameter_declarator *cp_parser_parameter_declaration_clause (cp_parser *); static cp_parameter_declarator *cp_parser_parameter_declaration_list @@ -1787,6 +1787,16 @@ cp_parser_is_keyword (cp_token* token, enum rid keyword) return token->keyword == keyword; } +/* A minimum or maximum operator has been seen. As these are + deprecated, issue a warning. */ + +static inline void +cp_parser_warn_min_max (void) +{ + if (warn_deprecated && !in_system_header) + warning ("minimum/maximum operators are deprecated"); +} + /* If not parsing tentatively, issue a diagnostic of the form FILE:LINE: MESSAGE before TOKEN where TOKEN is the next token in the input stream. MESSAGE @@ -1995,7 +2005,8 @@ cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id) template struct B : public A { X x; }; The user should have said "typename A::X". */ - if (processing_template_decl && current_class_type) + if (processing_template_decl && current_class_type + && TYPE_BINFO (current_class_type)) { tree b; @@ -3860,18 +3871,22 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p) bool template_p = false; tree id; tree type; + tree scope; /* Consume the `typename' token. */ cp_lexer_consume_token (parser->lexer); /* Look for the optional `::' operator. */ cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false); - /* Look for the nested-name-specifier. */ - cp_parser_nested_name_specifier (parser, - /*typename_keyword_p=*/true, - /*check_dependency_p=*/true, - /*type_p=*/true, - /*is_declaration=*/true); + /* Look for the nested-name-specifier. In case of error here, + consume the trailing id to avoid subsequent error messages + for usual cases. */ + scope = cp_parser_nested_name_specifier (parser, + /*typename_keyword_p=*/true, + /*check_dependency_p=*/true, + /*type_p=*/true, + /*is_declaration=*/true); + /* Look for the optional `template' keyword. */ template_p = cp_parser_optional_template_keyword (parser); /* We don't know whether we're looking at a template-id or an @@ -3884,9 +3899,13 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p) /* If that didn't work, try an identifier. */ if (!cp_parser_parse_definitely (parser)) id = cp_parser_identifier (parser); + + /* Don't process id if nested name specifier is invalid. */ + if (scope == error_mark_node) + return error_mark_node; /* If we look up a template-id in a non-dependent qualifying scope, there's no need to create a dependent type. */ - if (TREE_CODE (id) == TYPE_DECL + else if (TREE_CODE (id) == TYPE_DECL && !dependent_type_p (parser->scope)) type = TREE_TYPE (id); /* Create a TYPENAME_TYPE to represent the type to which the @@ -4954,7 +4973,8 @@ cp_parser_new_type_id (cp_parser* parser, tree *nelts) parser->type_definition_forbidden_message = "types may not be defined in a new-type-id"; /* Parse the type-specifier-seq. */ - cp_parser_type_specifier_seq (parser, &type_specifier_seq); + cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + &type_specifier_seq); /* Restore the old message. */ parser->type_definition_forbidden_message = saved_message; /* Parse the new-declarator. */ @@ -5392,6 +5412,9 @@ cp_parser_binary_expression (cp_parser* parser, bool cast_p) { /* Get an operator token. */ token = cp_lexer_peek_token (parser->lexer); + if (token->type == CPP_MIN || token->type == CPP_MAX) + cp_parser_warn_min_max (); + new_prec = TOKEN_PRECEDENCE (token); /* Popping an entry off the stack means we completed a subexpression: @@ -5647,10 +5670,12 @@ cp_parser_assignment_operator_opt (cp_parser* parser) case CPP_MIN_EQ: op = MIN_EXPR; + cp_parser_warn_min_max (); break; case CPP_MAX_EQ: op = MAX_EXPR; + cp_parser_warn_min_max (); break; default: @@ -6281,7 +6306,8 @@ cp_parser_condition (cp_parser* parser) parser->type_definition_forbidden_message = "types may not be defined in conditions"; /* Parse the type-specifier-seq. */ - cp_parser_type_specifier_seq (parser, &type_specifiers); + cp_parser_type_specifier_seq (parser, /*is_condition==*/true, + &type_specifiers); /* Restore the saved message. */ parser->type_definition_forbidden_message = saved_message; /* If all is well, we might be looking at a declaration. */ @@ -7540,7 +7566,8 @@ cp_parser_conversion_type_id (cp_parser* parser) /* Parse the attributes. */ attributes = cp_parser_attributes_opt (parser); /* Parse the type-specifiers. */ - cp_parser_type_specifier_seq (parser, &type_specifiers); + cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + &type_specifiers); /* If that didn't work, stop. */ if (type_specifiers.type == error_mark_node) return error_mark_node; @@ -8030,18 +8057,22 @@ cp_parser_operator (cp_parser* parser) /* Extensions. */ case CPP_MIN: id = ansi_opname (MIN_EXPR); + cp_parser_warn_min_max (); break; case CPP_MAX: id = ansi_opname (MAX_EXPR); + cp_parser_warn_min_max (); break; case CPP_MIN_EQ: id = ansi_assopname (MIN_EXPR); + cp_parser_warn_min_max (); break; case CPP_MAX_EQ: id = ansi_assopname (MAX_EXPR); + cp_parser_warn_min_max (); break; default: @@ -8703,6 +8734,8 @@ cp_parser_template_name (cp_parser* parser, ; else { + tree fn = NULL_TREE; + /* The standard does not explicitly indicate whether a name that names a set of overloaded declarations, some of which are templates, is a template-name. However, such a name should @@ -8710,16 +8743,13 @@ cp_parser_template_name (cp_parser* parser, template-id for the overloaded templates. */ fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl; if (TREE_CODE (fns) == OVERLOAD) - { - tree fn; + for (fn = fns; fn; fn = OVL_NEXT (fn)) + if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL) + break; - for (fn = fns; fn; fn = OVL_NEXT (fn)) - if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL) - break; - } - else + if (!fn) { - /* Otherwise, the name does not name a template. */ + /* The name does not name a template. */ cp_parser_error (parser, "expected template-name"); return error_mark_node; } @@ -11475,7 +11505,8 @@ cp_parser_type_id (cp_parser* parser) cp_declarator *abstract_declarator; /* Parse the type-specifier-seq. */ - cp_parser_type_specifier_seq (parser, &type_specifier_seq); + cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + &type_specifier_seq); if (type_specifier_seq.type == error_mark_node) return error_mark_node; @@ -11503,13 +11534,18 @@ cp_parser_type_id (cp_parser* parser) type-specifier-seq: attributes type-specifier-seq [opt] + If IS_CONDITION is true, we are at the start of a "condition", + e.g., we've just seen "if (". + Sets *TYPE_SPECIFIER_SEQ to represent the sequence. */ static void cp_parser_type_specifier_seq (cp_parser* parser, + bool is_condition, cp_decl_specifier_seq *type_specifier_seq) { bool seen_type_specifier = false; + cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL; /* Clear the TYPE_SPECIFIER_SEQ. */ clear_decl_specs (type_specifier_seq); @@ -11518,6 +11554,7 @@ cp_parser_type_specifier_seq (cp_parser* parser, while (true) { tree type_specifier; + bool is_cv_qualifier; /* Check for attributes first. */ if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE)) @@ -11530,25 +11567,45 @@ cp_parser_type_specifier_seq (cp_parser* parser, /* Look for the type-specifier. */ type_specifier = cp_parser_type_specifier (parser, - CP_PARSER_FLAGS_OPTIONAL, + flags, type_specifier_seq, /*is_declaration=*/false, NULL, - NULL); - /* If the first type-specifier could not be found, this is not a - type-specifier-seq at all. */ - if (!seen_type_specifier && !type_specifier) + &is_cv_qualifier); + if (!type_specifier) { - cp_parser_error (parser, "expected type-specifier"); - type_specifier_seq->type = error_mark_node; - return; + /* If the first type-specifier could not be found, this is not a + type-specifier-seq at all. */ + if (!seen_type_specifier) + { + cp_parser_error (parser, "expected type-specifier"); + type_specifier_seq->type = error_mark_node; + return; + } + /* If subsequent type-specifiers could not be found, the + type-specifier-seq is complete. */ + break; } - /* If subsequent type-specifiers could not be found, the - type-specifier-seq is complete. */ - else if (seen_type_specifier && !type_specifier) - break; seen_type_specifier = true; + /* The standard says that a condition can be: + + type-specifier-seq declarator = assignment-expression + + However, given: + + struct S {}; + if (int S = ...) + + we should treat the "S" as a declarator, not as a + type-specifier. The standard doesn't say that explicitly for + type-specifier-seq, but it does say that for + decl-specifier-seq in an ordinary declaration. Perhaps it + would be clearer just to allow a decl-specifier-seq here, and + then add a semantic restriction that if any decl-specifiers + that are not type-specifiers appear, the program is invalid. */ + if (is_condition && !is_cv_qualifier) + flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES; } return; @@ -12848,7 +12905,8 @@ cp_parser_class_head (cp_parser* parser, { error ("redefinition of %q#T", type); cp_error_at ("previous definition of %q#T", type); - type = error_mark_node; + type = NULL_TREE; + goto done; } /* We will have entered the scope containing the class; the names of @@ -13801,7 +13859,8 @@ cp_parser_exception_declaration (cp_parser* parser) = "types may not be defined in exception-declarations"; /* Parse the type-specifier-seq. */ - cp_parser_type_specifier_seq (parser, &type_specifiers); + cp_parser_type_specifier_seq (parser, /*is_condition=*/false, + &type_specifiers); /* If it's a `)', then there is no declarator. */ if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)) declarator = NULL; diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 0d83bc1a4d2..6c61833acde 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1353,8 +1353,8 @@ determine_specialization (tree template_id, /* Count the number of template headers specified for this specialization. */ header_count = 0; - for (b = current_binding_level; - b->kind == sk_template_parms || b->kind == sk_template_spec; + for (b = current_binding_level; + b->kind == sk_template_parms; b = b->level_chain) ++header_count; @@ -1423,6 +1423,14 @@ determine_specialization (tree template_id, if (header_count && header_count != template_count + 1) continue; + /* Check that the number of template arguments at the + innermost level for DECL is the same as for FN. */ + if (current_binding_level->kind == sk_template_parms + && !current_binding_level->explicit_spec_p + && (TREE_VEC_LENGTH (DECL_INNERMOST_TEMPLATE_PARMS (fn)) + != TREE_VEC_LENGTH (TREE_VALUE (current_template_parms)))) + continue; + /* See whether this function might be a specialization of this template. */ targs = get_bindings (fn, decl, explicit_targs); @@ -4596,6 +4604,8 @@ lookup_template_class (tree d1, = TREE_PRIVATE (TYPE_STUB_DECL (template_type)); TREE_PROTECTED (type_decl) = TREE_PROTECTED (TYPE_STUB_DECL (template_type)); + DECL_IN_SYSTEM_HEADER (type_decl) + = DECL_IN_SYSTEM_HEADER (template); /* Set up the template information. We have to figure out which template is the immediate parent if this is a full @@ -4988,7 +4998,10 @@ push_tinst_level (tree d) return 0; } - new = make_tinst_level (d, input_location); + new = make_node (TINST_LEVEL); + TINST_DECL (new) = d; + TINST_LOCATION (new) = input_location; + TINST_IN_SYSTEM_HEADER_P (new) = in_system_header; TREE_CHAIN (new) = current_tinst_level; current_tinst_level = new; @@ -5013,6 +5026,7 @@ pop_tinst_level (void) /* Restore the filename and line number stashed away when we started this instantiation. */ input_location = TINST_LOCATION (old); + in_system_header = TINST_IN_SYSTEM_HEADER_P (old); current_tinst_level = TREE_CHAIN (old); --tinst_depth; ++tinst_level_tick; @@ -5491,7 +5505,9 @@ instantiate_class_template (tree type) /* Set the input location to the template definition. This is needed if tsubsting causes an error. */ - input_location = DECL_SOURCE_LOCATION (TYPE_NAME (pattern)); + typedecl = TYPE_MAIN_DECL (type); + input_location = DECL_SOURCE_LOCATION (typedecl); + in_system_header = DECL_IN_SYSTEM_HEADER (typedecl); TYPE_HAS_CONSTRUCTOR (type) = TYPE_HAS_CONSTRUCTOR (pattern); TYPE_HAS_NEW_OPERATOR (type) = TYPE_HAS_NEW_OPERATOR (pattern); @@ -5805,7 +5821,6 @@ instantiate_class_template (tree type) the class itself. This puts error messages involving generated implicit functions at a predictable point, and the same point that would be used for non-template classes. */ - typedecl = TYPE_MAIN_DECL (type); input_location = DECL_SOURCE_LOCATION (typedecl); unreverse_member_declarations (type); @@ -6468,6 +6483,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) SET_DECL_TEMPLATE_PARM_P (r); type = tsubst (TREE_TYPE (t), args, complain, in_decl); + type = type_decays_to (type); TREE_TYPE (r) = type; cp_apply_type_quals_to_decl (cp_type_quals (type), r); @@ -11084,13 +11100,21 @@ regenerate_decl_from_template (tree decl, tree tmpl) while (decl_parm) { tree parm_type; + tree attributes; if (DECL_NAME (decl_parm) != DECL_NAME (pattern_parm)) DECL_NAME (decl_parm) = DECL_NAME (pattern_parm); parm_type = tsubst (TREE_TYPE (pattern_parm), args, tf_error, NULL_TREE); + parm_type = type_decays_to (parm_type); if (!same_type_p (TREE_TYPE (decl_parm), parm_type)) TREE_TYPE (decl_parm) = parm_type; + attributes = DECL_ATTRIBUTES (pattern_parm); + if (DECL_ATTRIBUTES (decl_parm) != attributes) + { + DECL_ATTRIBUTES (decl_parm) = attributes; + cplus_decl_attributes (&decl_parm, attributes, /*flags=*/0); + } decl_parm = TREE_CHAIN (decl_parm); pattern_parm = TREE_CHAIN (pattern_parm); } @@ -11476,6 +11500,7 @@ instantiate_pending_templates (int retries) tree last = NULL_TREE; int reconsider; location_t saved_loc = input_location; + int saved_in_system_header = in_system_header; /* Instantiating templates may trigger vtable generation. This in turn may require further template instantiations. We place a limit here @@ -11560,6 +11585,7 @@ instantiate_pending_templates (int retries) while (reconsider); input_location = saved_loc; + in_system_header = saved_in_system_header; } /* Substitute ARGVEC into T, which is a list of initializers for @@ -12033,6 +12059,7 @@ value_dependent_expression_p (tree expression) { switch (TREE_CODE_CLASS (TREE_CODE (expression))) { + case tcc_reference: case tcc_unary: return (value_dependent_expression_p (TREE_OPERAND (expression, 0))); @@ -12056,7 +12083,6 @@ value_dependent_expression_p (tree expression) return true; return false; } - case tcc_reference: case tcc_statement: /* These cannot be value dependent. */ return false; @@ -12376,7 +12402,8 @@ build_non_dependent_expr (tree expr) if (TREE_CODE (inner_expr) == OVERLOAD || TREE_CODE (inner_expr) == FUNCTION_DECL || TREE_CODE (inner_expr) == TEMPLATE_DECL - || TREE_CODE (inner_expr) == TEMPLATE_ID_EXPR) + || TREE_CODE (inner_expr) == TEMPLATE_ID_EXPR + || TREE_CODE (inner_expr) == OFFSET_REF) return expr; /* There is no need to return a proxy for a variable. */ if (TREE_CODE (expr) == VAR_DECL) diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 2daff6f02e0..0ccceebf1ce 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1523,6 +1523,9 @@ finish_stmt_expr_expr (tree expr, tree stmt_expr) { tree result = NULL_TREE; + if (error_operand_p (expr)) + return error_mark_node; + if (expr) { if (!processing_template_decl && !VOID_TYPE_P (TREE_TYPE (expr))) @@ -1993,7 +1996,8 @@ finish_compound_literal (tree type, tree initializer_list) implies that the array has two elements. */ if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type)) - complete_array_type (type, compound_literal, 1); + cp_complete_array_type (&TREE_TYPE (compound_literal), + compound_literal, 1); } return compound_literal; diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 321ba4bdbc7..cbf68ee4ce7 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1459,6 +1459,7 @@ cp_tree_equal (tree t1, tree t2) case FUNCTION_DECL: case TEMPLATE_DECL: case IDENTIFIER_NODE: + case SSA_NAME: return false; case BASELINK: @@ -1850,17 +1851,6 @@ handle_init_priority_attribute (tree* node, } } -/* Return a new TINST_LEVEL for DECL at location locus. */ -tree -make_tinst_level (tree decl, location_t locus) -{ - tree tinst_level = make_node (TINST_LEVEL); - TREE_CHAIN (tinst_level) = NULL_TREE; - TINST_DECL (tinst_level) = decl; - TINST_LOCATION (tinst_level) = locus; - return tinst_level; -} - /* Return a new PTRMEM_CST of the indicated TYPE. The MEMBER is the thing pointed to by the constant. */ @@ -2256,7 +2246,10 @@ stabilize_init (tree init, tree *initp) if (TREE_CODE (t) == COND_EXPR) return false; - stabilize_call (t, initp); + /* The TARGET_EXPR might be initializing via bitwise copy from + another variable; leave that alone. */ + if (TREE_SIDE_EFFECTS (t)) + stabilize_call (t, initp); } return true; diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 330e8f1ea1a..6e5be0fdc2f 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -921,8 +921,6 @@ comp_array_types (tree t1, tree t2, bool allow_redeclaration) bool comptypes (tree t1, tree t2, int strict) { - int retval; - if (t1 == t2) return true; @@ -985,9 +983,7 @@ comptypes (tree t1, tree t2, int strict) && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2)) return true; - if (!(*targetm.comp_type_attributes) (t1, t2)) - return false; - + /* Compare the types. Break out if they could be the same. */ switch (TREE_CODE (t1)) { case TEMPLATE_TEMPLATE_PARM: @@ -1000,7 +996,7 @@ comptypes (tree t1, tree t2, int strict) DECL_TEMPLATE_PARMS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t2)))) return false; if (TREE_CODE (t1) == TEMPLATE_TEMPLATE_PARM) - return true; + break; /* Don't check inheritance. */ strict = COMPARE_STRICT; /* Fall through. */ @@ -1011,18 +1007,17 @@ comptypes (tree t1, tree t2, int strict) && (TYPE_TI_TEMPLATE (t1) == TYPE_TI_TEMPLATE (t2) || TREE_CODE (t1) == BOUND_TEMPLATE_TEMPLATE_PARM) && comp_template_args (TYPE_TI_ARGS (t1), TYPE_TI_ARGS (t2))) - return true; + break; if ((strict & COMPARE_BASE) && DERIVED_FROM_P (t1, t2)) - return true; + break; else if ((strict & COMPARE_DERIVED) && DERIVED_FROM_P (t2, t1)) - return true; + break; - /* We may be dealing with Objective-C instances... */ + /* We may be dealing with Objective-C instances. */ if (TREE_CODE (t1) == RECORD_TYPE - && ((retval = objc_comptypes (t1, t2, 0)) >= 0)) - return retval; - /* ...but fall through if we are not. */ + && objc_comptypes (t1, t2, 0) > 0) + break; return false; @@ -1030,51 +1025,72 @@ comptypes (tree t1, tree t2, int strict) if (!comptypes (TYPE_OFFSET_BASETYPE (t1), TYPE_OFFSET_BASETYPE (t2), strict & ~COMPARE_REDECLARATION)) return false; - return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)); + if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) + return false; + break; case POINTER_TYPE: case REFERENCE_TYPE: - return TYPE_MODE (t1) == TYPE_MODE (t2) - && TYPE_REF_CAN_ALIAS_ALL (t1) == TYPE_REF_CAN_ALIAS_ALL (t2) - && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)); + if (TYPE_MODE (t1) != TYPE_MODE (t2) + || TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2) + || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) + return false; + break; case METHOD_TYPE: case FUNCTION_TYPE: if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) return false; - return compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)); + if (!compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))) + return false; + break; case ARRAY_TYPE: /* Target types must match incl. qualifiers. */ - return comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION)); + if (!comp_array_types (t1, t2, !!(strict & COMPARE_REDECLARATION))) + return false; + break; case TEMPLATE_TYPE_PARM: - return (TEMPLATE_TYPE_IDX (t1) == TEMPLATE_TYPE_IDX (t2) - && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2)); + if (TEMPLATE_TYPE_IDX (t1) != TEMPLATE_TYPE_IDX (t2) + || TEMPLATE_TYPE_LEVEL (t1) != TEMPLATE_TYPE_LEVEL (t2)) + return false; + break; case TYPENAME_TYPE: if (!cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1), TYPENAME_TYPE_FULLNAME (t2))) return false; - return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)); + if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))) + return false; + break; case UNBOUND_CLASS_TEMPLATE: if (!cp_tree_equal (TYPE_IDENTIFIER (t1), TYPE_IDENTIFIER (t2))) return false; - return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)); + if (!same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2))) + return false; + break; case COMPLEX_TYPE: - return same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)); + if (!same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) + return false; + break; case VECTOR_TYPE: - return TYPE_VECTOR_SUBPARTS (t1) == TYPE_VECTOR_SUBPARTS (t2) - && same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)); + if (TYPE_VECTOR_SUBPARTS (t1) != TYPE_VECTOR_SUBPARTS (t2) + || !same_type_p (TREE_TYPE (t1), TREE_TYPE (t2))) + return false; break; default: - break; + return false; } - return false; + + /* If we get here, we know that from a target independent POV the + types are the same. Make sure the target attributes are also + the same. */ + return targetm.comp_type_attributes (t1, t2); } /* Returns 1 if TYPE1 is at least as qualified as TYPE2. */ @@ -1221,7 +1237,7 @@ cxx_sizeof_or_alignof_type (tree type, enum tree_code op, bool complain) if (type == error_mark_node) return error_mark_node; - if (processing_template_decl) + if (dependent_type_p (type)) { value = build_min (op, size_type_node, type); TREE_READONLY (value) = 1; @@ -3530,23 +3546,6 @@ build_x_unary_op (enum tree_code code, tree xarg) if (type_dependent_expression_p (xarg)) return build_min_nt (code, xarg, NULL_TREE); - /* For non-dependent pointer-to-member, the SCOPE_REF will be - processed during template substitution. Just compute the - right type here and build an ADDR_EXPR around it for - diagnostics. */ - if (code == ADDR_EXPR && TREE_CODE (xarg) == SCOPE_REF) - { - tree type; - if (TREE_TYPE (xarg) == unknown_type_node) - type = unknown_type_node; - else if (TREE_CODE (TREE_TYPE (xarg)) == FUNCTION_TYPE) - type = build_pointer_type (TREE_TYPE (xarg)); - else - type = build_ptrmem_type (TREE_OPERAND (xarg, 0), - TREE_TYPE (xarg)); - return build_min (code, type, xarg, NULL_TREE); - } - xarg = build_non_dependent_expr (xarg); } @@ -3610,13 +3609,13 @@ build_x_unary_op (enum tree_code code, tree xarg) else if (TREE_CODE (xarg) == TARGET_EXPR) warning ("taking address of temporary"); exp = build_unary_op (ADDR_EXPR, xarg, 0); - if (TREE_CODE (exp) == ADDR_EXPR) - PTRMEM_OK_P (exp) = ptrmem; } if (processing_template_decl && exp != error_mark_node) - return build_min_non_dep (code, exp, orig_expr, - /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE); + exp = build_min_non_dep (code, exp, orig_expr, + /*For {PRE,POST}{INC,DEC}REMENT_EXPR*/NULL_TREE); + if (TREE_CODE (exp) == ADDR_EXPR) + PTRMEM_OK_P (exp) = ptrmem; return exp; } @@ -4043,6 +4042,29 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert) arg = OVL_CURRENT (arg); break; + case OFFSET_REF: + /* Turn a reference to a non-static data member into a + pointer-to-member. */ + { + tree type; + tree t; + + if (!PTRMEM_OK_P (arg)) + return build_unary_op (code, arg, 0); + + t = TREE_OPERAND (arg, 1); + if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE) + { + error ("cannot create pointer to reference member %qD", t); + return error_mark_node; + } + + type = build_ptrmem_type (context_for_name_lookup (t), + TREE_TYPE (t)); + t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1)); + return t; + } + default: break; } @@ -4056,6 +4078,7 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert) is an error. */ else if (TREE_CODE (argtype) != FUNCTION_TYPE && TREE_CODE (argtype) != METHOD_TYPE + && TREE_CODE (arg) != OFFSET_REF && !lvalue_or_else (arg, lv_addressof)) return error_mark_node; @@ -4070,7 +4093,11 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert) expression so we can just form an ADDR_EXPR with the correct type. */ || processing_template_decl) - addr = build_address (arg); + { + addr = build_address (arg); + if (TREE_CODE (arg) == OFFSET_REF) + PTRMEM_OK_P (addr) = PTRMEM_OK_P (arg); + } else if (TREE_CODE (TREE_OPERAND (arg, 1)) == BASELINK) { tree fn = BASELINK_FUNCTIONS (TREE_OPERAND (arg, 1)); @@ -4194,52 +4221,7 @@ unary_complex_lvalue (enum tree_code code, tree arg) if (TREE_CODE (TREE_TYPE (arg)) == FUNCTION_TYPE || TREE_CODE (TREE_TYPE (arg)) == METHOD_TYPE || TREE_CODE (arg) == OFFSET_REF) - { - tree t; - - gcc_assert (TREE_CODE (arg) != SCOPE_REF); - - if (TREE_CODE (arg) != OFFSET_REF) - return 0; - - t = TREE_OPERAND (arg, 1); - - /* Check all this code for right semantics. */ - if (TREE_CODE (t) == FUNCTION_DECL) - { - if (DECL_DESTRUCTOR_P (t)) - error ("taking address of destructor"); - return build_unary_op (ADDR_EXPR, t, 0); - } - if (TREE_CODE (t) == VAR_DECL) - return build_unary_op (ADDR_EXPR, t, 0); - else - { - tree type; - - if (TREE_OPERAND (arg, 0) - && ! is_dummy_object (TREE_OPERAND (arg, 0)) - && TREE_CODE (t) != FIELD_DECL) - { - error ("taking address of bound pointer-to-member expression"); - return error_mark_node; - } - if (!PTRMEM_OK_P (arg)) - return build_unary_op (code, arg, 0); - - if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE) - { - error ("cannot create pointer to reference member %qD", t); - return error_mark_node; - } - - type = build_ptrmem_type (context_for_name_lookup (t), - TREE_TYPE (t)); - t = make_ptrmem_cst (type, TREE_OPERAND (arg, 1)); - return t; - } - } - + return NULL_TREE; /* We permit compiler to make function calls returning objects of aggregate type look like lvalues. */ @@ -4636,13 +4618,15 @@ build_static_cast_1 (tree type, tree expr, bool c_cast_p, promotions, floating point promotion, integral conversions, floating point conversions, floating-integral conversions, pointer conversions, and pointer to member conversions. */ - if ((ARITHMETIC_TYPE_P (type) && ARITHMETIC_TYPE_P (intype)) - /* DR 128 - - A value of integral _or enumeration_ type can be explicitly - converted to an enumeration type. */ - || (INTEGRAL_OR_ENUMERATION_TYPE_P (type) - && INTEGRAL_OR_ENUMERATION_TYPE_P (intype))) + /* DR 128 + + A value of integral _or enumeration_ type can be explicitly + converted to an enumeration type. */ + /* The effect of all that is that any conversion between any two + types which are integral, floating, or enumeration types can be + performed. */ + if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type)) + && (INTEGRAL_TYPE_P (intype) || SCALAR_FLOAT_TYPE_P (intype))) { expr = ocp_convert (type, expr, CONV_C_CAST, LOOKUP_NORMAL); @@ -5711,7 +5695,10 @@ build_ptrmemfunc (tree type, tree pfn, int force, bool c_cast_p) return instantiate_type (type, pfn, tf_error | tf_warning); fn = TREE_OPERAND (pfn, 0); - gcc_assert (TREE_CODE (fn) == FUNCTION_DECL); + gcc_assert (TREE_CODE (fn) == FUNCTION_DECL + /* In a template, we will have preserved the + OFFSET_REF. */ + || (processing_template_decl && TREE_CODE (fn) == OFFSET_REF)); return make_ptrmem_cst (to_type, fn); } diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 8017af3dd25..daa23993425 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -1123,7 +1123,7 @@ process_init_constructor (tree type, tree init, tree* elts) result = build_constructor (type, nreverse (members)); if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE) - complete_array_type (type, result, /*do_default=*/0); + cp_complete_array_type (&TREE_TYPE (result), result, /*do_default=*/0); if (init) TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init); if (allconstant) diff --git a/gcc/cse.c b/gcc/cse.c index 5bc6ce40c90..b5bcae2758d 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -1234,7 +1234,24 @@ insert_regs (rtx x, struct table_elt *classp, int modified) if (REG_P (classp->exp) && GET_MODE (classp->exp) == GET_MODE (x)) { - make_regs_eqv (regno, REGNO (classp->exp)); + unsigned c_regno = REGNO (classp->exp); + + gcc_assert (REGNO_QTY_VALID_P (c_regno)); + + /* Suppose that 5 is hard reg and 100 and 101 are + pseudos. Consider + + (set (reg:si 100) (reg:si 5)) + (set (reg:si 5) (reg:si 100)) + (set (reg:di 101) (reg:di 5)) + + We would now set REG_QTY (101) = REG_QTY (5), but the + entry for 5 is in SImode. When we use this later in + copy propagation, we get the register in wrong mode. */ + if (qty_table[REG_QTY (c_regno)].mode != GET_MODE (x)) + continue; + + make_regs_eqv (regno, c_regno); return 1; } @@ -3564,8 +3581,31 @@ fold_rtx (rtx x, rtx insn) if (offset >= 0 && (offset / GET_MODE_SIZE (GET_MODE (table)) < XVECLEN (table, 0))) - return XVECEXP (table, 0, - offset / GET_MODE_SIZE (GET_MODE (table))); + { + rtx label = XVECEXP + (table, 0, offset / GET_MODE_SIZE (GET_MODE (table))); + rtx set; + + /* If we have an insn that loads the label from + the jumptable into a reg, we don't want to set + the reg to the label, because this may cause a + reference to the label to remain after the + label is removed in some very obscure cases (PR + middle-end/18628). */ + if (!insn) + return label; + + set = single_set (insn); + + if (! set || SET_SRC (set) != x) + return x; + + /* If it's a jump, it's safe to reference the label. */ + if (SET_DEST (set) == pc_rtx) + return label; + + return x; + } } if (table_insn && JUMP_P (table_insn) && GET_CODE (PATTERN (table_insn)) == ADDR_DIFF_VEC) @@ -7329,7 +7369,7 @@ delete_trivially_dead_insns (rtx insns, int nreg) ndead++; } - if (find_reg_note (insn, REG_LIBCALL, NULL_RTX)) + if (in_libcall && find_reg_note (insn, REG_LIBCALL, NULL_RTX)) { in_libcall = 0; dead_libcall = 0; diff --git a/gcc/dbxout.c b/gcc/dbxout.c index 6383d48d0e9..271cc198403 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -378,7 +378,8 @@ const struct gcc_debug_hooks dbx_debug_hooks = debug_nothing_tree, /* outlining_inline_function */ debug_nothing_rtx, /* label */ dbxout_handle_pch, /* handle_pch */ - debug_nothing_rtx /* var_location */ + debug_nothing_rtx, /* var_location */ + 0 /* start_end_main_source_file */ }; #endif /* DBX_DEBUGGING_INFO */ @@ -408,7 +409,8 @@ const struct gcc_debug_hooks xcoff_debug_hooks = debug_nothing_tree, /* outlining_inline_function */ debug_nothing_rtx, /* label */ dbxout_handle_pch, /* handle_pch */ - debug_nothing_rtx /* var_location */ + debug_nothing_rtx, /* var_location */ + 0 /* start_end_main_source_file */ }; #endif /* XCOFF_DEBUGGING_INFO */ diff --git a/gcc/ddg.c b/gcc/ddg.c index a54a87c0744..5a2cbeee109 100644 --- a/gcc/ddg.c +++ b/gcc/ddg.c @@ -187,6 +187,8 @@ create_ddg_dependence (ddg_ptr g, ddg_node_ptr src_node, else free (e); } + else if (t == ANTI_DEP && dt == REG_DEP) + free (e); /* We can fix broken anti register deps using reg-moves. */ else add_edge_to_ddg (g, e); } diff --git a/gcc/debug.c b/gcc/debug.c index 812920604ba..226dc4ec601 100644 --- a/gcc/debug.c +++ b/gcc/debug.c @@ -47,7 +47,8 @@ const struct gcc_debug_hooks do_nothing_debug_hooks = debug_nothing_tree, /* outlining_inline_function */ debug_nothing_rtx, /* label */ debug_nothing_int, /* handle_pch */ - debug_nothing_rtx /* var_location */ + debug_nothing_rtx, /* var_location */ + 0 /* start_end_main_source_file */ }; /* This file contains implementations of each debug hook that do diff --git a/gcc/debug.h b/gcc/debug.h index 547b7f68eab..3feccc53313 100644 --- a/gcc/debug.h +++ b/gcc/debug.h @@ -119,6 +119,10 @@ struct gcc_debug_hooks /* Called from final_scan_insn for any NOTE_INSN_VAR_LOCATION note. */ void (* var_location) (rtx); + + /* This is 1 if the debug writer wants to see start and end commands for the + main source files, and 0 otherwise. */ + int start_end_main_source_file; }; extern const struct gcc_debug_hooks *debug_hooks; diff --git a/gcc/doc/c-tree.texi b/gcc/doc/c-tree.texi index e0881cf2d80..a6033f16256 100644 --- a/gcc/doc/c-tree.texi +++ b/gcc/doc/c-tree.texi @@ -1363,7 +1363,7 @@ void process_stmt (stmt) @{ case IF_STMT: process_stmt (THEN_CLAUSE (stmt)); - /* More processing here. */ + /* @r{More processing here.} */ break; @dots{} diff --git a/gcc/doc/contrib.texi b/gcc/doc/contrib.texi index e1944ebba54..209d32c1191 100644 --- a/gcc/doc/contrib.texi +++ b/gcc/doc/contrib.texi @@ -1,5 +1,5 @@ @c Copyright (C) 1988,1989,1992,1993,1994,1995,1996,1997,1998,1999,2000, -@c 2001,2002,2003,2004 Free Software Foundation, Inc. +@c 2001,2002,2003,2004,2005 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. @@ -279,7 +279,7 @@ feeding the gcc.gnu.org box and saving its users tons of spam. Fred Fish for BeOS support and Ada fixes. @item -Ivan Fontes Garcia for the Portugese translation of the GCJ FAQ@. +Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ@. @item Peter Gerwinski for various bug fixes and the Pascal front end. @@ -982,6 +982,153 @@ Gilles Zunino for help porting Java to Irix. @end itemize +The following people are recognized for their contributions to GNAT, +the Ada front end of GCC: +@itemize @bullet +@item +Bernard Banner + +@item +Romain Berrendonner + +@item +Geert Bosch + +@item +Emmanuel Briot + +@item +Joel Brobecker + +@item +Ben Brosgol + +@item +Vincent Celier + +@item +Arnaud Charlet + +@item +Chien Chieng + +@item +Cyrille Comar + +@item +Cyrille Crozes + +@item +Robert Dewar + +@item +Gary Dismukes + +@item +Robert Duff + +@item +Ed Falis + +@item +Ramon Fernandez + +@item +Sam Figueroa + +@item +Vasiliy Fofanov + +@item +Michael Friess + +@item +Franco Gasperoni + +@item +Ted Giering + +@item +Matthew Gingell + +@item +Laurent Guerby + +@item +Jerome Guitton + +@item +Olivier Hainque + +@item +Jerome Hugues + +@item +Hristian Kirtchev + +@item +Jerome Lambourg + +@item +Bruno Leclerc + +@item +Albert Lee + +@item +Sean McNeil + +@item +Javier Miranda + +@item +Laurent Nana + +@item +Pascal Obry + +@item +Dong-Ik Oh + +@item +Laurent Pautet + +@item +Brett Porter + +@item +Thomas Quinot + +@item +Nicolas Roche + +@item +Pat Rogers + +@item +Jose Ruiz + +@item +Douglas Rupp + +@item +Sergey Rybin + +@item +Gail Schenker + +@item +Ed Schonberg + +@item +Nicolas Setton + +@item +Samuel Tardieu + +@end itemize + + In addition to the above, all of which also contributed time and energy in testing GCC, we would like to thank the following for their contributions to testing: diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi index ea38218b8c1..15d301ab7ef 100644 --- a/gcc/doc/cpp.texi +++ b/gcc/doc/cpp.texi @@ -1318,7 +1318,7 @@ name, and you wish to use the function sometimes. @smallexample extern void foo(void); -#define foo() /* optimized inline version */ +#define foo() /* @r{optimized inline version} */ @dots{} foo(); funcptr = foo; @@ -2211,7 +2211,7 @@ These definitions are effectively the same: @smallexample #define FOUR (2 + 2) #define FOUR (2 + 2) -#define FOUR (2 /* two */ + 2) +#define FOUR (2 /* @r{two} */ + 2) @end smallexample @noindent but these are not: @@ -3538,8 +3538,8 @@ require matching quotes. For example: @smallexample #define m This macro's fine and has an unmatched quote "/* This is not a comment. */ -/* This is a comment. The following #include directive - is ill-formed. */ +/* @r{This is a comment. The following #include directive + is ill-formed.} */ #include ? @var{b} -@findex >? -@cindex maximum operator -is the @dfn{maximum}, returning the larger of the numeric values @var{a} -and @var{b}. -@end table - -These operations are not primitive in ordinary C++, since you can -use a macro to return the minimum of two things in C++, as in the -following example. - -@smallexample -#define MIN(X,Y) ((X) < (Y) ? : (X) : (Y)) -@end smallexample - -@noindent -You might then use @w{@samp{int min = MIN (i, j);}} to set @var{min} to -the minimum value of variables @var{i} and @var{j}. - -However, side effects in @code{X} or @code{Y} may cause unintended -behavior. For example, @code{MIN (i++, j++)} will fail, incrementing -the smaller counter twice. The GNU C @code{typeof} extension allows you -to write safe macros that avoid this kind of problem (@pxref{Typeof}). -However, writing @code{MIN} and @code{MAX} as macros also forces you to -use function-call notation for a fundamental arithmetic operation. -Using GNU C++ extensions, you can write @w{@samp{int min = i ?} are built into the compiler, they properly -handle expressions with side-effects; @w{@samp{int min = i++ ?}) and +their compound forms (@samp{?=}) have been deprecated +and will be removed in a future version. Code using these operators +should be modified to use @code{std::min} and @code{std::max} instead. + The named return value extension has been deprecated, and is now removed from G++. diff --git a/gcc/doc/gcov.texi b/gcc/doc/gcov.texi index 3278a4b5a97..bfe4a3d204e 100644 --- a/gcc/doc/gcov.texi +++ b/gcc/doc/gcov.texi @@ -207,7 +207,7 @@ option is not supplied, it defaults to the current directory. @item -u @itemx --unconditional-branches -When branch counts are given, include those of unconditional branches. +When branch probabilities are given, include those of unconditional branches. Unconditional branches are normally not interesting. @end table @@ -232,9 +232,27 @@ program source code. The format is Additional block information may succeed each line, when requested by command line option. The @var{execution_count} is @samp{-} for lines -containing no code and @samp{#####} for lines which were never -executed. Some lines of information at the start have @var{line_number} -of zero. +containing no code and @samp{#####} for lines which were never executed. +Some lines of information at the start have @var{line_number} of zero. + +The preamble lines are of the form + +@smallexample +-:0:@var{tag}:@var{value} +@end smallexample + +The ordering and number of these preamble lines will be augmented as +@command{gcov} development progresses --- do not rely on them remaining +unchanged. Use @var{tag} to locate a particular preamble line. + +The additional block information is of the form + +@smallexample +@var{tag} @var{information} +@end smallexample + +The @var{information} is human readable, but designed to be simple +enough for machine parsing too. When printing percentages, 0% and 100% are only printed when the values are @emph{exactly} 0% and 100% respectively. Other values which would @@ -278,7 +296,6 @@ Here is a sample: -: 1:#include -: 2: -: 3:int main (void) -function main called 1 returned 1 blocks executed 75% 1: 4:@{ 1: 5: int i, total; -: 6: @@ -307,7 +324,6 @@ counts, and the output looks like this: -: 1:#include -: 2: -: 3:int main (void) -function main called 1 returned 1 blocks executed 75% 1: 4:@{ 1: 4-block 0 1: 5: int i, total; @@ -390,6 +406,10 @@ call 0 called 1 returned 100% -: 17:@} @end smallexample +For each function, a line is printed showing how many times the function +is called, how many times it returns and what percentage of the +function's blocks were executed. + For each basic block, a line is printed after the last line of the basic block describing the branch or call that ends the basic block. There can be multiple branches and calls listed for a single source line if there diff --git a/gcc/doc/include/gcc-common.texi b/gcc/doc/include/gcc-common.texi index e6396574936..30fc8f10cca 100644 --- a/gcc/doc/include/gcc-common.texi +++ b/gcc/doc/include/gcc-common.texi @@ -9,7 +9,7 @@ @c DEVELOPMENT is set to indicate an in-development version, @c as compared to a release version. When making a release @c branch, clear this. -@set DEVELOPMENT +@clear DEVELOPMENT @c Common macros to support generating man pages: diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 0a629a73f29..cd6bfcd1858 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -442,7 +442,7 @@ Please refer to the @uref{http://gcc.gnu.org/releases.html,,releases web page} for information on how to obtain GCC@. The full distribution includes the C, C++, Objective-C, Fortran 77, Fortran -(in case of GCC 3.5 and later), Java, and Ada (in case of GCC 3.1 and later) +(in case of GCC 4.0 and later), Java, and Ada (in case of GCC 3.1 and later) compilers. The full distribution also includes runtime libraries for C++, Objective-C, Fortran 77, Fortran, and Java. In GCC 3.0 and later versions, GNU compiler testsuites are also included in the full distribution. @@ -973,12 +973,6 @@ systems that support conditional traps). Division by zero checks use the break instruction. @end table -@item --enable-altivec -Specify that the target supports AltiVec vector enhancements. This -option will adjust the ABI for AltiVec enhancements, as well as generate -AltiVec code when appropriate. This option is only available for -PowerPC systems. - @item --enable-__cxa_atexit Define if you want to use __cxa_atexit, rather than atexit, to register C++ destructors for local statics and global objects. @@ -1041,6 +1035,13 @@ particularly useful if you intend to use several versions of GCC in parallel. This is currently supported by @samp{libgfortran}, @samp{libjava}, @samp{libmudflap}, @samp{libstdc++}, and @samp{libobjc}. +@item --with-java-home=@var{dirname} +This @samp{libjava} option overrides the default value of the +@samp{java.home} system property. It is also used to set +@samp{sun.boot.class.path} to @file{@var{dirname}/lib/rt.jar}. By +default @samp{java.home} is set to @file{@var{prefix}} and +@samp{sun.boot.class.path} to +@file{@var{datadir}/java/libgcj-@var{version}.jar}. @item --enable-languages=@var{lang1},@var{lang2},@dots{} Specify that only a particular subset of compilers and @@ -1829,7 +1830,7 @@ testsuite at @file{libjava/testsuite/libjava.mauve/mauve}, or by specifying the location of that tree when invoking @samp{make}, as in @samp{make MAUVEDIR=~/mauve check}. -@uref{http://www-124.ibm.com/developerworks/oss/cvs/jikes/~checkout~/jacks/jacks.html,,Jacks} +@uref{http://sources.redhat.com/mauve/,,Jacks} is a free testsuite that tests Java compiler front ends. This suite can be run as part of libgcj testing by placing the Jacks tree within the libjava testsuite at @file{libjava/testsuite/libjava.jacks/jacks}. @@ -2166,19 +2167,19 @@ GNU Compiler Collection on your machine. @ifhtml @itemize @item -@uref{#alpha*-*-*,,alpha*-*-*} +@uref{#alpha-x-x,,alpha*-*-*} @item -@uref{#alpha*-dec-osf*,,alpha*-dec-osf*} +@uref{#alpha-dec-osf,,alpha*-dec-osf*} @item -@uref{#alphaev5-cray-unicosmk*,,alphaev5-cray-unicosmk*} +@uref{#alphaev5-cray-unicosmk,,alphaev5-cray-unicosmk*} @item -@uref{#arc-*-elf,,arc-*-elf} +@uref{#arc-x-elf,,arc-*-elf} @item -@uref{#arm-*-elf,,arm-*-elf} -@uref{#arm-*-coff,,arm-*-coff} -@uref{#arm-*-aout,,arm-*-aout} +@uref{#arm-x-elf,,arm-*-elf} +@uref{#arm-x-coff,,arm-*-coff} +@uref{#arm-x-aout,,arm-*-aout} @item -@uref{#xscale-*-*,,xscale-*-*} +@uref{#xscale-x-x,,xscale-*-*} @item @uref{#avr,,avr} @item @@ -2186,39 +2187,37 @@ GNU Compiler Collection on your machine. @item @uref{#dos,,DOS} @item -@uref{#*-*-freebsd*,,*-*-freebsd*} +@uref{#x-x-freebsd,,*-*-freebsd*} @item @uref{#h8300-hms,,h8300-hms} @item -@uref{#hppa*-hp-hpux*,,hppa*-hp-hpux*} -@item -@uref{#hppa*-hp-hpux10,,hppa*-hp-hpux10} +@uref{#hppa-hp-hpux,,hppa*-hp-hpux*} @item -@uref{#hppa*-hp-hpux11,,hppa*-hp-hpux11} +@uref{#hppa-hp-hpux10,,hppa*-hp-hpux10} @item -@uref{#*-*-linux-gnu,,*-*-linux-gnu} +@uref{#hppa-hp-hpux11,,hppa*-hp-hpux11} @item -@uref{#ix86-*-linux*aout,,i?86-*-linux*aout} +@uref{#x-x-linux-gnu,,*-*-linux-gnu} @item -@uref{#ix86-*-linux*,,i?86-*-linux*} +@uref{#ix86-x-linuxaout,,i?86-*-linux*aout} @item -@uref{#ix86-*-sco3.2v5*,,i?86-*-sco3.2v5*} +@uref{#ix86-x-linux,,i?86-*-linux*} @item -@uref{#ix86-*-udk,,i?86-*-udk} +@uref{#ix86-x-sco3.2v5,,i?86-*-sco3.2v5*} @item -@uref{#ix86-*-esix,,i?86-*-esix} +@uref{#ix86-x-udk,,i?86-*-udk} @item -@uref{#ia64-*-linux,,ia64-*-linux} +@uref{#ia64-x-linux,,ia64-*-linux} @item -@uref{#ia64-*-hpux*,,ia64-*-hpux*} +@uref{#ia64-x-hpux,,ia64-*-hpux*} @item -@uref{#*-ibm-aix*,,*-ibm-aix*} +@uref{#x-ibm-aix,,*-ibm-aix*} @item -@uref{#ip2k-*-elf,,ip2k-*-elf} +@uref{#ip2k-x-elf,,ip2k-*-elf} @item -@uref{#iq2000-*-elf,,iq2000-*-elf} +@uref{#iq2000-x-elf,,iq2000-*-elf} @item -@uref{#m32r-*-elf,,m32r-*-elf} +@uref{#m32r-x-elf,,m32r-*-elf} @item @uref{#m6811-elf,,m6811-elf} @item @@ -2226,63 +2225,61 @@ GNU Compiler Collection on your machine. @item @uref{#m68k-hp-hpux,,m68k-hp-hpux} @item -@uref{#mips-*-*,,mips-*-*} +@uref{#mips-x-x,,mips-*-*} @item @uref{#mips-sgi-irix5,,mips-sgi-irix5} @item @uref{#mips-sgi-irix6,,mips-sgi-irix6} @item -@uref{#powerpc*-*-*,,powerpc*-*-*, powerpc-*-sysv4} +@uref{#powerpc-x-x,,powerpc*-*-*, powerpc-*-sysv4} @item -@uref{#powerpc-*-darwin*,,powerpc-*-darwin*} +@uref{#powerpc-x-darwin,,powerpc-*-darwin*} @item -@uref{#powerpc-*-elf,,powerpc-*-elf, powerpc-*-sysv4} +@uref{#powerpc-x-elf,,powerpc-*-elf, powerpc-*-sysv4} @item -@uref{#powerpc-*-linux-gnu*,,powerpc-*-linux-gnu*} +@uref{#powerpc-x-linux-gnu,,powerpc*-*-linux-gnu*} @item -@uref{#powerpc-*-netbsd*,,powerpc-*-netbsd*} +@uref{#powerpc-x-netbsd,,powerpc-*-netbsd*} @item -@uref{#powerpc-*-eabiaix,,powerpc-*-eabiaix} +@uref{#powerpc-x-eabisim,,powerpc-*-eabisim} @item -@uref{#powerpc-*-eabisim,,powerpc-*-eabisim} +@uref{#powerpc-x-eabi,,powerpc-*-eabi} @item -@uref{#powerpc-*-eabi,,powerpc-*-eabi} +@uref{#powerpcle-x-elf,,powerpcle-*-elf, powerpcle-*-sysv4} @item -@uref{#powerpcle-*-elf,,powerpcle-*-elf, powerpcle-*-sysv4} +@uref{#powerpcle-x-eabisim,,powerpcle-*-eabisim} @item -@uref{#powerpcle-*-eabisim,,powerpcle-*-eabisim} +@uref{#powerpcle-x-eabi,,powerpcle-*-eabi} @item -@uref{#powerpcle-*-eabi,,powerpcle-*-eabi} +@uref{#s390-x-linux,,s390-*-linux*} @item -@uref{#s390-*-linux*,,s390-*-linux*} +@uref{#s390x-x-linux,,s390x-*-linux*} @item -@uref{#s390x-*-linux*,,s390x-*-linux*} +@uref{#s390x-ibm-tpf,,s390x-ibm-tpf*} @item -@uref{#s390x-ibm-tpf*,,s390x-ibm-tpf*} +@uref{#x-x-solaris2,,*-*-solaris2*} @item -@uref{#*-*-solaris2*,,*-*-solaris2*} -@item -@uref{#sparc-sun-solaris2*,,sparc-sun-solaris2*} +@uref{#sparc-sun-solaris2,,sparc-sun-solaris2*} @item @uref{#sparc-sun-solaris2.7,,sparc-sun-solaris2.7} @item -@uref{#sparc-*-linux*,,sparc-*-linux*} +@uref{#sparc-x-linux,,sparc-*-linux*} @item -@uref{#sparc64-*-solaris2*,,sparc64-*-solaris2*} +@uref{#sparc64-x-solaris2,,sparc64-*-solaris2*} @item -@uref{#sparcv9-*-solaris2*,,sparcv9-*-solaris2*} +@uref{#sparcv9-x-solaris2,,sparcv9-*-solaris2*} @item -@uref{#*-*-sysv*,,*-*-sysv*} +@uref{#x-x-sysv,,*-*-sysv*} @item @uref{#vax-dec-ultrix,,vax-dec-ultrix} @item -@uref{#*-*-vxworks*,,*-*-vxworks*} +@uref{#x-x-vxworks,,*-*-vxworks*} @item -@uref{#x86_64-*-*,,x86_64-*-*, amd64-*-*} +@uref{#x86_64-x-x,,x86_64-*-*, amd64-*-*} @item -@uref{#xtensa-*-elf,,xtensa-*-elf} +@uref{#xtensa-x-elf,,xtensa-*-elf} @item -@uref{#xtensa-*-linux*,,xtensa-*-linux*} +@uref{#xtensa-x-linux,,xtensa-*-linux*} @item @uref{#windows,,Microsoft Windows} @item @@ -2302,7 +2299,7 @@ GNU Compiler Collection on your machine.
@end html -@heading @anchor{alpha*-*-*}alpha*-*-* +@heading @anchor{alpha-x-x}alpha*-*-* This section contains general configuration information for all alpha-based platforms using ELF (in particular, ignore this section for @@ -2317,7 +2314,7 @@ shared libraries. @html
@end html -@heading @anchor{alpha*-dec-osf*}alpha*-dec-osf* +@heading @anchor{alpha-dec-osf}alpha*-dec-osf* Systems using processors that implement the DEC Alpha architecture and are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq Tru64 UNIX) operating system, for example the DEC Alpha AXP systems. @@ -2398,7 +2395,7 @@ provide a fix shortly. @html
@end html -@heading @anchor{alphaev5-cray-unicosmk*}alphaev5-cray-unicosmk* +@heading @anchor{alphaev5-cray-unicosmk}alphaev5-cray-unicosmk* Cray T3E systems running Unicos/Mk. This port is incomplete and has many known bugs. We hope to improve the @@ -2425,15 +2422,15 @@ failure. @html
@end html -@heading @anchor{arc-*-elf}arc-*-elf +@heading @anchor{arc-x-elf}arc-*-elf Argonaut ARC processor. This configuration is intended for embedded systems. @html
@end html -@heading @anchor{arm-*-elf}arm-*-elf -@heading @anchor{xscale-*-*}xscale-*-* +@heading @anchor{arm-x-elf}arm-*-elf +@heading @anchor{xscale-x-x}xscale-*-* ARM-family processors. Subtargets that use the ELF object format require GNU binutils 2.13 or newer. Such subtargets include: @code{arm-*-freebsd}, @code{arm-*-netbsdelf}, @code{arm-*-*linux}, @@ -2442,7 +2439,7 @@ require GNU binutils 2.13 or newer. Such subtargets include: @html
@end html -@heading @anchor{arm-*-coff}arm-*-coff +@heading @anchor{arm-x-coff}arm-*-coff ARM-family processors. Note that there are two different varieties of PE format subtarget supported: @code{arm-wince-pe} and @code{arm-pe} as well as a standard COFF target @code{arm-*-coff}. @@ -2450,7 +2447,7 @@ of PE format subtarget supported: @code{arm-wince-pe} and @html
@end html -@heading @anchor{arm-*-aout}arm-*-aout +@heading @anchor{arm-x-aout}arm-*-aout ARM-family processors. These targets support the AOUT file format: @code{arm-*-aout}, @code{arm-*-netbsd}. @@ -2576,7 +2573,7 @@ and includes all the necessary compilation tools and libraries. @html
@end html -@heading @anchor{*-*-freebsd*}*-*-freebsd* +@heading @anchor{x-x-freebsd}*-*-freebsd* The version of binutils installed in @file{/usr/bin} probably works with this release of GCC@. However, on FreeBSD 4, bootstrapping against the @@ -2637,7 +2634,7 @@ longer a multiple of 2 bytes. @html
@end html -@heading @anchor{hppa*-hp-hpux*}hppa*-hp-hpux* +@heading @anchor{hppa-hp-hpux}hppa*-hp-hpux* Support for HP-UX version 9 and older was discontinued in GCC 3.4. We @emph{highly} recommend using gas/binutils on all hppa platforms; @@ -2665,7 +2662,7 @@ configuring if you want a model other than PROCESSOR_8000. The macro TARGET_SCHED_DEFAULT can be defined in BOOT_CFLAGS if a different default scheduling model is desired. -As of GCC 3.5, GCC uses the UNIX 95 namespace for HP-UX 10.10 +As of GCC 4.0, GCC uses the UNIX 95 namespace for HP-UX 10.10 through 11.00, and the UNIX 98 namespace for HP-UX 11.11 and later. This namespace change might cause problems when bootstrapping with an earlier version of GCC or the HP compiler as essentially the same @@ -2680,7 +2677,7 @@ More specific information to @samp{hppa*-hp-hpux*} targets follows. @html
@end html -@heading @anchor{hppa*-hp-hpux10}hppa*-hp-hpux10 +@heading @anchor{hppa-hp-hpux10}hppa*-hp-hpux10 For hpux10.20, we @emph{highly} recommend you pick up the latest sed patch @code{PHCO_19798} from HP@. HP has two sites which provide patches free of @@ -2706,10 +2703,10 @@ the 3-stage comparison test to fail during a @samp{make bootstrap}. You should be able to continue by saying @samp{make all} after getting the failure from @samp{make bootstrap}. -GCC 3.5 requires CVS binutils as of April 28, 2004 or later. Earlier +GCC 4.0 requires CVS binutils as of April 28, 2004 or later. Earlier versions require binutils 2.8 or later. -The C++ ABI has changed incompatibly in GCC 3.5. COMDAT subspaces are +The C++ ABI has changed incompatibly in GCC 4.0. COMDAT subspaces are used for one-only code and data. This resolves many of the previous problems in using C++ on this target. However, the ABI is not compatible with the one implemented under HP-UX 11 using secondary definitions. @@ -2717,7 +2714,7 @@ with the one implemented under HP-UX 11 using secondary definitions. @html
@end html -@heading @anchor{hppa*-hp-hpux11}hppa*-hp-hpux11 +@heading @anchor{hppa-hp-hpux11}hppa*-hp-hpux11 GCC 3.0 and up support HP-UX 11. GCC 2.95.x is not supported and cannot be used to compile GCC 3.0 and up. @@ -2782,7 +2779,7 @@ This has been been reported to sometimes occur in unified builds of binutils and GCC@. GCC 3.0 through 3.2 require binutils 2.11 or above. GCC 3.3 through -GCC 3.5 require binutils 2.14 or later. +GCC 4.0 require binutils 2.14 or later. Although the HP assembler can be used for an initial build, it shouldn't be used with any languages other than C and perhaps Fortran due to its @@ -2849,7 +2846,7 @@ This port still is undergoing significant development. @html
@end html -@heading @anchor{*-*-linux-gnu}*-*-linux-gnu +@heading @anchor{x-x-linux-gnu}*-*-linux-gnu Versions of libstdc++-v3 starting with 3.2.1 require bugfixes present in glibc 2.2.5 and later. More information is available in the @@ -2858,14 +2855,14 @@ libstdc++-v3 documentation. @html
@end html -@heading @anchor{ix86-*-linux*aout}i?86-*-linux*aout +@heading @anchor{ix86-x-linuxaout}i?86-*-linux*aout Use this configuration to generate @file{a.out} binaries on Linux-based GNU systems. This configuration is being superseded. @html
@end html -@heading @anchor{ix86-*-linux*}i?86-*-linux* +@heading @anchor{ix86-x-linux}i?86-*-linux* As of GCC 3.3, binutils 2.13.1 or later is required for this platform. See @uref{http://gcc.gnu.org/PR10877,,bug 10877} for more information. @@ -2877,7 +2874,7 @@ found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}. @html
@end html -@heading @anchor{ix86-*-sco3.2v5*}i?86-*-sco3.2v5* +@heading @anchor{ix86-x-sco3.2v5}i?86-*-sco3.2v5* Use this for the SCO OpenServer Release 5 family of operating systems. Unlike earlier versions of GCC, the ability to generate COFF with this @@ -2921,7 +2918,7 @@ GCC, version 2.95.3. It is useful for bootstrapping this version. @html
@end html -@heading @anchor{ix86-*-udk}i?86-*-udk +@heading @anchor{ix86-x-udk}i?86-*-udk This target emulates the SCO Universal Development Kit and requires that package be installed. (If it is installed, you will have a @@ -2957,7 +2954,7 @@ have installed. @html
@end html -@heading @anchor{ia64-*-linux}ia64-*-linux +@heading @anchor{ia64-x-linux}ia64-*-linux IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux. @@ -2977,7 +2974,7 @@ more major ABI changes are expected. @html
@end html -@heading @anchor{ia64-*-hpux*}ia64-*-hpux* +@heading @anchor{ia64-x-hpux}ia64-*-hpux* Building GCC on this target requires the GNU Assembler. The bundled HP assembler will not work. To prevent GCC from using the wrong assembler, the option @option{--with-gnu-as} may be necessary. @@ -2992,12 +2989,16 @@ removed and the system libunwind library will always be used.
@end html -@heading @anchor{*-ibm-aix*}*-ibm-aix* +@heading @anchor{x-ibm-aix}*-ibm-aix* Support for AIX version 3 and older was discontinued in GCC 3.4. AIX Make frequently has problems with GCC makefiles. GNU Make 3.79.1 or newer is recommended to build on this platform. +``out of memory'' bootstrap failures may indicate a problem with +process resource limits (ulimit). Hard limits are configured in the +@file{/etc/security/limits} system configuration file. + To speed up the configuration phases of bootstrapping and installing GCC, one may use GNU Bash instead of AIX @command{/bin/sh}, e.g., @@ -3117,7 +3118,7 @@ switch and using the configure option @option{--with-cpu-@var{cpu_type}}. @html
@end html -@heading @anchor{ip2k-*-elf}ip2k-*-elf +@heading @anchor{ip2k-x-elf}ip2k-*-elf Ubicom IP2022 micro controller. This configuration is intended for embedded systems. There are no standard Unix configurations. @@ -3127,14 +3128,14 @@ Use @samp{configure --target=ip2k-elf --enable-languages=c} to configure GCC@. @html
@end html -@heading @anchor{iq2000-*-elf}iq2000-*-elf +@heading @anchor{iq2000-x-elf}iq2000-*-elf Vitesse IQ2000 processors. These are used in embedded applications. There are no standard Unix configurations. @html
@end html -@heading @anchor{m32r-*-elf}m32r-*-elf +@heading @anchor{m32r-x-elf}m32r-*-elf Renesas M32R processor. This configuration is intended for embedded systems. @@ -3208,7 +3209,7 @@ to look like: @html
@end html -@heading @anchor{mips-*-*}mips-*-* +@heading @anchor{mips-x-x}mips-*-* If on a MIPS system you get an error message saying ``does not have gp sections for all it's [sic] sectons [sic]'', don't worry about it. This happens whenever you use GAS with the MIPS linker, but there is not @@ -3354,7 +3355,7 @@ information about using GCC on IRIX platforms. @html
@end html -@heading @anchor{powerpc*-*-*}powerpc-*-* +@heading @anchor{powerpc-x-x}powerpc-*-* You can specify a default version for the @option{-mcpu=@var{cpu_type}} switch by using the configure option @option{--with-cpu-@var{cpu_type}}. @@ -3362,7 +3363,7 @@ switch by using the configure option @option{--with-cpu-@var{cpu_type}}. @html
@end html -@heading @anchor{powerpc-*-darwin*}powerpc-*-darwin* +@heading @anchor{powerpc-x-darwin}powerpc-*-darwin* PowerPC running Darwin (Mac OS X kernel). Pre-installed versions of Mac OS X may not include any developer tools, @@ -3380,22 +3381,22 @@ are generally for backwards compatibility and best avoided. @html
@end html -@heading @anchor{powerpc-*-elf}powerpc-*-elf, powerpc-*-sysv4 +@heading @anchor{powerpc-x-elf}powerpc-*-elf, powerpc-*-sysv4 PowerPC system in big endian mode, running System V.4. @html
@end html -@heading @anchor{powerpc-*-linux-gnu*}powerpc-*-linux-gnu* +@heading @anchor{powerpc-x-linux-gnu}powerpc*-*-linux-gnu* You will need -@uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.13.90.0.10} +@uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.15} or newer for a working GCC@. @html
@end html -@heading @anchor{powerpc-*-netbsd*}powerpc-*-netbsd* +@heading @anchor{powerpc-x-netbsd}powerpc-*-netbsd* PowerPC system in big endian mode running NetBSD@. To build the documentation you will need Texinfo version 4.2 (NetBSD 1.5.1 included Texinfo version 3.12). @@ -3403,51 +3404,51 @@ Texinfo version 3.12). @html
@end html -@heading @anchor{powerpc-*-eabisim}powerpc-*-eabisim +@heading @anchor{powerpc-x-eabisim}powerpc-*-eabisim Embedded PowerPC system in big endian mode for use in running under the PSIM simulator. @html
@end html -@heading @anchor{powerpc-*-eabi}powerpc-*-eabi +@heading @anchor{powerpc-x-eabi}powerpc-*-eabi Embedded PowerPC system in big endian mode. @html
@end html -@heading @anchor{powerpcle-*-elf}powerpcle-*-elf, powerpcle-*-sysv4 +@heading @anchor{powerpcle-x-elf}powerpcle-*-elf, powerpcle-*-sysv4 PowerPC system in little endian mode, running System V.4. @html
@end html -@heading @anchor{powerpcle-*-eabisim}powerpcle-*-eabisim +@heading @anchor{powerpcle-x-eabisim}powerpcle-*-eabisim Embedded PowerPC system in little endian mode for use in running under the PSIM simulator. @html
@end html -@heading @anchor{powerpcle-*-eabi}powerpcle-*-eabi +@heading @anchor{powerpcle-x-eabi}powerpcle-*-eabi Embedded PowerPC system in little endian mode. @html
@end html -@heading @anchor{s390-*-linux*}s390-*-linux* +@heading @anchor{s390-x-linux}s390-*-linux* S/390 system running GNU/Linux for S/390@. @html
@end html -@heading @anchor{s390x-*-linux*}s390x-*-linux* +@heading @anchor{s390x-x-linux}s390x-*-linux* zSeries system (64-bit) running GNU/Linux for zSeries@. @html
@end html -@heading @anchor{s390x-ibm-tpf*}s390x-ibm-tpf* +@heading @anchor{s390x-ibm-tpf}s390x-ibm-tpf* zSeries system (64-bit) running TPF@. This platform is supported as cross-compilation target only. @@ -3458,7 +3459,7 @@ supported as cross-compilation target only. @c with 2.0 until 2.6, 7, 8, etc. Solaris 1 was a marketing name for @c SunOS 4 releases which we don't use to avoid confusion. Solaris @c alone is too unspecific and must be avoided. -@heading @anchor{*-*-solaris2*}*-*-solaris2* +@heading @anchor{x-x-solaris2}*-*-solaris2* Sun does not ship a C compiler with Solaris 2. To bootstrap and install GCC you first have to install a pre-built compiler, see the @@ -3542,7 +3543,7 @@ SPARC, 117172-11 or newer for Intel) that address this problem. @html
@end html -@heading @anchor{sparc-sun-solaris2*}sparc-sun-solaris2* +@heading @anchor{sparc-sun-solaris2}sparc-sun-solaris2* When GCC is configured to use binutils 2.11.2 or later the binaries produced are smaller than the ones produced using Sun's native tools; @@ -3664,7 +3665,7 @@ This bug has been fixed in the final 5.0 version of the assembler. @html
@end html -@heading @anchor{sparc-*-linux*}sparc-*-linux* +@heading @anchor{sparc-x-linux}sparc-*-linux* GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4 or newer on this platform. All earlier binutils and glibc @@ -3674,7 +3675,7 @@ releases mishandled unaligned relocations on @code{sparc-*-*} targets. @html
@end html -@heading @anchor{sparc64-*-solaris2*}sparc64-*-solaris2* +@heading @anchor{sparc64-x-solaris2}sparc64-*-solaris2* The following compiler flags must be specified in the configure step in order to bootstrap this target with the Sun compiler: @@ -3689,14 +3690,14 @@ specifies the SPARC-V9 architecture to the Sun linker and assembler. @html
@end html -@heading @anchor{sparcv9-*-solaris2*}sparcv9-*-solaris2* +@heading @anchor{sparcv9-x-solaris2}sparcv9-*-solaris2* This is a synonym for sparc64-*-solaris2*. @html
@end html -@heading @anchor{#*-*-sysv*}*-*-sysv* +@heading @anchor{x-x-sysv}*-*-sysv* On System V release 3, you may get this error message while linking: @@ -3737,7 +3738,7 @@ in some cases (for example, when @code{alloca} is used). @html
@end html -@heading @anchor{*-*-vxworks*}*-*-vxworks* +@heading @anchor{x-x-vxworks}*-*-vxworks* Support for VxWorks is in flux. At present GCC supports @emph{only} the very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC@. We welcome patches for other architectures supported by VxWorks 5.5. @@ -3772,7 +3773,7 @@ VxWorks will incorporate this module.) @html
@end html -@heading @anchor{x86_64-*-*}x86_64-*-*, amd64-*-* +@heading @anchor{x86_64-x-x}x86_64-*-*, amd64-*-* GCC supports the x86-64 architecture implemented by the AMD64 processor (amd64-*-* is an alias for x86_64-*-*) on GNU/Linux, FreeBSD and NetBSD@. @@ -3782,7 +3783,7 @@ both 64-bit x86-64 and 32-bit x86 code (via the @option{-m32} switch). @html
@end html -@heading @anchor{xtensa-*-elf}xtensa-*-elf +@heading @anchor{xtensa-x-elf}xtensa-*-elf This target is intended for embedded Xtensa systems using the @samp{newlib} C library. It uses ELF but does not support shared @@ -3800,7 +3801,7 @@ which you can use to replace the default header file. @html
@end html -@heading @anchor{xtensa-*-linux*}xtensa-*-linux* +@heading @anchor{xtensa-x-linux}xtensa-*-linux* This target is for Xtensa systems running GNU/Linux. It supports ELF shared objects and the GNU C library (glibc). It also generates diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8cf5ed9493f..09d8a9c0336 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -188,7 +188,7 @@ in the following sections. -Weffc++ -Wno-deprecated @gol -Wno-non-template-friend -Wold-style-cast @gol -Woverloaded-virtual -Wno-pmf-conversions @gol --Wsign-promo -Wsynth} +-Wsign-promo} @item Objective-C and Objective-C++ Language Options @xref{Objective-C and Objective-C++ Dialect Options,,Options Controlling @@ -286,7 +286,7 @@ Objective-C and Objective-C++ Dialects}. -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol -fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol -fcaller-saves -fcprop-registers -fcse-follow-jumps @gol --fcse-follow-jumps -fcse-skip-blocks -fcx-limited-range -fdata-sections @gol +-fcse-skip-blocks -fcx-limited-range -fdata-sections @gol -fdelayed-branch -fdelete-null-pointer-checks @gol -fexpensive-optimizations -ffast-math -ffloat-store @gol -fforce-addr -fforce-mem -ffunction-sections @gol @@ -321,6 +321,7 @@ Objective-C and Objective-C++ Dialects}. -ftree-loop-linear -ftree-loop-im -ftree-loop-ivcanon -fivopts @gol -ftree-dominator-opts -ftree-dse -ftree-copyrename @gol -ftree-ch -ftree-sra -ftree-ter -ftree-lrs -ftree-fre -ftree-vectorize @gol +-fweb @gol --param @var{name}=@var{value} -O -O0 -O1 -O2 -O3 -Os} @@ -547,7 +548,7 @@ Objective-C and Objective-C++ Dialects}. -mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfp64 @gol -mhard-float -msoft-float -msingle-float -mdouble-float @gol -mpaired-single -mips3d @gol --mint64 -mlong64 -mlong32 @gol +-mint64 -mlong64 -mlong32 -msym32 -mno-sym32 @gol -G@var{num} -membedded-data -mno-embedded-data @gol -muninit-const-in-rodata -mno-uninit-const-in-rodata @gol -msplit-addresses -mno-split-addresses @gol @@ -557,7 +558,8 @@ Objective-C and Objective-C++ Dialects}. -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls @gol -mmad -mno-mad -mfused-madd -mno-fused-madd -nocpp @gol -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 @gol --mfix-vr4120 -mno-fix-vr4120 -mfix-sb1 -mno-fix-sb1 @gol +-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 @gol +-mfix-sb1 -mno-fix-sb1 @gol -mflush-func=@var{func} -mno-flush-func @gol -mbranch-likely -mno-branch-likely @gol -mfp-exceptions -mno-fp-exceptions @gol @@ -1102,7 +1104,7 @@ ISO C90 as modified in amendment 1. @itemx iso9899:1999 @itemx iso9899:199x ISO C99. Note that this standard is not yet fully supported; see -@w{@uref{http://gcc.gnu.org/c99status.html}} for more information. The +@w{@uref{http://gcc.gnu.org/gcc-4.0/c99status.html}} for more information. The names @samp{c9x} and @samp{iso9899:199x} are deprecated. @item gnu89 @@ -1790,13 +1792,6 @@ enumerated type to a signed type, over a conversion to an unsigned type of the same size. Previous versions of G++ would try to preserve unsignedness, but the standard mandates the current behavior. -@item -Wsynth @r{(C++ only)} -@opindex Wsynth -@cindex warning for synthesized methods -@cindex synthesized methods, warning -Warn when G++'s synthesis behavior does not match that of cfront. For -instance: - @smallexample struct A @{ operator int (); @@ -3110,7 +3105,7 @@ inline functions declared in system headers. The compiler uses a variety of heuristics to determine whether or not to inline a function. For example, the compiler takes into account -the size of the function being inlined and the the amount of inlining +the size of the function being inlined and the amount of inlining that has already been done in the current function. Therefore, seemingly insignificant changes in the source program can cause the warnings produced by @option{-Winline} to appear or disappear. @@ -3462,7 +3457,7 @@ conversion, to the file @file{@var{file}.18.ce2}. @opindex fdump-rtl-btl @opindex fdump-rtl-dbr @option{-dd} and @option{-fdump-rtl-btl} enable dumping after branch -target load optimization, to to @file{@var{file}.31.btl}. @option{-dd} +target load optimization, to @file{@var{file}.31.btl}. @option{-dd} and @option{-fdump-rtl-dbr} enable dumping after delayed branch scheduling, to @file{@var{file}.36.dbr}. @@ -4090,10 +4085,10 @@ compilation time. -fif-conversion2 @gol -ftree-ccp @gol -ftree-dce @gol --ftree-dom @gol +-ftree-dominator-opts @gol -ftree-dse @gol -ftree-ter @gol --ftree-live_range_split @gol +-ftree-lrs @gol -ftree-sra @gol -ftree-copyrename @gol -ftree-fre @gol @@ -4103,6 +4098,10 @@ compilation time. @option{-O} also turns on @option{-fomit-frame-pointer} on machines where doing so does not interfere with debugging. +@option{-O} doesn't turn on @option{-ftree-sra} for the Ada compiler. +This option must be explicitly specified on the command line to be +enabled for the Ada compiler. + @item -O2 @opindex O2 Optimize even more. GCC performs nearly all supported optimizations @@ -4705,15 +4704,15 @@ at @option{-O} and higher. Perform linear loop transformations on tree. This flag can improve cache performance and allow further loop optimizations to take place. -@item -ftree-lim -Perform loop invariant motion on trees. This pass moves only invartiants that -would be hard to handle on rtl level (function calls, operations that expand to +@item -ftree-loop-im +Perform loop invariant motion on trees. This pass moves only invariants that +would be hard to handle at RTL level (function calls, operations that expand to nontrivial sequences of insns). With @option{-funswitch-loops} it also moves operands of conditions that are invariant out of the loop, so that we can use just trivial invariantness analysis in loop unswitching. The pass also includes store motion. -@item -fivcanon +@item -ftree-loop-ivcanon Create a canonical counter for number of iterations in the loop for that determining number of iterations requires complicated analysis. Later optimizations then may determine the number easily. Useful especially @@ -5442,7 +5441,7 @@ This number sets the maximum number of instructions (counted in GCC's internal representation) in a single function that the tree inliner will consider for inlining. This only affects functions declared inline and methods implemented in a class declaration (C++). -The default value is 500. +The default value is 450. @item max-inline-insns-auto When you use @option{-finline-functions} (included in @option{-O3}), @@ -5450,7 +5449,7 @@ a lot of functions that would otherwise not be considered for inlining by the compiler will be investigated. To those functions, a different (more restrictive) limit compared to functions declared inline can be applied. -The default value is 120. +The default value is 90. @item large-function-insns The limit specifying really large functions. For functions larger than this @@ -5459,7 +5458,7 @@ limit after inlining inlining is constrained by to avoid extreme compilation time caused by non-linear algorithms used by the backend. This parameter is ignored when @option{-funit-at-a-time} is not used. -The default value is 3000. +The default value is 2700. @item large-function-growth Specifies maximal growth of large function caused by inlining in percents. @@ -5482,7 +5481,7 @@ For functions declared inline @option{--param max-inline-insns-recursive} is taken into acount. For function not declared inline, recursive inlining happens only when @option{-finline-functions} (included in @option{-O3}) is enabled and @option{--param max-inline-insns-recursive-auto} is used. The -default value is 500. +default value is 450. @item max-inline-recursive-depth @itemx max-inline-recursive-depth-auto @@ -5492,7 +5491,16 @@ For functions declared inline @option{--param max-inline-recursive-depth} is taken into acount. For function not declared inline, recursive inlining happens only when @option{-finline-functions} (included in @option{-O3}) is enabled and @option{--param max-inline-recursive-depth-auto} is used. The -default value is 500. +default value is 450. + +@item inline-call-cost +Specify cost of call instruction relative to simple arithmetics operations +(having cost of 1). Increasing this cost disqualify inlinining of non-leaf +functions and at same time increase size of leaf function that is believed to +reduce function size by being inlined. In effect it increase amount of +inlining for code having large abstraction penalty (many functions that just +pass the argumetns to other functions) and decrease inlining for code with low +abstraction penalty. Default value is 16. @item max-unrolled-insns The maximum number of instructions that a loop should have if that loop @@ -7266,7 +7274,7 @@ The subtype of the file created (like @samp{ppc7400} or @samp{ppc970} or that GCC is targetting, like @option{-mcpu} or @option{-march}. The @option{-force_cpusubtype_ALL} option can be used to override this. -The Darwin tools vary in their behaviour when presented with an ISA +The Darwin tools vary in their behavior when presented with an ISA mismatch. The assembler, @file{as}, will only permit instructions to be used that are valid for the subtype of the file it is generating, so you cannot put 64-bit instructions in an @samp{ppc750} object file. @@ -9660,6 +9668,15 @@ uses 64-bit @code{long}s, as does the 64-bit EABI; the others use 32-bit @code{long}s. Pointers are the same size as @code{long}s, or the same size as integer registers, whichever is smaller. +@item -msym32 +@itemx -mno-sym32 +@opindex msym32 +@opindex mno-sym32 +Assume (do not assume) that all symbols have 32-bit values, regardless +of the selected ABI@. This option is useful in combination with +@option{-mabi=64} and @option{-mno-abicalls} because it allows GCC +to generate shorter and faster references to symbolic addresses. + @item -G @var{num} @opindex G @cindex smaller data references (MIPS) @@ -9692,7 +9709,7 @@ This option is only meaningful in conjunction with @option{-membedded-data}. @opindex msplit-addresses @opindex mno-split-addresses Enable (disable) use of the @code{%hi()} and @code{%lo()} assembler -relocation operators. This option has been superceded by +relocation operators. This option has been superseded by @option{-mexplicit-relocs} but is retained for backwards compatibility. @item -mexplicit-relocs @@ -9820,6 +9837,14 @@ the @code{mips64vr*-elf} configurations. Other VR4120 errata require a nop to be inserted between certain pairs of instructions. These errata are handled by the assembler, not by GCC itself. +@item -mfix-vr4130 +@opindex mfix-vr4130 +Work around the VR4130 @code{mflo}/@code{mfhi} errata. The +workarounds are implemented by the assembler rather than by GCC, +although GCC will avoid using @code{mflo} and @code{mfhi} if the +VR4130 @code{macc}, @code{macchi}, @code{dmacc} and @code{dmacchi} +instructions are available instead. + @item -mfix-sb1 @itemx -mno-fix-sb1 @opindex mfix-sb1 @@ -10354,7 +10379,7 @@ Supported values for @var{cpu_type} are @samp{401}, @samp{403}, @samp{601}, @samp{602}, @samp{603}, @samp{603e}, @samp{604}, @samp{604e}, @samp{620}, @samp{630}, @samp{740}, @samp{7400}, @samp{7450}, @samp{750}, @samp{801}, @samp{821}, @samp{823}, -@samp{860}, @samp{970}, @samp{common}, @samp{ec603e}, @samp{G3}, +@samp{860}, @samp{970}, @samp{8540}, @samp{common}, @samp{ec603e}, @samp{G3}, @samp{G4}, @samp{G5}, @samp{power}, @samp{power2}, @samp{power3}, @samp{power4}, @samp{power5}, @samp{powerpc}, @samp{powerpc64}, @samp{rios}, @samp{rios1}, @samp{rios2}, @samp{rsc}, and @samp{rs64a}. @@ -11451,7 +11476,7 @@ on SPARC-V9 processors in 64-bit environments: @item -mlittle-endian @opindex mlittle-endian Generate code for a processor running in little-endian mode. It is only -available for a few configurations and most notably not on Solaris. +available for a few configurations and most notably not on Solaris and Linux. @item -m32 @itemx -m64 @@ -12607,7 +12632,7 @@ for creating and using precompiled headers. Any macros defined before the precompiled header is included must either be defined in the same way as when the precompiled header was generated, or must not affect the precompiled header, which usually -means that the they don't appear in the precompiled header at all. +means that they don't appear in the precompiled header at all. The @option{-D} option is one way to define a macro before a precompiled header is included; using a @code{#define} can also do it. diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index a2b992e4323..11b08820e94 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -1681,7 +1681,7 @@ A memory reference suitable for VFP load/store insns (reg+constant offset) A memory reference suitable for iWMMXt load/store instructions. @item Uq -A memory reference suitable for for the ARMv4 ldrsb instruction. +A memory reference suitable for the ARMv4 ldrsb instruction. @item AVR family---@file{avr.h} @table @code @@ -4678,9 +4678,9 @@ an equality comparison of a register and a large constant: (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] " @{ - /* Get the constant we are comparing against, C, and see what it + /* @r{Get the constant we are comparing against, C, and see what it looks like sign-extended to 16 bits. Then see what constant - could be XOR'ed with C to get the sign-extended value. */ + could be XOR'ed with C to get the sign-extended value.} */ int c = INTVAL (operands[2]); int sextc = (c << 16) >> 16; @@ -6111,7 +6111,7 @@ can be used for @acronym{RISC} processors, too. separated by commas. @var{patterns} is a string giving patterns of functional units -separated by comma. Currently pattern is is one unit or units +separated by comma. Currently pattern is one unit or units separated by white-spaces. The first construction (@samp{exclusion_set}) means that each diff --git a/gcc/doc/objc.texi b/gcc/doc/objc.texi index 481b51c09b8..795e281f726 100644 --- a/gcc/doc/objc.texi +++ b/gcc/doc/objc.texi @@ -56,7 +56,7 @@ FileStream *Stderr = nil; Stderr = [[FileStream new] initWithFd:2]; @} -/* Other methods here */ +/* @r{Other methods here} */ @@end @end smallexample @@ -84,7 +84,7 @@ method instead of @code{+initialize}: Stderr = [[FileStream new] initWithFd:2]; @} -/* Other methods here */ +/* @r{Other methods here} */ @@end @end smallexample diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index 2e7bca7ec1e..9858e47c767 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -3517,7 +3517,7 @@ on these machines should have a body which is a @code{parallel} that contains both the @code{call} expression and @code{clobber} expressions that indicate which registers are destroyed. Similarly, if the call instruction requires some register other than the stack -pointer that is not explicitly mentioned it its RTL, a @code{use} +pointer that is not explicitly mentioned in its RTL, a @code{use} subexpression should mention that register. Functions that are called are assumed to modify all registers listed in diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index f4927e80382..fd1d1cbb26e 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1269,10 +1269,10 @@ failures for a test run against the list of expected failures in Update this file when adding new failing tests to Mauve, or when fixing bugs in libgcj that had caused Mauve test failures. -The @uref{http://oss.software.ibm.com/developerworks/opensource/jacks/,, +The @uref{http://sources.redhat.com/mauve/,, Jacks} project provides a testsuite for Java compilers that can be used to test changes that affect the GCJ front end. This testsuite is run as -part of Java testing by placing the Jacks tree within the the libjava +part of Java testing by placing the Jacks tree within the libjava testsuite sources at @file{libjava/testsuite/libjava.jacks/jacks}. We encourage developers to contribute test cases to Mauve and Jacks. @@ -1321,8 +1321,8 @@ kind. A command @code{branch(end)} or @code{returns(end)} marks the end of a range without starting a new one. For example: @smallexample -if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ - /* branch(end) */ +if (i > 10 && j > i && j < 20) /* @r{branch(27 50 75)} */ + /* @r{branch(end)} */ foo (i, j); @end smallexample diff --git a/gcc/doc/standards.texi b/gcc/doc/standards.texi index c2418defd8d..2a439ad3014 100644 --- a/gcc/doc/standards.texi +++ b/gcc/doc/standards.texi @@ -79,7 +79,7 @@ as @dfn{AMD1}; the amended standard is sometimes known as @dfn{C94} or A new edition of the ISO C standard was published in 1999 as ISO/IEC 9899:1999, and is commonly known as @dfn{C99}. GCC has incomplete support for this standard version; see -@uref{http://gcc.gnu.org/c99status.html} for details. To select this +@uref{http://gcc.gnu.org/gcc-4.0/c99status.html} for details. To select this standard, use @option{-std=c99} or @option{-std=iso9899:1999}. (While in development, drafts of this standard version were referred to as @dfn{C9X}.) diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b6102e50d55..4bc284a60e6 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -849,7 +849,7 @@ checking the state of the option (documentation is elided for brevity). @smallexample [chip.c] -char *chip_alu = ""; /* Specify default here. */ +char *chip_alu = ""; /* @r{Specify default here.} */ [chip.h] extern char *chip_alu; @@ -1635,6 +1635,36 @@ the target machine. If you don't define this, the default is two words. @end defmac +@defmac LIBGCC2_LONG_DOUBLE_TYPE_SIZE +Define this macro if @code{LONG_DOUBLE_TYPE_SIZE} is not constant or +if you want routines in @file{libgcc2.a} for a size other than +@code{LONG_DOUBLE_TYPE_SIZE}. If you don't define this, the +default is @code{LONG_DOUBLE_TYPE_SIZE}. +@end defmac + +@defmac LIBGCC2_HAS_DF_MODE +Define this macro if neither @code{LIBGCC2_DOUBLE_TYPE_SIZE} nor +@code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is +@code{DFmode} but you want @code{DFmode} routines in @file{libgcc2.a} +anyway. If you don't define this and either @code{LIBGCC2_DOUBLE_TYPE_SIZE} +or @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is 64 then the default is 1, +otherwise it is 0. +@end defmac + +@defmac LIBGCC2_HAS_XF_MODE +Define this macro if @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is not +@code{XFmode} but you want @code{XFmode} routines in @file{libgcc2.a} +anyway. If you don't define this and @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} +is 80 then the default is 1, otherwise it is 0. +@end defmac + +@defmac LIBGCC2_HAS_TF_MODE +Define this macro if @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} is not +@code{TFmode} but you want @code{TFmode} routines in @file{libgcc2.a} +anyway. If you don't define this and @code{LIBGCC2_LONG_DOUBLE_TYPE_SIZE} +is 128 then the default is 1, otherwise it is 0. +@end defmac + @defmac TARGET_FLT_EVAL_METHOD A C expression for the value for @code{FLT_EVAL_METHOD} in @file{float.h}, assuming, if applicable, that the floating-point control word is in its @@ -4802,7 +4832,7 @@ This macro should evaluate to @code{true} if the integer comparison functions (like @code{__cmpdi2}) return 0 to indicate that the first operand is smaller than the second, 1 to indicate that they are equal, and 2 to indicate that the first operand is greater than the second. -If this macro evalutes to @code{false} the comparison functions return +If this macro evaluates to @code{false} the comparison functions return @minus{}1, 0, and 1 instead of 0, 1, and 2. If the target uses the routines in @file{libgcc.a}, you do not need to define this macro. @end defmac @@ -5502,7 +5532,7 @@ used to set a chunk of memory to a constant value, or whether some other mechanism will be used. Used by @code{__builtin_memset} when storing values other than constant zero and by @code{__builtin_strcpy} when when called with a constant source string. -Defaults to to 1 if @code{move_by_pieces_ninsns} returns less +Defaults to 1 if @code{move_by_pieces_ninsns} returns less than @code{MOVE_RATIO}. @end defmac @@ -9188,7 +9218,7 @@ arguments of @samp{#pragma pack}. @defmac TARGET_DEFAULT_PACK_STRUCT If your target requires a structure packing default other than 0 (meaning -the machine default), define this macro the the necessary value (in bytes). +the machine default), define this macro to the necessary value (in bytes). This must be a value that would also valid to be used with @samp{#pragma pack()} (that is, a small power of two). @end defmac diff --git a/gcc/doc/tree-ssa.texi b/gcc/doc/tree-ssa.texi index cef4212c05d..6aba70bbe9b 100644 --- a/gcc/doc/tree-ssa.texi +++ b/gcc/doc/tree-ssa.texi @@ -685,7 +685,7 @@ void f() The optimizers need to associate attributes with statements and variables during the optimization process. For instance, we need to -know what basic block does a statement belong to or whether a variable +know what basic block a statement belongs to or whether a variable has aliases. All these attributes are stored in data structures called annotations which are then linked to the field @code{ann} in @code{struct tree_common}. @@ -938,14 +938,14 @@ tree FOR_EACH_SSA_TREE_OPERAND @file{tree-ssa-operands.h}: @smallexample -#define SSA_OP_USE 0x01 /* Real USE operands. */ -#define SSA_OP_DEF 0x02 /* Real DEF operands. */ -#define SSA_OP_VUSE 0x04 /* VUSE operands. */ -#define SSA_OP_VMAYUSE 0x08 /* USE portion of V_MAY_DEFS. */ -#define SSA_OP_VMAYDEF 0x10 /* DEF portion of V_MAY_DEFS. */ -#define SSA_OP_VMUSTDEF 0x20 /* V_MUST_DEF definitions. */ - -/* These are commonly grouped operand flags. */ +#define SSA_OP_USE 0x01 /* @r{Real USE operands.} */ +#define SSA_OP_DEF 0x02 /* @r{Real DEF operands.} */ +#define SSA_OP_VUSE 0x04 /* @r{VUSE operands.} */ +#define SSA_OP_VMAYUSE 0x08 /* @r{USE portion of V_MAY_DEFS.} */ +#define SSA_OP_VMAYDEF 0x10 /* @r{DEF portion of V_MAY_DEFS.} */ +#define SSA_OP_VMUSTDEF 0x20 /* @r{V_MUST_DEF definitions.} */ + +/* @r{These are commonly grouped operand flags.} */ #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE | SSA_OP_VMAYUSE) #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VMAYDEF | SSA_OP_VMUSTDEF) #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 76661ba6d8b..66802cdfcdb 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -2468,7 +2468,12 @@ void dwarf2out_frame_finish (void) { /* Output call frame information. */ - if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) + if (write_symbols == DWARF2_DEBUG + || write_symbols == VMS_AND_DWARF2_DEBUG +#ifdef DWARF2_FRAME_INFO + || DWARF2_FRAME_INFO +#endif + ) output_call_frame_info (0); #ifndef TARGET_UNWIND_INFO @@ -3444,7 +3449,8 @@ const struct gcc_debug_hooks dwarf2_debug_hooks = dwarf2out_abstract_function, /* outlining_inline_function */ debug_nothing_rtx, /* label */ debug_nothing_int, /* handle_pch */ - dwarf2out_var_location + dwarf2out_var_location, + 1 /* start_end_main_source_file */ }; #endif @@ -10156,26 +10162,22 @@ tree_add_const_value_attribute (dw_die_ref var_die, tree decl) tree init = DECL_INITIAL (decl); tree type = TREE_TYPE (decl); - if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init - && initializer_constant_valid_p (init, type) == null_pointer_node) - /* OK */; - else + if (!init) return; - - switch (TREE_CODE (type)) - { - case INTEGER_TYPE: - if (host_integerp (init, 0)) - add_AT_unsigned (var_die, DW_AT_const_value, - tree_low_cst (init, 0)); - else - add_AT_long_long (var_die, DW_AT_const_value, - TREE_INT_CST_HIGH (init), - TREE_INT_CST_LOW (init)); - break; - - default:; - } + if (!TREE_READONLY (decl) || TREE_THIS_VOLATILE (decl)) + return; + if (TREE_CODE (type) != INTEGER_TYPE) + return; + if (TREE_CODE (init) != INTEGER_CST) + return; + + if (host_integerp (init, 0)) + add_AT_unsigned (var_die, DW_AT_const_value, + tree_low_cst (init, 0)); + else + add_AT_long_long (var_die, DW_AT_const_value, + TREE_INT_CST_HIGH (init), + TREE_INT_CST_LOW (init)); } /* Generate a DW_AT_name attribute given some string value to be included as @@ -10518,7 +10520,7 @@ add_abstract_origin_attribute (dw_die_ref die, tree origin) here. */ if (origin_die) - add_AT_die_ref (die, DW_AT_abstract_origin, origin_die); + add_AT_die_ref (die, DW_AT_abstract_origin, origin_die); } /* We do not currently support the pure_virtual attribute. */ @@ -11148,13 +11150,27 @@ gen_type_die_for_member (tree type, tree member, dw_die_ref context_die) if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) && ! lookup_decl_die (member)) { + dw_die_ref type_die; gcc_assert (!decl_ultimate_origin (member)); push_decl_scope (type); + type_die = lookup_type_die (type); if (TREE_CODE (member) == FUNCTION_DECL) - gen_subprogram_die (member, lookup_type_die (type)); + gen_subprogram_die (member, type_die); + else if (TREE_CODE (member) == FIELD_DECL) + { + /* Ignore the nameless fields that are used to skip bits but handle + C++ anonymous unions and structs. */ + if (DECL_NAME (member) != NULL_TREE + || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE + || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE) + { + gen_type_die (member_declared_type (member), type_die); + gen_field_die (member, type_die); + } + } else - gen_variable_die (member, lookup_type_die (type)); + gen_variable_die (member, type_die); pop_decl_scope (); } @@ -12435,7 +12451,7 @@ is_redundant_typedef (tree decl) return 0; } -/* Returns the DIE for decl or aborts. */ +/* Returns the DIE for decl or else. */ static dw_die_ref force_decl_die (tree decl) @@ -12488,8 +12504,7 @@ force_decl_die (tree decl) gcc_unreachable (); } - /* See if we can find the die for this deci now. - If not then abort. */ + /* We should be able to find the die for this decl now. */ if (!decl_die) decl_die = lookup_decl_die (decl); gcc_assert (decl_die); @@ -12498,7 +12513,7 @@ force_decl_die (tree decl) return decl_die; } -/* Returns the DIE for decl or aborts. */ +/* Returns the DIE for decl or else. */ static dw_die_ref force_type_die (tree type) @@ -12553,6 +12568,12 @@ declare_in_namespace (tree thing, dw_die_ref context_die) if (debug_info_level <= DINFO_LEVEL_TERSE) return; + /* If this decl is from an inlined function, then don't try to emit it in its + namespace, as we will get confused. It would have already been emitted + when the abstract instance of the inline function was emitted anyways. */ + if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing)) + return; + ns_context = setup_namespace_context (thing, context_die); if (ns_context != context_die) @@ -12840,7 +12861,29 @@ dwarf2out_imported_module_or_decl (tree decl, tree context) if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL) at_import_die = force_type_die (TREE_TYPE (decl)); else - at_import_die = force_decl_die (decl); + { + at_import_die = lookup_decl_die (decl); + if (!at_import_die) + { + /* If we're trying to avoid duplicate debug info, we may not have + emitted the member decl for this field. Emit it now. */ + if (TREE_CODE (decl) == FIELD_DECL) + { + tree type = DECL_CONTEXT (decl); + dw_die_ref type_context_die; + + if (TYPE_CONTEXT (type)) + if (TYPE_P (TYPE_CONTEXT (type))) + type_context_die = force_type_die (TYPE_CONTEXT (type)); + else + type_context_die = force_decl_die (TYPE_CONTEXT (type)); + else + type_context_die = comp_unit_die; + gen_type_die_for_member (type, decl, type_context_die); + } + at_import_die = force_decl_die (decl); + } + } /* OK, now we have DIEs for decl as well as scope. Emit imported die. */ if (TREE_CODE (decl) == NAMESPACE_DECL) @@ -13795,11 +13838,10 @@ dwarf2out_finish (const char *filename) output_ranges (); } - /* Have to end the primary source file. */ + /* Have to end the macro section. */ if (debug_info_level >= DINFO_LEVEL_VERBOSE) { named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); - dw2_asm_output_data (1, DW_MACINFO_end_file, "End file"); dw2_asm_output_data (1, 0, "End compilation unit"); } diff --git a/gcc/expr.c b/gcc/expr.c index ab7cf930d8b..0d4715bbb51 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -2877,19 +2877,14 @@ emit_move_complex (enum machine_mode mode, rtx x, rtx y) if (push_operand (x, mode)) return emit_move_complex_push (mode, x, y); - /* For memory to memory moves, optimal behavior can be had with the - existing block move logic. */ - if (MEM_P (x) && MEM_P (y)) - { - emit_block_move (x, y, GEN_INT (GET_MODE_SIZE (mode)), - BLOCK_OP_NO_LIBCALL); - return get_last_insn (); - } - /* See if we can coerce the target into moving both values at once. */ + /* Move floating point as parts. */ + if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT + && mov_optab->handlers[GET_MODE_INNER (mode)].insn_code != CODE_FOR_nothing) + try_int = false; /* Not possible if the values are inherently not adjacent. */ - if (GET_CODE (x) == CONCAT || GET_CODE (y) == CONCAT) + else if (GET_CODE (x) == CONCAT || GET_CODE (y) == CONCAT) try_int = false; /* Is possible if both are registers (or subregs of registers). */ else if (register_operand (x, mode) && register_operand (y, mode)) @@ -2907,7 +2902,18 @@ emit_move_complex (enum machine_mode mode, rtx x, rtx y) if (try_int) { - rtx ret = emit_move_via_integer (mode, x, y); + rtx ret; + + /* For memory to memory moves, optimal behavior can be had with the + existing block move logic. */ + if (MEM_P (x) && MEM_P (y)) + { + emit_block_move (x, y, GEN_INT (GET_MODE_SIZE (mode)), + BLOCK_OP_NO_LIBCALL); + return get_last_insn (); + } + + ret = emit_move_via_integer (mode, x, y); if (ret) return ret; } diff --git a/gcc/final.c b/gcc/final.c index bf5771aebfb..213ab5f7450 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -1,6 +1,7 @@ /* Convert RTL to assembler code and output it, for GNU compiler. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, - 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 + Free Software Foundation, Inc. This file is part of GCC. @@ -835,7 +836,7 @@ shorten_branches (rtx first ATTRIBUTE_UNUSED) max_log = log; max_skip = LABEL_ALIGN_MAX_SKIP; } - next = NEXT_INSN (insn); + next = next_nonnote_insn (insn); /* ADDR_VECs only take room if read-only data goes into the text section. */ if (JUMP_TABLES_IN_TEXT_SECTION || !HAVE_READONLY_DATA_SECTION) @@ -1677,6 +1678,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, #ifdef HAVE_cc0 rtx set; #endif + rtx next; insn_counter++; @@ -1932,10 +1934,11 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, fputs (ASM_APP_OFF, file); app_on = 0; } - if (NEXT_INSN (insn) != 0 - && JUMP_P (NEXT_INSN (insn))) + + next = next_nonnote_insn (insn); + if (next != 0 && JUMP_P (next)) { - rtx nextbody = PATTERN (NEXT_INSN (insn)); + rtx nextbody = PATTERN (next); /* If this label is followed by a jump-table, make sure we put the label in the read-only section. Also @@ -1956,7 +1959,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, targetm.asm_out.function_rodata_section (current_function_decl); #ifdef ADDR_VEC_ALIGN - log_align = ADDR_VEC_ALIGN (NEXT_INSN (insn)); + log_align = ADDR_VEC_ALIGN (next); #else log_align = exact_log2 (BIGGEST_ALIGNMENT / BITS_PER_UNIT); #endif @@ -1967,7 +1970,7 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, #ifdef ASM_OUTPUT_CASE_LABEL ASM_OUTPUT_CASE_LABEL (file, "L", CODE_LABEL_NUMBER (insn), - NEXT_INSN (insn)); + next); #else targetm.asm_out.internal_label (file, "L", CODE_LABEL_NUMBER (insn)); #endif @@ -2022,6 +2025,11 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, if (prescan > 0) break; + if (! JUMP_TABLES_IN_TEXT_SECTION) + targetm.asm_out.function_rodata_section (current_function_decl); + else + function_section (current_function_decl); + if (app_on) { fputs (ASM_APP_OFF, file); @@ -2157,7 +2165,6 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED, { /* A delayed-branch sequence */ int i; - rtx next; if (prescan > 0) break; @@ -2632,11 +2639,10 @@ alter_subreg (rtx *xp) if (new != 0) *xp = new; - else + else if (REG_P (y)) { /* Simplify_subreg can't handle some REG cases, but we have to. */ unsigned int regno = subreg_regno (x); - gcc_assert (REG_P (y)); *xp = gen_rtx_REG_offset (y, GET_MODE (x), regno, SUBREG_BYTE (x)); } } diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 5c3139ccb50..2313043b437 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2004,16 +2004,12 @@ fold_convert (tree type, tree arg) } } -/* Return an expr equal to X but certainly not valid as an lvalue. */ +/* Return false if expr can be assumed not to be an value, true + otherwise. */ -tree -non_lvalue (tree x) +static bool +maybe_lvalue_p (tree x) { - /* While we are in GIMPLE, NON_LVALUE_EXPR doesn't mean anything to - us. */ - if (in_gimple_form) - return x; - /* We only need to wrap lvalue tree codes. */ switch (TREE_CODE (x)) { @@ -2053,8 +2049,24 @@ non_lvalue (tree x) /* Assume the worst for front-end tree codes. */ if ((int)TREE_CODE (x) >= NUM_TREE_CODES) break; - return x; + return false; } + + return true; +} + +/* Return an expr equal to X but certainly not valid as an lvalue. */ + +tree +non_lvalue (tree x) +{ + /* While we are in GIMPLE, NON_LVALUE_EXPR doesn't mean anything to + us. */ + if (in_gimple_form) + return x; + + if (! maybe_lvalue_p (x)) + return x; return build1 (NON_LVALUE_EXPR, TREE_TYPE (x), x); } @@ -4266,7 +4278,13 @@ fold_cond_expr_with_comparison (tree type, tree arg0, tree arg1, tree arg2) a number and A is not. The conditions in the original expressions will be false, so all four give B. The min() and max() versions would give a NaN instead. */ - if (operand_equal_for_comparison_p (arg01, arg2, arg00)) + if (operand_equal_for_comparison_p (arg01, arg2, arg00) + /* Avoid these transformations if the COND_EXPR may be used + as an lvalue in the C++ front-end. PR c++/19199. */ + && (in_gimple_form + || strcmp (lang_hooks.name, "GNU C++") != 0 + || ! maybe_lvalue_p (arg1) + || ! maybe_lvalue_p (arg2))) { tree comp_op0 = arg00; tree comp_op1 = arg01; @@ -6070,6 +6088,15 @@ fold_widened_comparison (enum tree_code code, tree type, tree arg0, tree arg1) return NULL_TREE; shorter_type = TREE_TYPE (arg0_unw); +#ifdef HAVE_canonicalize_funcptr_for_compare + /* Disable this optimization if we're casting a function pointer + type on targets that require function pointer canonicalization. */ + if (HAVE_canonicalize_funcptr_for_compare + && TREE_CODE (shorter_type) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (shorter_type)) == FUNCTION_TYPE) + return NULL_TREE; +#endif + if (TYPE_PRECISION (TREE_TYPE (arg0)) <= TYPE_PRECISION (shorter_type)) return NULL_TREE; @@ -6144,18 +6171,29 @@ fold_sign_changed_comparison (enum tree_code code, tree type, tree arg0_inner, tmp; tree inner_type, outer_type; - if (TREE_CODE (arg0) != NOP_EXPR) + if (TREE_CODE (arg0) != NOP_EXPR + && TREE_CODE (arg0) != CONVERT_EXPR) return NULL_TREE; outer_type = TREE_TYPE (arg0); arg0_inner = TREE_OPERAND (arg0, 0); inner_type = TREE_TYPE (arg0_inner); +#ifdef HAVE_canonicalize_funcptr_for_compare + /* Disable this optimization if we're casting a function pointer + type on targets that require function pointer canonicalization. */ + if (HAVE_canonicalize_funcptr_for_compare + && TREE_CODE (inner_type) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (inner_type)) == FUNCTION_TYPE) + return NULL_TREE; +#endif + if (TYPE_PRECISION (inner_type) != TYPE_PRECISION (outer_type)) return NULL_TREE; if (TREE_CODE (arg1) != INTEGER_CST - && !(TREE_CODE (arg1) == NOP_EXPR + && !((TREE_CODE (arg1) == NOP_EXPR + || TREE_CODE (arg1) == CONVERT_EXPR) && TREE_TYPE (TREE_OPERAND (arg1, 0)) == inner_type)) return NULL_TREE; @@ -6176,7 +6214,7 @@ fold_sign_changed_comparison (enum tree_code code, tree type, else arg1 = fold_convert (inner_type, arg1); - return fold (build (code, type, arg0_inner, arg1)); + return fold (build2 (code, type, arg0_inner, arg1)); } /* Tries to replace &a[idx] CODE s * delta with &a[idx CODE delta], if s is @@ -6737,13 +6775,14 @@ fold (tree expr) tem = fold (build2 (code == BIT_AND_EXPR ? TRUTH_AND_EXPR : code == BIT_IOR_EXPR ? TRUTH_OR_EXPR : TRUTH_XOR_EXPR, - type, fold_convert (boolean_type_node, arg0), + boolean_type_node, + fold_convert (boolean_type_node, arg0), fold_convert (boolean_type_node, arg1))); if (code == EQ_EXPR) tem = invert_truthvalue (tem); - return tem; + return fold_convert (type, tem); } if (TREE_CODE_CLASS (code) == tcc_unary) @@ -6872,16 +6911,19 @@ fold (tree expr) int inside_int = INTEGRAL_TYPE_P (inside_type); int inside_ptr = POINTER_TYPE_P (inside_type); int inside_float = FLOAT_TYPE_P (inside_type); + int inside_vec = TREE_CODE (inside_type) == VECTOR_TYPE; unsigned int inside_prec = TYPE_PRECISION (inside_type); int inside_unsignedp = TYPE_UNSIGNED (inside_type); int inter_int = INTEGRAL_TYPE_P (inter_type); int inter_ptr = POINTER_TYPE_P (inter_type); int inter_float = FLOAT_TYPE_P (inter_type); + int inter_vec = TREE_CODE (inter_type) == VECTOR_TYPE; unsigned int inter_prec = TYPE_PRECISION (inter_type); int inter_unsignedp = TYPE_UNSIGNED (inter_type); int final_int = INTEGRAL_TYPE_P (type); int final_ptr = POINTER_TYPE_P (type); int final_float = FLOAT_TYPE_P (type); + int final_vec = TREE_CODE (type) == VECTOR_TYPE; unsigned int final_prec = TYPE_PRECISION (type); int final_unsignedp = TYPE_UNSIGNED (type); @@ -6902,12 +6944,15 @@ fold (tree expr) since then we sometimes need the inner conversion. Likewise if the outer has a precision not equal to the size of its mode. */ if ((((inter_int || inter_ptr) && (inside_int || inside_ptr)) - || (inter_float && inside_float)) + || (inter_float && inside_float) + || (inter_vec && inside_vec)) && inter_prec >= inside_prec - && (inter_float || inter_unsignedp == inside_unsignedp) + && (inter_float || inter_vec + || inter_unsignedp == inside_unsignedp) && ! (final_prec != GET_MODE_BITSIZE (TYPE_MODE (type)) && TYPE_MODE (type) == TYPE_MODE (inter_type)) - && ! final_ptr) + && ! final_ptr + && (! final_vec || inter_prec == inside_prec)) return fold (build1 (code, type, TREE_OPERAND (TREE_OPERAND (t, 0), 0))); @@ -6921,6 +6966,7 @@ fold (tree expr) /* Two conversions in a row are not needed unless: - some conversion is floating-point (overstrict for now), or + - some conversion is a vector (overstrict for now), or - the intermediate type is narrower than both initial and final, or - the intermediate type and innermost type differ in signedness, @@ -6930,6 +6976,7 @@ fold (tree expr) - the final type is a pointer type and the precisions of the initial and intermediate types differ. */ if (! inside_float && ! inter_float && ! final_float + && ! inside_vec && ! inter_vec && ! final_vec && (inter_prec > inside_prec || inter_prec > final_prec) && ! (inside_int && inter_int && inter_unsignedp != inside_unsignedp @@ -8641,7 +8688,14 @@ fold (tree expr) return non_lvalue (fold_convert (type, arg0)); /* If the second arg is constant true, this is a logical inversion. */ if (integer_onep (arg1)) - return non_lvalue (fold_convert (type, invert_truthvalue (arg0))); + { + /* Only call invert_truthvalue if operand is a truth value. */ + if (TREE_CODE (TREE_TYPE (arg0)) != BOOLEAN_TYPE) + tem = fold (build1 (TRUTH_NOT_EXPR, TREE_TYPE (arg0), arg0)); + else + tem = invert_truthvalue (arg0); + return non_lvalue (fold_convert (type, tem)); + } /* Identical arguments cancel to zero. */ if (operand_equal_p (arg0, arg1, 0)) return omit_one_operand (type, integer_zero_node, arg0); @@ -9094,7 +9148,8 @@ fold (tree expr) TREE_OPERAND (arg0, 0), TREE_OPERAND (arg0, 1))); else if (TREE_CODE (TREE_TYPE (arg0)) == INTEGER_TYPE - && TREE_CODE (arg0) == NOP_EXPR) + && (TREE_CODE (arg0) == NOP_EXPR + || TREE_CODE (arg0) == CONVERT_EXPR)) { /* If we are widening one operand of an integer comparison, see if the other operand is similarly being widened. Perhaps we @@ -9905,8 +9960,11 @@ fold_checksum_tree (tree expr, struct md5_ctx *ctx, htab_t ht) expr = (tree) buf; TYPE_POINTER_TO (expr) = NULL; TYPE_REFERENCE_TO (expr) = NULL; - TYPE_CACHED_VALUES_P (expr) = 0; - TYPE_CACHED_VALUES (expr) = NULL; + if (TYPE_CACHED_VALUES_P (expr)) + { + TYPE_CACHED_VALUES_P (expr) = 0; + TYPE_CACHED_VALUES (expr) = NULL; + } } md5_process_bytes (expr, tree_size (expr), ctx); fold_checksum_tree (TREE_TYPE (expr), ctx, ht); diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 846186a3174..59a13962b18 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,7 +1,254 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-12 Toon Moene + + * gfortran.texi: Warn about the limited abilities + of gfortran at this release. + * invoke.texi: Ditto. + +2005-04-09 Francois-Xavier Coudert + + * match.c (match_arithmetic_if): Remove gfc_ prefix and correct + comment according to GNU coding style. + +2005-04-08 Diego Novillo + + * match.c (gfc_match_arithmetic_if): Declare static. + +2005-04-08 Francois-Xavier Coudert + + PR fortran/17229 + * match.c (gfc_match_arithmetic_if): New function to match an + arithmetic IF statement. + (gfc_match_if): Use gfc_match_arithmetic_if to match an + arithmetic IF statement embedded in a simple IF statement. + +2005-04-07 Steven G. Kargl + + * simplify.c (gfc_simplify_exponent): Fix exponent(tiny(x)) + +2005-04-06 Steven G. Kargl + + * invoke.texi: Remove documentation of -std=f90. + +2005-04-06 Tobias Schl"uter + + * expr.c (gfc_check_assign): Don't allow NULL as rhs in a + non-pointer assignment. + +2005-04-05 Feng Wang + + PR fortran/15959 + PR fortran/20713 + + * array.c (resolve_character_array_constructor): New function. Set + constant character array's character length. + (gfc_resolve_array_constructor): Use it. + * decl.c (add_init_expr_to_sym): Set symbol and initializer character + length. + (gfc_set_constant_character_len): New function. Set constant character + expression according the given length. + * match.h (gfc_set_constant_character_len): Add prototype. + +2005-04-04 Francois-Xavier Coudert + + * intrinsic.texi: BES?? functions are not in the f95 standard. + +2005-04-03 Francois-Xavier Coudert + + * intrinsic.texi: Document COS, EXP, LOG, LOG10, SIN, SQRT, TAN. + +2005-04-03 Francois-Xavier Coudert + + * intrinsic.texi: Document BESJ0, BESJ1, BESJN, BESY0, BESY1, + BESYN, ATAN, COSH, ERF, ERC, SINH, TANH. + +2005-04-02 Steven G. Kargl + + * intrinsic.texi: Document ALLOCATED, ANINT, ANY, ASIN; Fix typos. + +2005-03-30 Canqun Yang + + * trans-common.c (create_common): Build RECORD_NODE for common blocks + contain no equivalence objects. + (add_equivalences): New argument saw_equiv. + (trans_common): New local variable saw_equiv. + (finish_equivalences): Add a local variable dummy, Always pass true + for the 3rd parameter to create_common. + +2005-03-29 Steven G. Kargl + + * gfortran.h (option_t): Change d8, i8, r8 to flag_default_double, + flag_default_integer, flag_default_real + * invoke.texi: Update documentation + * lang.opt: Remove d8, i8, r8 definitions; Add fdefault-double-8 + fdefault-integer-8, and fdefault-real-8 definitions. + * options.c (gfc_init_options): Set option defaults + (gfc_handle_option): Handle command line options. + * trans-types.c (gfc_init_kinds): Use options. + +2005-03-27 Steven G. Kargl + + * intrinsic.texi: Document AIMAG, AINT, ALL + +2005-03-25 Steven G. Kargl + + * intrinsic.texi: Fix "make dvi" + +2005-03-24 Steven G. Kargl + + * intrinsic.texi: New file. + * gfortran.texi: Include it; white space change; fix typo. + +2005-03-22 Francois-Xavier Coudert + + * check.c (gfc_check_chdir, gfc_check_chdir_sub, gfc_check_kill, + gfc_check_kill_sub, gfc_check_link, gfc_check_link_sub, + gfc_check_symlnk, gfc_check_symlnk_sub, gfc_check_rename, + gfc_check_rename_sub, gfc_check_sleep_sub, gfc_check_gerror, + gfc_check_getlog, gfc_check_hostnm, gfc_check_hostnm_sub, + gfc_check_perror): new functions to check newly implemented + g77 intrinsics. + * gfortran.h: adding symbols for new intrinsics. + * intrinsic.c (add_functions): adding new intrinsics. + (add_subroutines): adding new intrinsics. + * intrinsic.h: prototype for all checking and resolving + functions. + * iresolve.c (gfc_resolve_chdir, gfc_resolve_chdir_sub, + gfc_resolve_hostnm, gfc_resolve_ierrno, gfc_resolve_kill, + gfc_resolve_link, gfc_resolve_rename, gfc_resolve_symlnk, + gfc_resolve_time, gfc_resolve_time8, gfc_resolve_rename_sub, + gfc_resolve_kill_sub, gfc_resolve_link_sub, + gfc_resolve_symlnk_sub, gfc_resolve_sleep_sub, + gfc_resolve_gerror, gfc_resolve_getlog, gfc_resolve_hostnm_sub, + gfc_resolve_perror): new functions to resolve intrinsics. + * trans-intrinsic.c (gfc_conv_intrinsic_function): add case + for new symbols. + +2005-03-19 Tobias Schl"uter + + * dump-parse-tree.c (gfc_show_expr): Dump name of namespace + in which the variable is declared. + + PR fortran/18525 + * resolve.c (was_declared): Also check for dummy attribute. + +2005-03-19 Tobias Schl"uter + + * gfortran.h (arith): Remove ARITH_0TO0. + * arith.c (gfc_arith_error): Remove handling of ARITH_0TO0. + (gfc_arith_power): Remove special casing of zero to integral + power zero. + +2005-03-17 Francois-Xavier Coudert + + * invoke.texi: Fix typos. + +2005-03-15 Feng Wang + + PR fortran/18827 + * io.c (resolve_tag): Add checking on assigned label. + (match_dt_format): Does not set symbol assign attribute. + * match.c (gfc_match_goto):Does not set symbol assign attribute. + * resolve.c (resolve_code): Add checking on assigned label. + * trans-common.c (build_field): Deals with common variable assigned + a label. + * trans-stmt.c (gfc_conv_label_variable): New function. + (gfc_trans_label_assign): Use it. + (gfc_trans_goto): Ditto. + * trans-io.c (set_string): Ditto. + * trans.h (gfc_conv_label_variable): Add prototype. + +2005-03-14 Tobias Schl"uter + + PR fortran/20467 + * symbol.c (check_conflict): A dummy argument can't be a statement + function. + +2005-03-13 Tobias Schl"uter + + PR fortran/16907 + * resolve.c (gfc_resolve_index): Allow REAL indices as an extension. + +2005-03-13 Tobias Schl"uter + + PR fortran/20323 + * resolve.c (gfc_resolve): Check if character lengths are + specification expressions. + +2005-03-12 Tobias Schl"uter + + PR fortran/20361 + * trans-array.c (gfc_stack_space_left): Remove unused variable. + (gfc_can_put_var_on_stack): Move to trans-decl.c, remove #if 0'ed + code. + * trans-array.h (gfc_stack_space_left, gfc_can_put_var_on_stack): + Remove declaration / prototype. + * trans-common.c (build_equiv_decl): Give union a name. Check if + it can be put on the stack. + * trans-decl.c (gfc_stack_space_left): Move function here. + (gfc_build_qualified_array): Fix comment typo. + * trans.h (gfc_put_var_on_stack): Add prototype. + +2005-03-05 Steven G. Kargl + + PR fortran/19936 + * primary.c (match_complex_constant): Mangled complex constant may + be an implied do-loop. Give implied do-loop matcher a chance. + +2005-03-05 Steven G. Kargl + + PR fortran/19754 + * resolve.c (compare_shapes): New function. + (resolve_operator): Use it. + +2005-03-04 Tobias Schl"uter + + PR fortran/19673 + * trans-expr.c (gfc_conv_function_call): Correctly dereference + argument from a pointer function also if it has a result clause. + +2005-03-04 Steven G. Kargl + + * expr.c (gfc_copy_shape_excluding): Change && to ||. + +2005-03-04 Tobias Schl"uter + + * trans-intrinsic.c (gfc_get_symbol_for_expr): Fix comment typo, + clarify comment. + +2005-02-28 Tobias Schl"uter + (port from g95) + + PR fortran/19479 + * simplify.c (gfc_simplify_bound): Rename to ... + (simplify_bound): ... this and overhaul. + +2005-02-28 Steven G. Kargl + + * trans-intrinsic.c (gfc_conv_intrinsic_iargc): remove boolean argument. + (gfc_conv_intrinsic_function): update function calls + +2005-02-27 Steven G. Kargl + + PR fortran/20058 + * trans-types.c (gfc_max_integer_kind): Declare + (gfc_init_kinds): Initialize it. + * gfortran.h (gfc_max_integer_kind): extern it. + * primary.c (match_boz_constant): Use it; remove gfortran extension + of kind suffixes on BOZ literal constants + 2005-02-24 Volker Reichelt * decl.c, resolve.c, trans-array.c, trans.h: Fix comment typo(s). +2005-04-24 Tobias Schl"uter + + Unrevert previously reverted patch. Adding this fix: + * module.c (find_true_name): Deal with NULL module. + 2005-02-24 Tobias Schl"uter Revert yesterday's patch: diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c index a219ed20675..b55713e571e 100644 --- a/gcc/fortran/arith.c +++ b/gcc/fortran/arith.c @@ -152,9 +152,6 @@ gfc_arith_error (arith code) case ARITH_DIV0: p = "Division by zero"; break; - case ARITH_0TO0: - p = "Indeterminate form 0 ** 0"; - break; case ARITH_INCOMMENSURATE: p = "Array operands are incommensurate"; break; @@ -989,33 +986,23 @@ gfc_arith_power (gfc_expr * op1, gfc_expr * op2, gfc_expr ** resultp) result = gfc_constant_result (op1->ts.type, op1->ts.kind, &op1->where); if (power == 0) - { /* Handle something to the zeroth power */ + { + /* Handle something to the zeroth power. Since we're dealing + with integral exponents, there is no ambiguity in the + limiting procedure used to determine the value of 0**0. */ switch (op1->ts.type) { case BT_INTEGER: - if (mpz_sgn (op1->value.integer) == 0) - rc = ARITH_0TO0; - else - mpz_set_ui (result->value.integer, 1); + mpz_set_ui (result->value.integer, 1); break; case BT_REAL: - if (mpfr_sgn (op1->value.real) == 0) - rc = ARITH_0TO0; - else - mpfr_set_ui (result->value.real, 1, GFC_RND_MODE); + mpfr_set_ui (result->value.real, 1, GFC_RND_MODE); break; case BT_COMPLEX: - if (mpfr_sgn (op1->value.complex.r) == 0 - && mpfr_sgn (op1->value.complex.i) == 0) - rc = ARITH_0TO0; - else - { - mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE); - mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); - } - + mpfr_set_ui (result->value.complex.r, 1, GFC_RND_MODE); + mpfr_set_ui (result->value.complex.i, 0, GFC_RND_MODE); break; default: diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 4f4f19b100b..dc660d45580 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -1499,9 +1499,45 @@ resolve_array_list (gfc_constructor * p) return t; } +/* Resolve character array constructor. If it is a constant character array and + not specified character length, update character length to the maximum of + its element constructors' length. */ -/* Resolve all of the expressions in an array list. - TODO: String lengths. */ +static void +resolve_character_array_constructor (gfc_expr * expr) +{ + gfc_constructor * p; + int max_length; + + gcc_assert (expr->expr_type == EXPR_ARRAY); + gcc_assert (expr->ts.type == BT_CHARACTER); + + max_length = -1; + + if (expr->ts.cl == NULL || expr->ts.cl->length == NULL) + { + /* Find the maximum length of the elements. Do nothing for variable array + constructor. */ + for (p = expr->value.constructor; p; p = p->next) + if (p->expr->expr_type == EXPR_CONSTANT) + max_length = MAX (p->expr->value.character.length, max_length); + else + return; + + if (max_length != -1) + { + /* Update the character length of the array constructor. */ + if (expr->ts.cl == NULL) + expr->ts.cl = gfc_get_charlen (); + expr->ts.cl->length = gfc_int_expr (max_length); + /* Update the element constructors. */ + for (p = expr->value.constructor; p; p = p->next) + gfc_set_constant_character_len (max_length, p->expr); + } + } +} + +/* Resolve all of the expressions in an array list. */ try gfc_resolve_array_constructor (gfc_expr * expr) @@ -1511,6 +1547,8 @@ gfc_resolve_array_constructor (gfc_expr * expr) t = resolve_array_list (expr->value.constructor); if (t == SUCCESS) t = gfc_check_constructor_type (expr); + if (t == SUCCESS && expr->ts.type == BT_CHARACTER) + resolve_character_array_constructor (expr); return t; } diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 7a971f20038..8fae4449fbf 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -574,6 +574,35 @@ gfc_check_char (gfc_expr * i, gfc_expr * kind) } +try +gfc_check_chdir (gfc_expr * dir) +{ + if (type_check (dir, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status) +{ + if (type_check (dir, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind) { @@ -1007,6 +1036,41 @@ gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size) } +try +gfc_check_kill (gfc_expr * pid, gfc_expr * sig) +{ + if (type_check (pid, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (sig, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status) +{ + if (type_check (pid, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (sig, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_kind (gfc_expr * x) { @@ -1038,6 +1102,76 @@ gfc_check_lbound (gfc_expr * array, gfc_expr * dim) } +try +gfc_check_link (gfc_expr * path1, gfc_expr * path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_logical (gfc_expr * a, gfc_expr * kind) { @@ -1453,6 +1587,41 @@ gfc_check_real (gfc_expr * a, gfc_expr * kind) } +try +gfc_check_rename (gfc_expr * path1, gfc_expr * path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_repeat (gfc_expr * x, gfc_expr * y) { @@ -1657,6 +1826,19 @@ gfc_check_size (gfc_expr * array, gfc_expr * dim) } +try +gfc_check_sleep_sub (gfc_expr * seconds) +{ + if (type_check (seconds, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (seconds, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies) { @@ -2233,6 +2415,16 @@ gfc_check_etime_sub (gfc_expr * values, gfc_expr * time) } +try +gfc_check_gerror (gfc_expr * msg) +{ + if (type_check (msg, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status) { @@ -2252,6 +2444,16 @@ gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status) } +try +gfc_check_getlog (gfc_expr * msg) +{ + if (type_check (msg, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_exit (gfc_expr * status) { @@ -2284,6 +2486,45 @@ gfc_check_flush (gfc_expr * unit) } +try +gfc_check_hostnm (gfc_expr * name) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_perror (gfc_expr * string) +{ + if (type_check (string, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + try gfc_check_umask (gfc_expr * mask) { diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index b3114cac2c1..f2d8d74856d 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -646,6 +646,30 @@ build_sym (const char *name, gfc_charlen * cl, return SUCCESS; } +/* Set character constant to the given length. The constant will be padded or + truncated. */ + +void +gfc_set_constant_character_len (int len, gfc_expr * expr) +{ + char * s; + int slen; + + gcc_assert (expr->expr_type == EXPR_CONSTANT); + gcc_assert (expr->ts.type == BT_CHARACTER && expr->ts.kind == 1); + + slen = expr->value.character.length; + if (len != slen) + { + s = gfc_getmem (len); + memcpy (s, expr->value.character.string, MIN (len, slen)); + if (len > slen) + memset (&s[slen], ' ', len - slen); + gfc_free (expr->value.character.string); + expr->value.character.string = s; + expr->value.character.length = len; + } +} /* Function called by variable_decl() that adds an initialization expression to a symbol. */ @@ -711,6 +735,35 @@ add_init_expr_to_sym (const char *name, gfc_expr ** initp, && gfc_check_assign_symbol (sym, init) == FAILURE) return FAILURE; + if (sym->ts.type == BT_CHARACTER && sym->ts.cl) + { + /* Update symbol character length according initializer. */ + if (sym->ts.cl->length == NULL) + { + if (init->expr_type == EXPR_CONSTANT) + sym->ts.cl->length = + gfc_int_expr (init->value.character.length); + else if (init->expr_type == EXPR_ARRAY) + sym->ts.cl->length = gfc_copy_expr (init->ts.cl->length); + } + /* Update initializer character length according symbol. */ + else if (sym->ts.cl->length->expr_type == EXPR_CONSTANT) + { + int len = mpz_get_si (sym->ts.cl->length->value.integer); + gfc_constructor * p; + + if (init->expr_type == EXPR_CONSTANT) + gfc_set_constant_character_len (len, init); + else if (init->expr_type == EXPR_ARRAY) + { + gfc_free_expr (init->ts.cl->length); + init->ts.cl->length = gfc_copy_expr (sym->ts.cl->length); + for (p = init->value.constructor; p; p = p->next) + gfc_set_constant_character_len (len, p->expr); + } + } + } + /* Add initializer. Make sure we keep the ranks sane. */ if (sym->attr.dimension && init->rank == 0) init->rank = sym->as->rank; diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c index f8df9dabb12..3df244cca71 100644 --- a/gcc/fortran/dump-parse-tree.c +++ b/gcc/fortran/dump-parse-tree.c @@ -409,6 +409,8 @@ gfc_show_expr (gfc_expr * p) break; case EXPR_VARIABLE: + if (p->symtree->n.sym->ns && p->symtree->n.sym->ns->proc_name) + gfc_status ("%s:", p->symtree->n.sym->ns->proc_name->name); gfc_status ("%s", p->symtree->n.sym->name); gfc_show_ref (p->ref); break; diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 5867f9bfaa5..d0c99e335a0 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -352,7 +352,7 @@ gfc_copy_shape_excluding (mpz_t * shape, int rank, gfc_expr * dim) n = mpz_get_si (dim->value.integer); n--; /* Convert to zero based index */ - if (n < 0 && n >= rank) + if (n < 0 || n >= rank) return NULL; s = new_shape = gfc_get_shape (rank-1); @@ -1789,11 +1789,12 @@ gfc_check_assign (gfc_expr * lvalue, gfc_expr * rvalue, int conform) return FAILURE; } - /* This is a guaranteed segfault and possibly a typo: p = NULL() - instead of p => NULL() */ - if (rvalue->expr_type == EXPR_NULL) - gfc_warning ("NULL appears on right-hand side in assignment at %L", - &rvalue->where); + if (rvalue->expr_type == EXPR_NULL) + { + gfc_error ("NULL appears on right-hand side in assignment at %L", + &rvalue->where); + return FAILURE; + } /* This is possibly a typo: x = f() instead of x => f() */ if (gfc_option.warn_surprising diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index adbccc11486..1e56920c73c 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -181,7 +181,7 @@ extern mstring intrinsic_operators[]; /* Arithmetic results. */ typedef enum { ARITH_OK = 1, ARITH_OVERFLOW, ARITH_UNDERFLOW, ARITH_NAN, - ARITH_DIV0, ARITH_0TO0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC + ARITH_DIV0, ARITH_INCOMMENSURATE, ARITH_ASYMMETRIC } arith; @@ -292,6 +292,7 @@ enum gfc_generic_isym_id GFC_ISYM_BTEST, GFC_ISYM_CEILING, GFC_ISYM_CHAR, + GFC_ISYM_CHDIR, GFC_ISYM_CMPLX, GFC_ISYM_COMMAND_ARGUMENT_COUNT, GFC_ISYM_CONJG, @@ -317,6 +318,7 @@ enum gfc_generic_isym_id GFC_ISYM_GETGID, GFC_ISYM_GETPID, GFC_ISYM_GETUID, + GFC_ISYM_HOSTNM, GFC_ISYM_IACHAR, GFC_ISYM_IAND, GFC_ISYM_IARGC, @@ -325,15 +327,18 @@ enum gfc_generic_isym_id GFC_ISYM_IBSET, GFC_ISYM_ICHAR, GFC_ISYM_IEOR, + GFC_ISYM_IERRNO, GFC_ISYM_INDEX, GFC_ISYM_INT, GFC_ISYM_IOR, GFC_ISYM_IRAND, GFC_ISYM_ISHFT, GFC_ISYM_ISHFTC, + GFC_ISYM_KILL, GFC_ISYM_LBOUND, GFC_ISYM_LEN, GFC_ISYM_LEN_TRIM, + GFC_ISYM_LINK, GFC_ISYM_LGE, GFC_ISYM_LGT, GFC_ISYM_LLE, @@ -359,6 +364,7 @@ enum gfc_generic_isym_id GFC_ISYM_PRODUCT, GFC_ISYM_RAND, GFC_ISYM_REAL, + GFC_ISYM_RENAME, GFC_ISYM_REPEAT, GFC_ISYM_RESHAPE, GFC_ISYM_RRSPACING, @@ -378,9 +384,12 @@ enum gfc_generic_isym_id GFC_ISYM_SR_KIND, GFC_ISYM_STAT, GFC_ISYM_SUM, + GFC_ISYM_SYMLNK, GFC_ISYM_SYSTEM, GFC_ISYM_TAN, GFC_ISYM_TANH, + GFC_ISYM_TIME, + GFC_ISYM_TIME8, GFC_ISYM_TRANSFER, GFC_ISYM_TRANSPOSE, GFC_ISYM_TRIM, @@ -1393,6 +1402,9 @@ typedef struct int warn_surprising; int warn_unused_labels; + int flag_default_double; + int flag_default_integer; + int flag_default_real; int flag_dollar_ok; int flag_underscoring; int flag_second_underscore; @@ -1404,9 +1416,7 @@ typedef struct int flag_repack_arrays; int q_kind; - int r8; - int i8; - int d8; + int warn_std; int allow_std; int warn_nonstd_intrinsics; @@ -1556,6 +1566,7 @@ void gfc_arith_done_1 (void); int gfc_validate_kind (bt, int, bool); extern int gfc_index_integer_kind; extern int gfc_default_integer_kind; +extern int gfc_max_integer_kind; extern int gfc_default_real_kind; extern int gfc_default_double_kind; extern int gfc_default_character_kind; diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi index c3242f7b5a3..442145bbf9f 100644 --- a/gcc/fortran/gfortran.texi +++ b/gcc/fortran/gfortran.texi @@ -109,25 +109,31 @@ the GNU Fortran 95 compiler. You can find in this manual how to invoke @ifset DEVELOPMENT @emph{Warning:} This document, and the compiler it describes, are still -under development. While efforts are made too keep it up-to-date it might +under development. While efforts are made to keep it up-to-date, it might not accurately reflect the status of the most recent @command{gfortran}. @end ifset +@comment +@comment When you add a new menu item, please keep the right hand +@comment aligned to the same column. Do not use tabs. This provides +@comment better formatting. +@comment @menu -* Copying:: GNU General Public License says - how you can copy and share GNU Fortran. +* Copying:: GNU General Public License says + how you can copy and share GNU Fortran. * GNU Free Documentation License:: - How you can copy and share this manual. -* Funding:: How to help assure continued work for free software. -* Getting Started:: What you should know about @command{gfortran}. -* GFORTRAN and GCC:: You can compile Fortran, C, or other programs. -* GFORTRAN and G77:: Why we choose to start from scratch. + How you can copy and share this manual. +* Funding:: How to help assure continued work for free software. +* Getting Started:: What you should know about @command{gfortran}. +* GFORTRAN and GCC:: You can compile Fortran, C, or other programs. +* GFORTRAN and G77:: Why we chose to start from scratch. * Invoking GFORTRAN:: Command options supported by @command{gfortran}. -* Project Status:: Status of @command{gfortran}, Roadmap, proposed extensions. -* Contributing:: Helping you can help. -* Standards:: Standards supported by @command{gfortran} -* Extensions:: Language extensions implemented by @command{gfortran} -* Index:: Index of this documentation. +* Project Status:: Status of @command{gfortran}, roadmap, proposed extensions. +* Contributing:: How you can help. +* Standards:: Standards supported by @command{gfortran} +* Extensions:: Language extensions implemented by @command{gfortran} +* Intrinsic Procedures:: Intrinsic procedures supported by @command{gfortran} +* Index:: Index of this documentation. @end menu @@ -168,9 +174,18 @@ designed initially as a free replacement for, or alternative to, the unix @command{f95} command; @command{gfortran} is command you'll use to invoke the compiler. -Gfortran is still in an early state of development. -@command{gfortran} can generate code for most constructs and expressions, -but much work remains to be done. +@emph{Gfortran is not yet a fully conformant Fortran 95 compiler}. +It can generate code for most constructs and expressions, +but work remains to be done. In particular, there are known +deficiencies with ENTRY, NAMELIST, and sophisticated use of +MODULES, POINTERS and DERIVED TYPES. For those whose Fortran +codes conform to either the Fortran 77 standard or the +GNU Fortran 77 language, we recommend to use @command{g77} +from GCC 3.4. We recommend that distributors continue to provide +packages of g77-3.4 until we announce that @command{gfortran} +fully replaces @command{g77}. +The gfortran developers welcome any feedback on user experience +with @command{gfortran} at @email{fortran@@gcc.gnu.org}. When @command{gfortran} is finished, it will do everything you expect from any decent compiler: @@ -369,7 +384,6 @@ because it was expected to be easier to maintain code we develop ourselves than to do a major overhaul of @command{g77} first, and then build a Fortran 95 compiler out of it. - @include invoke.texi @c --------------------------------------------------------------------- @@ -670,6 +684,7 @@ Examples of standard conforming code equivalent to the above example, are: DATA i,j,x /1,2,3*0.,1./ @end smallexample +@include intrinsic.texi @c --------------------------------------------------------------------- @c Contributing @c --------------------------------------------------------------------- diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index ebf5cb2edda..7336e63d552 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -1092,6 +1092,12 @@ add_functions (void) make_generic ("char", GFC_ISYM_CHAR, GFC_STD_F77); + add_sym_1 ("chdir", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_chdir, NULL, gfc_resolve_chdir, + a, BT_CHARACTER, dc, REQUIRED); + + make_generic ("chdir", GFC_ISYM_CHDIR, GFC_STD_GNU); + add_sym_3 ("cmplx", 1, 1, BT_COMPLEX, dz, GFC_STD_F77, gfc_check_cmplx, gfc_simplify_cmplx, gfc_resolve_cmplx, x, BT_UNKNOWN, dr, REQUIRED, y, BT_UNKNOWN, dr, OPTIONAL, @@ -1323,6 +1329,12 @@ add_functions (void) make_generic ("getuid", GFC_ISYM_GETUID, GFC_STD_GNU); + add_sym_1 ("hostnm", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_hostnm, NULL, gfc_resolve_hostnm, + a, BT_CHARACTER, dc, REQUIRED); + + make_generic ("hostnm", GFC_ISYM_HOSTNM, GFC_STD_GNU); + add_sym_1 ("huge", 0, 1, BT_REAL, dr, GFC_STD_F95, gfc_check_huge, gfc_simplify_huge, NULL, x, BT_UNKNOWN, dr, REQUIRED); @@ -1383,6 +1395,11 @@ add_functions (void) make_generic ("ieor", GFC_ISYM_IEOR, GFC_STD_F95); + add_sym_0 ("ierrno", 1, 0, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_ierrno); + + make_generic ("ierrno", GFC_ISYM_IERRNO, GFC_STD_GNU); + add_sym_3 ("index", 1, 1, BT_INTEGER, di, GFC_STD_F77, gfc_check_index, gfc_simplify_index, NULL, stg, BT_CHARACTER, dc, REQUIRED, ssg, BT_CHARACTER, dc, REQUIRED, @@ -1430,6 +1447,12 @@ add_functions (void) make_generic ("ishftc", GFC_ISYM_ISHFTC, GFC_STD_F95); + add_sym_2 ("kill", 1, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_kill, NULL, gfc_resolve_kill, + a, BT_INTEGER, di, REQUIRED, b, BT_INTEGER, di, REQUIRED); + + make_generic ("kill", GFC_ISYM_KILL, GFC_STD_GNU); + add_sym_1 ("kind", 0, 1, BT_INTEGER, di, GFC_STD_F95, gfc_check_kind, gfc_simplify_kind, NULL, x, BT_REAL, dr, REQUIRED); @@ -1452,6 +1475,8 @@ add_functions (void) NULL, gfc_simplify_len_trim, gfc_resolve_len_trim, stg, BT_CHARACTER, dc, REQUIRED); + make_alias ("lnblnk", GFC_STD_GNU); + make_generic ("len_trim", GFC_ISYM_LEN_TRIM, GFC_STD_F95); add_sym_2 ("lge", 1, 0, BT_LOGICAL, dl, GFC_STD_F77, @@ -1478,6 +1503,12 @@ add_functions (void) make_generic ("llt", GFC_ISYM_LLT, GFC_STD_F77); + add_sym_2 ("link", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_link, NULL, gfc_resolve_link, + a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED); + + make_generic ("link", GFC_ISYM_LINK, GFC_STD_GNU); + add_sym_1 ("log", 1, 1, BT_REAL, dr, GFC_STD_F77, gfc_check_fn_rc, gfc_simplify_log, gfc_resolve_log, x, BT_REAL, dr, REQUIRED); @@ -1744,6 +1775,12 @@ add_functions (void) make_generic ("real", GFC_ISYM_REAL, GFC_STD_F77); + add_sym_2 ("rename", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_rename, NULL, gfc_resolve_rename, + a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED); + + make_generic ("rename", GFC_ISYM_RENAME, GFC_STD_GNU); + add_sym_2 ("repeat", 0, 1, BT_CHARACTER, dc, GFC_STD_F95, gfc_check_repeat, gfc_simplify_repeat, gfc_resolve_repeat, stg, BT_CHARACTER, dc, REQUIRED, n, BT_INTEGER, di, REQUIRED); @@ -1904,6 +1941,12 @@ add_functions (void) make_generic ("sum", GFC_ISYM_SUM, GFC_STD_F95); + add_sym_2 ("symlnk", 0, 1, BT_INTEGER, di, GFC_STD_GNU, + gfc_check_symlnk, NULL, gfc_resolve_symlnk, + a, BT_CHARACTER, dc, REQUIRED, b, BT_CHARACTER, dc, REQUIRED); + + make_generic ("symlnk", GFC_ISYM_SYMLNK, GFC_STD_GNU); + add_sym_1 ("system", 1, 1, BT_INTEGER, di, GFC_STD_GNU, NULL, NULL, NULL, c, BT_CHARACTER, dc, REQUIRED); @@ -1930,6 +1973,16 @@ add_functions (void) make_generic ("tanh", GFC_ISYM_TANH, GFC_STD_F77); + add_sym_0 ("time", 1, 0, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_time); + + make_generic ("time", GFC_ISYM_TIME, GFC_STD_GNU); + + add_sym_0 ("time8", 1, 0, BT_INTEGER, di, GFC_STD_GNU, + NULL, NULL, gfc_resolve_time8); + + make_generic ("time8", GFC_ISYM_TIME8, GFC_STD_GNU); + add_sym_1 ("tiny", 0, 1, BT_REAL, dr, GFC_STD_F95, gfc_check_x, gfc_simplify_tiny, NULL, x, BT_REAL, dr, REQUIRED); @@ -2024,6 +2077,10 @@ add_subroutines (void) gfc_check_second_sub, NULL, gfc_resolve_second_sub, tm, BT_REAL, dr, REQUIRED); + add_sym_2s ("chdir", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_chdir_sub, NULL, gfc_resolve_chdir_sub, + name, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + add_sym_4s ("date_and_time", 0, 1, BT_UNKNOWN, 0, GFC_STD_F95, gfc_check_date_and_time, NULL, NULL, dt, BT_CHARACTER, dc, OPTIONAL, tm, BT_CHARACTER, dc, OPTIONAL, @@ -2038,6 +2095,10 @@ add_subroutines (void) gfc_check_etime_sub, NULL, gfc_resolve_etime_sub, vl, BT_REAL, 4, REQUIRED, tm, BT_REAL, 4, REQUIRED); + add_sym_1s ("gerror", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_gerror, NULL, gfc_resolve_gerror, c, BT_CHARACTER, + dc, REQUIRED); + add_sym_2s ("getcwd", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_getcwd_sub, NULL, gfc_resolve_getcwd_sub, c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); @@ -2050,6 +2111,10 @@ add_subroutines (void) NULL, NULL, gfc_resolve_getarg, c, BT_INTEGER, di, REQUIRED, vl, BT_CHARACTER, dc, REQUIRED); + add_sym_1s ("getlog", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_getlog, NULL, gfc_resolve_getlog, c, BT_CHARACTER, + dc, REQUIRED); + /* F2003 commandline routines. */ add_sym_3s ("get_command", 0, 1, BT_UNKNOWN, 0, GFC_STD_F2003, @@ -2098,6 +2163,32 @@ add_subroutines (void) gfc_check_flush, NULL, gfc_resolve_flush, c, BT_INTEGER, di, OPTIONAL); + add_sym_2s ("hostnm", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_hostnm_sub, NULL, gfc_resolve_hostnm_sub, + c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("kill", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_kill_sub, + NULL, gfc_resolve_kill_sub, c, BT_INTEGER, di, REQUIRED, + val, BT_INTEGER, di, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_3s ("link", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_link_sub, NULL, gfc_resolve_link_sub, + name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, + dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_1s ("perror", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_perror, NULL, gfc_resolve_perror, + c, BT_CHARACTER, dc, REQUIRED); + + add_sym_3s ("rename", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_rename_sub, NULL, gfc_resolve_rename_sub, + name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, + dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + + add_sym_1s ("sleep", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_sleep_sub, NULL, gfc_resolve_sleep_sub, + val, BT_CHARACTER, dc, REQUIRED); + add_sym_3s ("fstat", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, gfc_check_fstat_sub, NULL, gfc_resolve_fstat_sub, ut, BT_INTEGER, di, REQUIRED, vl, BT_INTEGER, di, REQUIRED, @@ -2108,6 +2199,11 @@ add_subroutines (void) name, BT_CHARACTER, dc, REQUIRED, vl, BT_INTEGER, di, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + add_sym_3s ("symlnk", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, + gfc_check_symlnk_sub, NULL, gfc_resolve_symlnk_sub, + name, BT_CHARACTER, dc, REQUIRED, val, BT_CHARACTER, + dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); + add_sym_2s ("system", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU, NULL, NULL, gfc_resolve_system_sub, c, BT_CHARACTER, dc, REQUIRED, st, BT_INTEGER, di, OPTIONAL); diff --git a/gcc/fortran/intrinsic.h b/gcc/fortran/intrinsic.h index 3f5fcba3736..bf2c80a0c7e 100644 --- a/gcc/fortran/intrinsic.h +++ b/gcc/fortran/intrinsic.h @@ -40,6 +40,7 @@ try gfc_check_atan2 (gfc_expr *, gfc_expr *); try gfc_check_besn (gfc_expr *, gfc_expr *); try gfc_check_btest (gfc_expr *, gfc_expr *); try gfc_check_char (gfc_expr *, gfc_expr *); +try gfc_check_chdir (gfc_expr *); try gfc_check_cmplx (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_count (gfc_expr *, gfc_expr *); try gfc_check_cshift (gfc_expr *, gfc_expr *, gfc_expr *); @@ -55,6 +56,7 @@ try gfc_check_fn_r (gfc_expr *); try gfc_check_fn_rc (gfc_expr *); try gfc_check_fnum (gfc_expr *); try gfc_check_g77_math1 (gfc_expr *); +try gfc_check_hostnm (gfc_expr *); try gfc_check_huge (gfc_expr *); try gfc_check_i (gfc_expr *); try gfc_check_iand (gfc_expr *, gfc_expr *); @@ -69,8 +71,10 @@ try gfc_check_ior (gfc_expr *, gfc_expr *); try gfc_check_irand (gfc_expr *); try gfc_check_ishft (gfc_expr *, gfc_expr *); try gfc_check_ishftc (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_kill (gfc_expr *, gfc_expr *); try gfc_check_kind (gfc_expr *); try gfc_check_lbound (gfc_expr *, gfc_expr *); +try gfc_check_link (gfc_expr *, gfc_expr *); try gfc_check_logical (gfc_expr *, gfc_expr *); try gfc_check_min_max (gfc_actual_arglist *); try gfc_check_min_max_integer (gfc_actual_arglist *); @@ -90,6 +94,7 @@ try gfc_check_radix (gfc_expr *); try gfc_check_rand (gfc_expr *); try gfc_check_range (gfc_expr *); try gfc_check_real (gfc_expr *, gfc_expr *); +try gfc_check_rename (gfc_expr *, gfc_expr *); try gfc_check_repeat (gfc_expr *, gfc_expr *); try gfc_check_reshape (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_scale (gfc_expr *, gfc_expr *); @@ -105,6 +110,7 @@ try gfc_check_spread (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_srand (gfc_expr *); try gfc_check_stat (gfc_expr *, gfc_expr *); try gfc_check_sum (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_symlnk (gfc_expr *, gfc_expr *); try gfc_check_transfer (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_transpose (gfc_expr *); try gfc_check_trim (gfc_expr *); @@ -117,18 +123,28 @@ try gfc_check_x (gfc_expr *); /* Intrinsic subroutines. */ +try gfc_check_chdir_sub (gfc_expr *, gfc_expr *); try gfc_check_cpu_time (gfc_expr *); try gfc_check_system_clock (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_date_and_time (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_exit (gfc_expr *); try gfc_check_flush (gfc_expr *); try gfc_check_fstat_sub (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_gerror (gfc_expr *); +try gfc_check_getlog (gfc_expr *); try gfc_check_mvbits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_random_number (gfc_expr *); try gfc_check_random_seed (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_etime_sub (gfc_expr *, gfc_expr *); try gfc_check_getcwd_sub (gfc_expr *, gfc_expr *); +try gfc_check_hostnm_sub (gfc_expr *, gfc_expr *); +try gfc_check_kill_sub (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_perror (gfc_expr *); +try gfc_check_rename_sub (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_link_sub (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_symlnk_sub (gfc_expr *, gfc_expr *, gfc_expr *); +try gfc_check_sleep_sub (gfc_expr *); try gfc_check_stat_sub (gfc_expr *, gfc_expr *, gfc_expr *); try gfc_check_system_sub (gfc_expr *, gfc_expr *); try gfc_check_umask_sub (gfc_expr *, gfc_expr *); @@ -256,6 +272,7 @@ void gfc_resolve_besn (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_btest (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ceiling (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_char (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_chdir (gfc_expr *, gfc_expr *); void gfc_resolve_cmplx (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_dcmplx (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_conjg (gfc_expr *, gfc_expr *); @@ -281,10 +298,12 @@ void gfc_resolve_getcwd (gfc_expr *, gfc_expr *); void gfc_resolve_getgid (gfc_expr *); void gfc_resolve_getpid (gfc_expr *); void gfc_resolve_getuid (gfc_expr *); +void gfc_resolve_hostnm (gfc_expr *, gfc_expr *); void gfc_resolve_iand (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ibclr (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ibits (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ibset (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_ierrno (gfc_expr *); void gfc_resolve_ieor (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ichar (gfc_expr *, gfc_expr *); void gfc_resolve_idnint (gfc_expr *, gfc_expr *); @@ -292,9 +311,11 @@ void gfc_resolve_int (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ior (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ishft (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_ishftc (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_kill (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_lbound (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_len (gfc_expr *, gfc_expr *); void gfc_resolve_len_trim (gfc_expr *, gfc_expr *); +void gfc_resolve_link (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_log (gfc_expr *, gfc_expr *); void gfc_resolve_log10 (gfc_expr *, gfc_expr *); void gfc_resolve_logical (gfc_expr *, gfc_expr *, gfc_expr *); @@ -314,6 +335,7 @@ void gfc_resolve_not (gfc_expr *, gfc_expr *); void gfc_resolve_pack (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_product (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_real (gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_rename (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_repeat (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_reshape (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); @@ -332,9 +354,12 @@ void gfc_resolve_sqrt (gfc_expr *, gfc_expr *); void gfc_resolve_stat (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_srand (gfc_code *); void gfc_resolve_sum (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); +void gfc_resolve_symlnk (gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_system (gfc_expr *, gfc_expr *); void gfc_resolve_tan (gfc_expr *, gfc_expr *); void gfc_resolve_tanh (gfc_expr *, gfc_expr *); +void gfc_resolve_time (gfc_expr *); +void gfc_resolve_time8 (gfc_expr *); void gfc_resolve_transfer (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); void gfc_resolve_transpose (gfc_expr *, gfc_expr *); void gfc_resolve_trim (gfc_expr *, gfc_expr *); @@ -346,17 +371,27 @@ void gfc_resolve_verify (gfc_expr *, gfc_expr *, gfc_expr *, gfc_expr *); /* Intrinsic subroutine resolution. */ +void gfc_resolve_chdir_sub (gfc_code *); void gfc_resolve_cpu_time (gfc_code *); void gfc_resolve_exit (gfc_code *); void gfc_resolve_flush (gfc_code *); void gfc_resolve_fstat_sub (gfc_code *); +void gfc_resolve_gerror (gfc_code *); void gfc_resolve_getarg (gfc_code *); void gfc_resolve_getcwd_sub (gfc_code *); +void gfc_resolve_getlog (gfc_code *); void gfc_resolve_get_command (gfc_code *); void gfc_resolve_get_command_argument (gfc_code *); void gfc_resolve_get_environment_variable (gfc_code *); +void gfc_resolve_hostnm_sub (gfc_code *); +void gfc_resolve_kill_sub (gfc_code *); void gfc_resolve_mvbits (gfc_code *); +void gfc_resolve_perror (gfc_code *); void gfc_resolve_random_number (gfc_code *); +void gfc_resolve_rename_sub (gfc_code *); +void gfc_resolve_link_sub (gfc_code *); +void gfc_resolve_symlnk_sub (gfc_code *); +void gfc_resolve_sleep_sub (gfc_code *); void gfc_resolve_stat_sub (gfc_code *); void gfc_resolve_system_clock (gfc_code *); void gfc_resolve_system_sub (gfc_code *); diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi new file mode 100644 index 00000000000..2f13838f1d6 --- /dev/null +++ b/gcc/fortran/intrinsic.texi @@ -0,0 +1,1904 @@ +@ignore +Copyright (C) 2005 +Free Software Foundation, Inc. +This is part of the GFORTRAN manual. +For copying conditions, see the file gfortran.texi. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``GNU General Public License'' and ``Funding +Free Software'', the Front-Cover texts being (a) (see below), and with +the Back-Cover Texts being (b) (see below). A copy of the license is +included in the gfdl(7) man page. + + +Some basic guidelines for editing this document: + + (1) The intrinsic procedures are to be listed in alphabetical order. + (2) The generic name is to be use. + (3) The specific names are included in the function index and in a + table at the end of the node (See ABS entry). + (4) Try to maintain the same style for each entry. + + +@end ignore + +@node Intrinsic Procedures +@chapter Intrinsic Procedures +@cindex Intrinsic Procedures + +This portion of the document is incomplete and undergoing massive expansion +and editing. All contributions and corrections are strongly encouraged. + +@menu +* Introduction: Introduction +* @code{ABORT}: ABORT, Abort the program +* @code{ABS}: ABS, Absolute value +* @code{ACHAR}: ACHAR, Character in @acronym{ASCII} collating sequence +* @code{ACOS}: ACOS, Arccosine function +* @code{ADJUSTL}: ADJUSTL, Left adjust a string +* @code{ADJUSTR}: ADJUSTR, Right adjust a string +* @code{AIMAG}: AIMAG, Imaginary part of complex number +* @code{AINT}: AINT, Truncate to a whole number +* @code{ALL}: ALL, Determine if all values are true +* @code{ALLOCATED}: ALLOCATED, Status of allocatable entity +* @code{ANINT}: ANINT, Nearest whole number +* @code{ANY}: ANY, Determine if any values are true +* @code{ASIN}: ASIN, Arcsine function +* @code{ATAN}: ATAN, Arctangent function +* @code{BESJ0}: BESJ0, Bessel function of the first kind of order 0 +* @code{BESJ1}: BESJ1, Bessel function of the first kind of order 1 +* @code{BESJN}: BESJN, Bessel function of the first kind +* @code{BESY0}: BESY0, Bessel function of the second kind of order 0 +* @code{BESY1}: BESY1, Bessel function of the second kind of order 1 +* @code{BESYN}: BESYN, Bessel function of the second kind +* @code{COS}: COS, Cosine function +* @code{COSH}: COSH, Hyperbolic cosine function +* @code{ERF}: ERF, Error function +* @code{ERFC}: ERFC, Complementary error function +* @code{EXP}: EXP, Cosine function +* @code{LOG}: LOG, Logarithm function +* @code{LOG10}: LOG10, Base 10 logarithm function +* @code{SQRT}: SQRT, Square-root function +* @code{SIN}: SIN, Sine function +* @code{SINH}: SINH, Hyperbolic sine function +* @code{TAN}: TAN, Tangent function +* @code{TANH}: TANH, Hyperbolic tangent function +@end menu + +@node Introduction +@section Introduction to intrinsic procedures + +Gfortran provides a rich set of intrinsic procedures that includes all +the intrinsic procedures required by the Fortran 95 standard, a set of +intrinsic procedures for backwards compatibility with Gnu Fortran 77 +(i.e., @command{g77}), and a small selection of intrinsic procedures +from the Fortran 2003 standard. Any description here, which conflicts with a +description in either the Fortran 95 standard or the Fortran 2003 standard, +is unintentional and the standard(s) should be considered authoritative. + +The enumeration of the @code{KIND} type parameter is processor defined in +the Fortran 95 standard. Gfortran defines the default integer type and +default real type by @code{INTEGER(KIND=4)} and @code{REAL(KIND=4)}, +respectively. The standard mandates that both data types shall have +another kind, which have more precision. On typical target architectures +supports by @command{gfortran}, this kind type parameter is @code{KIND=8}. +Hence, @code{REAL(KIND=8)} and @code{DOUBLE PRECISION} are equivalent. +In the description of generic intrinsic procedures, the kind type parameter +will be specified by @code{KIND=*}, and in the description of specific +names for an intrinsic procedure the kind type parameter will be explicitly +given (e.g., @code{REAL(KIND=4)} or @code{REAL(KIND=8)}). Finally, for +brevity the optional @code{KIND=} syntax will be omitted. + +Many of the intrinsics procedures take one or more optional arguments. +This document follows the convention used in the Fortran 95 standard, +and denotes such arguments by square brackets. + +@command{Gfortran} offers the @option{-std=f95} and @option{-std=gnu} options, +which can be used to restrict the set of intrinsic procedures to a +given standard. By default, @command{gfortran} sets the @option{-std=gnu} +option, and so all intrinsic procedures describe here are accepted. There +is one caveat. For a select group of intrinsic procedures, @command{g77} +implemented both a function and a subroutine. Both classes +have been implemented in @command{gfortran} for backwards compatibility +with @command{g77}. It is noted here that these functions and subroutines +cannot be intermixed in a given subprogram. In the descriptions that follow, +the applicable option(s) is noted. + + + +@node ABORT +@section @code{ABORT} --- Abort the program +@findex @code{ABORT} +@cindex abort + +@table @asis +@item @emph{Description}: +@code{ABORT} causes immediate termination of the program. On operating +systems that support a core dump, @code{ABORT} will produce a core dump, +which is suitable for debugging purposes. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +non-elemental subroutine + +@item @emph{Syntax}: +@code{CALL ABORT} + +@item @emph{Return value}: +Does not return. + +@item @emph{Example}: +@smallexample +program test_abort + integer :: i = 1, j = 2 + if (i /= j) call abort +end program test_abort +@end smallexample +@end table + + + +@node ABS +@section @code{ABS} --- Absolute value +@findex @code{ABS} intrinsic +@findex @code{CABS} intrinsic +@findex @code{DABS} intrinsic +@findex @code{IABS} intrinsic +@findex @code{ZABS} intrinsic +@findex @code{CDABS} intrinsic +@cindex absolute value + +@table @asis +@item @emph{Description}: +@code{ABS(X)} computes the absolute value of @code{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = ABS(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type of the argument shall be an @code{INTEGER(*)}, +@code{REAL(*)}, or @code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of the same type and +kind as the argument except the return value is @code{REAL(*)} for a +@code{COMPLEX(*)} argument. + +@item @emph{Example}: +@smallexample +program test_abs + integer :: i = -1 + real :: x = -1.e0 + complex :: z = (-1.e0,0.e0) + i = abs(i) + x = abs(x) + x = abs(z) +end program test_abs +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{CABS(Z)} @tab @code{COMPLEX(4) Z} @tab @code{REAL(4)} @tab f95, gnu +@item @code{DABS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{IABS(I)} @tab @code{INTEGER(4) I} @tab @code{INTEGER(4)} @tab f95, gnu +@item @code{ZABS(Z)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab gnu +@item @code{CDABS(Z)} @tab @code{COMPLEX(8) Z} @tab @code{COMPLEX(8)} @tab gnu +@end multitable +@end table + + + +@node ACHAR +@section @code{ACHAR} --- Character in @acronym{ASCII} collating sequence +@findex @code{ACHAR} intrinsic +@cindex @acronym{ASCII} collating sequence + +@table @asis +@item @emph{Description}: +@code{ACHAR(I)} returns the character located at position @code{I} +in the @acronym{ASCII} collating sequence. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{C = ACHAR(I)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{I} @tab The type shall be an @code{INTEGER(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{CHARACTER} with a length of one. The +kind type parameter is the same as @code{KIND('A')}. + +@item @emph{Example}: +@smallexample +program test_achar + character c + c = achar(32) +end program test_achar +@end smallexample +@end table + + + +@node ACOS +@section @code{ACOS} --- Arccosine function +@findex @code{ACOS} intrinsic +@findex @code{DACOS} intrinsic +@cindex arccosine + +@table @asis +@item @emph{Description}: +@code{ACOS(X)} computes the arccosine of its @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = ACOS(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}, and a magnitude that is +less than one. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it lies in the +range @math{ 0 \leq \arccos (x) \leq \pi}. The kind type +parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_acos + real(8) :: x = 0.866_8 + x = achar(x) +end program test_acos +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DACOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + + +@node ADJUSTL +@section @code{ADJUSTL} --- Left adjust a string +@findex @code{ADJUSTL} intrinsic +@cindex adjust string + +@table @asis +@item @emph{Description}: +@code{ADJUSTL(STR)} will left adjust a string by removing leading spaces. +Spaces are inserted at the end of the string as needed. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{STR = ADJUSTL(STR)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{STR} @tab The type shall be @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{CHARACTER} where leading spaces +are removed and the same number of spaces are inserted on the end +of @var{STR}. + +@item @emph{Example}: +@smallexample +program test_adjustl + character(len=20) :: str = ' gfortran' + str = adjustl(str) + print *, str +end program test_adjustl +@end smallexample +@end table + + +@node ADJUSTR +@section @code{ADJUSTR} --- Right adjust a string +@findex @code{ADJUSTR} intrinsic +@cindex adjust string + +@table @asis +@item @emph{Description}: +@code{ADJUSTR(STR)} will right adjust a string by removing trailing spaces. +Spaces are inserted at the start of the string as needed. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{STR = ADJUSTR(STR)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{STR} @tab The type shall be @code{CHARACTER}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{CHARACTER} where trailing spaces +are removed and the same number of spaces are inserted at the start +of @var{STR}. + +@item @emph{Example}: +@smallexample +program test_adjustr + character(len=20) :: str = 'gfortran' + str = adjustr(str) + print *, str +end program test_adjustr +@end smallexample +@end table + + +@node AIMAG +@section @code{AIMAG} --- Imaginary part of complex number +@findex @code{AIMAG} intrinsic +@findex @code{DIMAG} intrinsic +@cindex Imaginary part + +@table @asis +@item @emph{Description}: +@code{AIMAG(Z)} yields the imaginary part of complex argument @code{Z}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = AIMAG(Z)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{Z} @tab The type of the argument shall be @code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type real with the +kind type parameter of the argument. + +@item @emph{Example}: +@smallexample +program test_aimag + complex(4) z4 + complex(8) z8 + z4 = cmplx(1.e0_4, 0.e0_4) + z8 = cmplx(0.e0_8, 1.e0_8) + print *, aimag(z4), dimag(z8) +end program test_aimag +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DIMAG(Z)} @tab @code{COMPLEX(8) Z} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + +@node AINT +@section @code{AINT} --- Imaginary part of complex number +@findex @code{AINT} intrinsic +@findex @code{DINT} intrinsic +@cindex whole number + +@table @asis +@item @emph{Description}: +@code{AINT(X [, KIND])} truncates its argument to a whole number. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = AINT(X)} @* +@code{X = AINT(X, KIND)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type of the argument shall be @code{REAL(*)}. +@item @var{KIND} @tab (Optional) @var{KIND} shall be a scalar integer +initialization expression. +@end multitable + +@item @emph{Return value}: +The return value is of type real with the kind type parameter of the +argument if the optional @var{KIND} is absence; otherwise, the kind +type parameter will be given by @var{KIND}. If the magnitude of +@var{X} is less than one, then @code{AINT(X)} returns zero. If the +magnitude is equal to or greater than one, then it returns the largest +whole number that does not exceed its magnitude. The sign is the same +as the sign of @var{X}. + +@item @emph{Example}: +@smallexample +program test_aint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, aint(x4), dint(x8) + x8 = aint(x4,8) +end program test_aint +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DINT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + +@node ALL +@section @code{ALL} --- All values in @var{MASK} along @var{DIM} are true + @findex @code{ALL} intrinsic +@cindex true values + +@table @asis +@item @emph{Description}: +@code{ALL(MASK [, DIM])} determines if all the values are true in @var{MASK} +in the array along dimension @var{DIM}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +transformational function + +@item @emph{Syntax}: +@code{L = ALL(MASK)} @* +@code{L = ALL(MASK, DIM)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{MASK} @tab The type of the argument shall be @code{LOGICAL(*)} and +it shall not be scalar. +@item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer +with a value that lies between one and the rank of @var{MASK}. +@end multitable + +@item @emph{Return value}: +@code{ALL(MASK)} returns a scalar value of type @code{LOGICAL(*)} where +the kind type parameter is the same as the kind type parameter of +@var{MASK}. If @var{DIM} is present, then @code{ALL(MASK, DIM)} returns +an array with the rank of @var{MASK} minus 1. The shape is determined from +the shape of @var{MASK} where the @var{DIM} dimension is elided. + +@table @asis +@item (A) +@code{ALL(MASK)} is true if all elements of @var{MASK} are true. +It also is true if @var{MASK} has zero size; otherwise, it is false. +@item (B) +If the rank of @var{MASK} is one, then @code{ALL(MASK,DIM)} is equivalent +to @code{ALL(MASK)}. If the rank is greater than one, then @code{ALL(MASK,DIM)} +is determined by applying @code{ALL} to the array sections. +@end table + +@item @emph{Example}: +@smallexample +program test_all + logical l + l = all((/.true., .true., .true./)) + print *, l + call section + contains + subroutine section + integer a(2,3), b(2,3) + a = 1 + b = 1 + b(2,2) = 2 + print *, all(a .eq. b, 1) + print *, all(a .eq. b, 2) + end subroutine section +end program test_all +@end smallexample +@end table + + +@node ALLOCATED +@section @code{ALLOCATED} --- Status of an allocatable entity +@findex @code{ALLOCATED} intrinsic +@cindex allocation status + +@table @asis +@item @emph{Description}: +@code{ALLOCATED(X)} checks the status of wether @var{X} is allocated. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +inquiry function + +@item @emph{Syntax}: +@code{L = ALLOCATED(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The argument shall be an @code{ALLOCATABLE} array. +@end multitable + +@item @emph{Return value}: +The return value is a scalar @code{LOGICAL} with the default logical +kind type parameter. If @var{X} is allocated, @code{ALLOCATED(X)} +is @code{.TRUE.}; otherwise, it returns the @code{.TRUE.} + +@item @emph{Example}: +@smallexample +program test_allocated + integer :: i = 4 + real(4), allocatable :: x(:) + if (allocated(x) .eqv. .false.) allocate(x(i) +end program test_allocated +@end smallexample +@end table + + +@node ANINT +@section @code{ANINT} --- Imaginary part of complex number +@findex @code{ANINT} intrinsic +@findex @code{DNINT} intrinsic +@cindex whole number + +@table @asis +@item @emph{Description}: +@code{ANINT(X [, KIND])} rounds its argument to the nearest whole number. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = ANINT(X)} @* +@code{X = ANINT(X, KIND)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type of the argument shall be @code{REAL(*)}. +@item @var{KIND} @tab (Optional) @var{KIND} shall be a scalar integer +initialization expression. +@end multitable + +@item @emph{Return value}: +The return value is of type real with the kind type parameter of the +argument if the optional @var{KIND} is absence; otherwise, the kind +type parameter will be given by @var{KIND}. If @var{X} is greater than +zero, then @code{ANINT(X)} returns @code{AINT(X+0.5)}. If @var{X} is +less than or equal to zero, then return @code{AINT(X-0.5)}. + +@item @emph{Example}: +@smallexample +program test_anint + real(4) x4 + real(8) x8 + x4 = 1.234E0_4 + x8 = 4.321_8 + print *, anint(x4), dnint(x8) + x8 = anint(x4,8) +end program test_anint +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DNINT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + +@node ANY +@section @code{ANY} --- Any value in @var{MASK} along @var{DIM} is true + @findex @code{ANY} intrinsic +@cindex true values + +@table @asis +@item @emph{Description}: +@code{ANY(MASK [, DIM])} determines if any of the values is true in @var{MASK} +in the array along dimension @var{DIM}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +transformational function + +@item @emph{Syntax}: +@code{L = ANY(MASK)} @* +@code{L = ANY(MASK, DIM)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{MASK} @tab The type of the argument shall be @code{LOGICAL(*)} and +it shall not be scalar. +@item @var{DIM} @tab (Optional) @var{DIM} shall be a scalar integer +with a value that lies between one and the rank of @var{MASK}. +@end multitable + +@item @emph{Return value}: +@code{ANY(MASK)} returns a scalar value of type @code{LOGICAL(*)} where +the kind type parameter is the same as the kind type parameter of +@var{MASK}. If @var{DIM} is present, then @code{ANY(MASK, DIM)} returns +an array with the rank of @var{MASK} minus 1. The shape is determined from +the shape of @var{MASK} where the @var{DIM} dimension is elided. + +@table @asis +@item (A) +@code{ANY(MASK)} is true if any element of @var{MASK} is true; +otherwise, it is false. It also is false if @var{MASK} has zero size. +@item (B) +If the rank of @var{MASK} is one, then @code{ANY(MASK,DIM)} is equivalent +to @code{ANY(MASK)}. If the rank is greater than one, then @code{ANY(MASK,DIM)} +is determined by applying @code{ANY} to the array sections. +@end table + +@item @emph{Example}: +@smallexample +program test_any + logical l + l = any((/.true., .true., .true./)) + print *, l + call section + contains + subroutine section + integer a(2,3), b(2,3) + a = 1 + b = 1 + b(2,2) = 2 + print *, any(a .eq. b, 1) + print *, any(a .eq. b, 2) + end subroutine section +end program test_any +@end smallexample +@end table + + +@node ASIN +@section @code{ASIN} --- Arcsine function +@findex @code{ASIN} intrinsic +@findex @code{DASIN} intrinsic +@cindex arcsine + +@table @asis +@item @emph{Description}: +@code{ASIN(X)} computes the arcsine of its @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = ASIN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}, and a magnitude that is +less than one. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it lies in the +range @math{ \pi / 2 \leq \arccos (x) \leq \pi / 2}. The kind type +parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_asin + real(8) :: x = 0.866_8 + x = asin(x) +end program test_asin +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DASIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + +@node ATAN +@section @code{ATAN} --- Arctangent function +@findex @code{ATAN} intrinsic +@findex @code{DATAN} intrinsic +@cindex arctangent + +@table @asis +@item @emph{Description}: +@code{ATAN(X)} computes the arctangent of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = ATAN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it lies in the +range @math{ - \pi / 2 \leq \arcsin (x) \leq \pi / 2}. + +@item @emph{Example}: +@smallexample +program test_atan + real(8) :: x = 2.866_8 + x = atan(x) +end program test_atan +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DATAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + + +@node BESJ0 +@section @code{BESJ0} --- Bessel function of the first kind of order 0 +@findex @code{BESJ0} intrinsic +@findex @code{DBESJ0} intrinsic +@cindex Bessel + +@table @asis +@item @emph{Description}: +@code{BESJ0(X)} computes the Bessel function of the first kind of order 0 +of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = BESJ0(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it lies in the +range @math{ - 0.4027... \leq Bessel (0,x) \leq 1}. + +@item @emph{Example}: +@smallexample +program test_besj0 + real(8) :: x = 0.0_8 + x = besj0(x) +end program test_besj0 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DBESJ0(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + + +@node BESJ1 +@section @code{BESJ1} --- Bessel function of the first kind of order 1 +@findex @code{BESJ1} intrinsic +@findex @code{DBESJ1} intrinsic +@cindex Bessel + +@table @asis +@item @emph{Description}: +@code{BESJ1(X)} computes the Bessel function of the first kind of order 1 +of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = BESJ1(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it lies in the +range @math{ - 0.5818... \leq Bessel (0,x) \leq 0.5818 }. + +@item @emph{Example}: +@smallexample +program test_besj1 + real(8) :: x = 1.0_8 + x = besj1(x) +end program test_besj1 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DBESJ1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + + +@node BESJN +@section @code{BESJN} --- Bessel function of the first kind +@findex @code{BESJN} intrinsic +@findex @code{DBESJN} intrinsic +@cindex Bessel + +@table @asis +@item @emph{Description}: +@code{BESJN(N, X)} computes the Bessel function of the first kind of order +@var{N} of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{Y = BESJN(N, X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{N} @tab The type shall be an @code{INTEGER(*)}. +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)}. + +@item @emph{Example}: +@smallexample +program test_besjn + real(8) :: x = 1.0_8 + x = besjn(5,x) +end program test_besjn +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DBESJN(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + + +@node BESY0 +@section @code{BESY0} --- Bessel function of the second kind of order 0 +@findex @code{BESY0} intrinsic +@findex @code{DBESY0} intrinsic +@cindex Bessel + +@table @asis +@item @emph{Description}: +@code{BESY0(X)} computes the Bessel function of the second kind of order 0 +of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = BESY0(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)}. + +@item @emph{Example}: +@smallexample +program test_besy0 + real(8) :: x = 0.0_8 + x = besy0(x) +end program test_besy0 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DBESY0(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + + +@node BESY1 +@section @code{BESY1} --- Bessel function of the second kind of order 1 +@findex @code{BESY1} intrinsic +@findex @code{DBESY1} intrinsic +@cindex Bessel + +@table @asis +@item @emph{Description}: +@code{BESY1(X)} computes the Bessel function of the second kind of order 1 +of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = BESY1(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)}. + +@item @emph{Example}: +@smallexample +program test_besy1 + real(8) :: x = 1.0_8 + x = besy1(x) +end program test_besy1 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DBESY1(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + + +@node BESYN +@section @code{BESYN} --- Bessel function of the second kind +@findex @code{BESYN} intrinsic +@findex @code{DBESYN} intrinsic +@cindex Bessel + +@table @asis +@item @emph{Description}: +@code{BESYN(N, X)} computes the Bessel function of the second kind of order +@var{N} of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{Y = BESYN(N, X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{N} @tab The type shall be an @code{INTEGER(*)}. +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)}. + +@item @emph{Example}: +@smallexample +program test_besyn + real(8) :: x = 1.0_8 + x = besyn(5,x) +end program test_besyn +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DBESYN(X)}@tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + +@node COS +@section @code{COS} --- Cosine function +@findex @code{COS} intrinsic +@findex @code{DCOS} intrinsic +@findex @code{ZCOS} intrinsic +@findex @code{CDCOS} intrinsic +@cindex cosine + +@table @asis +@item @emph{Description}: +@code{COS(X)} computes the cosine of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = COS(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)} or +@code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value has same type and kind than @var{X}. + +@item @emph{Example}: +@smallexample +program test_cos + real :: x = 0.0 + x = cos(x) +end program test_cos +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DCOS(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{CCOS(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu +@item @code{ZCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@item @code{CDCOS(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@end multitable +@end table + + +@node COSH +@section @code{COSH} --- Hyperbolic cosine function +@findex @code{COSH} intrinsic +@findex @code{DCOSH} intrinsic +@cindex hyperbolic cosine + +@table @asis +@item @emph{Description}: +@code{COSH(X)} computes the hyperbolic cosine of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = COSH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it is positive +(@math{ \cosh (x) \geq 0 }. + +@item @emph{Example}: +@smallexample +program test_cosh + real(8) :: x = 1.0_8 + x = cosh(x) +end program test_cosh +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DCOSH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + +@node ERF +@section @code{ERF} --- Error function +@findex @code{ERF} intrinsic +@cindex error + +@table @asis +@item @emph{Description}: +@code{ERF(X)} computes the error function of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = ERF(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it is positive +(@math{ - 1 \leq erf (x) \leq 1 }. + +@item @emph{Example}: +@smallexample +program test_erf + real(8) :: x = 0.17_8 + x = erf(x) +end program test_erf +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DERF(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + + +@node ERFC +@section @code{ERFC} --- Error function +@findex @code{ERFC} intrinsic +@cindex error + +@table @asis +@item @emph{Description}: +@code{ERFC(X)} computes the complementary error function of @var{X}. + +@item @emph{Option}: +gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = ERFC(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and it is positive +(@math{ 0 \leq erfc (x) \leq 2 }. + +@item @emph{Example}: +@smallexample +program test_erfc + real(8) :: x = 0.17_8 + x = erfc(x) +end program test_erfc +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DERFC(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab gnu +@end multitable +@end table + + + +@node EXP +@section @code{EXP} --- Exponential function +@findex @code{EXP} intrinsic +@findex @code{DEXP} intrinsic +@findex @code{ZEXP} intrinsic +@findex @code{CDEXP} intrinsic +@cindex exponential + +@table @asis +@item @emph{Description}: +@code{EXP(X)} computes the base @math{e} exponential of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = EXP(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)} or +@code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value has same type and kind than @var{X}. + +@item @emph{Example}: +@smallexample +program test_exp + real :: x = 1.0 + x = exp(x) +end program test_exp +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DEXP(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{CEXP(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu +@item @code{ZEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@item @code{CDEXP(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@end multitable +@end table + + +@node LOG +@section @code{LOG} --- Logarithm function +@findex @code{LOG} intrinsic +@findex @code{ALOG} intrinsic +@findex @code{DLOG} intrinsic +@findex @code{CLOG} intrinsic +@findex @code{ZLOG} intrinsic +@findex @code{CDLOG} intrinsic +@cindex logarithm + +@table @asis +@item @emph{Description}: +@code{LOG(X)} computes the logarithm of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = LOG(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)} or +@code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} or @code{COMPLEX(*)}. +The kind type parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_log + real(8) :: x = 1.0_8 + complex :: z = (1.0, 2.0) + x = log(x) + z = log(z) +end program test_log +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{ALOG(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab f95, gnu +@item @code{DLOG(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{CLOG(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu +@item @code{ZLOG(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@item @code{CDLOG(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@end multitable +@end table + + + +@node LOG10 +@section @code{LOG10} --- Base 10 logarithm function +@findex @code{LOG10} intrinsic +@findex @code{ALOG10} intrinsic +@findex @code{DLOG10} intrinsic +@cindex logarithm + +@table @asis +@item @emph{Description}: +@code{LOG10(X)} computes the base 10 logarithm of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = LOG10(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)} or +@code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} or @code{COMPLEX(*)}. +The kind type parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_log10 + real(8) :: x = 10.0_8 + x = log10(x) +end program test_log10 +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{ALOG10(X)} @tab @code{REAL(4) X} @tab @code{REAL(4)} @tab f95, gnu +@item @code{DLOG10(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + + +@node SIN +@section @code{SIN} --- Sine function +@findex @code{SIN} intrinsic +@findex @code{DSIN} intrinsic +@findex @code{ZSIN} intrinsic +@findex @code{CDSIN} intrinsic +@cindex sine + +@table @asis +@item @emph{Description}: +@code{SIN(X)} computes the sine of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = SIN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)} or +@code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value has same type and king than @var{X}. + +@item @emph{Example}: +@smallexample +program test_sin + real :: x = 0.0 + x = sin(x) +end program test_sin +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DSIN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{CSIN(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu +@item @code{ZSIN(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@item @code{CDSIN(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@end multitable +@end table + + + + +@node SINH +@section @code{SINH} --- Hyperbolic sine function +@findex @code{SINH} intrinsic +@findex @code{DSINH} intrinsic +@cindex hyperbolic sine + +@table @asis +@item @emph{Description}: +@code{SINH(X)} computes the hyperbolic sine of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = SINH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)}. + +@item @emph{Example}: +@smallexample +program test_sinh + real(8) :: x = - 1.0_8 + x = sinh(x) +end program test_sinh +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DSINH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + + +@node SQRT +@section @code{SQRT} --- Square-root function +@findex @code{SQRT} intrinsic +@findex @code{DSQRT} intrinsic +@findex @code{CSQRT} intrinsic +@findex @code{ZSQRT} intrinsic +@findex @code{CDSQRT} intrinsic +@cindex square-root + +@table @asis +@item @emph{Description}: +@code{SQRT(X)} computes the square root of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = SQRT(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)} or +@code{COMPLEX(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} or @code{COMPLEX(*)}. +The kind type parameter is the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_sqrt + real(8) :: x = 2.0_8 + complex :: z = (1.0, 2.0) + x = sqrt(x) + z = sqrt(z) +end program test_sqrt +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DSQRT(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@item @code{CSQRT(X)} @tab @code{COMPLEX(4) X} @tab @code{COMPLEX(4)} @tab f95, gnu +@item @code{ZSQRT(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@item @code{CDSQRT(X)} @tab @code{COMPLEX(8) X} @tab @code{COMPLEX(8)} @tab f95, gnu +@end multitable +@end table + + + +@node TAN +@section @code{TAN} --- Tangent function +@findex @code{TAN} intrinsic +@findex @code{DTAN} intrinsic +@cindex tangent + +@table @asis +@item @emph{Description}: +@code{TAN(X)} computes the tangent of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = TAN(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)}. The kind type parameter is +the same as @var{X}. + +@item @emph{Example}: +@smallexample +program test_tan + real(8) :: x = 0.165_8 + x = tan(x) +end program test_tan +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DTAN(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + +@node TANH +@section @code{TANH} --- Hyperbolic tangent function +@findex @code{TANH} intrinsic +@findex @code{DTANH} intrinsic +@cindex hyperbolic tangent + +@table @asis +@item @emph{Description}: +@code{TANH(X)} computes the hyperbolic tangent of @var{X}. + +@item @emph{Option}: +f95, gnu + +@item @emph{Type}: +elemental function + +@item @emph{Syntax}: +@code{X = TANH(X)} + +@item @emph{Arguments}: +@multitable @columnfractions .15 .80 +@item @var{X} @tab The type shall be an @code{REAL(*)}. +@end multitable + +@item @emph{Return value}: +The return value is of type @code{REAL(*)} and lies in the range +@math{ - 1 \leq tanh(x) \leq 1 }. + +@item @emph{Example}: +@smallexample +program test_tanh + real(8) :: x = 2.1_8 + x = tanh(x) +end program test_tanh +@end smallexample + +@item @emph{Specific names}: +@multitable @columnfractions .24 .24 .24 .24 +@item Name @tab Argument @tab Return type @tab Option +@item @code{DTANH(X)} @tab @code{REAL(8) X} @tab @code{REAL(8)} @tab f95, gnu +@end multitable +@end table + + + +@comment gen associated +@comment +@comment gen atan2 +@comment datan2 +@comment +@comment gen bit_size +@comment +@comment gen btest +@comment +@comment gen ceiling +@comment +@comment gen char +@comment +@comment gen cmplx +@comment +@comment gen command_argument_count +@comment +@comment gen conjg +@comment dconjg +@comment +@comment gen count +@comment +@comment sub cpu_time +@comment +@comment gen cshift +@comment +@comment sub date_and_time +@comment +@comment gen dble +@comment dfloat +@comment +@comment gen dcmplx +@comment +@comment gen digits +@comment +@comment gen dim +@comment idim +@comment ddim +@comment +@comment gen dot_product +@comment +@comment gen dprod +@comment +@comment gen dreal +@comment +@comment sub dtime +@comment +@comment gen eoshift +@comment +@comment gen epsilon +@comment +@comment gen etime +@comment sub etime +@comment +@comment sub exit +@comment +@comment gen exponent +@comment +@comment gen floor +@comment +@comment sub flush +@comment +@comment gen fnum +@comment +@comment gen fraction +@comment +@comment gen fstat +@comment sub fstat +@comment +@comment sub getarg +@comment +@comment gen getcwd +@comment sub getcwd +@comment +@comment sub getenv +@comment +@comment gen getgid +@comment +@comment gen getpid +@comment +@comment gen getuid +@comment +@comment sub get_command +@comment +@comment sub get_command_argument +@comment +@comment sub get_environment_variable +@comment +@comment gen huge +@comment +@comment gen iachar +@comment +@comment gen iand +@comment +@comment gen iargc +@comment +@comment gen ibclr +@comment +@comment gen ibits +@comment +@comment gen ibset +@comment +@comment gen ichar +@comment +@comment gen ieor +@comment +@comment gen index +@comment +@comment gen int +@comment ifix +@comment idint +@comment +@comment gen ior +@comment +@comment gen irand +@comment +@comment gen ishft +@comment +@comment gen ishftc +@comment +@comment gen kind +@comment +@comment gen lbound +@comment +@comment gen len +@comment +@comment gen len_trim +@comment +@comment gen lge +@comment +@comment gen lgt +@comment +@comment gen lle +@comment +@comment gen llt +@comment +@comment gen logical +@comment +@comment gen matmul +@comment +@comment gen max +@comment max0 +@comment amax0 +@comment amax1 +@comment max1 +@comment dmax1 +@comment +@comment gen maxexponent +@comment +@comment gen maxloc +@comment +@comment gen maxval +@comment +@comment gen merge +@comment +@comment gen min +@comment min0 +@comment amin0 +@comment amin1 +@comment min1 +@comment dmin1 +@comment +@comment gen minexponent +@comment +@comment gen minloc +@comment +@comment gen minval +@comment +@comment gen mod +@comment amod +@comment dmod +@comment +@comment gen modulo +@comment +@comment sub mvbits +@comment +@comment gen nearest +@comment +@comment gen nint +@comment idnint +@comment +@comment gen not +@comment +@comment gen null +@comment +@comment gen pack +@comment +@comment gen precision +@comment +@comment gen present +@comment +@comment gen product +@comment +@comment gen radix +@comment +@comment gen rand +@comment ran +@comment +@comment sub random_number +@comment +@comment sub random_seed +@comment +@comment gen range +@comment +@comment gen real +@comment float +@comment sngl +@comment +@comment gen repeat +@comment +@comment gen reshape +@comment +@comment gen rrspacing +@comment +@comment gen scale +@comment +@comment gen scan +@comment +@comment gen second +@comment sub second +@comment +@comment gen selected_int_kind +@comment +@comment gen selected_real_kind +@comment +@comment gen set_exponent +@comment +@comment gen shape +@comment +@comment gen sign +@comment isign +@comment dsign +@comment +@comment gen size +@comment +@comment gen spacing +@comment +@comment gen spread +@comment +@comment sub srand +@comment +@comment gen stat +@comment sub stat +@comment +@comment gen sum +@comment +@comment gen system +@comment sub system +@comment +@comment sub system_clock +@comment +@comment gen tiny +@comment +@comment gen transfer +@comment +@comment gen transpose +@comment +@comment gen trim +@comment +@comment gen ubound +@comment +@comment gen umask +@comment sub umask +@comment +@comment gen unlink +@comment sub unlink +@comment +@comment gen unpack +@comment +@comment gen verify + diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 0d2f94d4f49..e2da09aed57 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -1,4 +1,4 @@ -@c Copyright (C) 2004 +@c Copyright (C) 2004,2005 @c Free Software Foundation, Inc. @c This is part of the GFORTRAN manual. @c For copying conditions, see the file gfortran.texi. @@ -69,6 +69,19 @@ GFORTRAN@. The @command{gfortran} command supports all the options supported by the @command{gcc} command. Only options specific to gfortran are documented here. +@emph{Gfortran is not yet a fully conformant Fortran 95 compiler}. +It can generate code for most constructs and expressions, +but work remains to be done. In particular, there are known +deficiencies with ENTRY, NAMELIST, and sophisticated use of +MODULES, POINTERS and DERIVED TYPES. For those whose Fortran +codes conform to either the Fortran 77 standard or the +GNU Fortran 77 language, we recommend to use @command{g77} +from GCC 3.4. We recommend that distributors continue to provide +packages of g77-3.4 until we announce that @command{gfortran} +fully replaces @command{g77}. +The gfortran developers welcome any feedback on user experience +with @command{gfortran} at @email{fortran@@gcc.gnu.org}. + @xref{Invoking GCC,,GCC Command Options,gcc,Using the GNU Compiler Collection (GCC)}, for information on the non-Fortran-specific aspects of the @command{gcc} command (and, @@ -119,7 +132,7 @@ by type. Explanations are in the following sections. -fdollar-ok -fimplicit-none -fmax-identifier-length @gol -std=@var{std} -ffixed-line-length-@var{n} -ffixed-line-length-none @gol --i8 -r8 -d8} +-fdefault-double-8 -fdefault-integer-8 -fdefault-real-8 } @item Warning Options @xref{Warning Options,,Options to Request or Suppress Warnings}. @@ -183,6 +196,23 @@ Specify the layout used by the the source file. The free form layout was introduced in Fortran 90. Fixed form was traditionally used in older Fortran programs. +@cindex option, -fdefault-double-8 +@cindex -fdefault-double-8, option +@item -fdefault-double-8 +Set the "DOUBLE PRECISION" type to an 8 byte wide. + +@cindex option, -fdefault-integer-8 +@cindex -fdefault-integer-8, option +@item -fdefault-integer-8 +Set the default integer and logical types to an 8 byte wide type. +Do nothing if this is already the default. + +@cindex option, -fdefault-real-8 +@cindex -fdefault-real-8, option +@item -fdefault-real-8 +Set the default real type to an 8 byte wide type. +Do nothing if this is already the default. + @cindex -fdollar-ok option @cindex options, -fdollar-ok @item -fdollar-ok @@ -231,24 +261,7 @@ Specify that no implicit typing is allowed, unless overridden by explicit @cindex option, -std=@var{std} @item -std=@var{std} Conform to the specified standard. Allowed values for @var{std} are -@samp{gnu}, @samp{f95} and @samp{f90}. - -@cindex option, -i8 -@cindex -i8, option -@cindex option, -r8 -@cindex -r8, option -@cindex option, -d8 -@cindex -d8, option -@item -i8 -@item -r8 -@item -d8 -The @option{-i8} and @option{-r8} options set the default @code{INTEGER} -and @code{REAL} kinds to @code{KIND=8}. The @option{-d8} option is -equivalent to specifying both @option{-i8} and @option{-r8}. - -When @option{-r8} is specified, the @code{DOUBLE PRECISION} kind is set -to @code{KIND=16} if the target supports a 16 byte floating point format. -If no such format exists, the @code{DOUBLE PRECISION} kind is unchanged. +@samp{gnu} and @samp{f95}. @end table @@ -371,8 +384,8 @@ This currently produces a warning under the following circumstances: @itemize @bullet @item -An INTEGER SELECT construct has a CASE the can never be matched as it's -lower value that is greater than its upper value. +An INTEGER SELECT construct has a CASE that can never be matched as its +lower value is greater than its upper value. @item A LOGICAL SELECT construct has three CASE statements. diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 8230fa99cd0..12650f90f24 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -981,6 +981,14 @@ resolve_tag (const io_tag * tag, gfc_expr * e) &e->where); return FAILURE; } + /* Check assigned label. */ + if (e->expr_type == EXPR_VARIABLE && e->ts.type == BT_INTEGER + && e->symtree->n.sym->attr.assign != 1) + { + gfc_error ("Variable '%s' has not been assigned a format label at %L", + e->symtree->n.sym->name, &e->where); + return FAILURE; + } } else { @@ -1526,9 +1534,6 @@ match_dt_format (gfc_dt * dt) gfc_free_expr (e); goto conflict; } - if (e->ts.type == BT_INTEGER && e->rank == 0) - e->symtree->n.sym->attr.assign = 1; - dt->format_expr = e; return MATCH_YES; } diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index 9a30b7df2e1..746b97df444 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -252,6 +252,31 @@ gfc_resolve_char (gfc_expr * f, gfc_expr * a, gfc_expr * kind) } +void +gfc_resolve_chdir (gfc_expr * f, gfc_expr * d ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX("chdir_i%d"), f->ts.kind); +} + + +void +gfc_resolve_chdir_sub (gfc_code * c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX("chdir_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + void gfc_resolve_cmplx (gfc_expr * f, gfc_expr * x, gfc_expr * y, gfc_expr * kind) { @@ -532,6 +557,14 @@ gfc_resolve_getuid (gfc_expr * f) f->value.function.name = gfc_get_string (PREFIX("getuid")); } +void +gfc_resolve_hostnm (gfc_expr * f, gfc_expr * n ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX ("hostnm")); +} + void gfc_resolve_iand (gfc_expr * f, gfc_expr * i, gfc_expr * j) { @@ -595,6 +628,15 @@ gfc_resolve_idnint (gfc_expr * f, gfc_expr * a) } +void +gfc_resolve_ierrno (gfc_expr * f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX("ierrno_i%d"), f->ts.kind); +} + + void gfc_resolve_ieor (gfc_expr * f, gfc_expr * i, gfc_expr * j) { @@ -669,6 +711,17 @@ gfc_resolve_ishftc (gfc_expr * f, gfc_expr * i, gfc_expr * shift, } +void +gfc_resolve_kill (gfc_expr * f, ATTRIBUTE_UNUSED gfc_expr * p, + ATTRIBUTE_UNUSED gfc_expr * s) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + + f->value.function.name = gfc_get_string (PREFIX("kill_i%d"), f->ts.kind); +} + + void gfc_resolve_lbound (gfc_expr * f, gfc_expr * array, gfc_expr * dim) @@ -707,6 +760,16 @@ gfc_resolve_len_trim (gfc_expr * f, gfc_expr * string) } +void +gfc_resolve_link (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED, + gfc_expr * p2 ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX("link_i%d"), f->ts.kind); +} + + void gfc_resolve_log (gfc_expr * f, gfc_expr * x) { @@ -1018,6 +1081,16 @@ gfc_resolve_real (gfc_expr * f, gfc_expr * a, gfc_expr * kind) } +void +gfc_resolve_rename (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED, + gfc_expr * p2 ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX("rename_i%d"), f->ts.kind); +} + + void gfc_resolve_repeat (gfc_expr * f, gfc_expr * string, gfc_expr * ncopies ATTRIBUTE_UNUSED) @@ -1275,6 +1348,16 @@ gfc_resolve_sum (gfc_expr * f, gfc_expr * array, gfc_expr * dim, } +void +gfc_resolve_symlnk (gfc_expr * f, gfc_expr * p1 ATTRIBUTE_UNUSED, + gfc_expr * p2 ATTRIBUTE_UNUSED) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = gfc_default_integer_kind; + f->value.function.name = gfc_get_string (PREFIX("symlnk_i%d"), f->ts.kind); +} + + /* Resolve the g77 compatibility function SYSTEM. */ void @@ -1304,6 +1387,24 @@ gfc_resolve_tanh (gfc_expr * f, gfc_expr * x) } +void +gfc_resolve_time (gfc_expr * f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 4; + f->value.function.name = gfc_get_string (PREFIX("time_func")); +} + + +void +gfc_resolve_time8 (gfc_expr * f) +{ + f->ts.type = BT_INTEGER; + f->ts.kind = 8; + f->value.function.name = gfc_get_string (PREFIX("time8_func")); +} + + void gfc_resolve_transfer (gfc_expr * f, gfc_expr * source ATTRIBUTE_UNUSED, gfc_expr * mold, gfc_expr * size) @@ -1490,6 +1591,70 @@ gfc_resolve_random_number (gfc_code * c ATTRIBUTE_UNUSED) } +void +gfc_resolve_rename_sub (gfc_code * c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX("rename_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_kill_sub (gfc_code * c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX("kill_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_link_sub (gfc_code * c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX("link_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_symlnk_sub (gfc_code * c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->next->expr != NULL) + kind = c->ext.actual->next->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX("symlnk_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + /* G77 compatibility subroutines etime() and dtime(). */ void @@ -1514,6 +1679,22 @@ gfc_resolve_second_sub (gfc_code * c) } +void +gfc_resolve_sleep_sub (gfc_code * c) +{ + const char *name; + int kind; + + if (c->ext.actual->expr != NULL) + kind = c->ext.actual->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX("sleep_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + /* G77 compatibility function srand(). */ void @@ -1665,6 +1846,43 @@ gfc_resolve_flush (gfc_code * c) c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); } + +void +gfc_resolve_gerror (gfc_code * c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("gerror")); +} + + +void +gfc_resolve_getlog (gfc_code * c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("getlog")); +} + + +void +gfc_resolve_hostnm_sub (gfc_code * c) +{ + const char *name; + int kind; + + if (c->ext.actual->next->expr != NULL) + kind = c->ext.actual->next->expr->ts.kind; + else + kind = gfc_default_integer_kind; + + name = gfc_get_string (PREFIX("hostnm_i%d_sub"), kind); + c->resolved_sym = gfc_get_intrinsic_sub_symbol (name); +} + + +void +gfc_resolve_perror (gfc_code * c) +{ + c->resolved_sym = gfc_get_intrinsic_sub_symbol (PREFIX ("perror_sub")); +} + /* Resolve the STAT and FSTAT intrinsic subroutines. */ void diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index 976a2b436d2..bde1d753b07 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -69,9 +69,17 @@ Wunused-labels F95 Warn when a label is unused -d8 -F95 RejectNegative -Set the default real and integer kinds to double precision +fdefault-double-8 +F95 +Set the default double precision kind to an 8 byte wide type + +fdefault-integer-8 +F95 +Set the default integer kind to an 8 byte wide type + +fdefault-real-8 +F95 +Set the default real kind to an 8 byte wide type fdollar-ok F95 @@ -133,18 +141,10 @@ frepack-arrays F95 Copy array sections into a contiguous block on procedure entry -i8 -F95 -Set the default integer kind to double precision - qkind= F95 RejectNegative Joined UInteger -qkind= Set the kind for a real with the 'q' exponent to 'n' -r8 -F95 -Set the default real kind to double precision - std=f95 F95 Conform to the ISO Fortran 95 standard. diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 2a364478530..0a173b86ea0 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -899,6 +899,39 @@ cleanup: } +/* We try to match an easy arithmetic IF statement. This only happens + when just after having encountered a simple IF statement. This code + is really duplicate with parts of the gfc_match_if code, but this is + *much* easier. */ +static match +match_arithmetic_if (void) +{ + gfc_st_label *l1, *l2, *l3; + gfc_expr *expr; + match m; + + m = gfc_match (" ( %e ) %l , %l , %l%t", &expr, &l1, &l2, &l3); + if (m != MATCH_YES) + return m; + + if (gfc_reference_st_label (l1, ST_LABEL_TARGET) == FAILURE + || gfc_reference_st_label (l2, ST_LABEL_TARGET) == FAILURE + || gfc_reference_st_label (l3, ST_LABEL_TARGET) == FAILURE) + { + gfc_free_expr (expr); + return MATCH_ERROR; + } + + new_st.op = EXEC_ARITHMETIC_IF; + new_st.expr = expr; + new_st.label = l1; + new_st.label2 = l2; + new_st.label3 = l3; + + return MATCH_YES; +} + + /* The IF statement is a bit of a pain. First of all, there are three forms of it, the simple IF, the IF that starts a block and the arithmetic IF. @@ -1036,6 +1069,7 @@ gfc_match_if (gfc_statement * if_type) match ("exit", gfc_match_exit, ST_EXIT) match ("forall", match_simple_forall, ST_FORALL) match ("go to", gfc_match_goto, ST_GOTO) + match ("if", match_arithmetic_if, ST_ARITHMETIC_IF) match ("inquire", gfc_match_inquire, ST_INQUIRE) match ("nullify", gfc_match_nullify, ST_NULLIFY) match ("open", gfc_match_open, ST_OPEN) @@ -1526,7 +1560,6 @@ gfc_match_goto (void) == FAILURE) return MATCH_ERROR; - expr->symtree->n.sym->attr.assign = 1; new_st.op = EXEC_GOTO; new_st.expr = expr; diff --git a/gcc/fortran/match.h b/gcc/fortran/match.h index 1d46e85960c..2351f9b92bf 100644 --- a/gcc/fortran/match.h +++ b/gcc/fortran/match.h @@ -108,6 +108,8 @@ match gfc_match_derived_decl (void); match gfc_match_implicit_none (void); match gfc_match_implicit (void); +void gfc_set_constant_character_len (int, gfc_expr *); + /* Matchers for attribute declarations */ match gfc_match_allocatable (void); match gfc_match_dimension (void); diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index 35964003785..21fb0a83c52 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -57,6 +57,9 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED, gfc_option.warn_surprising = 0; gfc_option.warn_unused_labels = 0; + gfc_option.flag_default_double = 0; + gfc_option.flag_default_integer = 0; + gfc_option.flag_default_real = 0; gfc_option.flag_dollar_ok = 0; gfc_option.flag_underscoring = 1; gfc_option.flag_second_underscore = 1; @@ -68,9 +71,6 @@ gfc_init_options (unsigned int argc ATTRIBUTE_UNUSED, gfc_option.flag_repack_arrays = 0; gfc_option.q_kind = gfc_default_double_kind; - gfc_option.i8 = 0; - gfc_option.r8 = 0; - gfc_option.d8 = 0; flag_argument_noalias = 2; flag_errno_math = 0; @@ -285,16 +285,16 @@ gfc_handle_option (size_t scode, const char *arg, int value) gfc_option.q_kind = value; break; - case OPT_i8: - gfc_option.i8 = value; + case OPT_fdefault_integer_8: + gfc_option.flag_default_integer = value; break; - case OPT_r8: - gfc_option.r8 = value; + case OPT_fdefault_real_8: + gfc_option.flag_default_real = value; break; - case OPT_d8: - gfc_option.d8 = value; + case OPT_fdefault_double_8: + gfc_option.flag_default_double = value; break; case OPT_I: diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index f3c51ab4675..992bc5f0af7 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -300,17 +300,15 @@ match_boz_constant (gfc_expr ** result) match_digits (0, radix, buffer); gfc_next_char (); /* Eat delimiter. */ - kind = get_kind (); - if (kind == -1) - return MATCH_ERROR; - if (kind == -2) - kind = gfc_default_integer_kind; - else if (pedantic - && (gfc_notify_std (GFC_STD_GNU, "Extension: Kind parameter " - "suffix to boz literal constant at %C.") - == FAILURE)) - return MATCH_ERROR; + /* In section 5.2.5 and following C567 in the Fortran 2003 standard, we find + "If a data-stmt-constant is a boz-literal-constant, the corresponding + variable shall be of type integer. The boz-literal-constant is treated + as if it were an int-literal-constant with a kind-param that specifies + the representation method with the largest decimal exponent range + supported by the processor." */ + + kind = gfc_max_integer_kind; e = gfc_convert_integer (buffer, kind, radix, &gfc_current_locus); if (gfc_range_check (e) != ARITH_OK) @@ -1076,7 +1074,17 @@ match_complex_constant (gfc_expr ** result) m = gfc_match_char (')'); if (m == MATCH_NO) + { + /* Give the matcher for implied do-loops a chance to run. This + yields a much saner error message for (/ (i, 4=i, 6) /). */ + if (gfc_peek_char () == '=') + { + m = MATCH_ERROR; + goto cleanup; + } + else goto syntax; + } if (m == MATCH_ERROR) goto cleanup; diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 4d98f462a82..16db94342d1 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -481,7 +481,7 @@ was_declared (gfc_symbol * sym) if (!a.implicit_type && sym->ts.type != BT_UNKNOWN) return 1; - if (a.allocatable || a.dimension || a.external || a.intrinsic + if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic || a.optional || a.pointer || a.save || a.target || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN) return 1; @@ -1249,6 +1249,36 @@ resolve_call (gfc_code * c) return t; } +/* Compare the shapes of two arrays that have non-NULL shapes. If both + op1->shape and op2->shape are non-NULL return SUCCESS if their shapes + match. If both op1->shape and op2->shape are non-NULL return FAILURE + if their shapes do not match. If either op1->shape or op2->shape is + NULL, return SUCCESS. */ + +static try +compare_shapes (gfc_expr * op1, gfc_expr * op2) +{ + try t; + int i; + + t = SUCCESS; + + if (op1->shape != NULL && op2->shape != NULL) + { + for (i = 0; i < op1->rank; i++) + { + if (mpz_cmp (op1->shape[i], op2->shape[i]) != 0) + { + gfc_error ("Shapes for operands at %L and %L are not conformable", + &op1->where, &op2->where); + t = FAILURE; + break; + } + } + } + + return t; +} /* Resolve an operator expression node. This can involve replacing the operation with a user defined function call. */ @@ -1460,10 +1490,14 @@ resolve_operator (gfc_expr * e) if (op1->rank == op2->rank) { e->rank = op1->rank; - if (e->shape == NULL) + { + t = compare_shapes(op1, op2); + if (t == FAILURE) + e->shape = NULL; + else e->shape = gfc_copy_shape (op1->shape, op1->rank); - + } } else { @@ -1499,10 +1533,12 @@ resolve_operator (gfc_expr * e) return t; bad_op: + if (gfc_extend_expr (e) == SUCCESS) return SUCCESS; gfc_error (msg, &e->where); + return FAILURE; } @@ -1665,19 +1701,26 @@ gfc_resolve_index (gfc_expr * index, int check_scalar) if (gfc_resolve_expr (index) == FAILURE) return FAILURE; - if (index->ts.type != BT_INTEGER) + if (check_scalar && index->rank != 0) { - gfc_error ("Array index at %L must be of INTEGER type", &index->where); + gfc_error ("Array index at %L must be scalar", &index->where); return FAILURE; } - if (check_scalar && index->rank != 0) + if (index->ts.type != BT_INTEGER && index->ts.type != BT_REAL) { - gfc_error ("Array index at %L must be scalar", &index->where); + gfc_error ("Array index at %L must be of INTEGER type", + &index->where); return FAILURE; } - if (index->ts.kind != gfc_index_integer_kind) + if (index->ts.type == BT_REAL) + if (gfc_notify_std (GFC_STD_GNU, "Extension: REAL array index at %L", + &index->where) == FAILURE) + return FAILURE; + + if (index->ts.kind != gfc_index_integer_kind + || index->ts.type != BT_INTEGER) { ts.type = BT_INTEGER; ts.kind = gfc_index_integer_kind; @@ -3652,10 +3695,17 @@ resolve_code (gfc_code * code, gfc_namespace * ns) break; case EXEC_GOTO: - if (code->expr != NULL && code->expr->ts.type != BT_INTEGER) - gfc_error ("ASSIGNED GOTO statement at %L requires an INTEGER " + if (code->expr != NULL) + { + if (code->expr->ts.type != BT_INTEGER) + gfc_error ("ASSIGNED GOTO statement at %L requires an INTEGER " "variable", &code->expr->where); - else + else if (code->expr->symtree->n.sym->attr.assign != 1) + gfc_error ("Variable '%s' has not been assigned a target label " + "at %L", code->expr->symtree->n.sym->name, + &code->expr->where); + } + else resolve_branch (code->label, code); break; @@ -4713,10 +4763,11 @@ gfc_resolve (gfc_namespace * ns) if (cl->length == NULL || gfc_resolve_expr (cl->length) == FAILURE) continue; - if (cl->length->ts.type != BT_INTEGER) - gfc_error - ("Character length specification at %L must be of type INTEGER", - &cl->length->where); + if (gfc_simplify_expr (cl->length, 0) == FAILURE) + continue; + + if (gfc_specification_expr (cl->length) == FAILURE) + continue; } gfc_traverse_ns (ns, resolve_values); diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 81bc0159909..a57731a7c1d 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -967,6 +967,7 @@ gfc_simplify_exp (gfc_expr * x) gfc_expr * gfc_simplify_exponent (gfc_expr * x) { + int i; mpfr_t tmp; gfc_expr *result; @@ -991,6 +992,12 @@ gfc_simplify_exponent (gfc_expr * x) gfc_mpfr_to_mpz (result->value.integer, tmp); + /* The model number for tiny(x) is b**(emin - 1) where b is the base and emin + is the smallest exponent value. So, we need to add 1 if x is tiny(x). */ + i = gfc_validate_kind (x->ts.type, x->ts.kind, false); + if (mpfr_cmp (x->value.real, gfc_real_kinds[i].tiny) == 0) + mpz_add_ui (result->value.integer,result->value.integer, 1); + mpfr_clear (tmp); return range_check (result, "EXPONENT"); @@ -1766,16 +1773,18 @@ gfc_simplify_kind (gfc_expr * e) static gfc_expr * -gfc_simplify_bound (gfc_expr * array, gfc_expr * dim, int upper) +simplify_bound (gfc_expr * array, gfc_expr * dim, int upper) { gfc_ref *ref; gfc_array_spec *as; - int i; + gfc_expr *e; + int d; if (array->expr_type != EXPR_VARIABLE) return NULL; if (dim == NULL) + /* TODO: Simplify constant multi-dimensional bounds. */ return NULL; if (dim->expr_type != EXPR_CONSTANT) @@ -1783,29 +1792,66 @@ gfc_simplify_bound (gfc_expr * array, gfc_expr * dim, int upper) /* Follow any component references. */ as = array->symtree->n.sym->as; - ref = array->ref; - while (ref->next != NULL) + for (ref = array->ref; ref; ref = ref->next) { - if (ref->type == REF_COMPONENT) - as = ref->u.c.sym->as; - ref = ref->next; + switch (ref->type) + { + case REF_ARRAY: + switch (ref->u.ar.type) + { + case AR_ELEMENT: + as = NULL; + continue; + + case AR_FULL: + /* We're done because 'as' has already been set in the + previous iteration. */ + goto done; + + case AR_SECTION: + case AR_UNKNOWN: + return NULL; + } + + gcc_unreachable (); + + case REF_COMPONENT: + as = ref->u.c.component->as; + continue; + + case REF_SUBSTRING: + continue; + } } + + gcc_unreachable (); - if (ref->type != REF_ARRAY || ref->u.ar.type != AR_FULL) + done: + if (as->type == AS_DEFERRED || as->type == AS_ASSUMED_SHAPE) return NULL; - - i = mpz_get_si (dim->value.integer); - if (upper) - return gfc_copy_expr (as->upper[i-1]); - else - return gfc_copy_expr (as->lower[i-1]); + + d = mpz_get_si (dim->value.integer); + + if (d < 1 || d > as->rank + || (d == as->rank && as->type == AS_ASSUMED_SIZE && upper)) + { + gfc_error ("DIM argument at %L is out of bounds", &dim->where); + return &gfc_bad_expr; + } + + e = upper ? as->upper[d-1] : as->lower[d-1]; + + if (e->expr_type != EXPR_CONSTANT) + return NULL; + + return gfc_copy_expr (e); } gfc_expr * gfc_simplify_lbound (gfc_expr * array, gfc_expr * dim) { - return gfc_simplify_bound (array, dim, 0); + return simplify_bound (array, dim, 0); } @@ -3578,7 +3624,7 @@ gfc_simplify_trim (gfc_expr * e) gfc_expr * gfc_simplify_ubound (gfc_expr * array, gfc_expr * dim) { - return gfc_simplify_bound (array, dim, 1); + return simplify_bound (array, dim, 1); } diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index 0b5e8e727a4..26e3f003442 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -369,6 +369,7 @@ check_conflict (symbol_attribute * attr, const char * name, locus * where) { case PROC_ST_FUNCTION: conf2 (in_common); + conf2 (dummy); break; case PROC_MODULE: diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index a97bcc593a3..bd77eb46850 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -99,43 +99,6 @@ static gfc_ss *gfc_walk_subexpr (gfc_ss *, gfc_expr *); static gfc_ss gfc_ss_terminator_var; gfc_ss * const gfc_ss_terminator = &gfc_ss_terminator_var; -unsigned HOST_WIDE_INT gfc_stack_space_left; - - -/* Returns true if a variable of specified size should go on the stack. */ - -int -gfc_can_put_var_on_stack (tree size) -{ - unsigned HOST_WIDE_INT low; - - if (!INTEGER_CST_P (size)) - return 0; - - if (gfc_option.flag_max_stack_var_size < 0) - return 1; - - if (TREE_INT_CST_HIGH (size) != 0) - return 0; - - low = TREE_INT_CST_LOW (size); - if (low > (unsigned HOST_WIDE_INT) gfc_option.flag_max_stack_var_size) - return 0; - -/* TODO: Set a per-function stack size limit. */ -#if 0 - /* We should be a bit more clever with array temps. */ - if (gfc_option.flag_max_function_vars_size >= 0) - { - if (low > gfc_stack_space_left) - return 0; - - gfc_stack_space_left -= low; - } -#endif - - return 1; -} static tree gfc_array_dataptr_type (tree desc) diff --git a/gcc/fortran/trans-array.h b/gcc/fortran/trans-array.h index b4407693909..faaaf5ade4b 100644 --- a/gcc/fortran/trans-array.h +++ b/gcc/fortran/trans-array.h @@ -95,11 +95,6 @@ tree gfc_conv_array_stride (tree, int); tree gfc_conv_array_lbound (tree, int); tree gfc_conv_array_ubound (tree, int); -/* The remaining space available for stack variables. */ -extern unsigned HOST_WIDE_INT gfc_stack_space_left; -/* Returns true if a variable of specified size should go on the stack. */ -int gfc_can_put_var_on_stack (tree); - /* Build expressions for accessing components of an array descriptor. */ tree gfc_conv_descriptor_data (tree); tree gfc_conv_descriptor_offset (tree); diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c index 35ea8012034..42e67123328 100644 --- a/gcc/fortran/trans-common.c +++ b/gcc/fortran/trans-common.c @@ -242,6 +242,27 @@ build_field (segment_info *h, tree union_type, record_layout_info rli) size_binop (PLUS_EXPR, DECL_FIELD_OFFSET (field), DECL_SIZE_UNIT (field))); + /* If this field is assigned to a label, we create another two variables. + One will hold the address of taget label or format label. The other will + hold the length of format label string. */ + if (h->sym->attr.assign) + { + tree len; + tree addr; + + gfc_allocate_lang_decl (field); + GFC_DECL_ASSIGN (field) = 1; + len = gfc_create_var_np (gfc_charlen_type_node,h->sym->name); + addr = gfc_create_var_np (pvoid_type_node, h->sym->name); + TREE_STATIC (len) = 1; + TREE_STATIC (addr) = 1; + DECL_INITIAL (len) = build_int_cst (NULL_TREE, -2); + gfc_set_decl_location (len, &h->sym->declared_at); + gfc_set_decl_location (addr, &h->sym->declared_at); + GFC_DECL_STRING_LEN (field) = pushdecl_top_level (len); + GFC_DECL_ASSIGN_ADDR (field) = pushdecl_top_level (addr); + } + h->field = field; } @@ -252,6 +273,8 @@ static tree build_equiv_decl (tree union_type, bool is_init) { tree decl; + char name[15]; + static int serial = 0; if (is_init) { @@ -260,10 +283,13 @@ build_equiv_decl (tree union_type, bool is_init) return decl; } - decl = build_decl (VAR_DECL, NULL, union_type); + snprintf (name, sizeof (name), "equiv.%d", serial++); + decl = build_decl (VAR_DECL, get_identifier (name), union_type); DECL_ARTIFICIAL (decl) = 1; + DECL_IGNORED_P (decl) = 1; - DECL_COMMON (decl) = 1; + if (!gfc_can_put_var_on_stack (DECL_SIZE_UNIT (decl))) + TREE_STATIC (decl) = 1; TREE_ADDRESSABLE (decl) = 1; TREE_USED (decl) = 1; @@ -353,7 +379,7 @@ build_common_decl (gfc_common_head *com, tree union_type, bool is_init) backend declarations for all of the elements. */ static void -create_common (gfc_common_head *com, segment_info * head) +create_common (gfc_common_head *com, segment_info * head, bool saw_equiv) { segment_info *s, *next_s; tree union_type; @@ -362,8 +388,16 @@ create_common (gfc_common_head *com, segment_info * head) tree decl; bool is_init = false; - /* Declare the variables inside the common block. */ - union_type = make_node (UNION_TYPE); + /* Declare the variables inside the common block. + If the current common block contains any equivalence object, then + make a UNION_TYPE node, otherwise RECORD_TYPE. This will let the + alias analyzer work well when there is no address overlapping for + common variables in the current common block. */ + if (saw_equiv) + union_type = make_node (UNION_TYPE); + else + union_type = make_node (RECORD_TYPE); + rli = start_record_layout (union_type); field_link = &TYPE_FIELDS (union_type); @@ -429,7 +463,7 @@ create_common (gfc_common_head *com, segment_info * head) for (s = head; s; s = next_s) { s->sym->backend_decl = build3 (COMPONENT_REF, TREE_TYPE (s->field), - decl, s->field, NULL_TREE); + decl, s->field, NULL_TREE); next_s = s->next; gfc_free (s); @@ -677,7 +711,7 @@ find_equivalence (segment_info *n) segment list multiple times to include indirect equivalences. */ static void -add_equivalences (void) +add_equivalences (bool *saw_equiv) { segment_info *f; bool more; @@ -692,6 +726,8 @@ add_equivalences (void) { f->sym->equiv_built = 1; more = find_equivalence (f); + if (more) + *saw_equiv = true; } } } @@ -762,10 +798,12 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list) HOST_WIDE_INT current_offset; unsigned HOST_WIDE_INT align; unsigned HOST_WIDE_INT max_align; + bool saw_equiv; common_segment = NULL; current_offset = 0; max_align = 1; + saw_equiv = false; /* Add symbols to the segment. */ for (sym = var_list; sym; sym = sym->common_next) @@ -795,7 +833,7 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list) /* Add all objects directly or indirectly equivalenced with this symbol. */ - add_equivalences (); + add_equivalences (&saw_equiv); if (current_segment->offset < 0) gfc_error ("The equivalence set for '%s' cause an invalid " @@ -839,7 +877,7 @@ translate_common (gfc_common_head *common, gfc_symbol *var_list) common->name, &common->where, common_segment->offset); } - create_common (common, common_segment); + create_common (common, common_segment, saw_equiv); } @@ -852,6 +890,7 @@ finish_equivalences (gfc_namespace *ns) gfc_symbol *sym; HOST_WIDE_INT offset; unsigned HOST_WIDE_INT align; + bool dummy; for (z = ns->equiv; z; z = z->next) for (y = z->eq; y; y = y->eq) @@ -862,7 +901,7 @@ finish_equivalences (gfc_namespace *ns) current_segment = get_segment_info (sym, 0); /* All objects directly or indirectly equivalenced with this symbol. */ - add_equivalences (); + add_equivalences (&dummy); /* Align the block. */ offset = align_segment (&align); @@ -873,7 +912,7 @@ finish_equivalences (gfc_namespace *ns) apply_segment_offset (current_segment, offset); /* Create the decl. */ - create_common (NULL, current_segment); + create_common (NULL, current_segment, true); break; } } diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index b81b9862207..08dd72af697 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -317,6 +317,32 @@ gfc_sym_mangled_function_id (gfc_symbol * sym) } +/* Returns true if a variable of specified size should go on the stack. */ + +int +gfc_can_put_var_on_stack (tree size) +{ + unsigned HOST_WIDE_INT low; + + if (!INTEGER_CST_P (size)) + return 0; + + if (gfc_option.flag_max_stack_var_size < 0) + return 1; + + if (TREE_INT_CST_HIGH (size) != 0) + return 0; + + low = TREE_INT_CST_LOW (size); + if (low > (unsigned HOST_WIDE_INT) gfc_option.flag_max_stack_var_size) + return 0; + +/* TODO: Set a per-function stack size limit. */ + + return 1; +} + + /* Finish processing of a declaration and install its initial value. */ static void @@ -533,7 +559,7 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym) /* For some dummy arguments we don't use the actual argument directly. - Instead we create a local decl and use that. This allows us to preform + Instead we create a local decl and use that. This allows us to perform initialization, and construct full type information. */ static tree diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 685a9f97f9e..b79d0743dec 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -1220,7 +1220,8 @@ gfc_conv_function_call (gfc_se * se, gfc_symbol * sym, something like x = f() where f is pointer valued, we have to dereference the result. */ - if (sym->attr.pointer && !se->want_pointer && !byref) + if (!se->want_pointer && !byref + && (sym->attr.pointer || (sym->result && sym->result->attr.pointer))) se->expr = gfc_build_indirect_ref (se->expr); /* A pure function may still have side-effects - it may modify its diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index dcabd4112fe..014709327b2 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -1032,8 +1032,8 @@ gfc_conv_intrinsic_minmax (gfc_se * se, gfc_expr * expr, int op) } -/* Create a symbol node for this intrinsic. The symbol form the frontend - is for the generic name. */ +/* Create a symbol node for this intrinsic. The symbol from the frontend + has the generic name. */ static gfc_symbol * gfc_get_symbol_for_expr (gfc_expr * expr) @@ -2649,11 +2649,10 @@ gfc_conv_intrinsic_repeat (gfc_se * se, gfc_expr * expr) } -/* Generate code for the IARGC intrinsic. If args_only is true this is - actually the COMMAND_ARGUMENT_COUNT intrinsic, so return IARGC - 1. */ +/* Generate code for the IARGC intrinsic. */ static void -gfc_conv_intrinsic_iargc (gfc_se * se, gfc_expr * expr, bool args_only) +gfc_conv_intrinsic_iargc (gfc_se * se, gfc_expr * expr) { tree tmp; tree fndecl; @@ -2667,8 +2666,6 @@ gfc_conv_intrinsic_iargc (gfc_se * se, gfc_expr * expr, bool args_only) type = gfc_typenode_for_spec (&expr->ts); tmp = fold_convert (type, tmp); - if (args_only) - tmp = build2 (MINUS_EXPR, type, tmp, build_int_cst (type, 1)); se->expr = tmp; } @@ -2827,7 +2824,7 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) break; case GFC_ISYM_COMMAND_ARGUMENT_COUNT: - gfc_conv_intrinsic_iargc (se, expr, TRUE); + gfc_conv_intrinsic_iargc (se, expr); break; case GFC_ISYM_CONJG: @@ -2869,7 +2866,7 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) break; case GFC_ISYM_IARGC: - gfc_conv_intrinsic_iargc (se, expr, FALSE); + gfc_conv_intrinsic_iargc (se, expr); break; case GFC_ISYM_IEOR: @@ -2980,6 +2977,7 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) gfc_conv_intrinsic_bound (se, expr, 1); break; + case GFC_ISYM_CHDIR: case GFC_ISYM_DOT_PRODUCT: case GFC_ISYM_ETIME: case GFC_ISYM_FNUM: @@ -2988,12 +2986,20 @@ gfc_conv_intrinsic_function (gfc_se * se, gfc_expr * expr) case GFC_ISYM_GETGID: case GFC_ISYM_GETPID: case GFC_ISYM_GETUID: + case GFC_ISYM_HOSTNM: + case GFC_ISYM_KILL: + case GFC_ISYM_IERRNO: case GFC_ISYM_IRAND: + case GFC_ISYM_LINK: case GFC_ISYM_MATMUL: case GFC_ISYM_RAND: + case GFC_ISYM_RENAME: case GFC_ISYM_SECOND: case GFC_ISYM_STAT: + case GFC_ISYM_SYMLNK: case GFC_ISYM_SYSTEM: + case GFC_ISYM_TIME: + case GFC_ISYM_TIME8: case GFC_ISYM_UMASK: case GFC_ISYM_UNLINK: gfc_conv_intrinsic_funcall (se, expr); diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index 26f05f1e9fb..416932173de 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -397,7 +397,6 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, tree len; gfc_init_se (&se, NULL); - gfc_conv_expr (&se, e); io = build3 (COMPONENT_REF, TREE_TYPE (var), ioparm_var, var, NULL_TREE); len = build3 (COMPONENT_REF, TREE_TYPE (var_len), ioparm_var, var_len, @@ -406,6 +405,7 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, /* Integer variable assigned a format label. */ if (e->ts.type == BT_INTEGER && e->symtree->n.sym->attr.assign == 1) { + gfc_conv_label_variable (&se, e); msg = gfc_build_cstring_const ("Assigned label is not a format label"); tmp = GFC_DECL_STRING_LEN (se.expr); @@ -417,6 +417,7 @@ set_string (stmtblock_t * block, stmtblock_t * postblock, tree var, } else { + gfc_conv_expr (&se, e); gfc_conv_string_parameter (&se); gfc_add_modify_expr (&se.pre, io, fold_convert (TREE_TYPE (io), se.expr)); gfc_add_modify_expr (&se.pre, len, se.string_length); diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index da074c8b454..ea5da88fe7b 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -80,7 +80,23 @@ gfc_trans_label_here (gfc_code * code) return build1_v (LABEL_EXPR, gfc_get_label_decl (code->here)); } + +/* Given a variable expression which has been ASSIGNed to, find the decl + containing the auxiliary variables. For variables in common blocks this + is a field_decl. */ + +void +gfc_conv_label_variable (gfc_se * se, gfc_expr * expr) +{ + gcc_assert (expr->symtree->n.sym->attr.assign == 1); + gfc_conv_expr (se, expr); + /* Deals with variable in common block. Get the field declaration. */ + if (TREE_CODE (se->expr) == COMPONENT_REF) + se->expr = TREE_OPERAND (se->expr, 1); +} + /* Translate a label assignment statement. */ + tree gfc_trans_label_assign (gfc_code * code) { @@ -95,7 +111,8 @@ gfc_trans_label_assign (gfc_code * code) /* Start a new block. */ gfc_init_se (&se, NULL); gfc_start_block (&se.pre); - gfc_conv_expr (&se, code->expr); + gfc_conv_label_variable (&se, code->expr); + len = GFC_DECL_STRING_LEN (se.expr); addr = GFC_DECL_ASSIGN_ADDR (se.expr); @@ -103,6 +120,8 @@ gfc_trans_label_assign (gfc_code * code) if (code->label->defined == ST_LABEL_TARGET) { + /* Shouldn't need to set this flag. Reserve for optimization bug. */ + DECL_ARTIFICIAL (label_tree) = 0; label_tree = gfc_build_addr_expr (pvoid_type_node, label_tree); len_tree = integer_minus_one_node; } @@ -140,7 +159,7 @@ gfc_trans_goto (gfc_code * code) /* ASSIGNED GOTO. */ gfc_init_se (&se, NULL); gfc_start_block (&se.pre); - gfc_conv_expr (&se, code->expr); + gfc_conv_label_variable (&se, code->expr); assign_error = gfc_build_cstring_const ("Assigned label is not a target label"); tmp = GFC_DECL_STRING_LEN (se.expr); diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 7bd0011ce8a..c65048cebe6 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -81,6 +81,7 @@ int gfc_index_integer_kind; /* The default kinds of the various types. */ int gfc_default_integer_kind; +int gfc_max_integer_kind; int gfc_default_real_kind; int gfc_default_double_kind; int gfc_default_character_kind; @@ -135,6 +136,9 @@ gfc_init_kinds (void) i_index += 1; } + /* Set the maximum integer kind. Used with at least BOZ constants. */ + gfc_max_integer_kind = gfc_integer_kinds[i_index - 1].kind; + for (r_index = 0, mode = MIN_MODE_FLOAT; mode <= MAX_MODE_FLOAT; mode++) { const struct real_format *fmt = REAL_MODE_FORMAT (mode); @@ -183,10 +187,10 @@ gfc_init_kinds (void) /* Choose the default integer kind. We choose 4 unless the user directs us otherwise. */ - if (gfc_option.i8) + if (gfc_option.flag_default_integer) { if (!saw_i8) - fatal_error ("integer kind=8 not available for -i8 option"); + fatal_error ("integer kind=8 not available for -fdefault-integer-8 option"); gfc_default_integer_kind = 8; } else if (saw_i4) @@ -195,10 +199,10 @@ gfc_init_kinds (void) gfc_default_integer_kind = gfc_integer_kinds[i_index - 1].kind; /* Choose the default real kind. Again, we choose 4 when possible. */ - if (gfc_option.r8) + if (gfc_option.flag_default_real) { if (!saw_r8) - fatal_error ("real kind=8 not available for -r8 option"); + fatal_error ("real kind=8 not available for -fdefault-real-8 option"); gfc_default_real_kind = 8; } else if (saw_r4) @@ -206,9 +210,16 @@ gfc_init_kinds (void) else gfc_default_real_kind = gfc_real_kinds[0].kind; - /* Choose the default double kind. If -r8 is specified, we use kind=16, - if it's available, otherwise we do not change anything. */ - if (gfc_option.r8 && saw_r16) + /* Choose the default double kind. If -fdefault-real and -fdefault-double + are specified, we use kind=8, if it's available. If -fdefault-real is + specified without -fdefault-double, we use kind=16, if it's available. + Otherwise we do not change anything. */ + if (gfc_option.flag_default_double && !gfc_option.flag_default_real) + fatal_error ("Use of -fdefault-double-8 requires -fdefault-real-8"); + + if (gfc_option.flag_default_real && gfc_option.flag_default_double && saw_r8) + gfc_default_double_kind = 8; + else if (gfc_option.flag_default_real && saw_r16) gfc_default_double_kind = 16; else if (saw_r4 && saw_r8) gfc_default_double_kind = 8; diff --git a/gcc/fortran/trans.h b/gcc/fortran/trans.h index f16e23ccff5..712c530aaee 100644 --- a/gcc/fortran/trans.h +++ b/gcc/fortran/trans.h @@ -289,6 +289,8 @@ void gfc_conv_expr_lhs (gfc_se * se, gfc_expr * expr); void gfc_conv_expr_reference (gfc_se * se, gfc_expr *); /* Equivalent to convert(type, gfc_conv_expr_val(se, expr)). */ void gfc_conv_expr_type (gfc_se * se, gfc_expr *, tree); +/* Find the decl containing the auxiliary variables for assigned variables. */ +void gfc_conv_label_variable (gfc_se * se, gfc_expr * expr); /* If the value is not constant, Create a temporary and copy the value. */ tree gfc_evaluate_now (tree, stmtblock_t *); @@ -391,6 +393,9 @@ void gfc_shadow_sym (gfc_symbol *, tree, gfc_saved_var *); /* Restore the original variable. */ void gfc_restore_sym (gfc_symbol *, gfc_saved_var *); +/* Returns true if a variable of specified size should go on the stack. */ +int gfc_can_put_var_on_stack (tree); + /* Allocate the lang-spcific part of a decl node. */ void gfc_allocate_lang_decl (tree); diff --git a/gcc/function.c b/gcc/function.c index c4656e53587..0a083d44084 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -1992,7 +1992,6 @@ struct assign_parm_data_one struct locate_and_pad_arg_data locate; int partial; BOOL_BITFIELD named_arg : 1; - BOOL_BITFIELD last_named : 1; BOOL_BITFIELD passed_pointer : 1; BOOL_BITFIELD on_stack : 1; BOOL_BITFIELD loaded_in_reg : 1; @@ -2136,24 +2135,15 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm, memset (data, 0, sizeof (*data)); - /* Set LAST_NAMED if this is last named arg before last anonymous args. */ - if (current_function_stdarg) - { - tree tem; - for (tem = TREE_CHAIN (parm); tem; tem = TREE_CHAIN (tem)) - if (DECL_NAME (tem)) - break; - if (tem == 0) - data->last_named = true; - } - - /* Set NAMED_ARG if this arg should be treated as a named arg. For - most machines, if this is a varargs/stdarg function, then we treat - the last named arg as if it were anonymous too. */ - if (targetm.calls.strict_argument_naming (&all->args_so_far)) - data->named_arg = 1; + /* NAMED_ARG is a mis-nomer. We really mean 'non-varadic'. */ + if (!current_function_stdarg) + data->named_arg = 1; /* No varadic parms. */ + else if (TREE_CHAIN (parm)) + data->named_arg = 1; /* Not the last non-varadic parm. */ + else if (targetm.calls.strict_argument_naming (&all->args_so_far)) + data->named_arg = 1; /* Only varadic ones are unnamed. */ else - data->named_arg = !data->last_named; + data->named_arg = 0; /* Treat as varadic. */ nominal_type = TREE_TYPE (parm); passed_type = DECL_ARG_TYPE (parm); @@ -3055,7 +3045,6 @@ assign_parms (tree fndecl) struct assign_parm_data_all all; tree fnargs, parm; rtx internal_arg_pointer; - int varargs_setup = 0; /* If the reg that the virtual arg pointer will be translated into is not a fixed reg or is the stack pointer, make a copy of the virtual @@ -3090,16 +3079,8 @@ assign_parms (tree fndecl) continue; } - /* Handle stdargs. LAST_NAMED is a slight mis-nomer; it's also true - for the unnamed dummy argument following the last named argument. - See ABI silliness wrt strict_argument_naming and NAMED_ARG. So - we only want to do this when we get to the actual last named - argument, which will be the first time LAST_NAMED gets set. */ - if (data.last_named && !varargs_setup) - { - varargs_setup = true; - assign_parms_setup_varargs (&all, &data, false); - } + if (current_function_stdarg && !TREE_CHAIN (parm)) + assign_parms_setup_varargs (&all, &data, false); /* Find out where the parameter arrives in this function. */ assign_parm_find_entry_rtl (&all, &data); diff --git a/gcc/gcc.c b/gcc/gcc.c index 1a9cc5005d6..6a3065a218b 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -954,7 +954,7 @@ static const struct compiler default_compilers[] = cc1 %(cpp_unique_options) %(cc1_options)}}\ %{!fsyntax-only:%(invoke_as)}}}}}}", 0, 1, 1}, {"-", - "%{!E:%e-E required when input is from standard input}\ + "%{!E:%e-E or -x required when input is from standard input}\ %(trad_capable_cpp) %(cpp_options) %(cpp_debug_options)", 0, 0, 0}, {".h", "@c-header", 0, 0, 0}, {"@c-header", diff --git a/gcc/gcov.c b/gcc/gcov.c index ee4d6b9aa80..6675a06b60e 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -1774,7 +1774,7 @@ output_lines (FILE *gcov_file, const source_t *src) const line_t *line; /* current line info ptr. */ char string[STRING_SIZE]; /* line buffer. */ char const *retval = ""; /* status of source file reading. */ - function_t *fn = src->functions; + function_t *fn = NULL; fprintf (gcov_file, "%9s:%5d:Source:%s\n", "-", 0, src->name); fprintf (gcov_file, "%9s:%5d:Graph:%s\n", "-", 0, bbg_file_name); @@ -1803,6 +1803,9 @@ output_lines (FILE *gcov_file, const source_t *src) } } + if (flag_branches) + fn = src->functions; + for (line_num = 1, line = &src->lines[line_num]; line_num < src->num_lines; line_num++, line++) { @@ -1810,11 +1813,11 @@ output_lines (FILE *gcov_file, const source_t *src) { arc_t *arc = fn->blocks[fn->num_blocks - 1].pred; gcov_type return_count = fn->blocks[fn->num_blocks - 1].count; - + for (; arc; arc = arc->pred_next) if (arc->fake) return_count -= arc->count; - + fprintf (gcov_file, "function %s", fn->name); fprintf (gcov_file, " called %s", format_gcov (fn->blocks[0].count, 0, -1)); diff --git a/gcc/gimplify.c b/gcc/gimplify.c index d461d776ee8..992f546bb76 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -2123,7 +2123,8 @@ gimple_boolify (tree expr) *EXPR_P should be stored. */ static enum gimplify_status -gimplify_cond_expr (tree *expr_p, tree *pre_p, tree *post_p, tree target) +gimplify_cond_expr (tree *expr_p, tree *pre_p, tree *post_p, tree target, + fallback_t fallback) { tree expr = *expr_p; tree tmp, tmp2, type; @@ -2137,18 +2138,40 @@ gimplify_cond_expr (tree *expr_p, tree *pre_p, tree *post_p, tree target) the arms. */ else if (! VOID_TYPE_P (type)) { + tree result; + if (target) { ret = gimplify_expr (&target, pre_p, post_p, is_gimple_min_lval, fb_lvalue); if (ret != GS_ERROR) ret = GS_OK; - tmp = target; + result = tmp = target; tmp2 = unshare_expr (target); } + else if ((fallback & fb_lvalue) == 0) + { + result = tmp2 = tmp = create_tmp_var (TREE_TYPE (expr), "iftmp"); + ret = GS_ALL_DONE; + } else { - tmp2 = tmp = create_tmp_var (TREE_TYPE (expr), "iftmp"); + tree type = build_pointer_type (TREE_TYPE (expr)); + + if (TREE_TYPE (TREE_OPERAND (expr, 1)) != void_type_node) + TREE_OPERAND (expr, 1) = + build_fold_addr_expr (TREE_OPERAND (expr, 1)); + + if (TREE_TYPE (TREE_OPERAND (expr, 2)) != void_type_node) + TREE_OPERAND (expr, 2) = + build_fold_addr_expr (TREE_OPERAND (expr, 2)); + + tmp2 = tmp = create_tmp_var (type, "iftmp"); + + expr = build (COND_EXPR, void_type_node, TREE_OPERAND (expr, 0), + TREE_OPERAND (expr, 1), TREE_OPERAND (expr, 2)); + + result = build_fold_indirect_ref (tmp); ret = GS_ALL_DONE; } @@ -2169,7 +2192,7 @@ gimplify_cond_expr (tree *expr_p, tree *pre_p, tree *post_p, tree target) /* Move the COND_EXPR to the prequeue. */ gimplify_and_add (expr, pre_p); - *expr_p = tmp; + *expr_p = result; return ret; } @@ -2907,7 +2930,8 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p, tree *pre_p, if (!is_gimple_reg_type (TREE_TYPE (*from_p))) { *expr_p = *from_p; - return gimplify_cond_expr (expr_p, pre_p, post_p, *to_p); + return gimplify_cond_expr (expr_p, pre_p, post_p, *to_p, + fb_rvalue); } else ret = GS_UNHANDLED; @@ -3207,6 +3231,9 @@ gimplify_addr_expr (tree *expr_p, tree *pre_p, tree *post_p) builtins like __builtin_va_end). */ /* Caution: the silent array decomposition semantics we allow for ADDR_EXPR means we can't always discard the pair. */ + /* Gimplification of the ADDR_EXPR operand may drop + cv-qualification conversions, so make sure we add them if + needed. */ { tree op00 = TREE_OPERAND (op0, 0); tree t_expr = TREE_TYPE (expr); @@ -3216,9 +3243,9 @@ gimplify_addr_expr (tree *expr_p, tree *pre_p, tree *post_p) { #ifdef ENABLE_CHECKING tree t_op0 = TREE_TYPE (op0); - gcc_assert (TREE_CODE (t_op0) == ARRAY_TYPE - && POINTER_TYPE_P (t_expr) - && cpt_same_type (TREE_TYPE (t_op0), + gcc_assert (POINTER_TYPE_P (t_expr) + && cpt_same_type (TREE_CODE (t_op0) == ARRAY_TYPE + ? TREE_TYPE (t_op0) : t_op0, TREE_TYPE (t_expr)) && POINTER_TYPE_P (t_op00) && cpt_same_type (t_op0, TREE_TYPE (t_op00))); @@ -3330,16 +3357,81 @@ gimplify_asm_expr (tree *expr_p, tree *pre_p, tree *post_p) char *p = xstrdup (constraint); p[0] = '='; TREE_VALUE (TREE_PURPOSE (link)) = build_string (constraint_len, p); - free (p); /* And add a matching input constraint. */ if (allows_reg) { sprintf (buf, "%d", i); - input = build_string (strlen (buf), buf); + + /* If there are multiple alternatives in the constraint, + handle each of them individually. Those that allow register + will be replaced with operand number, the others will stay + unchanged. */ + if (strchr (p, ',') != NULL) + { + size_t len = 0, buflen = strlen (buf); + char *beg, *end, *str, *dst; + + for (beg = p + 1;;) + { + end = strchr (beg, ','); + if (end == NULL) + end = strchr (beg, '\0'); + if ((size_t) (end - beg) < buflen) + len += buflen + 1; + else + len += end - beg + 1; + if (*end) + beg = end + 1; + else + break; + } + + str = alloca (len); + for (beg = p + 1, dst = str;;) + { + const char *tem; + bool mem_p, reg_p, inout_p; + + end = strchr (beg, ','); + if (end) + *end = '\0'; + beg[-1] = '='; + tem = beg - 1; + parse_output_constraint (&tem, i, 0, 0, + &mem_p, ®_p, &inout_p); + if (dst != str) + *dst++ = ','; + if (reg_p) + { + memcpy (dst, buf, buflen); + dst += buflen; + } + else + { + if (end) + len = end - beg; + else + len = strlen (beg); + memcpy (dst, beg, len); + dst += len; + } + if (end) + beg = end + 1; + else + break; + } + *dst = '\0'; + input = build_string (dst - str, str); + } + else + input = build_string (strlen (buf), buf); } else input = build_string (constraint_len - 1, constraint + 1); + + free (p); + input = build_tree_list (build_tree_list (NULL_TREE, input), unshare_expr (TREE_VALUE (link))); ASM_INPUTS (expr) = chainon (ASM_INPUTS (expr), input); @@ -3721,11 +3813,30 @@ gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p, break; case COND_EXPR: - ret = gimplify_cond_expr (expr_p, pre_p, post_p, NULL_TREE); + ret = gimplify_cond_expr (expr_p, pre_p, post_p, NULL_TREE, + fallback); + /* C99 code may assign to an array in a structure value of a + conditional expression, and this has undefined behavior + only on execution, so create a temporary if an lvalue is + required. */ + if (fallback == fb_lvalue) + { + *expr_p = get_initialized_tmp_var (*expr_p, pre_p, post_p); + lang_hooks.mark_addressable (*expr_p); + } break; case CALL_EXPR: ret = gimplify_call_expr (expr_p, pre_p, fallback != fb_none); + /* C99 code may assign to an array in a structure returned + from a function, and this has undefined behavior only on + execution, so create a temporary if an lvalue is + required. */ + if (fallback == fb_lvalue) + { + *expr_p = get_initialized_tmp_var (*expr_p, pre_p, post_p); + lang_hooks.mark_addressable (*expr_p); + } break; case TREE_LIST: diff --git a/gcc/gthr-posix.c b/gcc/gthr-posix.c index c74f3cecea9..dd7ad48d261 100644 --- a/gcc/gthr-posix.c +++ b/gcc/gthr-posix.c @@ -1,6 +1,6 @@ /* POSIX threads dummy routines for systems without weak definitions. */ /* Compile this one with gcc. */ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -74,6 +74,12 @@ pthread_create (pthread_t *thread ATTRIBUTE_UNUSED, return 0; } +int +pthread_cancel(pthread_t thread ATTRIBUTE_UNUSED) +{ + return 0; +} + int pthread_mutex_lock (pthread_mutex_t *mutex ATTRIBUTE_UNUSED) { @@ -92,6 +98,25 @@ pthread_mutex_unlock (pthread_mutex_t *mutex ATTRIBUTE_UNUSED) return 0; } +int +pthread_mutexattr_init (pthread_mutexattr_t *attr ATTRIBUTE_UNUSED) +{ + return 0; +} + +int +pthread_mutexattr_settype (pthread_mutexattr_t *attr ATTRIBUTE_UNUSED, + int type ATTRIBUTE_UNUSED) +{ + return 0; +} + +int +pthread_mutexattr_destroy (pthread_mutexattr_t *attr ATTRIBUTE_UNUSED) +{ + return 0; +} + int pthread_cond_broadcast (pthread_cond_t *cond ATTRIBUTE_UNUSED) { diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 5f9cd4a9227..8a88b9ff5eb 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,92 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-07 Andrew Haley + + * gcj.texi: Correct gcj-dbtool instructions. + +2005-04-06 Tom Tromey + + * gcj.texi (libgcj Runtime Properties): Document + gnu.gcj.runtime.endorsed.dirs. + +2005-04-01 Thomas Fitzsimmons + + * gcj.texi (Invoking gij): Add descriptions of new -X options. + Mention recognized-and-ignored compatibility options. + (Memory allocation): Add descriptions of JvMalloc, JvRealloc and + JvFree. + (About CNI): Add Memory allocation section. + +2005-04-01 Tom Tromey + + * decl.c (java_init_decl_processing): Fix types of + _Jv_MonitorEnter, _Jv_MonitorExit, _Jv_AllocObject, + _Jv_AllocObjectNoFinalizer, _Jv_Throw, _Jv_NewPrimArray, + _Jv_JNI_PopSystemFrame, _Jv_divI, _Jv_remI, _Jv_divJ, _Jv_remJ. + +2005-03-24 Anthony Green + + * gcj.texi (Invoking gcj-dbtool): Document new LIBDIR option to + 'gcj-dbtool -p'. + +2005-03-18 Andrew Haley + + PR java/20522 + * decl.c (update_aliases): Don't update variables that are about + to die. + (maybe_poplevels): Add comment. + +2005-03-16 Andrew Haley + + * expr.c (expand_java_arrayload): Don't generate a + NullPointerException based on the type of the node. + (build_java_array_length_access): Likewise. + +2005-03-11 Kaveh R. Ghazi + + * jcf-io.c (caching_stat): Use __extension__ to avoid pedantic + warning. + * Make-lang.in: Don't elide warnings in jcf-io.c. + +2005-03-10 Tom Tromey + + * gcj.texi (Invoking gcj-dbtool): Document 'gcj-dbtool -p'. + (libgcj Runtime Properties): Document the default .db. + +2005-03-07 Bryce McKinlay + + * verify-glue.c (vfy_is_assignable_from): Perform static check using + can_widen_reference_to if the C++ ABI is in use. + (vfy_get_interface_count, vfy_get_interface): Remove unused functions. + * verify-impl.c (debug_print, make_utf8_const, init_type, copy_type, + type_isresolved, init_state, set_pc, state_get_pc, + _Jv_BytecodeVerifier): Clean up unused and disabled functions. + (verify_fail): Report the current PC from the verifier context. + (free_state): Remove #if 0 block to enable this function. + (free_verifier_context): Call free_state on state_list iterator + values before freeing them. + * expr.c (pop_type_0): Pop correct type for error message when stack + contains a multi-word type. + +2005-03-07 Ranjit Mathew + + * expr.c (build_java_array_length_access): Remove !flag_new_verifier + for known NULL array length access. + +2005-03-07 Tom Tromey + + * gcj.texi (Invoking gcj-dbtool): Document '-f'. + +2005-03-04 Andrew Haley + + PR java/18362 + * class.c (set_method_index): Don't set method_index if it is + NULL_TREE. + (layout_class_method): Don't complain about "non-static method foo + overrides static method" in the case of indirect dispatch. + 2005-02-23 Thomas Fitzsimmons PR libgcj/16923 diff --git a/gcc/java/Make-lang.in b/gcc/java/Make-lang.in index 26970e8f1df..ccdc38e7a4f 100644 --- a/gcc/java/Make-lang.in +++ b/gcc/java/Make-lang.in @@ -129,9 +129,6 @@ jvspec.o-warn = -Wno-error java/parse-scan.o-warn = -Wno-error java/parse.o-warn = -Wno-error -# Use of non-standardized scandir -java/jcf-io.o-warn = -Wno-error - jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS) rm -f $@ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \ diff --git a/gcc/java/class.c b/gcc/java/class.c index 53a31e94031..5e2e535dbc9 100644 --- a/gcc/java/class.c +++ b/gcc/java/class.c @@ -1476,14 +1476,19 @@ get_dispatch_table (tree type, tree this_class_addr) void set_method_index (tree decl, tree method_index) { - method_index = fold (convert (sizetype, method_index)); + if (method_index != NULL_TREE) + { + /* method_index is null if we're using indirect dispatch. */ + method_index = fold (convert (sizetype, method_index)); - if (TARGET_VTABLE_USES_DESCRIPTORS) - /* Add one to skip bogus descriptor for class and GC descriptor. */ - method_index = size_binop (PLUS_EXPR, method_index, size_int (1)); - else - /* Add 1 to skip "class" field of dtable, and 1 to skip GC descriptor. */ - method_index = size_binop (PLUS_EXPR, method_index, size_int (2)); + if (TARGET_VTABLE_USES_DESCRIPTORS) + /* Add one to skip bogus descriptor for class and GC descriptor. */ + method_index = size_binop (PLUS_EXPR, method_index, size_int (1)); + else + /* Add 1 to skip "class" field of dtable, and 1 to skip GC + descriptor. */ + method_index = size_binop (PLUS_EXPR, method_index, size_int (2)); + } DECL_VINDEX (decl) = method_index; } @@ -2357,6 +2362,7 @@ layout_class_method (tree this_class, tree super_class, tree method_index = get_method_index (super_method); set_method_index (method_decl, method_index); if (method_index == NULL_TREE + && ! flag_indirect_dispatch && !CLASS_FROM_SOURCE_P (this_class) && ! DECL_ARTIFICIAL (super_method)) error ("%Jnon-static method '%D' overrides static method", diff --git a/gcc/java/decl.c b/gcc/java/decl.c index b7aa61650d3..ddbaa3f5acc 100644 --- a/gcc/java/decl.c +++ b/gcc/java/decl.c @@ -149,7 +149,10 @@ update_aliases (tree decl, int index, int pc) && LOCAL_SLOT_P (tmp) == 0 && (pc == -1 || (pc >= DECL_LOCAL_START_PC (tmp) - && pc <= DECL_LOCAL_END_PC (tmp))) + && pc < DECL_LOCAL_END_PC (tmp))) + /* This test is < (rather than <=) because there's no point + updating an alias that's about to die at the end of this + instruction. */ && (tmp_type == decl_type || (INTEGRAL_TYPE_P (tmp_type) && INTEGRAL_TYPE_P (decl_type) @@ -989,8 +992,7 @@ java_init_decl_processing (void) endlink = end_params_node = tree_cons (NULL_TREE, void_type_node, NULL_TREE); - t = tree_cons (NULL_TREE, class_ptr_type, - tree_cons (NULL_TREE, int_type_node, endlink)); + t = tree_cons (NULL_TREE, class_ptr_type, endlink); alloc_object_node = builtin_function ("_Jv_AllocObject", build_function_type (ptr_type_node, t), 0, NOT_BUILT_IN, NULL, NULL_TREE); @@ -1008,31 +1010,33 @@ java_init_decl_processing (void) 0, NOT_BUILT_IN, NULL, NULL_TREE); throw_node = builtin_function ("_Jv_Throw", - build_function_type (ptr_type_node, t), + build_function_type (void_type_node, t), 0, NOT_BUILT_IN, NULL, NULL_TREE); /* Mark throw_nodes as `noreturn' functions with side effects. */ TREE_THIS_VOLATILE (throw_node) = 1; TREE_SIDE_EFFECTS (throw_node) = 1; - t = build_function_type (int_type_node, endlink); + t = build_function_type (void_type_node, tree_cons (NULL_TREE, ptr_type_node, + endlink)); soft_monitorenter_node = builtin_function ("_Jv_MonitorEnter", t, 0, NOT_BUILT_IN, NULL, NULL_TREE); soft_monitorexit_node = builtin_function ("_Jv_MonitorExit", t, 0, NOT_BUILT_IN, NULL, NULL_TREE); - - t = tree_cons (NULL_TREE, int_type_node, + + t = tree_cons (NULL_TREE, ptr_type_node, tree_cons (NULL_TREE, int_type_node, endlink)); soft_newarray_node = builtin_function ("_Jv_NewPrimArray", - build_function_type(ptr_type_node, t), + build_function_type (ptr_type_node, t), 0, NOT_BUILT_IN, NULL, NULL_TREE); DECL_IS_MALLOC (soft_newarray_node) = 1; t = tree_cons (NULL_TREE, int_type_node, tree_cons (NULL_TREE, class_ptr_type, - tree_cons (NULL_TREE, object_ptr_type_node, endlink))); + tree_cons (NULL_TREE, object_ptr_type_node, + endlink))); soft_anewarray_node = builtin_function ("_Jv_NewObjectArray", build_function_type (ptr_type_node, t), @@ -1118,9 +1122,11 @@ java_init_decl_processing (void) 0, NOT_BUILT_IN, NULL, NULL_TREE); soft_jnipopsystemframe_node = builtin_function ("_Jv_JNI_PopSystemFrame", - build_function_type (ptr_type_node, t), + build_function_type (void_type_node, t), 0, NOT_BUILT_IN, NULL, NULL_TREE); + t = tree_cons (NULL_TREE, int_type_node, + tree_cons (NULL_TREE, int_type_node, endlink)); soft_idiv_node = builtin_function ("_Jv_divI", build_function_type (int_type_node, t), @@ -1131,6 +1137,8 @@ java_init_decl_processing (void) build_function_type (int_type_node, t), 0, NOT_BUILT_IN, NULL, NULL_TREE); + t = tree_cons (NULL_TREE, long_type_node, + tree_cons (NULL_TREE, long_type_node, endlink)); soft_ldiv_node = builtin_function ("_Jv_divJ", build_function_type (long_type_node, t), @@ -1741,6 +1749,12 @@ maybe_poplevels (int pc) current_pc = pc; #endif + /* FIXME: I'm pretty sure that this is wrong. Variable scopes are + inclusive, so a variable is live if pc == end_pc. Here, we + terminate a range if the current pc is equal to the end of the + range, and this is *before* we have generated code for the + instruction at end_pc. We're closing a binding level one + instruction too early. */ while (current_binding_level->end_pc <= pc) poplevel (1, 0, 0); } diff --git a/gcc/java/expr.c b/gcc/java/expr.c index 7d515052ba0..30f67adfe5f 100644 --- a/gcc/java/expr.c +++ b/gcc/java/expr.c @@ -383,6 +383,10 @@ pop_type_0 (tree type, char **messagep) fail: { char *temp = xstrdup (lang_printable_name (type, 0)); + /* If the stack contains a multi-word type, keep popping the stack until + the real type is found. */ + while (t == void_type_node) + t = stack_type_map[--stack_pointer]; *messagep = concat ("expected type '", temp, "' but stack contains '", lang_printable_name (t, 0), "'", NULL); @@ -814,15 +818,6 @@ build_java_array_length_access (tree node) tree array_type = TREE_TYPE (type); HOST_WIDE_INT length; - /* JVM spec: If the arrayref is null, the arraylength instruction - throws a NullPointerException. The only way we could get a node - of type ptr_type_node at this point is `aconst_null; arraylength' - or something equivalent. */ - if (!flag_new_verifier && type == ptr_type_node) - return build3 (CALL_EXPR, int_type_node, - build_address_of (soft_nullpointer_node), - NULL_TREE, NULL_TREE); - if (!is_array_type_p (type)) { /* With the new verifier, we will see an ordinary pointer type @@ -1225,21 +1220,11 @@ expand_java_arrayload (tree lhs_type_node) index_node = save_expr (index_node); array_node = save_expr (array_node); - if (TREE_TYPE (array_node) == ptr_type_node) - /* The only way we could get a node of type ptr_type_node at this - point is `aconst_null; arraylength' or something equivalent, so - unconditionally throw NullPointerException. */ - load_node = build3 (CALL_EXPR, lhs_type_node, - build_address_of (soft_nullpointer_node), - NULL_TREE, NULL_TREE); - else - { - lhs_type_node = build_java_check_indexed_type (array_node, - lhs_type_node); - load_node = build_java_arrayaccess (array_node, - lhs_type_node, - index_node); - } + lhs_type_node = build_java_check_indexed_type (array_node, + lhs_type_node); + load_node = build_java_arrayaccess (array_node, + lhs_type_node, + index_node); if (INTEGRAL_TYPE_P (lhs_type_node) && TYPE_PRECISION (lhs_type_node) <= 32) load_node = fold (build1 (NOP_EXPR, int_type_node, load_node)); push_value (load_node); diff --git a/gcc/java/gcj.texi b/gcc/java/gcj.texi index b270b6fbbcf..6fc85271a93 100644 --- a/gcc/java/gcj.texi +++ b/gcc/java/gcj.texi @@ -949,16 +949,26 @@ be retrieved at runtime using the @code{java.lang.System.getProperty} method. @item -ms=@var{number} -This sets the initial heap size. +Equivalent to @code{-Xms}. @item -mx=@var{number} -This sets the maximum heap size. +Equivalent to @code{-Xmx}. @item -X @itemx -X@var{argument} Supplying @code{-X} by itself will cause @code{gij} to list all the -supported @code{-X} options. Currently there are none. Unrecognized -@code{-X} options are ignored, for compatibility with other runtimes. +supported @code{-X} options. Currently these options are supported: + +@table @gcctabopt +@item -Xms@var{size} +Set the initial heap size. + +@item -Xmx@var{size} +Set the maximum heap size. +@end table + +Unrecognized @code{-X} options are ignored, for compatibility with +other runtimes. @item -jar This indicates that the name passed to @code{gij} should be interpreted @@ -971,6 +981,9 @@ Print help, then exit. @item --showversion Print version number and continue. +@item --fullversion +Print detailed version information, then exit. + @item --version Print version number, then exit. @@ -979,6 +992,12 @@ Print version number, then exit. Each time a class is initialized, print a short message on standard error. @end table +@code{gij} also recognizes and ignores the following options, for +compatibility with existing application launch scripts: +@code{-client}, @code{-server}, @code{-hotspot}, @code{-jrockit}, +@code{-agentlib}, @code{-agentpath}, @code{-debug}, @code{-d32}, +@code{-d64}, @code{-javaagent} and @code{-noclassgc}. + @c man end @node Invoking gcj-dbtool @@ -990,8 +1009,9 @@ Each time a class is initialized, print a short message on standard error. @c man begin SYNOPSIS gcj-dbtool gcj-dbtool @option{OPTION} @var{DBFILE} [@option{MORE}] @dots{} -gcj-dbtool [@option{-n}] [@option{-a}] [@option{-t}] [@option{-l}] - [@option{-v}] [@option{--version}] [@option{--help}] +gcj-dbtool [@option{-0}] [@option{-}] [@option{-n}] [@option{-a}] [@option{-f}] + [@option{-t}] [@option{-l}] [@option{-p} [@var{LIBDIR}]] + [@option{-v}] [@option{-m}] [@option{--version}] [@option{--help}] @c man end @c man begin SEEALSO gij @@ -1027,11 +1047,26 @@ you can choose a larger initial size if desired. The default size is 32,749. @item -a @var{DBFILE} @var{JARFILE} @var{LIB} +@itemx -f @var{DBFILE} @var{JARFILE} @var{LIB} This adds a jar file to the database. For each class file in the jar, a cryptographic signature of the bytecode representation of the class is recorded in the database. At runtime, a class is looked up by its signature and the compiled form of the class is looked for in the -corresponding shared library. +corresponding shared library. The @option{-a} option will verify +that @var{LIB} exists before adding it to the database; @option{-f} +skips this check. + +@item [@option{-}][@option{-0}] -m @var{DBFILE} @var{DBFILE},[@var{DBFILE}] +Merge a number of databases. The output database overwrites any +existing database. To add databases into an existing database, +include the destination in the list of sources. + +If @option{-} or @option{-0} are used, the list of files to read is +taken from standard input instead of the command line. For +@option{-0}, Input filenames are terminated by a null character +instead of by whitespace. Useful when arguments might contain white +space. The GNU find -print0 option produces input suitable for this +mode. @item -t @var{DBFILE} Test a database. @@ -1039,6 +1074,12 @@ Test a database. @item -l @var{DBFILE} List the contents of a database. +@item -p +Print the name of the default database. If there is no default +database, this prints a blank line. If @var{LIBDIR} is specified, use +it instead of the default library directory component of the database +name. + @item --help Print a help message, then exit. @@ -1240,6 +1281,7 @@ alternative to the standard JNI (Java Native Interface). * Objects and Classes:: C++ and Java classes. * Class Initialization:: How objects are initialized. * Object allocation:: How to create Java objects in C++. +* Memory allocation:: How to allocate and free memory. * Arrays:: Dealing with Java arrays in C++. * Methods:: Java methods in C++. * Strings:: Information about Java Strings. @@ -1620,6 +1662,27 @@ java::util::Hashtable *ht = new java::util::Hashtable(120); @end example +@node Memory allocation +@section Memory allocation + +When allocting memory in @acronym{CNI} methods it is best to handle +out-of-memory conditions by throwing a Java exception. These +functions are provided for that purpose: + +@deftypefun void* JvMalloc (jsize @var{size}) +Calls malloc. Throws @code{java.lang.OutOfMemoryError} if allocation +fails. +@end deftypefun + +@deftypefun void* JvRealloc (void* @var{ptr}, jsize @var{size}) +Calls realloc. Throws @code{java.lang.OutOfMemoryError} if +reallocation fails. +@end deftypefun + +@deftypefun void JvFree (void* @var{ptr}) +Calls free. +@end deftypefun + @node Arrays @section Arrays @@ -2505,6 +2568,15 @@ search is done for each requested class. If this property is set to tried again. If this property is set to @samp{never}, then lookups are never done. For more information, @xref{Extensions}. +@item gnu.gcj.runtime.endorsed.dirs +This is like the standard @code{java.endorsed.dirs}, property, but +specifies some extra directories which are searched after the standard +endorsed directories. This is primarily useful for telling +@code{libgcj} about additional libraries which are ordinarily +incorporated into the JDK, and which should be loaded by the bootstrap +class loader, but which are not yet part of @code{libgcj} itself for +some reason. + @item gnu.gcj.jit.compiler @c FIXME we should probably have a whole node on this... This is the full path to @command{gcj} executable which should be @@ -2527,7 +2599,8 @@ be set to a directory that is writable by any other user. This is a sequence of file names, each referring to a file created by @command{gcj-dbtool}. These files will be used by @code{libgcj} to find shared libraries corresponding to classes that are loaded from -bytecode. +bytecode. @code{libgcj} often has a built-in default database; it +can be queried using @code{gcj-dbtool -p}. @end table diff --git a/gcc/java/jcf-io.c b/gcc/java/jcf-io.c index e0ab03e14cf..6588ef24441 100644 --- a/gcc/java/jcf-io.c +++ b/gcc/java/jcf-io.c @@ -376,11 +376,11 @@ caching_stat (char *filename, struct stat *buf) particular, the type of the function pointer passed as the third argument sometimes takes a "const struct dirent *" parameter, and sometimes just a "struct dirent *". We cast - to (void *) so that either way it is quietly accepted. - FIXME: scandir is not in POSIX. */ - dent->num_files = scandir (filename, &dent->files, - (void *) java_or_class_file, - alphasort); + to (void *) and use __extension__ so that either way it is + quietly accepted. FIXME: scandir is not in POSIX. */ + dent->num_files = __extension__ scandir (filename, &dent->files, + (void *) java_or_class_file, + alphasort); *slot = dent; } else diff --git a/gcc/java/verify-glue.c b/gcc/java/verify-glue.c index 5d480e88d68..b1664ba991a 100644 --- a/gcc/java/verify-glue.c +++ b/gcc/java/verify-glue.c @@ -231,17 +231,18 @@ vfy_get_class_name (vfy_jclass klass) bool vfy_is_assignable_from (vfy_jclass target, vfy_jclass source) { - /* At compile time, for the BC-ABI we assume that reference types are always - compatible. However, a type assertion table entry is emitted so that the - runtime can detect binary-incompatible changes. */ - - /* FIXME: implement real test for old ABI. */ - /* Any class is always assignable to itself, or java.lang.Object. */ if (source == target || target == object_type_node) return true; - /* Otherwise, a type assertion is required. */ + /* For the C++ ABI, perform this test statically. */ + if (! flag_indirect_dispatch) + return can_widen_reference_to (source, target); + + /* For the BC-ABI, we assume at compile time that reference types are always + compatible. However, a type assertion table entry is emitted so that the + runtime can detect binary-incompatible changes. */ + add_type_assertion (current_class, JV_ASSERT_TYPES_COMPATIBLE, source, target); return true; @@ -257,28 +258,6 @@ vfy_get_primitive_char (vfy_jclass klass) return (IDENTIFIER_POINTER (sig))[0]; } -int -vfy_get_interface_count (vfy_jclass klass ATTRIBUTE_UNUSED) -{ - /* FIXME: Need to merge from mainline to get this. */ - #if 0 - return BINFO_N_BASE_BINFOS (klass); - #endif - return -1; -} - -vfy_jclass -vfy_get_interface (vfy_jclass klass ATTRIBUTE_UNUSED, int index ATTRIBUTE_UNUSED) -{ - /* FIXME: Need to merge from mainline to get this. */ - #if 0 - vfy_jclass k; - k = BINFO_BASE_BINFO (klass, index); - return k; - #endif - return NULL; -} - bool vfy_is_array (vfy_jclass klass) { diff --git a/gcc/java/verify-impl.c b/gcc/java/verify-impl.c index ae585c8d7db..30d12209449 100644 --- a/gcc/java/verify-impl.c +++ b/gcc/java/verify-impl.c @@ -42,22 +42,6 @@ debug_print (const char *fmt ATTRIBUTE_UNUSED, ...) } #endif /* VERIFY_DEBUG */ -#if 0 -static void debug_print (const char *fmt, ...) - __attribute__ ((format (printf, 1, 2))); - -static void -debug_print (const char *fmt, ...) -{ -#ifdef VERIFY_DEBUG - va_list ap; - va_start (ap, fmt); - vfprintf (stderr, fmt, ap); - va_end (ap); -#endif /* VERIFY_DEBUG */ -} -#endif - /* This started as a fairly ordinary verifier, and for the most part it remains so. It works in the obvious way, by modeling the effect of each opcode as it is encountered. For most opcodes, this is a @@ -224,22 +208,6 @@ static GTY(()) verifier_context *vfr; bool type_initialized (type *t); int ref_count_dimensions (ref_intersection *ref); -#if 0 - /* Create a new Utf-8 constant and return it. We do this to avoid - having our Utf-8 constants prematurely collected. */ - static vfy_string - make_utf8_const (const char *s, int len) - { - vfy_string val = vfy_make_string (s, len); - vfy_string_list *lu = vfy_alloc (sizeof (vfy_string_list)); - lu->val = val; - lu->next = vfr->utf8_list; - vfr->utf8_list = lu; - - return val; - } -#endif - static void verify_fail_pc (const char *s, int pc) { @@ -249,7 +217,7 @@ verify_fail_pc (const char *s, int pc) static void verify_fail (const char *s) { - verify_fail_pc (s, -1); + verify_fail_pc (s, vfr->PC); } /* This enum holds a list of tags for all the different types we @@ -554,17 +522,6 @@ struct type #define EITHER -3 }; -#if 0 -/* Basic constructor. */ -static void -init_type (type *t) -{ - t->key = unsuitable_type; - t->klass = NULL; - t->pc = UNINIT; -} -#endif - /* Make a new instance given the type tag. We assume a generic `reference_type' means Object. */ static void @@ -626,26 +583,6 @@ make_type_from_string (vfy_string n) return t; } -#if 0 - /* Make a new instance given the name of a class. */ - type (vfy_string n) - { - key = reference_type; - klass = new ref_intersection (n, verifier); - pc = UNINIT; - } - - /* Copy constructor. */ - static type copy_type (type *t) - { - type copy; - copy.key = t->key; - copy.klass = t->klass; - copy.pc = t->pc; - return copy; - } -#endif - /* Promote a numeric type. */ static void vfy_promote_type (type *t) @@ -874,16 +811,6 @@ type_initialized (type *t) return t->key == reference_type || t->key == null_type; } -#if 0 -static bool -type_isresolved (type *t) -{ - return (t->key == reference_type - || t->key == null_type - || t->key == uninitialized_reference_type); -} -#endif - static void type_verify_dimensions (type *t, int ndims) { @@ -1018,16 +945,6 @@ struct state acquired from the verification list. */ #define NO_NEXT -1 -#if 0 -static void -init_state (state *s) -{ - s->stack = NULL; - s->locals = NULL; - s->next = INVALID_STATE; -} -#endif - static void init_state_with_stack (state *s, int max_stack, int max_locals) { @@ -1084,7 +1001,6 @@ make_state (int max_stack, int max_locals) return s; } -#if 0 static void free_state (state *s) { @@ -1093,29 +1009,6 @@ free_state (state *s) if (s->locals != NULL) vfy_free (s->locals); } -#endif - -#if 0 - void *operator new[] (size_t bytes) - { - return vfy_alloc (bytes); - } - - void operator delete[] (void *mem) - { - vfy_free (mem); - } - - void *operator new (size_t bytes) - { - return vfy_alloc (bytes); - } - - void operator delete (void *mem) - { - vfy_free (mem); - } -#endif /* Modify this state to reflect entry to an exception handler. */ static void @@ -1129,20 +1022,6 @@ state_set_exception (state *s, type *t, int max_stack) init_type_from_tag (&s->stack[i], unsuitable_type); } -static int -state_get_pc (state *s) -{ - return s->pc; -} - -#if 0 -static void -set_pc (state *s, int npc) -{ - s->pc = npc; -} -#endif - /* Merge STATE_OLD into this state. Destructively modifies this state. Returns true if the new state was in fact changed. Will throw an exception if the states are not mergeable. */ @@ -2368,7 +2247,7 @@ verify_instructions_0 (void) if (new_state == NULL) break; - vfr->PC = state_get_pc (new_state); + vfr->PC = new_state->pc; debug_print ("== State pop from pending list\n"); /* Set up the current state. */ copy_state (vfr->current_state, new_state, @@ -3259,32 +3138,6 @@ verify_instructions_0 (void) handle_jsr_insn (get_int ()); break; -#if 0 - /* These are unused here, but we call them out explicitly - so that -Wswitch-enum doesn't complain. */ - case op_putfield_1: - case op_putfield_2: - case op_putfield_4: - case op_putfield_8: - case op_putfield_a: - case op_putstatic_1: - case op_putstatic_2: - case op_putstatic_4: - case op_putstatic_8: - case op_putstatic_a: - case op_getfield_1: - case op_getfield_2s: - case op_getfield_2u: - case op_getfield_4: - case op_getfield_8: - case op_getfield_a: - case op_getstatic_1: - case op_getstatic_2s: - case op_getstatic_2u: - case op_getstatic_4: - case op_getstatic_8: - case op_getstatic_a: -#endif default: /* Unrecognized opcode. */ verify_fail_pc ("unrecognized instruction in verify_instructions_0", @@ -3375,17 +3228,6 @@ verify_instructions (void) } } -#if 0 -_Jv_BytecodeVerifier (_Jv_InterpMethod *m) -{ - /* We just print the text as utf-8. This is just for debugging - anyway. */ - debug_print ("--------------------------------\n"); - debug_print ("-- Verifying method `%s'\n", m->self->name->chars()); - -} -#endif - static void make_verifier_context (vfy_method *m) { @@ -3436,6 +3278,7 @@ free_verifier_context (void) while (iter != NULL) { state_list *next = iter->next; + free_state (iter->val); vfy_free (iter->val); vfy_free (iter); iter = next; diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index 1109c5c4e05..c8f6e51b043 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -1155,7 +1155,7 @@ __ucmpdi2 (DWtype a, DWtype b) } #endif -#if defined(L_fixunstfdi) && defined(HAVE_TFMODE) +#if defined(L_fixunstfdi) && LIBGCC2_HAS_TF_MODE DWtype __fixunstfDI (TFtype a) { @@ -1181,7 +1181,7 @@ __fixunstfDI (TFtype a) } #endif -#if defined(L_fixtfdi) && defined(HAVE_TFMODE) +#if defined(L_fixtfdi) && LIBGCC2_HAS_TF_MODE DWtype __fixtfdi (TFtype a) { @@ -1191,7 +1191,7 @@ __fixtfdi (TFtype a) } #endif -#if defined(L_fixunsxfdi) && defined(HAVE_XFMODE) +#if defined(L_fixunsxfdi) && LIBGCC2_HAS_XF_MODE DWtype __fixunsxfDI (XFtype a) { @@ -1217,7 +1217,7 @@ __fixunsxfDI (XFtype a) } #endif -#if defined(L_fixxfdi) && defined(HAVE_XFMODE) +#if defined(L_fixxfdi) && LIBGCC2_HAS_XF_MODE DWtype __fixxfdi (XFtype a) { @@ -1227,7 +1227,7 @@ __fixxfdi (XFtype a) } #endif -#if defined(L_fixunsdfdi) && defined(HAVE_DFMODE) +#if defined(L_fixunsdfdi) && LIBGCC2_HAS_DF_MODE DWtype __fixunsdfDI (DFtype a) { @@ -1246,7 +1246,7 @@ __fixunsdfDI (DFtype a) } #endif -#if defined(L_fixdfdi) && defined(HAVE_DFMODE) +#if defined(L_fixdfdi) && LIBGCC2_HAS_DF_MODE DWtype __fixdfdi (DFtype a) { @@ -1256,11 +1256,11 @@ __fixdfdi (DFtype a) } #endif -#ifdef L_fixunssfdi +#if defined(L_fixunssfdi) && LIBGCC2_HAS_SF_MODE DWtype __fixunssfDI (SFtype a) { -#if defined(HAVE_DFMODE) +#if LIBGCC2_HAS_DF_MODE /* Convert the SFtype to a DFtype, because that is surely not going to lose any bits. Some day someone else can write a faster version that avoids converting to DFtype, and verify it really works right. */ @@ -1320,7 +1320,7 @@ __fixunssfDI (SFtype a) } #endif -#ifdef L_fixsfdi +#if defined(L_fixsfdi) && LIBGCC2_HAS_SF_MODE DWtype __fixsfdi (SFtype a) { @@ -1330,7 +1330,7 @@ __fixsfdi (SFtype a) } #endif -#if defined(L_floatdixf) && defined(HAVE_XFMODE) +#if defined(L_floatdixf) && LIBGCC2_HAS_XF_MODE XFtype __floatdixf (DWtype u) { @@ -1341,7 +1341,7 @@ __floatdixf (DWtype u) } #endif -#if defined(L_floatditf) && defined(HAVE_TFMODE) +#if defined(L_floatditf) && LIBGCC2_HAS_TF_MODE TFtype __floatditf (DWtype u) { @@ -1352,7 +1352,7 @@ __floatditf (DWtype u) } #endif -#if defined(L_floatdidf) && defined(HAVE_DFMODE) +#if defined(L_floatdidf) && LIBGCC2_HAS_DF_MODE DFtype __floatdidf (DWtype u) { @@ -1363,7 +1363,7 @@ __floatdidf (DWtype u) } #endif -#ifdef L_floatdisf +#if defined(L_floatdisf) && LIBGCC2_HAS_SF_MODE #define DI_SIZE (W_TYPE_SIZE * 2) #define SF_SIZE FLT_MANT_DIG @@ -1376,7 +1376,7 @@ __floatdisf (DWtype u) f *= Wtype_MAXp1_F; f += (UWtype)u; return f; -#elif defined(HAVE_DFMODE) +#elif LIBGCC2_HAS_DF_MODE #if LIBGCC2_DOUBLE_TYPE_SIZE == 64 #define DF_SIZE DBL_MANT_DIG @@ -1451,7 +1451,7 @@ __floatdisf (DWtype u) } #endif -#if defined(L_fixunsxfsi) && defined(HAVE_XFMODE) +#if defined(L_fixunsxfsi) && LIBGCC2_HAS_XF_MODE /* Reenable the normal types, in case limits.h needs them. */ #undef char #undef short @@ -1473,7 +1473,7 @@ __fixunsxfSI (XFtype a) } #endif -#if defined(L_fixunsdfsi) && defined(HAVE_DFMODE) +#if defined(L_fixunsdfsi) && LIBGCC2_HAS_DF_MODE /* Reenable the normal types, in case limits.h needs them. */ #undef char #undef short @@ -1495,7 +1495,7 @@ __fixunsdfSI (DFtype a) } #endif -#ifdef L_fixunssfsi +#if defined(L_fixunssfsi) && LIBGCC2_HAS_SF_MODE /* Reenable the normal types, in case limits.h needs them. */ #undef char #undef short @@ -1520,10 +1520,10 @@ __fixunssfSI (SFtype a) /* Integer power helper used from __builtin_powi for non-constant exponents. */ -#if defined(L_powisf2) \ - || (defined(L_powidf2) && defined(HAVE_DFMODE)) \ - || (defined(L_powixf2) && defined(HAVE_XFMODE)) \ - || (defined(L_powitf2) && defined(HAVE_TFMODE)) +#if (defined(L_powisf2) && LIBGCC2_HAS_SF_MODE) \ + || (defined(L_powidf2) && LIBGCC2_HAS_DF_MODE) \ + || (defined(L_powixf2) && LIBGCC2_HAS_XF_MODE) \ + || (defined(L_powitf2) && LIBGCC2_HAS_TF_MODE) # if defined(L_powisf2) # define TYPE SFtype # define NAME __powisf2 @@ -1554,10 +1554,10 @@ NAME (TYPE x, Wtype m) #endif -#if defined(L_mulsc3) || defined(L_divsc3) \ - || ((defined(L_muldc3) || defined(L_divdc3)) && defined(HAVE_DFMODE)) \ - || ((defined(L_mulxc3) || defined(L_divxc3)) && defined(HAVE_XFMODE)) \ - || ((defined(L_multc3) || defined(L_divtc3)) && defined(HAVE_TFMODE)) +#if ((defined(L_mulsc3) || defined(L_divsc3)) && LIBGCC2_HAS_SF_MODE) \ + || ((defined(L_muldc3) || defined(L_divdc3)) && LIBGCC2_HAS_DF_MODE) \ + || ((defined(L_mulxc3) || defined(L_divxc3)) && LIBGCC2_HAS_XF_MODE) \ + || ((defined(L_multc3) || defined(L_divtc3)) && LIBGCC2_HAS_TF_MODE) #undef float #undef double diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index 0a08f51195e..11444ed9e45 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -58,6 +58,27 @@ extern short int __get_eh_table_version (struct exception_descriptor *); #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE #endif +#ifndef LIBGCC2_HAS_SF_MODE +#define LIBGCC2_HAS_SF_MODE (BITS_PER_UNIT == 8) +#endif + +#ifndef LIBGCC2_HAS_DF_MODE +#define LIBGCC2_HAS_DF_MODE \ + (BITS_PER_UNIT == 8 \ + && (LIBGCC2_DOUBLE_TYPE_SIZE == 64 \ + || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64)) +#endif + +#ifndef LIBGCC2_HAS_XF_MODE +#define LIBGCC2_HAS_XF_MODE \ + (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80) +#endif + +#ifndef LIBGCC2_HAS_TF_MODE +#define LIBGCC2_HAS_TF_MODE \ + (BITS_PER_UNIT == 8 && LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128) +#endif + #ifndef MIN_UNITS_PER_WORD #define MIN_UNITS_PER_WORD UNITS_PER_WORD #endif @@ -91,50 +112,23 @@ typedef unsigned int UTItype __attribute__ ((mode (TI))); #endif #endif -#if BITS_PER_UNIT == 8 - +#if LIBGCC2_HAS_SF_MODE typedef float SFtype __attribute__ ((mode (SF))); typedef _Complex float SCtype __attribute__ ((mode (SC))); - -#if LIBGCC2_DOUBLE_TYPE_SIZE == 64 || LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 64 -#define HAVE_DFMODE +#endif +#if LIBGCC2_HAS_DF_MODE typedef float DFtype __attribute__ ((mode (DF))); typedef _Complex float DCtype __attribute__ ((mode (DC))); #endif -#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 80 -#define HAVE_XFMODE +#if LIBGCC2_HAS_XF_MODE typedef float XFtype __attribute__ ((mode (XF))); typedef _Complex float XCtype __attribute__ ((mode (XC))); #endif -#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128 -#define HAVE_TFMODE +#if LIBGCC2_HAS_TF_MODE typedef float TFtype __attribute__ ((mode (TF))); typedef _Complex float TCtype __attribute__ ((mode (TC))); #endif -#else /* BITS_PER_UNIT != 8 */ - -/* On dsp's there are usually qf/hf/tqf modes used instead of the above. - For now we don't support them in libgcc2.c. */ - -#undef L_fixdfdi -#undef L_fixsfdi -#undef L_fixtfdi -#undef L_fixunsdfdi -#undef L_fixunsdfsi -#undef L_fixunssfdi -#undef L_fixunssfsi -#undef L_fixunstfdi -#undef L_fixunsxfdi -#undef L_fixunsxfsi -#undef L_fixxfdi -#undef L_floatdidf -#undef L_floatdisf -#undef L_floatditf -#undef L_floatdixf - -#endif /* BITS_PER_UNIT != 8 */ - typedef int word_type __attribute__ ((mode (__word__))); /* Make sure that we don't accidentally use any normal C language built-in @@ -320,7 +314,7 @@ extern SItype __mulvsi3 (SItype, SItype); extern SItype __negvsi2 (SItype); #endif /* COMPAT_SIMODE_TRAPPING_ARITHMETIC */ -#if BITS_PER_UNIT == 8 +#if LIBGCC2_HAS_SF_MODE extern DWtype __fixsfdi (SFtype); extern SFtype __floatdisf (DWtype); extern UWtype __fixunssfSI (SFtype); @@ -328,8 +322,8 @@ extern DWtype __fixunssfDI (SFtype); extern SFtype __powisf2 (SFtype, Wtype); extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype); extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype); - -#ifdef HAVE_DFMODE +#endif +#if LIBGCC2_HAS_DF_MODE extern DWtype __fixdfdi (DFtype); extern DFtype __floatdidf (DWtype); extern UWtype __fixunsdfSI (DFtype); @@ -339,7 +333,7 @@ extern DCtype __divdc3 (DFtype, DFtype, DFtype, DFtype); extern DCtype __muldc3 (DFtype, DFtype, DFtype, DFtype); #endif -#ifdef HAVE_XFMODE +#if LIBGCC2_HAS_XF_MODE extern DWtype __fixxfdi (XFtype); extern DWtype __fixunsxfDI (XFtype); extern XFtype __floatdixf (DWtype); @@ -349,7 +343,7 @@ extern XCtype __divxc3 (XFtype, XFtype, XFtype, XFtype); extern XCtype __mulxc3 (XFtype, XFtype, XFtype, XFtype); #endif -#ifdef HAVE_TFMODE +#if LIBGCC2_HAS_TF_MODE extern DWtype __fixunstfDI (TFtype); extern DWtype __fixtfdi (TFtype); extern TFtype __floatditf (DWtype); @@ -357,7 +351,6 @@ extern TFtype __powitf2 (TFtype, Wtype); extern TCtype __divtc3 (TFtype, TFtype, TFtype, TFtype); extern TCtype __multc3 (TFtype, TFtype, TFtype, TFtype); #endif -#endif /* BITS_PER_UNIT == 8 */ /* DWstructs are pairs of Wtype values in the order determined by LIBGCC2_WORDS_BIG_ENDIAN. */ diff --git a/gcc/loop.c b/gcc/loop.c index 2b765c821d8..7486736b4d5 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -4655,12 +4655,18 @@ for_each_insn_in_loop (struct loop *loop, loop_insn_callback fncall) int not_every_iteration = 0; int maybe_multiple = 0; int past_loop_latch = 0; + bool exit_test_is_entry = false; rtx p; - /* If loop_scan_start points to the loop exit test, we have to be wary of - subversive use of gotos inside expression statements. */ + /* If loop_scan_start points to the loop exit test, the loop body + cannot be counted on running on every iteration, and we have to + be wary of subversive use of gotos inside expression + statements. */ if (prev_nonnote_insn (loop->scan_start) != prev_nonnote_insn (loop->start)) - maybe_multiple = back_branch_in_range_p (loop, loop->scan_start); + { + exit_test_is_entry = true; + maybe_multiple = back_branch_in_range_p (loop, loop->scan_start); + } /* Scan through loop and update NOT_EVERY_ITERATION and MAYBE_MULTIPLE. */ for (p = next_insn_in_loop (loop, loop->scan_start); @@ -4718,10 +4724,12 @@ for_each_insn_in_loop (struct loop *loop, loop_insn_callback fncall) beginning, don't set not_every_iteration for that. This can be any kind of jump, since we want to know if insns will be executed if the loop is executed. */ - && !(JUMP_LABEL (p) == loop->top - && ((NEXT_INSN (NEXT_INSN (p)) == loop->end - && any_uncondjump_p (p)) - || (NEXT_INSN (p) == loop->end && any_condjump_p (p))))) + && (exit_test_is_entry + || !(JUMP_LABEL (p) == loop->top + && ((NEXT_INSN (NEXT_INSN (p)) == loop->end + && any_uncondjump_p (p)) + || (NEXT_INSN (p) == loop->end + && any_condjump_p (p)))))) { rtx label = 0; @@ -5470,9 +5478,20 @@ loop_givs_rescan (struct loop *loop, struct iv_class *bl, rtx *reg_map) mark_reg_pointer (v->new_reg, 0); if (v->giv_type == DEST_ADDR) - /* Store reduced reg as the address in the memref where we found - this giv. */ - validate_change (v->insn, v->location, v->new_reg, 0); + { + /* Store reduced reg as the address in the memref where we found + this giv. */ + if (!validate_change (v->insn, v->location, v->new_reg, 0)) + { + if (loop_dump_stream) + fprintf (loop_dump_stream, + "unable to reduce iv to register in insn %d\n", + INSN_UID (v->insn)); + bl->all_reduced = 0; + v->ignore = 1; + continue; + } + } else if (v->replaceable) { reg_map[REGNO (v->dest_reg)] = v->new_reg; diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index 57879baf799..e623ea1cb53 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -339,6 +339,10 @@ const_iteration_count (rtx count_reg, basic_block pre_header, { rtx insn; rtx head, tail; + + if (! pre_header) + return NULL_RTX; + get_block_head_tail (pre_header->index, &head, &tail); for (insn = tail; insn != PREV_INSN (head); insn = PREV_INSN (insn)) @@ -401,6 +405,8 @@ print_node_sched_params (FILE * dump_file, int num_nodes) { int i; + if (! dump_file) + return; for (i = 0; i < num_nodes; i++) { node_sched_params_ptr nsp = &node_sched_params[i]; @@ -443,14 +449,17 @@ calculate_maxii (ddg_ptr g) return maxii; } - -/* Given the partial schedule, generate register moves when the length - of the register live range is more than ii; the number of moves is - determined according to the following equation: - SCHED_TIME (use) - SCHED_TIME (def) { 1 broken loop-carried - nreg_moves = ----------------------------------- - { dependence. - ii { 0 if not. - This handles the modulo-variable-expansions (mve's) needed for the ps. */ +/* + Breaking intra-loop register anti-dependences: + Each intra-loop register anti-dependence implies a cross-iteration true + dependence of distance 1. Therefore, we can remove such false dependencies + and figure out if the partial schedule broke them by checking if (for a + true-dependence of distance 1): SCHED_TIME (def) < SCHED_TIME (use) and + if so generate a register move. The number of such moves is equal to: + SCHED_TIME (use) - SCHED_TIME (def) { 0 broken + nreg_moves = ----------------------------------- + 1 - { dependecnce. + ii { 1 if not. +*/ static void generate_reg_moves (partial_schedule_ptr ps) { @@ -474,6 +483,9 @@ generate_reg_moves (partial_schedule_ptr ps) { int nreg_moves4e = (SCHED_TIME (e->dest) - SCHED_TIME (e->src)) / ii; + if (e->distance == 1) + nreg_moves4e = (SCHED_TIME (e->dest) - SCHED_TIME (e->src) + ii) / ii; + /* If dest precedes src in the schedule of the kernel, then dest will read before src writes and we can save one reg_copy. */ if (SCHED_ROW (e->dest) == SCHED_ROW (e->src) @@ -497,6 +509,9 @@ generate_reg_moves (partial_schedule_ptr ps) { int dest_copy = (SCHED_TIME (e->dest) - SCHED_TIME (e->src)) / ii; + if (e->distance == 1) + dest_copy = (SCHED_TIME (e->dest) - SCHED_TIME (e->src) + ii) / ii; + if (SCHED_ROW (e->dest) == SCHED_ROW (e->src) && SCHED_COLUMN (e->dest) < SCHED_COLUMN (e->src)) dest_copy--; @@ -540,7 +555,8 @@ normalize_sched_times (partial_schedule_ptr ps) int amount = PS_MIN_CYCLE (ps); int ii = ps->ii; - for (i = 0; i < g->num_nodes; i++) + /* Don't include the closing branch assuming that it is the last node. */ + for (i = 0; i < g->num_nodes - 1; i++) { ddg_node_ptr u = &g->nodes[i]; int normalized_time = SCHED_TIME (u) - amount; @@ -609,7 +625,7 @@ duplicate_insns_of_cycles (partial_schedule_ptr ps, int from_stage, /* SCHED_STAGE (u_node) >= from_stage == 0. Generate increasing number of reg_moves starting with the second occurrence of u_node, which is generated if its SCHED_STAGE <= to_stage. */ - i_reg_moves = to_stage - SCHED_STAGE (u_node); + i_reg_moves = to_stage - SCHED_STAGE (u_node) + 1; i_reg_moves = MAX (i_reg_moves, 0); i_reg_moves = MIN (i_reg_moves, SCHED_NREG_MOVES (u_node)); @@ -1109,6 +1125,8 @@ sms_schedule (FILE *dump_file) scheduling passes doesn't touch it. */ if (! flag_resched_modulo_sched) g->bb->flags |= BB_DISABLE_SCHEDULE; + /* The life-info is not valid any more. */ + g->bb->flags |= BB_DIRTY; generate_reg_moves (ps); if (dump_file) diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index 88037f36bda..9e206eba7a5 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,14 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-03-30 Joseph S. Myers + + PR c/772 + PR c/17913 + * objc-act.c (objc_start_function): Push context on + label_context_stack. + 2005-01-29 Kazu Hirata * lang-specs.h, objc-act.c, objc-act.h, objc-lang.c: Update diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index e6201afbad5..855b286fbce 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -7666,6 +7666,12 @@ objc_start_function (tree name, tree type, tree attrs, cplus_decl_attributes (&fndecl, attrs, 0); start_preparsed_function (fndecl, attrs, /*flags=*/SF_DEFAULT); #else + struct c_label_context *nstack; + nstack = XOBNEW (&parser_obstack, struct c_label_context); + nstack->labels_def = NULL; + nstack->labels_used = NULL; + nstack->next = label_context_stack; + label_context_stack = nstack; decl_attributes (&fndecl, attrs, 0); announce_function (fndecl); DECL_INITIAL (fndecl) = error_mark_node; diff --git a/gcc/params.def b/gcc/params.def index c424ad59f10..64cb88040e6 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -58,10 +58,9 @@ DEFPARAM (PARAM_SRA_FIELD_STRUCTURE_RATIO, of a function counted in internal gcc instructions (not in real machine instructions) that is eligible for inlining by the tree inliner. - The default value is 500. + The default value is 450. Only functions marked inline (or methods defined in the class - definition for C++) are affected by this, unless you set the - -finline-functions (included in -O3) compiler option. + definition for C++) are affected by this. There are more restrictions to inlining: If inlined functions call other functions, the already inlined instructions are counted and once the recursive inline limit (see @@ -70,7 +69,7 @@ DEFPARAM (PARAM_SRA_FIELD_STRUCTURE_RATIO, DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE, "max-inline-insns-single", "The maximum number of instructions in a single function eligible for inlining", - 500, 0, 0) + 450, 0, 0) /* The single function inlining limit for functions that are inlined by virtue of -finline-functions (-O3). @@ -78,21 +77,21 @@ DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE, that is applied to functions marked inlined (or defined in the class declaration in C++) given by the "max-inline-insns-single" parameter. - The default value is 150. */ + The default value is 90. */ DEFPARAM (PARAM_MAX_INLINE_INSNS_AUTO, "max-inline-insns-auto", "The maximum number of instructions when automatically inlining", - 120, 0, 0) + 90, 0, 0) DEFPARAM (PARAM_MAX_INLINE_INSNS_RECURSIVE, "max-inline-insns-recursive", "The maximum number of instructions inline function can grow to via recursive inlining", - 500, 0, 0) + 450, 0, 0) DEFPARAM (PARAM_MAX_INLINE_INSNS_RECURSIVE_AUTO, "max-inline-insns-recursive-auto", "The maximum number of instructions non-inline function can grow to via recursive inlining", - 500, 0, 0) + 450, 0, 0) DEFPARAM (PARAM_MAX_INLINE_RECURSIVE_DEPTH, "max-inline-recursive-depth", @@ -148,7 +147,7 @@ DEFPARAM(PARAM_MAX_PENDING_LIST_LENGTH, DEFPARAM(PARAM_LARGE_FUNCTION_INSNS, "large-function-insns", "The size of function body to be considered large", - 3000, 0, 0) + 2700, 0, 0) DEFPARAM(PARAM_LARGE_FUNCTION_GROWTH, "large-function-growth", "Maximal growth due to inlining of large function (in percent)", @@ -157,6 +156,10 @@ DEFPARAM(PARAM_INLINE_UNIT_GROWTH, "inline-unit-growth", "how much can given compilation unit grow because of the inlining (in percent)", 50, 0, 0) +DEFPARAM(PARAM_INLINE_CALL_COST, + "inline-call-cost", + "expense of call operation relative to ordinary aritmetic operations", + 16, 0, 0) /* The GCSE optimization will be disabled if it would require significantly more memory than this value. */ diff --git a/gcc/passes.c b/gcc/passes.c index 956885ab717..7f4cf181a54 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -251,6 +251,10 @@ rest_of_decl_compilation (tree decl, debug_hooks->type_decl (decl, !top_level); timevar_pop (TV_SYMOUT); } + + /* Let cgraph know about the existance of variables. */ + if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl)) + cgraph_varpool_node (decl); } /* Called after finishing a record, union or enumeral type. */ @@ -571,6 +575,8 @@ rest_of_handle_partition_blocks (void) static void rest_of_handle_sms (void) { + sbitmap blocks; + timevar_push (TV_SMS); open_dump_file (DFI_sms, current_function_decl); @@ -583,10 +589,14 @@ rest_of_handle_sms (void) /* Update the life information, because we add pseudos. */ max_regno = max_reg_num (); allocate_reg_info (max_regno, FALSE, FALSE); - update_life_info_in_dirty_blocks (UPDATE_LIFE_GLOBAL_RM_NOTES, - (PROP_DEATH_NOTES - | PROP_KILL_DEAD_CODE - | PROP_SCAN_DEAD_CODE)); + blocks = sbitmap_alloc (last_basic_block); + sbitmap_ones (blocks); + update_life_info (blocks, UPDATE_LIFE_GLOBAL_RM_NOTES, + (PROP_DEATH_NOTES + | PROP_REG_INFO + | PROP_KILL_DEAD_CODE + | PROP_SCAN_DEAD_CODE)); + no_new_pseudos = 1; ggc_collect (); diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog index 5177f603fb8..5210ce1ab8a 100644 --- a/gcc/po/ChangeLog +++ b/gcc/po/ChangeLog @@ -1,3 +1,40 @@ +2005-04-20 Release Manager + + * GCC 4.0.0 released. + +2005-04-20 Mark Mitchell + + * gcc.pot: Regenerated. + +2005-04-20 Joseph S. Myers + + * de.po: Update. + +2005-04-17 Joseph S. Myers + + * de.po: Update. + +2005-04-06 Joseph S. Myers + + * rw.po: New file. + +2005-03-29 Joseph S. Myers + + * de.po: Update. + +2005-03-06 Joseph S. Myers + + * es.po: Update. + +2005-03-04 Joseph S. Myers + + * be.po, ca.po, da.po, de.po, el.po, es.po, fr.po, ja.po, nl.po, + sv.po, tr.po: Update. + +2005-02-25 Joseph S. Myers + + * gcc.pot: Regenerate. + 2004-12-20 Joseph S. Myers * de.po: Update. diff --git a/gcc/po/be.po b/gcc/po/be.po index 739518c21db..fbacab02bd9 100644 --- a/gcc/po/be.po +++ b/gcc/po/be.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gcc 3.1\n" "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n" -"POT-Creation-Date: 2004-11-27 19:39+0000\n" +"POT-Creation-Date: 2005-02-25 23:36+0000\n" "PO-Revision-Date: 2002-05-17 15:54+0200\n" "Last-Translator: Ales Nyakhaychyk \n" "Language-Team: Belarusian \n" @@ -38,573 +38,581 @@ msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" msgid "offset outside bounds of constant string" msgstr "" -#: builtins.c:923 +#: builtins.c:928 #, fuzzy msgid "second argument to %<__builtin_prefetch%> must be a constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: builtins.c:930 +#: builtins.c:935 #, fuzzy msgid "invalid second argument to %<__builtin_prefetch%>; using zero" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: builtins.c:938 +#: builtins.c:943 #, fuzzy msgid "third argument to %<__builtin_prefetch%> must be a constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: builtins.c:945 +#: builtins.c:950 #, fuzzy msgid "invalid third argument to %<__builtin_prefetch%>; using zero" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: builtins.c:3727 +#: builtins.c:3806 #, fuzzy msgid "argument of %<__builtin_args_info%> must be constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: builtins.c:3733 +#: builtins.c:3812 #, fuzzy msgid "argument of %<__builtin_args_info%> out of range" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ²Ñ‹ıш°Ñž ·° ĵµĥы" -#: builtins.c:3739 +#: builtins.c:3818 #, fuzzy msgid "missing argument in %<__builtin_args_info%>" msgstr "żÑ€°żÑƒÑˆÑ‡°½ °Ñ€³Ñƒĵµ½Ñ‚ у `__builtin_args_info'" -#: builtins.c:3755 builtins.c:8661 -#, fuzzy -msgid "% used in function with fixed args" -msgstr "" -"`va_start' ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°µÑ†Ñ†° ў фу½şÑ†Ñ‹Ñ– · ½Ñ·ÑŒĵµ½½°ı\n" -" şğьş°ÑÑŒÑ†ÑŽ °Ñ€³Ñƒĵµ½Ñ‚°Ñž" - -#: builtins.c:3774 builtins.c:8677 -msgid "second parameter of % not last named argument" -msgstr "" - -#. Evidently an out of date version of ; can't validate -#. va_start's second argument, but can still work as intended. -#: builtins.c:3779 builtins.c:8683 -#, fuzzy -msgid "%<__builtin_next_arg%> called without an argument" -msgstr "\"__buitin_next_arg\" ²Ñ‹şğіş°µÑ†Ñ†° ħµ· °Ñ€³Ñƒĵµ½Ñ‚°" - -#: builtins.c:3865 +#: builtins.c:3914 gimplify.c:1765 #, fuzzy msgid "too few arguments to function %" msgstr "½µÑ…°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– \"%s\"" -#: builtins.c:3869 -#, fuzzy -msgid "too many arguments to function %" -msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵэ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– `%s'" - -#: builtins.c:4017 +#: builtins.c:4077 msgid "first argument to % not of type %" 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:4031 +#: builtins.c:4091 msgid "%qT is promoted to %qT when passed through %<...%>" msgstr "" -#: builtins.c:4036 +#: builtins.c:4096 msgid "(so you should pass %qT not %qT to %)" msgstr "" #. We can, however, treat "undefined" any way we please. #. Call abort to encourage the user to fix the program. -#: builtins.c:4042 c-typeck.c:1940 +#: builtins.c:4102 c-typeck.c:2023 msgid "if this code is reached, the program will abort" msgstr "" -#: builtins.c:4160 +#: builtins.c:4220 msgid "invalid argument to %<__builtin_frame_address%>" msgstr "" -#: builtins.c:4162 +#: builtins.c:4222 msgid "invalid argument to %<__builtin_return_address%>" msgstr "" -#: builtins.c:4176 +#: builtins.c:4235 msgid "unsupported argument to %<__builtin_frame_address%>" msgstr "" -#: builtins.c:4178 +#: builtins.c:4237 msgid "unsupported argument to %<__builtin_return_address%>" msgstr "" -#: builtins.c:4281 +#: builtins.c:4340 #, fuzzy msgid "second argument to %<__builtin_expect%> must be a constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: builtins.c:5488 +#: builtins.c:5590 msgid "%<__builtin_longjmp%> second argument must be 1" msgstr "" -#: builtins.c:5840 +#: builtins.c:5942 #, fuzzy msgid "target format does not support infinity" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ цэğ°ğіş°²Ñ‹Ñ тыżÑ‹" -#: builtins.c:7518 builtins.c:7613 +#: builtins.c:7699 builtins.c:7794 #, fuzzy, c-format msgid "too few arguments to function %qs" msgstr "½µÑ…°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– \"%s\"" -#: builtins.c:7524 builtins.c:7619 +#: builtins.c:7705 builtins.c:7800 #, fuzzy, c-format msgid "too many arguments to function %qs" msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵэ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– `%s'" -#: builtins.c:7530 builtins.c:7644 +#: builtins.c:7711 builtins.c:7825 #, fuzzy, c-format msgid "non-floating-point argument to function %qs" msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵэ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– `%s'" -#: c-common.c:831 +#: builtins.c:8911 +#, fuzzy +msgid "% used in function with fixed args" +msgstr "" +"`va_start' ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°µÑ†Ñ†° ў фу½şÑ†Ñ‹Ñ– · ½Ñ·ÑŒĵµ½½°ı\n" +" şğьş°ÑÑŒÑ†ÑŽ °Ñ€³Ñƒĵµ½Ñ‚°Ñž" + +#. Evidently an out of date version of ; can't validate +#. va_start's second argument, but can still work as intended. +#: builtins.c:8918 +#, fuzzy +msgid "%<__builtin_next_arg%> called without an argument" +msgstr "\"__buitin_next_arg\" ²Ñ‹şğіş°µÑ†Ñ†° ħµ· °Ñ€³Ñƒĵµ½Ñ‚°" + +#: builtins.c:8933 +msgid "% used with too many arguments" +msgstr "" + +#. FIXME: Sometimes with the tree optimizers we can get the +#. not the last argument even though the user used the last +#. 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:8953 +msgid "second parameter of % not last named argument" +msgstr "" + +#: c-common.c:826 #, fuzzy msgid "%qD is not defined outside of function scope" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-common.c:852 +#: c-common.c:847 #, c-format msgid "string length %qd is greater than the length %qd ISO C%d compilers are required to support" msgstr "" -#: c-common.c:898 +#: c-common.c:888 msgid "overflow in constant expression" msgstr "" -#: c-common.c:918 +#: c-common.c:908 msgid "integer overflow in expression" msgstr "" -#: c-common.c:927 +#: c-common.c:917 msgid "floating point overflow in expression" msgstr "" -#: c-common.c:933 +#: c-common.c:923 msgid "vector overflow in expression" msgstr "" #. This detects cases like converting -129 or 256 to unsigned char. -#: c-common.c:955 +#: c-common.c:945 msgid "large integer implicitly truncated to unsigned type" msgstr "" -#: c-common.c:957 +#: c-common.c:947 msgid "negative integer implicitly converted to unsigned type" msgstr "" -#: c-common.c:1015 +#: c-common.c:1005 msgid "overflow in implicit constant conversion" msgstr "" -#: c-common.c:1151 +#: c-common.c:1141 #, c-format msgid "operation on %qs may be undefined" msgstr "" -#: c-common.c:1437 +#: c-common.c:1425 msgid "case label does not reduce to an integer constant" msgstr "" -#: c-common.c:1480 +#: c-common.c:1468 msgid "case label value is less than minimum value for type" msgstr "" -#: c-common.c:1488 +#: c-common.c:1476 msgid "case label value exceeds maximum value for type" msgstr "" -#: c-common.c:1496 +#: c-common.c:1484 msgid "lower value in case label range less than minimum value for type" msgstr "" -#: c-common.c:1505 +#: c-common.c:1493 msgid "upper value in case label range exceeds maximum value for type" msgstr "" -#: c-common.c:1821 +#: c-common.c:1833 msgid "invalid truth-value expression" msgstr "" -#: c-common.c:1869 +#: c-common.c:1881 #, c-format msgid "invalid operands to binary %s" msgstr "" -#: c-common.c:2112 +#: c-common.c:2116 msgid "comparison is always false due to limited range of data type" msgstr "" -#: c-common.c:2114 +#: c-common.c:2118 msgid "comparison is always true due to limited range of data type" msgstr "" -#: c-common.c:2184 +#: c-common.c:2188 msgid "comparison of unsigned expression >= 0 is always true" msgstr "" -#: c-common.c:2193 +#: c-common.c:2197 msgid "comparison of unsigned expression < 0 is always false" msgstr "" -#: c-common.c:2235 +#: c-common.c:2239 msgid "pointer of type % used in arithmetic" msgstr "" -#: c-common.c:2241 +#: c-common.c:2245 msgid "pointer to a function used in arithmetic" msgstr "" -#: c-common.c:2247 +#: c-common.c:2251 msgid "pointer to member function used in arithmetic" msgstr "" #. Common Ada/Pascal programmer's mistake. We always warn #. about this since it is so bad. -#: c-common.c:2355 +#: c-common.c:2371 msgid "the address of %qD, will always evaluate as %" msgstr "" -#: c-common.c:2451 +#: c-common.c:2467 msgid "suggest parentheses around assignment used as truth value" msgstr "" -#: c-common.c:2500 c-common.c:2540 +#: c-common.c:2535 c-common.c:2575 #, fuzzy msgid "invalid use of %" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: c-common.c:2756 +#: c-common.c:2791 #, fuzzy msgid "invalid application of % to a function type" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: c-common.c:2766 +#: c-common.c:2801 #, c-format msgid "invalid application of %qs to a void type" msgstr "" -#: c-common.c:2772 +#: c-common.c:2807 #, fuzzy msgid "invalid application of %qs to incomplete type %qT " msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-common.c:2813 +#: c-common.c:2848 msgid "%<__alignof%> applied to a bit-field" msgstr "" -#: c-common.c:3258 +#: c-common.c:3315 #, fuzzy, c-format msgid "cannot disable built-in function %qs" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: c-common.c:3448 +#: c-common.c:3505 msgid "pointers are not permitted as case values" msgstr "" -#: c-common.c:3452 +#: c-common.c:3509 msgid "range expressions in switch statements are non-standard" msgstr "" -#: c-common.c:3477 +#: c-common.c:3534 msgid "empty range specified" msgstr "" -#: c-common.c:3536 +#: c-common.c:3593 msgid "duplicate (or overlapping) case value" msgstr "" -#: c-common.c:3537 +#: c-common.c:3594 msgid "%Jthis is the first entry overlapping that value" msgstr "" -#: c-common.c:3541 +#: c-common.c:3598 msgid "duplicate case value" msgstr "" -#: c-common.c:3542 +#: c-common.c:3599 #, fuzzy msgid "%Jpreviously used here" msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ" -#: c-common.c:3546 +#: c-common.c:3603 msgid "multiple default labels in one switch" msgstr "" -#: c-common.c:3547 +#: c-common.c:3604 msgid "%Jthis is the first default label" msgstr "" -#: c-common.c:3596 +#: c-common.c:3653 msgid "%Jcase value %qs not in enumerated type" msgstr "" -#: c-common.c:3599 +#: c-common.c:3656 msgid "%Jcase value %qs not in enumerated type %qT" msgstr "" -#: c-common.c:3666 +#: c-common.c:3723 msgid "%Hswitch missing default case" msgstr "" #. Warn if there are enumerators that don't correspond to #. case expressions. -#: c-common.c:3700 +#: c-common.c:3757 msgid "%Henumeration value %qE not handled in switch" msgstr "" -#: c-common.c:3727 +#: c-common.c:3784 #, fuzzy msgid "taking the address of a label is non-standard" msgstr "ISO C ½µ ´°·²°ğяµ żÑƒÑÑ‚Ñ‹ і·Ñ‹Ñ…´½Ñ‹ ф°ığ" -#: c-common.c:3896 c-common.c:3915 c-common.c:3933 c-common.c:3960 -#: c-common.c:3979 c-common.c:4002 c-common.c:4026 c-common.c:4052 -#: c-common.c:4086 c-common.c:4130 c-common.c:4158 c-common.c:4186 -#: c-common.c:4205 c-common.c:4527 c-common.c:4558 c-common.c:4644 -#: c-common.c:4711 c-common.c:4757 c-common.c:4815 c-common.c:4844 -#: c-common.c:5123 c-common.c:5146 c-common.c:5185 tree.c:3240 -#: config/darwin.c:1218 config/arm/arm.c:2645 config/arm/arm.c:2672 -#: config/avr/avr.c:4514 config/h8300/h8300.c:5779 config/h8300/h8300.c:5802 -#: config/i386/i386.c:1725 config/i386/i386.c:14480 config/ia64/ia64.c:512 -#: config/ip2k/ip2k.c:3163 config/m68hc11/m68hc11.c:1314 -#: config/rs6000/rs6000.c:17094 config/sh/symbian.c:414 -#: config/sh/symbian.c:421 +#: c-common.c:3953 c-common.c:3972 c-common.c:3990 c-common.c:4017 +#: c-common.c:4036 c-common.c:4059 c-common.c:4083 c-common.c:4109 +#: c-common.c:4143 c-common.c:4187 c-common.c:4215 c-common.c:4243 +#: c-common.c:4262 c-common.c:4593 c-common.c:4624 c-common.c:4716 +#: c-common.c:4783 c-common.c:4829 c-common.c:4887 c-common.c:4916 +#: c-common.c:5195 c-common.c:5218 c-common.c:5257 tree.c:3254 +#: config/darwin.c:1236 config/arm/arm.c:2701 config/arm/arm.c:2728 +#: config/avr/avr.c:4601 config/h8300/h8300.c:5779 config/h8300/h8300.c:5802 +#: config/i386/i386.c:1732 config/i386/i386.c:15625 config/ia64/ia64.c:526 +#: config/ip2k/ip2k.c:3164 config/m68hc11/m68hc11.c:1312 +#: config/sh/symbian.c:414 config/sh/symbian.c:421 #, fuzzy, c-format msgid "%qs attribute ignored" msgstr "\"%s\" °Ñ‚рыħут і³½°Ñ€Ñ‹Ñ€ÑƒµÑ†Ñ†°" -#: c-common.c:4243 +#: c-common.c:4300 #, fuzzy, c-format msgid "unknown machine mode %qs" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: c-common.c:4263 +#: c-common.c:4320 msgid "specifying vector types with __attribute__ ((mode)) is deprecated" msgstr "" -#: c-common.c:4265 +#: c-common.c:4322 msgid "use __attribute__ ((vector_size)) instead" msgstr "" -#: c-common.c:4274 +#: c-common.c:4331 #, fuzzy, c-format msgid "unable to emulate %qs" msgstr "½µĵ°³Ñƒ °´Ñ‡Ñ‹½Ñ–ць ф°ığ \"%s\"" -#: c-common.c:4284 +#: c-common.c:4341 #, fuzzy, c-format msgid "invalid pointer mode %qs" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: c-common.c:4299 +#: c-common.c:4356 #, fuzzy, c-format msgid "no data type for mode %qs" msgstr "½Ñĵ° тыż° ´°´·µ½Ñ‹Ñ… ´ğя рэĥыĵ° \"%s\"" -#: c-common.c:4309 +#: c-common.c:4366 #, c-format msgid "cannot use mode %qs for enumeral types" msgstr "" -#: c-common.c:4322 +#: c-common.c:4390 #, fuzzy, c-format msgid "mode %qs applied to inappropriate type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-common.c:4355 +#: c-common.c:4421 #, fuzzy msgid "%Jsection attribute cannot be specified for local variables" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: c-common.c:4366 +#: c-common.c:4432 #, fuzzy msgid "%Jsection of %qD conflicts with previous declaration" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: c-common.c:4375 +#: c-common.c:4441 #, fuzzy msgid "%Jsection attribute not allowed for %qD" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: c-common.c:4381 +#: c-common.c:4447 #, fuzzy msgid "%Jsection attributes are not supported for this target" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: c-common.c:4419 +#: c-common.c:4485 msgid "requested alignment is not a constant" msgstr "" -#: c-common.c:4424 +#: c-common.c:4490 msgid "requested alignment is not a power of 2" msgstr "" -#: c-common.c:4429 +#: c-common.c:4495 msgid "requested alignment is too large" msgstr "" -#: c-common.c:4455 +#: c-common.c:4521 msgid "%Jalignment may not be specified for %qD" msgstr "" -#: c-common.c:4493 +#: c-common.c:4559 msgid "%J%qD defined both normally and as an alias" msgstr "" -#: c-common.c:4509 +#: c-common.c:4575 #, fuzzy msgid "alias argument not a string" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: c-common.c:4551 +#: c-common.c:4617 #, fuzzy, c-format msgid "%qs attribute ignored on non-class types" msgstr "\"%s\" °Ñ‚рыħут і³½°Ñ€Ñ‹Ñ€ÑƒµÑ†Ñ†°" -#: c-common.c:4564 +#: c-common.c:4630 #, fuzzy msgid "visibility argument not a string" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: c-common.c:4585 +#: c-common.c:4642 +#, fuzzy, c-format +msgid "%qE attribute ignored on types" +msgstr "\"%s\" °Ñ‚рыħут і³½°Ñ€Ñ‹Ñ€ÑƒµÑ†Ñ†°" + +#: c-common.c:4657 msgid "visibility argument must be one of \"default\", \"hidden\", \"protected\" or \"internal\"" msgstr "" -#: c-common.c:4654 +#: c-common.c:4726 #, fuzzy msgid "tls_model argument not a string" msgstr "½µ х°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: c-common.c:4663 +#: c-common.c:4735 msgid "tls_model argument must be one of \"local-exec\", \"initial-exec\", \"local-dynamic\" or \"global-dynamic\"" msgstr "" -#: c-common.c:4685 c-common.c:4731 +#: c-common.c:4757 c-common.c:4803 #, fuzzy msgid "%J%qE attribute applies only to functions" msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: c-common.c:4690 c-common.c:4736 +#: c-common.c:4762 c-common.c:4808 msgid "%Jcan%'t set %qE attribute after definition" msgstr "" -#: c-common.c:4812 +#: c-common.c:4884 #, fuzzy, c-format msgid "%qs attribute ignored for %qs" msgstr "\"%s\" °Ñ‚рыħут і³½°Ñ€Ñ‹Ñ€ÑƒµÑ†Ñ†°" -#: c-common.c:4873 +#: c-common.c:4945 #, fuzzy, c-format msgid "invalid vector type for attribute %qs" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: c-common.c:4882 +#: c-common.c:4954 msgid "number of components of the vector not a power of two" msgstr "" -#: c-common.c:4910 +#: c-common.c:4982 msgid "nonnull attribute without arguments on a non-prototype" msgstr "" -#: c-common.c:4925 +#: c-common.c:4997 #, c-format msgid "nonnull argument has invalid operand number (argument %lu)" msgstr "" -#: c-common.c:4944 +#: c-common.c:5016 #, c-format msgid "nonnull argument with out-of-range operand number (argument %lu, operand %lu)" msgstr "" -#: c-common.c:4952 +#: c-common.c:5024 #, c-format msgid "nonnull argument references non-pointer operand (argument %lu, operand %lu)" msgstr "" -#: c-common.c:5007 c-common.c:5044 +#: c-common.c:5079 c-common.c:5116 msgid "missing sentinel in function call" msgstr "" -#: c-common.c:5030 +#: c-common.c:5102 #, fuzzy msgid "not enough arguments to fit a sentinel" msgstr "½µ х°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: c-common.c:5086 +#: c-common.c:5158 #, c-format msgid "null argument where non-null required (argument %lu)" msgstr "" -#: c-common.c:5157 +#: c-common.c:5229 msgid "cleanup argument not an identifier" msgstr "" -#: c-common.c:5164 +#: c-common.c:5236 #, fuzzy msgid "cleanup argument not a function" msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: c-common.c:5202 +#: c-common.c:5274 #, c-format msgid "%qs attribute requires prototypes with named arguments" msgstr "" -#: c-common.c:5213 +#: c-common.c:5285 #, fuzzy, c-format msgid "%qs attribute only applies to variadic functions" msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: c-common.c:5226 +#: c-common.c:5298 #, fuzzy msgid "requested position is not an integer constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: c-common.c:5233 +#: c-common.c:5305 msgid "requested position is less than zero" msgstr "" -#: c-common.c:5539 +#: c-common.c:5611 msgid "%Hignoring return value of %qD, declared with attribute warn_unused_result" msgstr "" -#: c-common.c:5543 +#: c-common.c:5615 msgid "%Hignoring return value of function declared with attribute warn_unused_result" msgstr "" -#: c-common.c:5582 +#: c-common.c:5675 #, fuzzy, c-format msgid "attempt to take address of bit-field structure member %qs" msgstr "½µ ĵ°³Ñƒ °Ñ‚рыĵ°Ñ†ÑŒ °´Ñ€°Ñ ħіт°²°³° żğя \"%s\"" -#: c-common.c:5634 +#: c-common.c:5727 msgid "invalid lvalue in assignment" msgstr "" -#: c-common.c:5637 +#: c-common.c:5730 #, fuzzy msgid "invalid lvalue in increment" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: c-common.c:5640 +#: c-common.c:5733 #, fuzzy msgid "invalid lvalue in decrement" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ %s" -#: c-common.c:5643 +#: c-common.c:5736 msgid "invalid lvalue in unary %<&%>" msgstr "" -#: c-common.c:5646 +#: c-common.c:5739 msgid "invalid lvalue in asm statement" msgstr "" @@ -613,105 +621,110 @@ msgstr "" #. an unprototyped function, it is compile-time undefined; #. making it a constraint in that case was rejected in #. DR#252. -#: c-convert.c:83 c-typeck.c:1354 c-typeck.c:3446 cp/typeck.c:1380 -#: cp/typeck.c:5940 fortran/convert.c:89 treelang/tree-convert.c:79 +#: c-convert.c:83 c-typeck.c:1430 c-typeck.c:3526 cp/typeck.c:1351 +#: cp/typeck.c:5842 fortran/convert.c:89 treelang/tree-convert.c:79 msgid "void value not ignored as it ought to be" msgstr "" -#: c-convert.c:121 fortran/convert.c:122 java/typeck.c:158 +#: c-convert.c:121 fortran/convert.c:122 java/typeck.c:156 #: treelang/tree-convert.c:105 msgid "conversion to non-scalar type requested" msgstr "" -#: c-decl.c:524 +#: c-decl.c:530 msgid "%Jarray %qD assumed to have one element" msgstr "" -#: c-decl.c:637 +#: c-decl.c:643 #, c-format msgid "GCC supports only %u nested scopes" msgstr "" -#: c-decl.c:721 +#: c-decl.c:727 #, fuzzy msgid "%Jlabel %qD used but not defined" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°µÑ†Ñ†°, °ğµ ½Ñ ²Ñ‹·½°Ñ‡°½°" -#: c-decl.c:727 +#: c-decl.c:733 #, fuzzy msgid "%Jlabel %qD defined but not used" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹·½°Ñ‡°½°, °ğµ ½µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°µÑ†Ñ†°" -#: c-decl.c:729 +#: c-decl.c:735 #, fuzzy msgid "%Jlabel %qD declared but not defined" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°µÑ†Ñ†°, °ğµ ½Ñ ²Ñ‹·½°Ñ‡°½°" -#: c-decl.c:772 cp/decl.c:575 +#: c-decl.c:770 +#, fuzzy +msgid "%Jnested function %qD declared but never defined" +msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" + +#: c-decl.c:784 cp/decl.c:568 #, fuzzy msgid "%Junused variable %qD" msgstr "½µ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°µĵ°Ñ żµÑ€°ĵµ½½°Ñ \"%s\"" -#: c-decl.c:776 +#: c-decl.c:788 msgid "%Jtype of array %qD completed incompatibly with implicit initialization" msgstr "" -#: c-decl.c:1008 +#: c-decl.c:1022 msgid "a parameter list with an ellipsis can%'t match an empty parameter name list declaration" msgstr "" -#: c-decl.c:1015 +#: c-decl.c:1029 msgid "an argument type that has a default promotion can%'t match an empty parameter name list declaration" msgstr "" -#: c-decl.c:1051 +#: c-decl.c:1065 msgid "%Jprototype for %qD declares more arguments than previous old-style definition" msgstr "" -#: c-decl.c:1057 +#: c-decl.c:1071 msgid "%Jprototype for %qD declares fewer arguments than previous old-style definition" msgstr "" -#: c-decl.c:1066 +#: c-decl.c:1080 msgid "%Jprototype for %qD 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:1079 +#: c-decl.c:1093 msgid "%Jprototype for %qD follows non-prototype definition" msgstr "" -#: c-decl.c:1094 +#: c-decl.c:1108 #, fuzzy msgid "%Jprevious definition of %qD was here" msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ" -#: c-decl.c:1096 +#: c-decl.c:1110 #, fuzzy msgid "%Jprevious implicit declaration of %qD was here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:1098 +#: c-decl.c:1112 #, fuzzy msgid "%Jprevious declaration of %qD was here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:1134 +#: c-decl.c:1149 msgid "%J%qD redeclared as different kind of symbol" msgstr "" -#: c-decl.c:1139 +#: c-decl.c:1154 #, fuzzy msgid "%Jbuilt-in function %qD declared as non-function" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:1142 c-decl.c:1246 c-decl.c:1815 +#: c-decl.c:1157 c-decl.c:1273 c-decl.c:1879 #, fuzzy msgid "%Jdeclaration of %qD shadows a built-in function" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: c-decl.c:1151 +#: c-decl.c:1166 #, fuzzy msgid "%Jredeclaration of enumerator %qD" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" @@ -719,262 +732,262 @@ msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" #. 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:1172 +#: c-decl.c:1187 #, fuzzy msgid "%Jconflicting types for built-in function %qD" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: c-decl.c:1196 c-decl.c:1207 +#: c-decl.c:1211 c-decl.c:1224 c-decl.c:1234 msgid "%Jconflicting types for %qD" msgstr "" -#: c-decl.c:1205 +#: c-decl.c:1232 msgid "%J conflicting type qualifiers for %qD" msgstr "" #. Allow OLDDECL to continue in use. -#: c-decl.c:1222 +#: c-decl.c:1249 #, fuzzy msgid "%Jredefinition of typedef %qD" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: c-decl.c:1261 c-decl.c:1339 +#: c-decl.c:1291 c-decl.c:1301 c-decl.c:1314 c-decl.c:1396 #, fuzzy msgid "%Jredefinition of %qD" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: c-decl.c:1296 c-decl.c:1377 +#: c-decl.c:1353 c-decl.c:1434 msgid "%Jstatic declaration of %qD follows non-static declaration" msgstr "" -#: c-decl.c:1306 c-decl.c:1313 c-decl.c:1366 c-decl.c:1374 +#: c-decl.c:1363 c-decl.c:1370 c-decl.c:1423 c-decl.c:1431 msgid "%Jnon-static declaration of %qD follows static declaration" msgstr "" -#: c-decl.c:1326 +#: c-decl.c:1383 msgid "%Jthread-local declaration of %qD follows non-thread-local declaration" msgstr "" -#: c-decl.c:1329 +#: c-decl.c:1386 msgid "%Jnon-thread-local declaration of %qD follows thread-local declaration" msgstr "" -#: c-decl.c:1359 +#: c-decl.c:1416 #, fuzzy msgid "%Jextern declaration of %qD follows declaration with no linkage" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:1395 +#: c-decl.c:1452 msgid "%Jdeclaration of %qD with no linkage follows extern declaration" msgstr "" -#: c-decl.c:1401 +#: c-decl.c:1458 #, fuzzy msgid "%Jredeclaration of %qD with no linkage" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:1415 +#: c-decl.c:1472 msgid "%Jredeclaration of %qD with different visibility (old visibility preserved)" msgstr "" -#: c-decl.c:1426 +#: c-decl.c:1483 #, fuzzy msgid "%Jinline declaration of %qD follows declaration with attribute noinline" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:1433 +#: c-decl.c:1490 #, fuzzy msgid "%Jdeclaration of %qD with attribute noinline follows inline declaration " msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:1448 +#: c-decl.c:1505 msgid "%J%qD declared inline after being called" msgstr "" -#: c-decl.c:1454 +#: c-decl.c:1511 #, fuzzy msgid "%J%qD declared inline after its definition" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:1474 +#: c-decl.c:1531 #, fuzzy msgid "%Jredefinition of parameter %qD" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: c-decl.c:1498 +#: c-decl.c:1555 #, fuzzy msgid "%Jredundant redeclaration of %qD" msgstr "µÑ€ÑÑ‡°Ñ–с½°µ °ħ²ÑÑˆÑ‡Ñ½½µ" -#: c-decl.c:1808 +#: c-decl.c:1866 +#, fuzzy +msgid "%Jdeclaration of %qD shadows previous non-variable" +msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" + +#: c-decl.c:1871 msgid "%Jdeclaration of %qD shadows a parameter" msgstr "" -#: c-decl.c:1811 +#: c-decl.c:1874 msgid "%Jdeclaration of %qD shadows a global declaration" msgstr "" -#: c-decl.c:1818 +#: c-decl.c:1884 #, fuzzy msgid "%Jdeclaration of %qD shadows a previous local" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: c-decl.c:1823 cp/name-lookup.c:942 cp/name-lookup.c:973 +#: c-decl.c:1887 cp/name-lookup.c:942 cp/name-lookup.c:973 #: cp/name-lookup.c:981 #, fuzzy msgid "%Jshadowed declaration is here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:1977 +#: c-decl.c:2041 #, fuzzy msgid "nested extern declaration of %qD" msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½½µ" -#: c-decl.c:2067 -#, fuzzy -msgid "nested static declaration of %qD" -msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½½µ" - -#: c-decl.c:2161 +#: c-decl.c:2201 #, fuzzy, c-format msgid "implicit declaration of function %qE" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:2219 +#: c-decl.c:2262 #, fuzzy msgid "incompatible implicit declaration of built-in function %qD" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:2228 +#: c-decl.c:2271 #, fuzzy msgid "incompatible implicit declaration of function %qD" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:2281 +#: c-decl.c:2324 #, fuzzy, c-format msgid "%qE undeclared here (not in a function)" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:2286 +#: c-decl.c:2329 #, fuzzy, c-format msgid "%qE undeclared (first use in this function)" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:2290 +#: c-decl.c:2333 msgid "(Each undeclared identifier is reported only once" msgstr "(ħ şĥ½Ñ‹ĵ ½µ°ħ²µÑˆÑ‡°½Ñ‹ĵ і´Ñ½Ñ‚Ñ‹Ñ„Ñ–ş°Ñ‚°Ñ€Ñ‹ ż°²µ´°ĵğяµÑ†Ñ†°" -#: c-decl.c:2291 +#: c-decl.c:2334 msgid "for each function it appears in.)" msgstr "°´·Ñ–½ р°· ´ğя şĥ½°ı фу½şÑ†Ñ‹Ñ–, ´·µ ё½ ·'яўğяµÑ†Ñ†°.)" -#: c-decl.c:2329 +#: c-decl.c:2372 #, c-format msgid "label %qs referenced outside of any function" msgstr "" -#: c-decl.c:2372 +#: c-decl.c:2415 #, fuzzy, c-format msgid "duplicate label declaration %qs" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ °´ĵµÑ†Ñ–½Ñ‹ `%s'" -#: c-decl.c:2407 +#: c-decl.c:2450 #, fuzzy msgid "%Hduplicate label %qD" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"%s\"" -#: c-decl.c:2429 +#: c-decl.c:2472 msgid "%Htraditional C lacks a separate namespace for labels, identifier %qs conflicts" msgstr "" -#: c-decl.c:2495 +#: c-decl.c:2538 msgid "%H%qs defined as wrong kind of tag" msgstr "" -#: c-decl.c:2718 +#: c-decl.c:2761 msgid "unnamed struct/union that defines no instances" msgstr "" -#: c-decl.c:2726 +#: c-decl.c:2769 msgid "empty declaration with storage class specifier does not redeclare tag" msgstr "" -#: c-decl.c:2737 +#: c-decl.c:2780 msgid "empty declaration with type qualifier does not redeclare tag" msgstr "" -#: c-decl.c:2758 c-decl.c:2765 +#: c-decl.c:2801 c-decl.c:2808 #, fuzzy msgid "useless type name in empty declaration" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: c-decl.c:2773 +#: c-decl.c:2816 #, fuzzy msgid "% in empty declaration" msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ" -#: c-decl.c:2779 +#: c-decl.c:2822 msgid "% in file-scope empty declaration" msgstr "" -#: c-decl.c:2785 +#: c-decl.c:2828 msgid "% in file-scope empty declaration" msgstr "" -#: c-decl.c:2791 +#: c-decl.c:2834 #, fuzzy msgid "useless storage class specifier in empty declaration" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: c-decl.c:2797 +#: c-decl.c:2840 msgid "useless %<__thread%> in empty declaration" msgstr "" -#: c-decl.c:2805 +#: c-decl.c:2848 #, fuzzy msgid "useless type qualifier in empty declaration" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: c-decl.c:2812 c-parse.y:781 c-parse.y:783 objc/objc-parse.y:818 +#: c-decl.c:2855 c-parse.y:781 c-parse.y:783 objc/objc-parse.y:818 #: objc/objc-parse.y:820 msgid "empty declaration" msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ" -#: c-decl.c:2878 +#: c-decl.c:2921 #, fuzzy msgid "ISO C90 does not support % or type qualifiers in parameter array declarators" msgstr "ISO C89 ½µ ż°´Ñ‚рыĵğі²°µ \"long long\"" -#: c-decl.c:2881 +#: c-decl.c:2924 #, fuzzy msgid "ISO C90 does not support %<[*]%> array declarators" msgstr "ISO C89 ½µ ż°´Ñ‚рыĵğі²°µ \"long long\"" -#: c-decl.c:2884 +#: c-decl.c:2927 #, fuzzy msgid "GCC does not yet properly implement %<[*]%> array declarators" msgstr "ISO C89 ½µ ż°´Ñ‚рыĵğі²°µ \"long long\"" -#: c-decl.c:2903 +#: c-decl.c:2946 msgid "static or type qualifiers in abstract declarator" msgstr "" -#: c-decl.c:2960 +#: c-decl.c:3005 #, fuzzy msgid "%J%qD is usually a function" msgstr "`%s' - ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: c-decl.c:2969 cp/decl.c:3718 cp/decl2.c:853 +#: c-decl.c:3014 cp/decl.c:3617 cp/decl2.c:850 #, fuzzy msgid "typedef %qD is initialized (use __typeof__ instead)" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: c-decl.c:2974 +#: c-decl.c:3019 msgid "function %qD is initialized like a variable" msgstr "" #. DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. -#: c-decl.c:2980 +#: c-decl.c:3025 #, fuzzy msgid "parameter %qD is initialized" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" @@ -983,800 +996,795 @@ msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" #. 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-decl.c:2999 c-decl.c:3019 c-typeck.c:4280 +#: c-decl.c:3044 c-decl.c:3059 c-typeck.c:4380 msgid "variable-sized object may not be initialized" msgstr "" -#: c-decl.c:3005 +#: c-decl.c:3050 #, fuzzy msgid "variable %qD has initializer but incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-decl.c:3010 -#, fuzzy -msgid "elements of array %qD have incomplete type" -msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" - -#: c-decl.c:3086 c-decl.c:5696 cp/decl.c:3758 cp/decl.c:9944 +#: c-decl.c:3126 c-decl.c:5741 cp/decl.c:3657 cp/decl.c:9941 #, fuzzy msgid "%Jinline function %qD given attribute noinline" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:3154 +#: c-decl.c:3194 msgid "%Jinitializer fails to determine size of %qD" msgstr "" -#: c-decl.c:3159 +#: c-decl.c:3199 #, fuzzy msgid "%Jarray size missing in %qD" msgstr "żÑ€°żÑƒÑˆÑ‡°½ ż°ĵµÑ€ ĵ°ÑÑ–²° ў `%D'" -#: c-decl.c:3175 +#: c-decl.c:3215 #, fuzzy msgid "%Jzero or negative size array %qD" msgstr "½Ñƒğя²Ñ‹ ż°ĵµÑ€ ĵ°ÑÑ–²° `%D'" -#: c-decl.c:3201 varasm.c:1541 +#: c-decl.c:3241 varasm.c:1556 msgid "%Jstorage size of %qD isn%'t known" msgstr "" -#: c-decl.c:3211 +#: c-decl.c:3251 #, fuzzy msgid "%Jstorage size of %qD isn%'t constant" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: c-decl.c:3266 +#: c-decl.c:3299 msgid "%Jignoring asm-specifier for non-static local variable %qD" msgstr "" -#: c-decl.c:3296 fortran/f95-lang.c:647 +#: c-decl.c:3329 fortran/f95-lang.c:646 msgid "cannot put object with volatile field into register" msgstr "" -#: c-decl.c:3430 +#: c-decl.c:3463 msgid "ISO C forbids forward parameter declarations" msgstr "" -#: c-decl.c:3614 +#: c-decl.c:3648 msgid "" msgstr "" -#: c-decl.c:3623 +#: c-decl.c:3657 #, fuzzy, c-format msgid "bit-field %qs width not an integer constant" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: c-decl.c:3631 +#: c-decl.c:3665 #, c-format msgid "negative width in bit-field %qs" msgstr "" -#: c-decl.c:3636 +#: c-decl.c:3670 #, c-format msgid "zero width for bit-field %qs" msgstr "" -#: c-decl.c:3646 +#: c-decl.c:3680 #, fuzzy, c-format msgid "bit-field %qs has invalid type" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: c-decl.c:3655 +#: c-decl.c:3689 #, c-format msgid "type of bit-field %qs is a GCC extension" msgstr "" -#: c-decl.c:3664 +#: c-decl.c:3698 #, c-format msgid "width of %qs exceeds its type" msgstr "" -#: c-decl.c:3677 +#: c-decl.c:3711 #, c-format msgid "%qs is narrower than values of its type" msgstr "" -#: c-decl.c:3802 +#: c-decl.c:3836 msgid "type defaults to % in declaration of %qs" msgstr "" -#: c-decl.c:3830 +#: c-decl.c:3864 #, fuzzy msgid "duplicate %" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"const\"" -#: c-decl.c:3832 +#: c-decl.c:3866 #, fuzzy msgid "duplicate %" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"restrict\"" -#: c-decl.c:3834 +#: c-decl.c:3868 #, fuzzy msgid "duplicate %" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"volatile\"" -#: c-decl.c:3853 +#: c-decl.c:3887 msgid "function definition declared %" msgstr "" -#: c-decl.c:3855 +#: c-decl.c:3889 #, fuzzy msgid "function definition declared %" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: c-decl.c:3857 +#: c-decl.c:3891 msgid "function definition declared %" msgstr "" -#: c-decl.c:3859 +#: c-decl.c:3893 #, fuzzy msgid "function definition declared %<__thread%>" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: c-decl.c:3875 +#: c-decl.c:3909 #, c-format msgid "storage class specified for structure field %qs" msgstr "" -#: c-decl.c:3879 cp/decl.c:7120 +#: c-decl.c:3913 cp/decl.c:7053 #, c-format msgid "storage class specified for parameter %qs" msgstr "" -#: c-decl.c:3882 cp/decl.c:7122 +#: c-decl.c:3916 cp/decl.c:7055 msgid "storage class specified for typename" msgstr "" -#: c-decl.c:3895 cp/decl.c:7139 +#: c-decl.c:3929 cp/decl.c:7072 msgid "%qs initialized and declared %" msgstr "" -#: c-decl.c:3897 cp/decl.c:7142 +#: c-decl.c:3931 cp/decl.c:7075 msgid "%qs has both % and initializer" msgstr "" -#: c-decl.c:3902 +#: c-decl.c:3936 msgid "file-scope declaration of %qs specifies %" msgstr "" -#: c-decl.c:3904 +#: c-decl.c:3938 msgid "file-scope declaration of %qs specifies %" msgstr "" -#: c-decl.c:3909 cp/decl.c:7146 +#: c-decl.c:3943 cp/decl.c:7079 msgid "nested function %qs declared %" msgstr "" -#: c-decl.c:3912 cp/decl.c:7156 +#: c-decl.c:3946 cp/decl.c:7089 msgid "function-scope %qs implicitly auto and declared %<__thread%>" 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:3953 c-decl.c:4142 +#: c-decl.c:3993 c-decl.c:4183 msgid "static or type qualifiers in non-parameter array declarator" msgstr "" -#: c-decl.c:3999 +#: c-decl.c:4039 #, c-format msgid "declaration of %qs as array of voids" msgstr "" -#: c-decl.c:4005 +#: c-decl.c:4045 #, c-format msgid "declaration of %qs as array of functions" msgstr "" -#: c-decl.c:4010 +#: c-decl.c:4050 #, fuzzy msgid "invalid use of structure with flexible array member" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: c-decl.c:4030 +#: c-decl.c:4070 #, fuzzy, c-format msgid "size of array %qs has non-integer type" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" °´ĵў½Ñ‹" -#: c-decl.c:4035 +#: c-decl.c:4075 #, fuzzy, c-format msgid "ISO C forbids zero-size array %qs" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: c-decl.c:4042 +#: c-decl.c:4082 #, fuzzy, c-format msgid "size of array %qs is negative" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" °´ĵў½Ñ‹" -#: c-decl.c:4056 +#: c-decl.c:4096 msgid "ISO C90 forbids array %qs whose size can%'t be evaluated" msgstr "" -#: c-decl.c:4060 +#: c-decl.c:4100 #, fuzzy, c-format msgid "ISO C90 forbids variable-size array %qs" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: c-decl.c:4093 c-decl.c:4261 cp/decl.c:7559 +#: c-decl.c:4139 c-decl.c:4303 cp/decl.c:7509 #, fuzzy, c-format msgid "size of array %qs is too large" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" ²µğьĵі ²ÑğіşÑ–" -#: c-decl.c:4106 +#: c-decl.c:4150 #, fuzzy msgid "ISO C90 does not support flexible array members" msgstr "ISO C89 ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ тыżÑ‹" -#: c-decl.c:4115 +#: c-decl.c:4160 msgid "array type has incomplete element type" msgstr "" -#: c-decl.c:4174 cp/decl.c:7248 +#: c-decl.c:4215 cp/decl.c:7179 #, fuzzy, c-format msgid "%qs declared as function returning a function" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:4179 cp/decl.c:7253 +#: c-decl.c:4220 cp/decl.c:7184 #, c-format msgid "%qs declared as function returning an array" msgstr "" -#: c-decl.c:4199 +#: c-decl.c:4240 #, fuzzy msgid "function definition has qualified void return type" msgstr "фу½şÑ†Ñ‹Ñ ½µ ²ÑÑ€Ñ‚°µ тыż string" -#: c-decl.c:4201 +#: c-decl.c:4242 msgid "type qualifiers ignored on function return type" msgstr "" -#: c-decl.c:4230 c-decl.c:4274 c-decl.c:4368 c-decl.c:4455 +#: c-decl.c:4271 c-decl.c:4316 c-decl.c:4410 c-decl.c:4501 msgid "ISO C forbids qualified function types" msgstr "" -#: c-decl.c:4282 +#: c-decl.c:4324 msgid "%Jtypedef %qD declared %" msgstr "" -#: c-decl.c:4312 +#: c-decl.c:4354 msgid "ISO C forbids const or volatile function types" msgstr "" -#: c-decl.c:4332 +#: c-decl.c:4374 #, fuzzy, c-format msgid "variable or field %qs declared void" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: c-decl.c:4361 +#: c-decl.c:4403 msgid "attributes in parameter array declarator ignored" msgstr "" -#: c-decl.c:4396 +#: c-decl.c:4438 #, fuzzy msgid "%Jparameter %qD declared %" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: c-decl.c:4409 +#: c-decl.c:4451 #, fuzzy, c-format msgid "field %qs declared as a function" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:4415 +#: c-decl.c:4457 #, fuzzy, c-format msgid "field %qs has incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-decl.c:4432 c-decl.c:4443 c-decl.c:4446 +#: c-decl.c:4471 c-decl.c:4483 c-decl.c:4487 #, fuzzy, c-format msgid "invalid storage class for function %qs" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: c-decl.c:4461 +#: c-decl.c:4507 msgid "% function returns non-void value" msgstr "" -#: c-decl.c:4489 +#: c-decl.c:4535 #, fuzzy msgid "cannot inline function %" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: c-decl.c:4546 +#: c-decl.c:4582 msgid "variable previously declared % redeclared %" msgstr "" -#: c-decl.c:4555 +#: c-decl.c:4591 msgid "%Jvariable %qD declared %" msgstr "" #. A mere warning is sure to result in improper semantics #. at runtime. Don't bother to allow this to compile. -#: c-decl.c:4586 cp/decl.c:5994 +#: c-decl.c:4622 cp/decl.c:5920 #, fuzzy msgid "thread-local storage not supported for this target" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: c-decl.c:4648 c-decl.c:5733 +#: c-decl.c:4684 c-decl.c:5778 msgid "function declaration isn%'t a prototype" msgstr "" -#: c-decl.c:4656 +#: c-decl.c:4692 msgid "parameter names (without types) in function declaration" msgstr "" -#: c-decl.c:4689 +#: c-decl.c:4725 #, fuzzy msgid "%Jparameter %u (%qD) has incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-decl.c:4692 +#: c-decl.c:4728 #, fuzzy msgid "%Jparameter %u has incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-decl.c:4701 +#: c-decl.c:4737 #, fuzzy msgid "%Jparameter %u (%qD) has void type" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: c-decl.c:4704 +#: c-decl.c:4740 #, fuzzy msgid "%Jparameter %u has void type" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: c-decl.c:4761 +#: c-decl.c:4797 msgid "% as only parameter may not be qualified" msgstr "" -#: c-decl.c:4765 c-decl.c:4800 +#: c-decl.c:4801 c-decl.c:4836 #, fuzzy msgid "% must be the only parameter" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: c-decl.c:4793 +#: c-decl.c:4829 msgid "%Jparameter %qD has just a forward declaration" msgstr "" #. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:4839 +#: c-decl.c:4875 msgid "%<%s %E%> declared inside parameter list" msgstr "" #. The %s will be one of 'struct', 'union', or 'enum'. -#: c-decl.c:4843 +#: c-decl.c:4879 #, c-format msgid "anonymous %s declared inside parameter list" msgstr "" -#: c-decl.c:4848 +#: c-decl.c:4884 msgid "its scope is only this definition or declaration, which is probably not what you want" msgstr "" -#: c-decl.c:4981 +#: c-decl.c:5017 #, fuzzy msgid "redefinition of %" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: c-decl.c:4983 +#: c-decl.c:5019 #, fuzzy msgid "redefinition of %" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: c-decl.c:4988 +#: c-decl.c:5024 #, fuzzy msgid "nested redefinition of %" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: c-decl.c:4991 +#: c-decl.c:5027 #, fuzzy msgid "nested redefinition of %" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: c-decl.c:5063 cp/decl.c:3517 +#: c-decl.c:5099 cp/decl.c:3414 msgid "declaration does not declare anything" msgstr "" -#: c-decl.c:5067 +#: c-decl.c:5103 #, fuzzy msgid "ISO C doesn%'t support unnamed structs/unions" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ цэğ°ğіş°²Ñ‹Ñ тыżÑ‹" -#: c-decl.c:5110 c-decl.c:5126 +#: c-decl.c:5146 c-decl.c:5162 #, fuzzy msgid "%Jduplicate member %qD" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"%s\"" -#: c-decl.c:5165 +#: c-decl.c:5201 msgid "union has no named members" msgstr "" -#: c-decl.c:5167 +#: c-decl.c:5203 msgid "union has no members" msgstr "" -#: c-decl.c:5172 +#: c-decl.c:5208 msgid "struct has no named members" msgstr "" -#: c-decl.c:5174 +#: c-decl.c:5210 msgid "struct has no members" msgstr "" -#: c-decl.c:5231 +#: c-decl.c:5267 msgid "%Jflexible array member in union" msgstr "" -#: c-decl.c:5236 +#: c-decl.c:5272 msgid "%Jflexible array member not at end of struct" msgstr "" -#: c-decl.c:5241 +#: c-decl.c:5277 msgid "%Jflexible array member in otherwise empty struct" msgstr "" -#: c-decl.c:5248 +#: c-decl.c:5284 #, fuzzy msgid "%Jinvalid use of structure with flexible array member" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: c-decl.c:5353 +#: c-decl.c:5392 msgid "union cannot be made transparent" msgstr "" -#: c-decl.c:5418 +#: c-decl.c:5463 #, fuzzy msgid "nested redefinition of %" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" #. This enum is a named one that has been declared already. -#: c-decl.c:5425 +#: c-decl.c:5470 #, fuzzy msgid "redeclaration of %" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" -#: c-decl.c:5488 +#: c-decl.c:5533 msgid "enumeration values exceed range of largest integer" msgstr "" -#: c-decl.c:5505 +#: c-decl.c:5550 msgid "specified mode too small for enumeral values" msgstr "" -#: c-decl.c:5604 +#: c-decl.c:5649 #, fuzzy, c-format msgid "enumerator value for %qE is not an integer constant" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" °´ĵў½Ñ‹" -#: c-decl.c:5621 +#: c-decl.c:5666 msgid "overflow in enumeration values" msgstr "" -#: c-decl.c:5626 +#: c-decl.c:5671 msgid "ISO C restricts enumerator values to range of %" msgstr "" -#: c-decl.c:5702 +#: c-decl.c:5747 msgid "return type is an incomplete type" msgstr "" -#: c-decl.c:5710 +#: c-decl.c:5755 #, fuzzy msgid "return type defaults to %" msgstr "²ÑÑ€Ñ‚°µĵы тыż \"%s\" ½µ \"int\"" -#: c-decl.c:5739 +#: c-decl.c:5784 #, fuzzy msgid "%Jno previous prototype for %qD" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° żÑ€°Ñ‚°Ñ‚Ñ‹ż° ´ğя \"%s\"" -#: c-decl.c:5745 +#: c-decl.c:5790 #, fuzzy msgid "%J%qD was used with no prototype before its definition" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:5752 +#: c-decl.c:5797 #, fuzzy msgid "%Jno previous declaration for %qD" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: c-decl.c:5758 +#: c-decl.c:5803 #, fuzzy msgid "%J%qD was used with no declaration before its definition" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: c-decl.c:5791 c-decl.c:6280 +#: c-decl.c:5836 c-decl.c:6328 #, fuzzy msgid "%Jreturn type of %qD is not %" msgstr "²ÑÑ€Ñ‚°µĵы тыż \"%s\" ½µ \"int\"" -#: c-decl.c:5806 +#: c-decl.c:5851 #, fuzzy msgid "%Jfirst argument of %qD should be %" msgstr "żµÑ€ÑˆÑ‹ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"int\"" -#: c-decl.c:5815 +#: c-decl.c:5860 #, fuzzy msgid "%Jsecond argument of %qD should be %" msgstr "´Ñ€Ñƒ³Ñ–ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"char **\"" -#: c-decl.c:5824 +#: c-decl.c:5869 #, fuzzy msgid "%Jthird argument of %qD should probably be %" msgstr "´Ñ€Ñƒ³Ñ–ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"char **\"" -#: c-decl.c:5834 +#: c-decl.c:5879 msgid "%J%qD takes only zero or two arguments" msgstr "" -#: c-decl.c:5837 +#: c-decl.c:5882 #, fuzzy msgid "%J%qD is normally a non-static function" msgstr "`%s' - ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: c-decl.c:5883 +#: c-decl.c:5928 msgid "%Jold-style parameter declarations in prototyped function definition" msgstr "" -#: c-decl.c:5896 +#: c-decl.c:5941 msgid "%Jtraditional C rejects ISO C style function definitions" msgstr "" -#: c-decl.c:5908 +#: c-decl.c:5953 #, fuzzy msgid "%Jparameter name omitted" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: c-decl.c:5948 +#: c-decl.c:5993 msgid "%Jold-style function definition" msgstr "" -#: c-decl.c:5956 +#: c-decl.c:6001 msgid "%Jparameter name missing from parameter list" msgstr "" -#: c-decl.c:5967 +#: c-decl.c:6012 msgid "%J%qD declared as a non-parameter" msgstr "" -#: c-decl.c:5972 +#: c-decl.c:6017 #, fuzzy msgid "%Jmultiple parameters named %qD" msgstr "½µ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°µĵы ż°Ñ€°ĵµÑ‚Ñ€ \"%s\"" -#: c-decl.c:5980 +#: c-decl.c:6025 #, fuzzy msgid "%Jparameter %qD declared with void type" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: c-decl.c:5995 c-decl.c:5997 +#: c-decl.c:6040 c-decl.c:6042 msgid "%Jtype of %qD defaults to %" msgstr "" -#: c-decl.c:6016 +#: c-decl.c:6061 #, fuzzy msgid "%Jparameter %qD has incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-decl.c:6022 +#: c-decl.c:6067 msgid "%Jdeclaration for parameter %qD but no such parameter" msgstr "" -#: c-decl.c:6072 +#: c-decl.c:6117 #, fuzzy msgid "number of arguments doesn%'t match prototype" msgstr "ż°ĵÑ‹ğş²°Ñ şğьş°ÑÑŒÑ†ÑŒ °Ñ€³Ñƒĵµ½Ñ‚°Ñž, ·°´°´·µ½Ñ‹Ñ… ´ğя °Ñ‚рыħут° `%s'" -#: c-decl.c:6073 c-decl.c:6103 c-decl.c:6110 +#: c-decl.c:6118 c-decl.c:6148 c-decl.c:6155 #, fuzzy msgid "%Hprototype declaration" msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ" -#: c-decl.c:6101 +#: c-decl.c:6146 msgid "promoted argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:6109 +#: c-decl.c:6154 msgid "argument %qD doesn%'t match prototype" msgstr "" -#: c-decl.c:6307 cp/decl.c:10698 +#: c-decl.c:6361 cp/decl.c:10702 msgid "no return statement in function returning non-void" msgstr "" -#: c-decl.c:6314 +#: c-decl.c:6368 msgid "this function may return with or without a value" 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:6403 +#: c-decl.c:6461 msgid "% loop initial declaration used outside C99 mode" msgstr "" -#: c-decl.c:6432 +#: c-decl.c:6490 msgid "%Jdeclaration of static variable %qD in % loop initial declaration" msgstr "" -#: c-decl.c:6435 +#: c-decl.c:6493 msgid "%Jdeclaration of % variable %qD in % loop initial declaration" msgstr "" -#: c-decl.c:6440 +#: c-decl.c:6498 msgid "% declared in % loop initial declaration" msgstr "" -#: c-decl.c:6444 +#: c-decl.c:6502 msgid "% declared in % loop initial declaration" msgstr "" -#: c-decl.c:6448 +#: c-decl.c:6506 msgid "% declared in % loop initial declaration" msgstr "" -#: c-decl.c:6452 +#: c-decl.c:6510 msgid "%Jdeclaration of non-variable %qD in % loop initial declaration" msgstr "" -#: c-decl.c:6741 c-decl.c:6890 c-decl.c:7101 cp/decl.c:6828 +#: c-decl.c:6799 c-decl.c:6948 c-decl.c:7159 cp/decl.c:6747 #, fuzzy, c-format msgid "duplicate %qs" msgstr "ż°ÑžÑ‚°Ñ€Ñ½ÑŒ½µ `%s'" -#: c-decl.c:6762 c-decl.c:6899 c-decl.c:7002 +#: c-decl.c:6820 c-decl.c:6957 c-decl.c:7060 msgid "two or more data types in declaration specifiers" msgstr "" -#: c-decl.c:6774 cp/decl.c:6804 +#: c-decl.c:6832 cp/decl.c:6723 #, fuzzy msgid "% is too long for GCC" msgstr "`long long long' - ²µğьĵі ´Ñž³° ´ğя GCC" -#: c-decl.c:6781 c-decl.c:6973 +#: c-decl.c:6839 c-decl.c:7031 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6787 +#: c-decl.c:6845 #, fuzzy msgid "ISO C90 does not support %" msgstr "ISO C89 ½µ ż°´Ñ‚рыĵğі²°µ `long long'" -#: c-decl.c:6792 c-decl.c:6812 +#: c-decl.c:6850 c-decl.c:6870 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6795 c-decl.c:6906 +#: c-decl.c:6853 c-decl.c:6964 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6798 c-decl.c:6925 +#: c-decl.c:6856 c-decl.c:6983 msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:6801 c-decl.c:6944 +#: c-decl.c:6859 c-decl.c:7002 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6804 c-decl.c:6957 +#: c-decl.c:6862 c-decl.c:7015 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6815 c-decl.c:6909 +#: c-decl.c:6873 c-decl.c:6967 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6818 c-decl.c:6928 +#: c-decl.c:6876 c-decl.c:6986 msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:6821 c-decl.c:6947 +#: c-decl.c:6879 c-decl.c:7005 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6824 c-decl.c:6960 +#: c-decl.c:6882 c-decl.c:7018 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6827 c-decl.c:6976 +#: c-decl.c:6885 c-decl.c:7034 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6835 c-decl.c:6855 +#: c-decl.c:6893 c-decl.c:6913 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6838 c-decl.c:6912 +#: c-decl.c:6896 c-decl.c:6970 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6841 c-decl.c:6931 +#: c-decl.c:6899 c-decl.c:6989 msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:6844 c-decl.c:6963 +#: c-decl.c:6902 c-decl.c:7021 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6847 c-decl.c:6979 +#: c-decl.c:6905 c-decl.c:7037 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6858 c-decl.c:6915 +#: c-decl.c:6916 c-decl.c:6973 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6861 c-decl.c:6934 +#: c-decl.c:6919 c-decl.c:6992 msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:6864 c-decl.c:6966 +#: c-decl.c:6922 c-decl.c:7024 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6867 c-decl.c:6982 +#: c-decl.c:6925 c-decl.c:7040 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6875 +#: c-decl.c:6933 #, fuzzy msgid "ISO C90 does not support complex types" msgstr "ISO C89 ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ тыżÑ‹" -#: c-decl.c:6877 c-decl.c:6918 +#: c-decl.c:6935 c-decl.c:6976 msgid "both % and % in declaration specifiers" msgstr "" -#: c-decl.c:6880 c-decl.c:6937 +#: c-decl.c:6938 c-decl.c:6995 msgid "both % and %<_Bool%> in declaration specifiers" msgstr "" -#: c-decl.c:7019 +#: c-decl.c:7077 #, c-format msgid "%qs fails to be a typedef or built in type" msgstr "" -#: c-decl.c:7051 +#: c-decl.c:7109 #, fuzzy, c-format msgid "%qs is not at beginning of declaration" msgstr "\"%s\" - ³ÑÑ‚° ½µ ż°Ñ‡°Ñ‚°ş ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ–" -#: c-decl.c:7066 +#: c-decl.c:7124 msgid "%<__thread%> used with %" msgstr "" -#: c-decl.c:7068 +#: c-decl.c:7126 msgid "%<__thread%> used with %" msgstr "" -#: c-decl.c:7070 +#: c-decl.c:7128 msgid "%<__thread%> used with %" msgstr "" -#: c-decl.c:7081 cp/parser.c:7114 +#: c-decl.c:7139 cp/parser.c:7221 msgid "%<__thread%> before %" msgstr "" -#: c-decl.c:7090 cp/parser.c:7104 +#: c-decl.c:7148 cp/parser.c:7211 msgid "%<__thread%> before %" msgstr "" -#: c-decl.c:7106 +#: c-decl.c:7164 msgid "multiple storage classes in declaration specifiers" msgstr "" -#: c-decl.c:7113 +#: c-decl.c:7171 msgid "%<__thread%> used with %qs" msgstr "" -#: c-decl.c:7167 +#: c-decl.c:7225 #, fuzzy msgid "ISO C does not support plain % meaning %" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ żÑ€ÑÑ‚Ñ‹ \"complex\" у ·½°Ñ‡Ñ½½Ñ– \"double complex\"" -#: c-decl.c:7212 c-decl.c:7238 +#: c-decl.c:7270 c-decl.c:7296 msgid "ISO C does not support complex integer types" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ цэğ°ğіş°²Ñ‹Ñ тыżÑ‹" -#: c-decl.c:7313 toplev.c:844 +#: c-decl.c:7371 toplev.c:848 #, fuzzy msgid "%J%qF used but never defined" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°µÑ†Ñ†°, °ğµ ½Ñ ²Ñ‹·½°Ñ‡°½°" @@ -2302,7 +2310,7 @@ msgstr "" msgid "statement with no effect" msgstr "" -#: c-gimplify.c:315 c-typeck.c:6728 cp/parser.c:6434 +#: c-gimplify.c:315 c-typeck.c:6878 cp/parser.c:6542 msgid "break statement not within loop or switch" msgstr "" @@ -2325,17 +2333,17 @@ msgstr "" msgid "ignoring nonexistent directory \"%s\"\n" msgstr "" -#: c-incpath.c:283 +#: c-incpath.c:286 #, c-format msgid "#include \"...\" search starts here:\n" msgstr "" -#: c-incpath.c:287 +#: c-incpath.c:290 #, c-format msgid "#include <...> search starts here:\n" msgstr "" -#: c-incpath.c:292 +#: c-incpath.c:295 #, c-format msgid "End of search list.\n" msgstr "" @@ -2393,35 +2401,27 @@ msgstr "" msgid "traditional C rejects string constant concatenation" msgstr "" -#: c-objc-common.c:81 +#: c-objc-common.c:80 msgid "%Jfunction %qF can never be inlined because it is suppressed using -fno-inline" msgstr "" -#: c-objc-common.c:91 +#: c-objc-common.c:90 msgid "%Jfunction %qF can never be inlined because it might not be bound within this unit of translation" msgstr "" -#: c-objc-common.c:99 +#: c-objc-common.c:98 msgid "%Jfunction %qF can never be inlined because it uses attributes conflicting with inlining" msgstr "" -#: c-objc-common.c:114 -msgid "%Jfunction %qF can never be inlined because it has pending sizes" -msgstr "" - -#: c-objc-common.c:127 -msgid "%Jnested function %qF can never be inlined because it has possibly saved pending sizes" -msgstr "" - -#: c-objc-common.c:263 +#: c-objc-common.c:244 msgid "used array that cannot be converted to pointer where scalar is required" msgstr "" -#: c-objc-common.c:267 +#: c-objc-common.c:248 msgid "used struct type value where scalar is required" msgstr "" -#: c-objc-common.c:271 +#: c-objc-common.c:252 msgid "used union type value where scalar is required" msgstr "" @@ -2468,81 +2468,81 @@ msgstr "" msgid "switch %qs is no longer supported" msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°." -#: c-opts.c:655 +#: c-opts.c:653 msgid "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)" msgstr "" -#: c-opts.c:841 +#: c-opts.c:839 #, fuzzy msgid "output filename specified twice" msgstr "½µ ·°´°´·µ½Ñ‹ ў²°Ñ…´·ÑÑ‡Ñ‹Ñ ф°ığы" -#: c-opts.c:971 +#: c-opts.c:969 msgid "-Wformat-y2k ignored without -Wformat" msgstr "" -#: c-opts.c:973 +#: c-opts.c:971 msgid "-Wformat-extra-args ignored without -Wformat" msgstr "" -#: c-opts.c:975 +#: c-opts.c:973 msgid "-Wformat-zero-length ignored without -Wformat" msgstr "" -#: c-opts.c:977 +#: c-opts.c:975 msgid "-Wformat-nonliteral ignored without -Wformat" msgstr "" -#: c-opts.c:979 +#: c-opts.c:977 msgid "-Wformat-security ignored without -Wformat" msgstr "" -#: c-opts.c:981 +#: c-opts.c:979 msgid "-Wmissing-format-attribute ignored without -Wformat" msgstr "" -#: c-opts.c:995 +#: c-opts.c:998 #, fuzzy, c-format msgid "opening output file %s: %m" msgstr "½µĵ°³Ñ‡Ñ‹ĵ° °´Ñ‡Ñ‹½Ñ–ць ф°ığ у²´Ñƒ `%s'" -#: c-opts.c:1000 +#: c-opts.c:1003 #, c-format msgid "too many filenames given. Type %s --help for usage" msgstr "" -#: c-opts.c:1083 +#: c-opts.c:1086 msgid "YYDEBUG was not defined at build time, -dy ignored" msgstr "" -#: c-opts.c:1124 +#: c-opts.c:1127 #, c-format msgid "opening dependency file %s: %m" msgstr "" -#: c-opts.c:1134 +#: c-opts.c:1137 #, c-format msgid "closing dependency file %s: %m" msgstr "" -#: c-opts.c:1137 +#: c-opts.c:1140 #, fuzzy, c-format msgid "when writing output to %s: %m" msgstr "ż°ĵÑ‹ğş° ·°żÑ–су ў %s" -#: c-opts.c:1216 +#: c-opts.c:1220 msgid "to generate dependencies you must specify either -M or -MM" msgstr "" -#: c-opts.c:1281 +#: c-opts.c:1287 msgid "" msgstr "" -#: c-opts.c:1296 +#: c-opts.c:1302 msgid "" msgstr "" -#: c-opts.c:1379 +#: c-opts.c:1385 msgid "too late for # directive to set debug directory" msgstr "" @@ -2554,16 +2554,16 @@ msgstr "" #. between diagnostics with "syntax error" in them, and diagnostics #. with "parse error" in them. It's okay to give them both the same #. translation. -#: c-parse.y:54 c-parse.c:5313 c-parse.y:2927 gengtype-yacc.c:1559 -#: java/parse-scan.c:3063 java/parse-scan.y:1373 java/parse.c:6166 -#: java/parse.y:16413 objc/objc-parse.y:53 objc/objc-parse.c:6384 -#: objc/objc-parse.y:3517 +#: c-parse.y:54 c-parse.c:5385 c-parse.y:2955 gengtype-yacc.c:1606 +#: java/parse-scan.c:3107 java/parse-scan.y:1370 java/parse.c:6210 +#: java/parse.y:16419 objc/objc-parse.y:53 objc/objc-parse.c:6464 +#: objc/objc-parse.y:3545 msgid "syntax error" msgstr "сі½Ñ‚°şÑÑ–ч½°Ñ ż°ĵыğş°" -#: c-parse.c:2153 c-parse.y:2931 gengtype-yacc.c:555 java/parse-scan.c:1932 -#: java/parse-scan.y:1377 java/parse.c:2931 java/parse.y:16417 -#: objc/objc-parse.c:2666 objc/objc-parse.y:3521 +#: c-parse.c:2157 c-parse.y:2959 gengtype-yacc.c:560 java/parse-scan.c:1934 +#: java/parse-scan.y:1374 java/parse.c:2933 java/parse.y:16423 +#: objc/objc-parse.c:2678 objc/objc-parse.y:3549 #, fuzzy msgid "syntax error: cannot back up" msgstr "сі½Ñ‚°şÑÑ–ч½°Ñ ż°ĵыğş°" @@ -2614,104 +2614,108 @@ msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½Ñ msgid "% applied to a bit-field" msgstr "" -#: c-parse.y:1358 objc/objc-parse.y:1407 +#: c-parse.y:1372 objc/objc-parse.y:1421 msgid "ISO C forbids empty initializer braces" msgstr "" -#: c-parse.y:1372 objc/objc-parse.y:1421 +#: c-parse.y:1386 objc/objc-parse.y:1435 msgid "ISO C90 forbids specifying subobject to initialize" msgstr "" -#: c-parse.y:1375 objc/objc-parse.y:1424 +#: c-parse.y:1389 objc/objc-parse.y:1438 msgid "obsolete use of designated initializer without %<=%>" msgstr "" -#: c-parse.y:1379 objc/objc-parse.y:1428 +#: c-parse.y:1393 objc/objc-parse.y:1442 msgid "obsolete use of designated initializer with %<:%>" msgstr "" -#: c-parse.y:1410 objc/objc-parse.y:1459 +#: c-parse.y:1424 objc/objc-parse.y:1473 msgid "ISO C forbids specifying range of elements to initialize" msgstr "" -#: c-parse.y:1418 c-parse.y:1448 objc/objc-parse.y:1467 objc/objc-parse.y:1497 +#: c-parse.y:1432 c-parse.y:1462 objc/objc-parse.y:1481 objc/objc-parse.y:1511 msgid "ISO C forbids nested functions" msgstr "" -#: c-parse.y:1623 objc/objc-parse.y:1672 +#: c-parse.y:1637 objc/objc-parse.y:1686 msgid "ISO C forbids forward references to % types" msgstr "" -#: c-parse.y:1635 cp/parser.c:9850 objc/objc-parse.y:1684 +#: c-parse.y:1649 cp/parser.c:9985 objc/objc-parse.y:1698 msgid "comma at end of enumerator list" msgstr "" -#: c-parse.y:1655 objc/objc-parse.y:1704 +#: c-parse.y:1669 objc/objc-parse.y:1718 msgid "no semicolon at end of struct or union" msgstr "" -#: c-parse.y:1664 objc/objc-parse.y:1713 objc/objc-parse.y:2699 +#: c-parse.y:1678 objc/objc-parse.y:1727 objc/objc-parse.y:2727 msgid "extra semicolon in struct or union specified" msgstr "" -#: c-parse.y:1684 objc/objc-parse.y:1736 +#: c-parse.y:1698 objc/objc-parse.y:1750 msgid "ISO C forbids member declarations with no members" msgstr "" -#: c-parse.y:1850 objc/objc-parse.y:1902 +#: c-parse.y:1864 objc/objc-parse.y:1916 msgid "label at end of compound statement" msgstr "" -#: c-parse.y:1869 objc/objc-parse.y:1921 +#: c-parse.y:1883 objc/objc-parse.y:1935 #, fuzzy msgid "ISO C90 forbids mixed declarations and code" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: c-parse.y:1909 objc/objc-parse.y:1961 +#: c-parse.y:1923 objc/objc-parse.y:1975 msgid "ISO C forbids label declarations" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: c-parse.y:1953 objc/objc-parse.y:2005 +#: c-parse.y:1967 objc/objc-parse.y:2019 msgid "braced-group within expression allowed only inside a function" msgstr "" -#: c-parse.y:2249 objc/objc-parse.y:2344 +#: c-parse.y:2263 objc/objc-parse.y:2358 #, c-format msgid "%E qualifier ignored on asm" msgstr "" -#: c-parse.y:2343 objc/objc-parse.y:2438 +#: c-parse.y:2309 objc/objc-parse.y:2404 +msgid "wide string literal in %" +msgstr "" + +#: c-parse.y:2371 objc/objc-parse.y:2466 msgid "ISO C requires a named argument before %<...%>" msgstr "" -#: c-parse.c:5309 c-parse.y:2929 gengtype-yacc.c:1555 java/parse-scan.c:3059 -#: java/parse-scan.y:1375 java/parse.c:6162 java/parse.y:16415 -#: objc/objc-parse.c:6380 objc/objc-parse.y:3519 +#: c-parse.c:5381 c-parse.y:2957 gengtype-yacc.c:1602 java/parse-scan.c:3103 +#: java/parse-scan.y:1372 java/parse.c:6206 java/parse.y:16421 +#: objc/objc-parse.c:6460 objc/objc-parse.y:3547 msgid "syntax error; also virtual memory exhausted" msgstr "" -#: c-parse.c:5427 gengtype-yacc.c:1673 java/parse-scan.c:3177 -#: java/parse.c:6280 objc/objc-parse.c:6498 +#: c-parse.c:5506 gengtype-yacc.c:1727 java/parse-scan.c:3228 +#: java/parse.c:6331 objc/objc-parse.c:6585 msgid "parser stack overflow" msgstr "" -#: c-parse.y:2849 objc/objc-parse.y:3439 +#: c-parse.y:2877 objc/objc-parse.y:3467 #, fuzzy, c-format msgid "syntax error at %qs token" msgstr "сі½Ñ‚°şÑÑ–ч½°Ñ ż°ĵыğş°" -#: c-parse.y:2928 java/parse-scan.y:1374 java/parse.y:16414 -#: objc/objc-parse.y:3518 +#: c-parse.y:2956 java/parse-scan.y:1371 java/parse.y:16420 +#: objc/objc-parse.y:3546 msgid "parse error" msgstr "³Ñ€°ĵ°Ñ‚ыч½°Ñ ż°ĵыğş°" -#: c-parse.y:2930 java/parse-scan.y:1376 java/parse.y:16416 -#: objc/objc-parse.y:3520 +#: c-parse.y:2958 java/parse-scan.y:1373 java/parse.y:16422 +#: objc/objc-parse.y:3548 msgid "parse error; also virtual memory exhausted" msgstr "" -#: c-parse.y:2932 java/parse-scan.y:1378 java/parse.y:16418 -#: objc/objc-parse.y:3522 +#: c-parse.y:2960 java/parse-scan.y:1375 java/parse.y:16424 +#: objc/objc-parse.y:3550 #, fuzzy msgid "parse error: cannot back up" msgstr "сі½Ñ‚°şÑÑ–ч½°Ñ ż°ĵыğş°" @@ -2829,179 +2833,179 @@ msgstr "" msgid "%Japplying #pragma weak %qD after first use results in unspecified behavior" msgstr "" -#: c-pragma.c:307 c-pragma.c:312 +#: c-pragma.c:334 c-pragma.c:339 msgid "malformed #pragma weak, ignored" msgstr "" -#: c-pragma.c:316 +#: c-pragma.c:343 msgid "junk at end of #pragma weak" msgstr "" -#: c-pragma.c:379 c-pragma.c:381 +#: c-pragma.c:411 c-pragma.c:413 msgid "malformed #pragma redefine_extname, ignored" msgstr "" -#: c-pragma.c:384 +#: c-pragma.c:416 msgid "junk at end of #pragma redefine_extname" msgstr "" -#: c-pragma.c:389 +#: c-pragma.c:421 #, fuzzy msgid "#pragma redefine_extname not supported on this target" msgstr "__buitin_saveregs ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†° ³ÑÑ‚°ı ĵэт°ı" -#: c-pragma.c:406 c-pragma.c:492 +#: c-pragma.c:438 c-pragma.c:524 #, fuzzy msgid "#pragma redefine_extname ignored due to conflict with previous rename" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: c-pragma.c:429 +#: c-pragma.c:461 msgid "#pragma redefine_extname ignored due to conflict with previous #pragma redefine_extname" msgstr "" -#: c-pragma.c:448 +#: c-pragma.c:480 msgid "malformed #pragma extern_prefix, ignored" msgstr "" -#: c-pragma.c:451 +#: c-pragma.c:483 msgid "junk at end of #pragma extern_prefix" msgstr "" -#: c-pragma.c:457 +#: c-pragma.c:489 #, fuzzy msgid "#pragma extern_prefix not supported on this target" msgstr "__buitin_saveregs ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†° ³ÑÑ‚°ı ĵэт°ı" -#: c-pragma.c:483 +#: c-pragma.c:515 #, fuzzy msgid "asm declaration ignored due to conflict with previous rename" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: c-pragma.c:514 +#: c-pragma.c:546 msgid "#pragma redefine_extname ignored due to conflict with __asm__ declaration" msgstr "" -#: c-pragma.c:574 +#: c-pragma.c:606 msgid "#pragma GCC visibility must be followed by push or pop" msgstr "" -#: c-pragma.c:581 +#: c-pragma.c:613 msgid "No matching push for %<#pragma GCC visibility pop%>" msgstr "" -#: c-pragma.c:592 c-pragma.c:621 +#: c-pragma.c:624 c-pragma.c:653 msgid "missing %<(%> after %<#pragma GCC visibility push%> - ignored" msgstr "" -#: c-pragma.c:596 +#: c-pragma.c:628 msgid "malformed #pragma GCC visibility push" msgstr "" -#: c-pragma.c:600 +#: c-pragma.c:632 msgid "No more than sixteen #pragma GCC visibility pushes allowed at once" msgstr "" -#: c-pragma.c:616 +#: c-pragma.c:648 msgid "#pragma GCC visibility push() must specify default, internal, hidden or protected" msgstr "" -#: c-pragma.c:625 +#: c-pragma.c:657 msgid "junk at end of %<#pragma GCC visibility%>" msgstr "" -#: c-typeck.c:138 +#: c-typeck.c:139 #, fuzzy, c-format msgid "%qs has an incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-typeck.c:160 cp/call.c:2671 +#: c-typeck.c:161 cp/call.c:2679 msgid "invalid use of void expression" msgstr "" -#: c-typeck.c:168 +#: c-typeck.c:169 msgid "invalid use of flexible array member" msgstr "" -#: c-typeck.c:174 +#: c-typeck.c:175 msgid "invalid use of array with unspecified bounds" msgstr "" -#: c-typeck.c:182 +#: c-typeck.c:183 #, fuzzy msgid "invalid use of undefined type %<%s %s%>" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" #. If this type has a typedef-name, the TYPE_NAME is a TYPE_DECL. -#: c-typeck.c:186 +#: c-typeck.c:187 #, fuzzy, c-format msgid "invalid use of incomplete typedef %qs" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: c-typeck.c:373 c-typeck.c:387 +#: c-typeck.c:394 c-typeck.c:419 msgid "function types not truly compatible in ISO C" msgstr "" -#: c-typeck.c:745 +#: c-typeck.c:803 msgid "types are not quite compatible" msgstr "" -#: c-typeck.c:987 +#: c-typeck.c:1045 msgid "function return types not compatible due to %" msgstr "" -#: c-typeck.c:1128 c-typeck.c:2362 +#: c-typeck.c:1204 c-typeck.c:2445 msgid "arithmetic on pointer to an incomplete type" msgstr "" -#: c-typeck.c:1483 +#: c-typeck.c:1559 msgid "%qT has no member named %qs" msgstr "" -#: c-typeck.c:1519 +#: c-typeck.c:1595 #, c-format msgid "request for member %qs in something not a structure or union" msgstr "" -#: c-typeck.c:1548 +#: c-typeck.c:1629 msgid "dereferencing pointer to incomplete type" msgstr "" -#: c-typeck.c:1552 +#: c-typeck.c:1633 msgid "dereferencing % pointer" msgstr "" -#: c-typeck.c:1569 cp/typeck.c:2150 +#: c-typeck.c:1650 cp/typeck.c:2109 #, fuzzy, c-format msgid "invalid type argument of %qs" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: c-typeck.c:1597 cp/typeck.c:2301 +#: c-typeck.c:1678 cp/typeck.c:2260 msgid "subscripted value is neither array nor pointer" msgstr "" -#: c-typeck.c:1608 cp/typeck.c:2220 cp/typeck.c:2306 +#: c-typeck.c:1689 cp/typeck.c:2179 cp/typeck.c:2265 msgid "array subscript is not an integer" msgstr "" -#: c-typeck.c:1614 +#: c-typeck.c:1695 msgid "subscripted value is pointer to function" msgstr "" -#: c-typeck.c:1627 cp/typeck.c:2216 +#: c-typeck.c:1708 cp/typeck.c:2175 msgid "array subscript has type %" msgstr "" -#: c-typeck.c:1667 +#: c-typeck.c:1748 #, fuzzy msgid "ISO C forbids subscripting % array" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: c-typeck.c:1669 +#: c-typeck.c:1750 #, fuzzy msgid "ISO C90 forbids subscripting non-lvalue array" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: c-typeck.c:1904 +#: c-typeck.c:1987 #, fuzzy, c-format msgid "called object %qE is not a function" msgstr "`%D' - ³ÑÑ‚° ½Ñ фу½şÑ†Ñ‹Ñ," @@ -3009,774 +3013,770 @@ msgstr "`%D' - ³ÑÑ‚° ½Ñ фу½şÑ†Ñ‹Ñ," #. 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:1936 +#: c-typeck.c:2019 msgid "function called through a non-compatible type" msgstr "" -#: c-typeck.c:1983 c-typeck.c:4227 c-typeck.c:4229 c-typeck.c:4237 -#: c-typeck.c:4262 c-typeck.c:5649 +#: c-typeck.c:2066 c-typeck.c:4327 c-typeck.c:4329 c-typeck.c:4337 +#: c-typeck.c:4362 c-typeck.c:5744 msgid "initializer element is not constant" msgstr "" -#: c-typeck.c:2044 +#: c-typeck.c:2127 #, fuzzy, c-format msgid "too many arguments to function %qE" msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: c-typeck.c:2071 +#: c-typeck.c:2154 #, c-format msgid "type of formal parameter %d is incomplete" msgstr "" -#: c-typeck.c:2084 +#: c-typeck.c:2167 #, c-format msgid "passing argument %d of %qE as integer rather than floating due to prototype" msgstr "" -#: c-typeck.c:2089 +#: c-typeck.c:2172 #, c-format msgid "passing argument %d of %qE as integer rather than complex due to prototype" msgstr "" -#: c-typeck.c:2094 +#: c-typeck.c:2177 #, c-format msgid "passing argument %d of %qE as complex rather than floating due to prototype" msgstr "" -#: c-typeck.c:2099 +#: c-typeck.c:2182 #, c-format msgid "passing argument %d of %qE as floating rather than integer due to prototype" msgstr "" -#: c-typeck.c:2104 +#: c-typeck.c:2187 #, c-format msgid "passing argument %d of %qE as complex rather than integer due to prototype" msgstr "" -#: c-typeck.c:2109 +#: c-typeck.c:2192 #, c-format msgid "passing argument %d of %qE as floating rather than complex due to prototype" msgstr "" -#: c-typeck.c:2121 +#: c-typeck.c:2204 msgid "passing argument %d of %qE as % rather than % due to prototype" msgstr "" -#: c-typeck.c:2141 +#: c-typeck.c:2224 #, c-format msgid "passing argument %d of %qE with different width due to prototype" msgstr "" -#: c-typeck.c:2168 +#: c-typeck.c:2251 #, c-format msgid "passing argument %d of %qE as unsigned due to prototype" msgstr "" -#: c-typeck.c:2171 +#: c-typeck.c:2254 #, c-format msgid "passing argument %d of %qE as signed due to prototype" msgstr "" -#: c-typeck.c:2202 +#: c-typeck.c:2285 #, fuzzy, c-format msgid "too few arguments to function %qE" msgstr "½µ х°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: c-typeck.c:2238 +#: c-typeck.c:2321 msgid "suggest parentheses around + or - inside shift" msgstr "" -#: c-typeck.c:2245 +#: c-typeck.c:2328 msgid "suggest parentheses around && within ||" msgstr "" -#: c-typeck.c:2254 +#: c-typeck.c:2337 msgid "suggest parentheses around arithmetic in operand of |" msgstr "" -#: c-typeck.c:2258 +#: c-typeck.c:2341 msgid "suggest parentheses around comparison in operand of |" msgstr "" -#: c-typeck.c:2267 +#: c-typeck.c:2350 msgid "suggest parentheses around arithmetic in operand of ^" msgstr "" -#: c-typeck.c:2271 +#: c-typeck.c:2354 msgid "suggest parentheses around comparison in operand of ^" msgstr "" -#: c-typeck.c:2278 +#: c-typeck.c:2361 msgid "suggest parentheses around + or - in operand of &" msgstr "" -#: c-typeck.c:2282 +#: c-typeck.c:2365 msgid "suggest parentheses around comparison in operand of &" msgstr "" -#: c-typeck.c:2288 +#: c-typeck.c:2371 msgid "comparisons like X<=Y<=Z do not have their mathematical meaning" msgstr "" -#: c-typeck.c:2314 +#: c-typeck.c:2397 msgid "pointer of type % used in subtraction" msgstr "" -#: c-typeck.c:2316 +#: c-typeck.c:2399 msgid "pointer to a function used in subtraction" msgstr "" -#: c-typeck.c:2405 +#: c-typeck.c:2488 msgid "wrong type argument to unary plus" msgstr "" -#: c-typeck.c:2418 +#: c-typeck.c:2501 msgid "wrong type argument to unary minus" msgstr "" -#: c-typeck.c:2435 +#: c-typeck.c:2518 #, fuzzy msgid "ISO C does not support %<~%> for complex conjugation" msgstr "ISO C89 ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ тыżÑ‹" -#: c-typeck.c:2441 +#: c-typeck.c:2524 msgid "wrong type argument to bit-complement" msgstr "" -#: c-typeck.c:2449 +#: c-typeck.c:2532 msgid "wrong type argument to abs" msgstr "" -#: c-typeck.c:2461 +#: c-typeck.c:2544 msgid "wrong type argument to conjugation" msgstr "" -#: c-typeck.c:2475 +#: c-typeck.c:2558 msgid "wrong type argument to unary exclamation mark" msgstr "" -#: c-typeck.c:2512 +#: c-typeck.c:2595 #, fuzzy msgid "ISO C does not support %<++%> and %<--%> on complex types" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ \"++\" і \"--\" ´ğя тыżÑƒ complex" -#: c-typeck.c:2528 c-typeck.c:2560 +#: c-typeck.c:2611 c-typeck.c:2643 #, fuzzy msgid "wrong type argument to increment" msgstr "½µ х°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: c-typeck.c:2530 c-typeck.c:2562 +#: c-typeck.c:2613 c-typeck.c:2645 msgid "wrong type argument to decrement" msgstr "" -#: c-typeck.c:2551 +#: c-typeck.c:2634 msgid "increment of pointer to unknown structure" msgstr "" -#: c-typeck.c:2553 +#: c-typeck.c:2636 msgid "decrement of pointer to unknown structure" msgstr "" -#: c-typeck.c:2723 +#: c-typeck.c:2806 #, c-format msgid "assignment of read-only member %qs" msgstr "" -#: c-typeck.c:2724 +#: c-typeck.c:2807 #, c-format msgid "increment of read-only member %qs" msgstr "" -#: c-typeck.c:2725 +#: c-typeck.c:2808 #, c-format msgid "decrement of read-only member %qs" msgstr "" -#: c-typeck.c:2729 +#: c-typeck.c:2812 #, c-format msgid "assignment of read-only variable %qs" msgstr "" -#: c-typeck.c:2730 +#: c-typeck.c:2813 #, c-format msgid "increment of read-only variable %qs" msgstr "" -#: c-typeck.c:2731 +#: c-typeck.c:2814 #, c-format msgid "decrement of read-only variable %qs" msgstr "" -#: c-typeck.c:2734 +#: c-typeck.c:2817 msgid "assignment of read-only location" msgstr "" -#: c-typeck.c:2735 +#: c-typeck.c:2818 msgid "increment of read-only location" msgstr "" -#: c-typeck.c:2736 +#: c-typeck.c:2819 msgid "decrement of read-only location" msgstr "" -#: c-typeck.c:2755 +#: c-typeck.c:2838 #, fuzzy msgid "cannot take address of bit-field %qD" msgstr "½µ ĵ°³Ñƒ °Ñ‚рыĵ°Ñ†ÑŒ °´Ñ€°Ñ ħіт°²°³° żğя \"%s\"" -#: c-typeck.c:2783 +#: c-typeck.c:2866 msgid "global register variable %qD used in nested function" msgstr "" -#: c-typeck.c:2786 +#: c-typeck.c:2869 msgid "register variable %qD used in nested function" msgstr "" -#: c-typeck.c:2791 +#: c-typeck.c:2874 msgid "address of global register variable %qD requested" msgstr "" -#: c-typeck.c:2793 +#: c-typeck.c:2876 msgid "address of register variable %qD requested" msgstr "" -#: c-typeck.c:2841 +#: c-typeck.c:2924 msgid "non-lvalue array in conditional expression" msgstr "" -#: c-typeck.c:2885 +#: c-typeck.c:2968 msgid "signed and unsigned type in conditional expression" msgstr "" -#: c-typeck.c:2892 +#: c-typeck.c:2975 msgid "ISO C forbids conditional expr with only one void side" msgstr "" -#: c-typeck.c:2908 c-typeck.c:2916 +#: c-typeck.c:2991 c-typeck.c:2999 msgid "ISO C forbids conditional expr between % and function pointer" msgstr "" -#: c-typeck.c:2923 +#: c-typeck.c:3006 msgid "pointer type mismatch in conditional expression" msgstr "" -#: c-typeck.c:2930 c-typeck.c:2940 +#: c-typeck.c:3013 c-typeck.c:3023 msgid "pointer/integer type mismatch in conditional expression" msgstr "" -#: c-typeck.c:2954 +#: c-typeck.c:3037 msgid "type mismatch in conditional expression" msgstr "" -#: c-typeck.c:2993 +#: c-typeck.c:3076 msgid "left-hand operand of comma expression has no effect" msgstr "" -#: c-typeck.c:3026 +#: c-typeck.c:3109 msgid "cast specifies array type" msgstr "" -#: c-typeck.c:3032 +#: c-typeck.c:3115 msgid "cast specifies function type" msgstr "" -#: c-typeck.c:3042 +#: c-typeck.c:3125 msgid "ISO C forbids casting nonscalar to the same type" msgstr "" -#: c-typeck.c:3060 +#: c-typeck.c:3143 msgid "ISO C forbids casts to union type" msgstr "" -#: c-typeck.c:3069 +#: c-typeck.c:3152 msgid "cast to union type from type not present in union" msgstr "" -#: c-typeck.c:3120 +#: c-typeck.c:3203 msgid "cast adds new qualifiers to function type" msgstr "" #. There are qualifiers present in IN_OTYPE that are not #. present in IN_TYPE. -#: c-typeck.c:3125 +#: c-typeck.c:3208 msgid "cast discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:3140 +#: c-typeck.c:3223 msgid "cast increases required alignment of target type" msgstr "" -#: c-typeck.c:3146 +#: c-typeck.c:3229 msgid "cast from pointer to integer of different size" msgstr "" -#: c-typeck.c:3151 +#: c-typeck.c:3234 msgid "cast from function call of type %qT to non-matching type %qT" msgstr "" -#: c-typeck.c:3159 +#: c-typeck.c:3242 msgid "cast to pointer from integer of different size" msgstr "" -#: c-typeck.c:3171 +#: c-typeck.c:3254 msgid "type-punning to incomplete type might break strict-aliasing rules" msgstr "" -#: c-typeck.c:3178 +#: c-typeck.c:3261 msgid "dereferencing type-punned pointer will break strict-aliasing rules" msgstr "" -#: c-typeck.c:3181 +#: c-typeck.c:3264 msgid "dereferencing type-punned pointer might break strict-aliasing rules" msgstr "" -#: c-typeck.c:3193 +#: c-typeck.c:3276 msgid "ISO C forbids conversion of function pointer to object pointer type" msgstr "" -#: c-typeck.c:3202 +#: c-typeck.c:3285 msgid "ISO C forbids conversion of object pointer to function pointer type" msgstr "" -#: c-typeck.c:3457 +#: c-typeck.c:3537 msgid "cannot pass rvalue to reference parameter" msgstr "" -#: c-typeck.c:3566 c-typeck.c:3675 +#: c-typeck.c:3646 c-typeck.c:3761 #, c-format msgid "passing argument %d of %qE makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:3569 c-typeck.c:3678 +#: c-typeck.c:3649 c-typeck.c:3764 msgid "assignment makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:3572 c-typeck.c:3680 +#: c-typeck.c:3652 c-typeck.c:3766 msgid "initialization makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:3575 c-typeck.c:3682 +#: c-typeck.c:3655 c-typeck.c:3768 msgid "return makes qualified function pointer from unqualified" msgstr "" -#: c-typeck.c:3579 c-typeck.c:3643 +#: c-typeck.c:3659 c-typeck.c:3729 #, c-format msgid "passing argument %d of %qE discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:3581 c-typeck.c:3645 +#: c-typeck.c:3661 c-typeck.c:3731 msgid "assignment discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:3583 c-typeck.c:3647 +#: c-typeck.c:3663 c-typeck.c:3733 msgid "initialization discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:3585 c-typeck.c:3649 +#: c-typeck.c:3665 c-typeck.c:3735 msgid "return discards qualifiers from pointer target type" msgstr "" -#: c-typeck.c:3590 +#: c-typeck.c:3670 msgid "ISO C prohibits argument conversion to union type" msgstr "" -#: c-typeck.c:3628 +#: c-typeck.c:3714 msgid "ISO C forbids passing argument %d of %qE between function pointer and %" msgstr "" -#: c-typeck.c:3631 +#: c-typeck.c:3717 msgid "ISO C forbids assignment between function pointer and %" msgstr "" -#: c-typeck.c:3633 +#: c-typeck.c:3719 msgid "ISO C forbids initialization between function pointer and %" msgstr "" -#: c-typeck.c:3635 +#: c-typeck.c:3721 msgid "ISO C forbids return between function pointer and %" msgstr "" -#: c-typeck.c:3658 +#: c-typeck.c:3744 #, c-format msgid "pointer targets in passing argument %d of %qE differ in signedness" msgstr "" -#: c-typeck.c:3660 +#: c-typeck.c:3746 msgid "pointer targets in assignment differ in signedness" msgstr "" -#: c-typeck.c:3662 +#: c-typeck.c:3748 msgid "pointer targets in initialization differ in signedness" msgstr "" -#: c-typeck.c:3664 +#: c-typeck.c:3750 msgid "pointer targets in return differ in signedness" msgstr "" -#: c-typeck.c:3687 +#: c-typeck.c:3773 #, c-format msgid "passing argument %d of %qE from incompatible pointer type" msgstr "" -#: c-typeck.c:3689 +#: c-typeck.c:3775 msgid "assignment from incompatible pointer type" msgstr "" -#: c-typeck.c:3690 +#: c-typeck.c:3776 msgid "initialization from incompatible pointer type" msgstr "" -#: c-typeck.c:3692 +#: c-typeck.c:3778 msgid "return from incompatible pointer type" msgstr "" #. ??? This should not be an error when inlining calls to #. unprototyped functions. -#: c-typeck.c:3699 c-typeck.c:4187 cp/typeck.c:1406 +#: c-typeck.c:3785 c-typeck.c:4287 cp/typeck.c:1377 msgid "invalid use of non-lvalue array" msgstr "" -#: c-typeck.c:3713 +#: c-typeck.c:3799 #, c-format msgid "passing argument %d of %qE makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:3715 +#: c-typeck.c:3801 msgid "assignment makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:3717 +#: c-typeck.c:3803 msgid "initialization makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:3719 +#: c-typeck.c:3805 msgid "return makes pointer from integer without a cast" msgstr "" -#: c-typeck.c:3726 +#: c-typeck.c:3812 #, c-format msgid "passing argument %d of %qE makes integer from pointer without a cast" msgstr "" -#: c-typeck.c:3728 +#: c-typeck.c:3814 msgid "assignment makes integer from pointer without a cast" msgstr "" -#: c-typeck.c:3730 +#: c-typeck.c:3816 msgid "initialization makes integer from pointer without a cast" msgstr "" -#: c-typeck.c:3732 +#: c-typeck.c:3818 msgid "return makes integer from pointer without a cast" msgstr "" #. ??? This should not be an error when inlining calls to #. unprototyped functions. -#: c-typeck.c:3745 +#: c-typeck.c:3831 #, c-format msgid "incompatible type for argument %d of %qE" msgstr "" -#: c-typeck.c:3748 +#: c-typeck.c:3834 msgid "incompatible types in assignment" msgstr "" -#: c-typeck.c:3751 +#: c-typeck.c:3837 #, fuzzy msgid "incompatible types in initialization" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: c-typeck.c:3754 +#: c-typeck.c:3840 msgid "incompatible types in return" msgstr "" -#: c-typeck.c:3835 +#: c-typeck.c:3921 msgid "traditional C rejects automatic aggregate initialization" msgstr "" #. Use `%s' to print the string in case there are any escape #. characters in the message. -#: c-typeck.c:4000 c-typeck.c:4015 c-typeck.c:4030 final.c:2856 final.c:2858 -#: gcc.c:4649 rtl-error.c:113 toplev.c:606 config/cris/cris.c:568 -#: cp/parser.c:1861 cp/typeck.c:4175 java/expr.c:404 java/parse.y:5021 -#: java/verify.c:1593 java/verify.c:1594 java/verify.c:1613 +#: c-typeck.c:4086 c-typeck.c:4101 c-typeck.c:4116 final.c:2856 final.c:2858 +#: gcc.c:4639 rtl-error.c:113 toplev.c:610 config/cris/cris.c:578 +#: cp/parser.c:1884 cp/typeck.c:4131 java/expr.c:405 java/parse.y:5020 +#: java/verify.c:1553 java/verify.c:1554 java/verify.c:1573 #, c-format msgid "%s" msgstr "" -#: c-typeck.c:4003 c-typeck.c:4018 c-typeck.c:4033 +#: c-typeck.c:4089 c-typeck.c:4104 c-typeck.c:4119 #, fuzzy, c-format msgid "(near initialization for %qs)" msgstr "і½Ñ–Ñ†Ñ‹Ñğі·°Ñ†Ñ‹Ñ" -#: c-typeck.c:4047 +#: c-typeck.c:4133 msgid "array initialized from parenthesized string constant" msgstr "" -#: c-typeck.c:4111 cp/typeck2.c:702 +#: c-typeck.c:4197 cp/typeck2.c:703 msgid "char-array initialized from wide string" msgstr "" -#: c-typeck.c:4116 +#: c-typeck.c:4202 msgid "wchar_t-array initialized from non-wide string" msgstr "" -#: c-typeck.c:4134 cp/typeck2.c:724 +#: c-typeck.c:4220 cp/typeck2.c:725 msgid "initializer-string for array of chars is too long" msgstr "" -#: c-typeck.c:4140 +#: c-typeck.c:4226 msgid "array of inappropriate type initialized from string constant" msgstr "" -#: c-typeck.c:4210 +#: c-typeck.c:4310 msgid "array initialized from non-constant array expression" msgstr "" -#: c-typeck.c:4269 c-typeck.c:5653 +#: c-typeck.c:4369 c-typeck.c:5748 msgid "initializer element is not computable at load time" msgstr "" -#: c-typeck.c:4284 cp/typeck2.c:803 +#: c-typeck.c:4384 cp/typeck2.c:804 msgid "invalid initializer" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: c-typeck.c:4554 cp/decl.c:4542 +#: c-typeck.c:4651 cp/decl.c:4451 msgid "opaque vector types cannot be initialized" msgstr "" -#: c-typeck.c:4750 +#: c-typeck.c:4850 msgid "extra brace group at end of initializer" msgstr "" -#: c-typeck.c:4770 +#: c-typeck.c:4870 cp/decl.c:4366 msgid "missing braces around initializer" msgstr "" -#: c-typeck.c:4830 +#: c-typeck.c:4931 msgid "braces around scalar initializer" msgstr "" -#: c-typeck.c:4887 +#: c-typeck.c:4988 msgid "initialization of flexible array member in a nested context" msgstr "" -#: c-typeck.c:4889 +#: c-typeck.c:4990 msgid "initialization of a flexible array member" msgstr "" -#: c-typeck.c:4916 +#: c-typeck.c:5017 msgid "missing initializer" msgstr "żÑ€°żÑƒÑˆÑ‡°½ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: c-typeck.c:4938 +#: c-typeck.c:5039 msgid "empty scalar initializer" msgstr "" -#: c-typeck.c:4943 +#: c-typeck.c:5044 msgid "extra elements in scalar initializer" msgstr "" -#: c-typeck.c:5031 -msgid "initialization designators may not nest" -msgstr "" - -#: c-typeck.c:5053 c-typeck.c:5128 +#: c-typeck.c:5148 c-typeck.c:5223 msgid "array index in non-array initializer" msgstr "" -#: c-typeck.c:5058 c-typeck.c:5181 +#: c-typeck.c:5153 c-typeck.c:5276 msgid "field name not in record or union initializer" msgstr "" -#: c-typeck.c:5104 +#: c-typeck.c:5199 #, fuzzy msgid "array index in initializer not of integer type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: c-typeck.c:5124 c-typeck.c:5126 +#: c-typeck.c:5219 c-typeck.c:5221 msgid "nonconstant array index in initializer" msgstr "" -#: c-typeck.c:5130 c-typeck.c:5133 +#: c-typeck.c:5225 c-typeck.c:5228 msgid "array index in initializer exceeds array bounds" msgstr "" -#: c-typeck.c:5144 +#: c-typeck.c:5239 msgid "empty index range in initializer" msgstr "" -#: c-typeck.c:5153 +#: c-typeck.c:5248 msgid "array index range in initializer exceeds array bounds" msgstr "" -#: c-typeck.c:5193 +#: c-typeck.c:5288 #, c-format msgid "unknown field %qs specified in initializer" msgstr "" -#: c-typeck.c:5229 c-typeck.c:5250 c-typeck.c:5716 +#: c-typeck.c:5324 c-typeck.c:5345 c-typeck.c:5811 msgid "initialized field with side-effects overwritten" msgstr "" -#: c-typeck.c:5925 +#: c-typeck.c:6020 msgid "excess elements in char array initializer" msgstr "" -#: c-typeck.c:5932 c-typeck.c:5978 +#: c-typeck.c:6027 c-typeck.c:6073 msgid "excess elements in struct initializer" msgstr "" -#: c-typeck.c:5993 +#: c-typeck.c:6088 msgid "non-static initialization of a flexible array member" msgstr "" -#: c-typeck.c:6061 +#: c-typeck.c:6156 msgid "excess elements in union initializer" msgstr "" -#: c-typeck.c:6083 +#: c-typeck.c:6178 msgid "traditional C rejects initialization of unions" msgstr "" -#: c-typeck.c:6147 +#: c-typeck.c:6242 msgid "excess elements in array initializer" msgstr "" -#: c-typeck.c:6177 +#: c-typeck.c:6272 msgid "excess elements in vector initializer" msgstr "" -#: c-typeck.c:6200 +#: c-typeck.c:6296 msgid "excess elements in scalar initializer" msgstr "" -#: c-typeck.c:6362 +#: c-typeck.c:6492 #, fuzzy msgid "ISO C forbids %" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ \"goto *expr;\"" -#: c-typeck.c:6376 cp/typeck.c:6160 +#: c-typeck.c:6506 cp/typeck.c:6049 #, fuzzy msgid "function declared % has a % statement" msgstr "фу½şÑ†Ñ‹Ñ ½µ ²ÑÑ€Ñ‚°µ тыż string" -#: c-typeck.c:6383 +#: c-typeck.c:6513 msgid "% with no value, in function returning non-void" msgstr "" -#: c-typeck.c:6390 +#: c-typeck.c:6520 msgid "% with a value, in function returning void" msgstr "" -#: c-typeck.c:6447 +#: c-typeck.c:6577 msgid "function returns address of local variable" msgstr "" -#: c-typeck.c:6508 cp/semantics.c:880 +#: c-typeck.c:6638 cp/semantics.c:879 msgid "switch quantity not an integer" msgstr "" -#: c-typeck.c:6518 +#: c-typeck.c:6649 msgid "% switch expression not converted to % in ISO C" msgstr "" -#: c-typeck.c:6555 cp/parser.c:5942 +#: c-typeck.c:6685 cp/parser.c:6051 msgid "case label not within a switch statement" msgstr "" -#: c-typeck.c:6557 +#: c-typeck.c:6687 msgid "% label not within a switch statement" msgstr "" -#: c-typeck.c:6621 +#: c-typeck.c:6751 msgid "%Hsuggest explicit braces to avoid ambiguous %" msgstr "" -#: c-typeck.c:6631 +#: c-typeck.c:6761 #, fuzzy msgid "%Hempty body in an if-statement" msgstr "żÑƒÑÑ‚µ цµğ° ў else-²Ñ‹Ñ€°ĥэ½½Ñ–" -#: c-typeck.c:6639 +#: c-typeck.c:6769 #, fuzzy msgid "%Hempty body in an else-statement" msgstr "żÑƒÑÑ‚µ цµğ° ў else-²Ñ‹Ñ€°ĥэ½½Ñ–" -#: c-typeck.c:6730 cp/parser.c:6445 +#: c-typeck.c:6880 cp/parser.c:6553 msgid "continue statement not within a loop" msgstr "" -#: c-typeck.c:6747 +#: c-typeck.c:6900 msgid "%Hstatement with no effect" msgstr "" -#: c-typeck.c:6776 +#: c-typeck.c:6929 msgid "expression statement has incomplete type" msgstr "" -#: c-typeck.c:7099 c-typeck.c:7138 +#: c-typeck.c:7252 c-typeck.c:7291 msgid "division by zero" msgstr "" -#: c-typeck.c:7183 cp/typeck.c:2971 +#: c-typeck.c:7336 cp/typeck.c:2927 msgid "right shift count is negative" msgstr "" -#: c-typeck.c:7190 cp/typeck.c:2977 +#: c-typeck.c:7343 cp/typeck.c:2933 msgid "right shift count >= width of type" msgstr "" -#: c-typeck.c:7211 cp/typeck.c:2996 +#: c-typeck.c:7364 cp/typeck.c:2952 msgid "left shift count is negative" msgstr "" -#: c-typeck.c:7214 cp/typeck.c:2998 +#: c-typeck.c:7367 cp/typeck.c:2954 msgid "left shift count >= width of type" msgstr "" -#: c-typeck.c:7231 cp/typeck.c:3033 +#: c-typeck.c:7384 cp/typeck.c:2989 msgid "comparing floating point with == or != is unsafe" msgstr "" -#: c-typeck.c:7255 c-typeck.c:7262 +#: c-typeck.c:7408 c-typeck.c:7415 #, fuzzy msgid "ISO C forbids comparison of % with function pointer" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: c-typeck.c:7266 c-typeck.c:7312 +#: c-typeck.c:7419 c-typeck.c:7465 msgid "comparison of distinct pointer types lacks a cast" msgstr "" -#: c-typeck.c:7280 c-typeck.c:7285 c-typeck.c:7332 c-typeck.c:7337 +#: c-typeck.c:7433 c-typeck.c:7438 c-typeck.c:7485 c-typeck.c:7490 msgid "comparison between pointer and integer" msgstr "" -#: c-typeck.c:7304 +#: c-typeck.c:7457 msgid "comparison of complete and incomplete pointers" msgstr "" -#: c-typeck.c:7307 +#: c-typeck.c:7460 msgid "ISO C forbids ordered comparisons of pointers to functions" msgstr "" -#: c-typeck.c:7320 c-typeck.c:7327 +#: c-typeck.c:7473 c-typeck.c:7480 msgid "ordered comparison of pointer with integer zero" msgstr "" -#: c-typeck.c:7548 +#: c-typeck.c:7701 msgid "comparison between signed and unsigned" msgstr "" -#: c-typeck.c:7594 cp/typeck.c:3440 +#: c-typeck.c:7747 cp/typeck.c:3396 msgid "comparison of promoted ~unsigned with constant" msgstr "" -#: c-typeck.c:7602 cp/typeck.c:3448 +#: c-typeck.c:7755 cp/typeck.c:3404 msgid "comparison of promoted ~unsigned with unsigned" msgstr "" -#: calls.c:1909 +#: calls.c:1934 msgid "function call has aggregate value" msgstr "" @@ -3820,7 +3820,7 @@ msgstr "" msgid "verify_flow_info: Basic block %d succ edge is corrupted" msgstr "" -#: cfghooks.c:165 cfgrtl.c:2048 +#: cfghooks.c:165 cfgrtl.c:2056 #, c-format msgid "Wrong amount of branch edges after unconditional jump %i" msgstr "" @@ -3929,306 +3929,306 @@ msgstr "%s ½µ ż°´Ñ‚рыĵğі²°µ %s" msgid "%s does not support flow_call_edges_add" msgstr "%s ½µ ż°´Ñ‚рыĵğі²°µ %s" -#: cfgloop.c:1304 +#: cfgloop.c:1312 #, c-format msgid "Size of loop %d should be %d, not %d." msgstr "" -#: cfgloop.c:1321 +#: cfgloop.c:1329 #, c-format msgid "Bb %d do not belong to loop %d." msgstr "" -#: cfgloop.c:1338 +#: cfgloop.c:1346 #, c-format msgid "Loop %d's header does not have exactly 2 entries." msgstr "" -#: cfgloop.c:1345 +#: cfgloop.c:1353 #, c-format msgid "Loop %d's latch does not have exactly 1 successor." msgstr "" -#: cfgloop.c:1350 +#: cfgloop.c:1358 #, c-format msgid "Loop %d's latch does not have header as successor." msgstr "" -#: cfgloop.c:1355 +#: cfgloop.c:1363 #, c-format msgid "Loop %d's latch does not belong directly to it." msgstr "" -#: cfgloop.c:1361 +#: cfgloop.c:1369 #, c-format msgid "Loop %d's header does not belong directly to it." msgstr "" -#: cfgloop.c:1367 +#: cfgloop.c:1375 #, c-format msgid "Loop %d's latch is marked as part of irreducible region." msgstr "" -#: cfgloop.c:1400 +#: cfgloop.c:1408 #, c-format msgid "Basic block %d should be marked irreducible." msgstr "" -#: cfgloop.c:1406 +#: cfgloop.c:1414 #, c-format msgid "Basic block %d should not be marked irreducible." msgstr "" -#: cfgloop.c:1414 +#: cfgloop.c:1422 #, c-format msgid "Edge from %d to %d should be marked irreducible." msgstr "" -#: cfgloop.c:1421 +#: cfgloop.c:1429 #, c-format msgid "Edge from %d to %d should not be marked irreducible." msgstr "" -#: cfgloop.c:1456 +#: cfgloop.c:1464 #, c-format msgid "Wrong single exit %d->%d recorded for loop %d." msgstr "" -#: cfgloop.c:1460 +#: cfgloop.c:1468 #, c-format msgid "Right exit is %d->%d." msgstr "" -#: cfgloop.c:1477 +#: cfgloop.c:1485 #, c-format msgid "Single exit not recorded for loop %d." msgstr "" -#: cfgloop.c:1484 +#: cfgloop.c:1492 #, c-format msgid "Loop %d should not have single exit (%d -> %d)." msgstr "" -#: cfgrtl.c:1940 +#: cfgrtl.c:1948 #, c-format msgid "end insn %d for block %d not found in the insn stream" msgstr "" -#: cfgrtl.c:1954 +#: cfgrtl.c:1962 #, c-format msgid "insn %d is in multiple basic blocks (%d and %d)" msgstr "" -#: cfgrtl.c:1966 +#: cfgrtl.c:1974 #, c-format msgid "head insn %d for block %d not found in the insn stream" msgstr "" -#: cfgrtl.c:1990 +#: cfgrtl.c:1998 msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i" msgstr "" -#: cfgrtl.c:2005 +#: cfgrtl.c:2013 #, c-format msgid "Fallthru edge crosses section boundary (bb %i)" msgstr "" -#: cfgrtl.c:2030 +#: cfgrtl.c:2038 #, c-format msgid "Missing REG_EH_REGION note in the end of bb %i" msgstr "" -#: cfgrtl.c:2038 +#: cfgrtl.c:2046 #, c-format msgid "Too many outgoing branch edges from bb %i" msgstr "" -#: cfgrtl.c:2043 +#: cfgrtl.c:2051 #, c-format msgid "Fallthru edge after unconditional jump %i" msgstr "" -#: cfgrtl.c:2054 +#: cfgrtl.c:2062 #, c-format msgid "Wrong amount of branch edges after conditional jump %i" msgstr "" -#: cfgrtl.c:2059 +#: cfgrtl.c:2067 #, c-format msgid "Call edges for non-call insn in bb %i" msgstr "" -#: cfgrtl.c:2068 +#: cfgrtl.c:2076 #, c-format msgid "Abnormal edges for no purpose in bb %i" msgstr "" -#: cfgrtl.c:2080 +#: cfgrtl.c:2088 #, c-format msgid "insn %d inside basic block %d but block_for_insn is NULL" msgstr "" -#: cfgrtl.c:2084 +#: cfgrtl.c:2092 #, c-format msgid "insn %d inside basic block %d but block_for_insn is %i" msgstr "" -#: cfgrtl.c:2098 cfgrtl.c:2108 +#: cfgrtl.c:2106 cfgrtl.c:2116 #, c-format msgid "NOTE_INSN_BASIC_BLOCK is missing for block %d" msgstr "" -#: cfgrtl.c:2121 +#: cfgrtl.c:2129 #, c-format msgid "NOTE_INSN_BASIC_BLOCK %d in middle of basic block %d" msgstr "" -#: cfgrtl.c:2131 +#: cfgrtl.c:2139 #, c-format msgid "in basic block %d:" msgstr "" -#: cfgrtl.c:2132 +#: cfgrtl.c:2140 msgid "flow control insn inside a basic block" msgstr "" -#: cfgrtl.c:2180 +#: cfgrtl.c:2188 #, c-format msgid "missing barrier after block %i" msgstr "" -#: cfgrtl.c:2193 +#: cfgrtl.c:2201 #, c-format msgid "verify_flow_info: Incorrect blocks for fallthru %i->%i" msgstr "" -#: cfgrtl.c:2208 +#: cfgrtl.c:2210 #, c-format msgid "verify_flow_info: Incorrect fallthru %i->%i" msgstr "" -#: cfgrtl.c:2210 +#: cfgrtl.c:2212 msgid "wrong insn in the fallthru edge" msgstr "" -#: cfgrtl.c:2227 +#: cfgrtl.c:2229 msgid "basic blocks not laid down consecutively" msgstr "" -#: cfgrtl.c:2252 +#: cfgrtl.c:2254 msgid "insn outside basic block" msgstr "" -#: cfgrtl.c:2259 +#: cfgrtl.c:2261 msgid "return not followed by barrier" msgstr "" -#: cfgrtl.c:2266 +#: cfgrtl.c:2268 #, c-format msgid "number of bb notes in insn chain (%d) != n_basic_blocks (%d)" msgstr "" -#: cgraph.c:231 +#: cgraph.c:278 msgid "function body not available" msgstr "" -#: cgraph.c:233 cgraphunit.c:651 +#: cgraph.c:280 cgraphunit.c:661 msgid "redefined extern inline functions are not considered for inlining" msgstr "" -#: cgraph.c:236 cgraphunit.c:656 +#: cgraph.c:283 cgraphunit.c:666 #, fuzzy msgid "function not considered for inlining" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cgraph.c:238 cgraphunit.c:654 +#: cgraph.c:285 cgraphunit.c:664 msgid "function not inlinable" msgstr "" -#: cgraph.c:556 +#: cgraph.c:615 msgid "%D renamed after being referenced in assembly" msgstr "" -#: cgraphunit.c:502 +#: cgraphunit.c:512 msgid "Shared call_expr:" msgstr "" -#: cgraphunit.c:508 +#: cgraphunit.c:518 #, fuzzy msgid "Edge points to wrong declaration:" msgstr "³ÑÑ‚° ż°żÑÑ€Ñ´½Ñµ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ" -#: cgraphunit.c:517 +#: cgraphunit.c:527 msgid "Missing callgraph edge for call expr:" msgstr "" -#: cgraphunit.c:543 +#: cgraphunit.c:553 #, c-format msgid "Aux field set for edge %s->%s" msgstr "" -#: cgraphunit.c:555 +#: cgraphunit.c:565 msgid "Inlined_to pointer is wrong" msgstr "" -#: cgraphunit.c:560 +#: cgraphunit.c:570 msgid "Multiple inline callers" msgstr "" -#: cgraphunit.c:567 +#: cgraphunit.c:577 msgid "Inlined_to pointer set for noninline callers" msgstr "" -#: cgraphunit.c:573 +#: cgraphunit.c:583 msgid "Inlined_to pointer is set but no predecesors found" msgstr "" -#: cgraphunit.c:578 +#: cgraphunit.c:588 msgid "Inlined_to pointer reffers to itself" msgstr "" -#: cgraphunit.c:588 +#: cgraphunit.c:598 msgid "Node not found in DECL_ASSEMBLER_NAME hash" msgstr "" -#: cgraphunit.c:602 +#: cgraphunit.c:612 #, c-format msgid "Edge %s->%s has no corresponding call_expr" msgstr "" -#: cgraphunit.c:613 +#: cgraphunit.c:623 msgid "verify_cgraph_node failed." msgstr "" -#: cgraphunit.c:797 +#: cgraphunit.c:807 msgid "failed to reclaim unneeded function" msgstr "" -#: cgraphunit.c:1184 +#: cgraphunit.c:1194 msgid "--param large-function-growth limit reached" msgstr "" -#: cgraphunit.c:1221 +#: cgraphunit.c:1231 msgid "recursive inlining" msgstr "" -#: cgraphunit.c:1386 cgraphunit.c:1638 +#: cgraphunit.c:1396 cgraphunit.c:1648 msgid "--param max-inline-insns-single limit reached" msgstr "" -#: cgraphunit.c:1410 +#: cgraphunit.c:1420 msgid "--param max-inline-insns-single limit reached after inlining into the callee" msgstr "" -#: cgraphunit.c:1460 +#: cgraphunit.c:1470 msgid "--param inline-unit-growth limit reached" msgstr "" -#: cgraphunit.c:1809 +#: cgraphunit.c:1822 msgid "Nodes with no released memory found." msgstr "" -#: collect2.c:402 gcc.c:6744 +#: collect2.c:402 gcc.c:6733 #, fuzzy, c-format msgid "internal gcc abort in %s, at %s:%d" msgstr "сżÑ‹½µ½° ў %s, ğя %s:%d" @@ -4237,158 +4237,158 @@ msgstr "сżÑ‹½µ½° ў %s, ğя %s:%d" msgid "no arguments" msgstr "½Ñĵ° °Ñ€³Ñƒĵµ½Ñ‚°Ñž" -#: collect2.c:1187 +#: collect2.c:1194 #, fuzzy, c-format msgid "unknown demangling style '%s'" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: collect2.c:1261 collect2.c:1409 collect2.c:1444 +#: collect2.c:1268 collect2.c:1416 collect2.c:1451 #, c-format msgid "fopen %s" msgstr "" -#: collect2.c:1264 collect2.c:1414 collect2.c:1447 +#: collect2.c:1271 collect2.c:1421 collect2.c:1454 #, c-format msgid "fclose %s" msgstr "" -#: collect2.c:1273 +#: collect2.c:1280 #, c-format msgid "collect2 version %s" msgstr "" -#: collect2.c:1363 +#: collect2.c:1370 #, c-format msgid "%d constructor(s) found\n" msgstr "%d ş°½ÑÑ‚руşÑ‚°Ñ€(°Ñž) ·½ı´·µ½(°)\n" -#: collect2.c:1364 +#: collect2.c:1371 #, c-format msgid "%d destructor(s) found\n" msgstr "%d ´ÑÑÑ‚руşÑ‚°Ñ€(°Ñž) ·½ı´·µ½(°)\n" -#: collect2.c:1365 +#: collect2.c:1372 #, c-format msgid "%d frame table(s) found\n" msgstr "" -#: collect2.c:1507 +#: collect2.c:1514 #, c-format msgid "%s terminated with signal %d [%s]%s" msgstr "" -#: collect2.c:1525 +#: collect2.c:1532 #, c-format msgid "%s returned %d exit status" msgstr "" -#: collect2.c:1550 +#: collect2.c:1557 #, c-format msgid "[cannot find %s]" msgstr "[½µğь³° ·½°ıсці %s]" -#: collect2.c:1565 +#: collect2.c:1572 #, fuzzy, c-format msgid "cannot find '%s'" msgstr "½µğь³° ·½°ıсці \"%s\"" -#: collect2.c:1576 collect2.c:1579 +#: collect2.c:1583 collect2.c:1586 #, c-format msgid "redirecting stdout: %s" msgstr "żµÑ€°½°şÑ–Ñ€°²°½½µ stdout: %s" -#: collect2.c:1618 +#: collect2.c:1625 #, c-format msgid "[Leaving %s]\n" msgstr "" -#: collect2.c:1838 +#: collect2.c:1845 #, c-format msgid "" "\n" "write_c_file - output name is %s, prefix is %s\n" msgstr "" -#: collect2.c:2042 +#: collect2.c:2049 #, fuzzy msgid "cannot find 'nm'" msgstr "½µğь³° ·½°ıсці \"nm\"" -#: collect2.c:2052 collect2.c:2218 +#: collect2.c:2059 collect2.c:2225 msgid "pipe" msgstr "ş°½²µµÑ€" -#: collect2.c:2056 collect2.c:2222 +#: collect2.c:2063 collect2.c:2229 msgid "fdopen" msgstr "" -#: collect2.c:2082 collect2.c:2248 +#: collect2.c:2089 collect2.c:2255 #, c-format msgid "dup2 %d 1" msgstr "" -#: collect2.c:2085 collect2.c:2088 collect2.c:2101 collect2.c:2251 -#: collect2.c:2254 collect2.c:2267 +#: collect2.c:2092 collect2.c:2095 collect2.c:2108 collect2.c:2258 +#: collect2.c:2261 collect2.c:2274 #, c-format msgid "close %d" msgstr "" -#: collect2.c:2091 collect2.c:2257 +#: collect2.c:2098 collect2.c:2264 #, c-format msgid "execv %s" msgstr "" -#: collect2.c:2145 +#: collect2.c:2152 #, c-format msgid "init function found in object %s" msgstr "" -#: collect2.c:2153 +#: collect2.c:2160 #, c-format msgid "fini function found in object %s" msgstr "" -#: collect2.c:2176 collect2.c:2306 +#: collect2.c:2183 collect2.c:2313 msgid "fclose" msgstr "" -#: collect2.c:2209 +#: collect2.c:2216 #, fuzzy msgid "cannot find 'ldd'" msgstr "½µ ĵ°³Ñƒ ·½°ıсці \"ldd\"" -#: collect2.c:2270 +#: collect2.c:2277 msgid "" "\n" "ldd output with constructors/destructors.\n" msgstr "" -#: collect2.c:2285 +#: collect2.c:2292 #, c-format msgid "dynamic dependency %s not found" msgstr "" -#: collect2.c:2297 +#: collect2.c:2304 #, c-format msgid "unable to open dynamic dependency '%s'" msgstr "" -#: collect2.c:2456 +#: collect2.c:2463 #, c-format msgid "%s: not a COFF file" msgstr "" -#: collect2.c:2576 +#: collect2.c:2583 #, c-format msgid "%s: cannot open as COFF file" msgstr "" -#: collect2.c:2631 +#: collect2.c:2641 #, fuzzy, c-format msgid "library lib%s not found" msgstr "‘Ñ–ħğіятэş° lib%s ½µ ·½ı´·µ½°" -#: combine.c:12382 +#: combine.c:12524 #, c-format msgid "" ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n" @@ -4396,7 +4396,7 @@ msgid "" "\n" msgstr "" -#: combine.c:12391 +#: combine.c:12533 #, c-format msgid "" "\n" @@ -4508,7 +4508,7 @@ msgstr "" msgid "too many input files" msgstr "²µğьĵі шĵ°Ñ‚ у²°Ñ…´·ÑÑ‡Ñ‹Ñ… ф°ığ°Ñž" -#: cse.c:6784 +#: cse.c:6772 #, c-format msgid ";; Processing block from %d to %d, %d sets.\n" msgstr "" @@ -4564,32 +4564,24 @@ msgstr "" msgid "DW_LOC_OP %s not implemented\n" msgstr "" -#: emit-rtl.c:1215 -msgid "can't access real part of complex value in hard register" -msgstr "" - -#: emit-rtl.c:1242 -msgid "can't access imaginary part of complex value in hard register" -msgstr "" - -#: emit-rtl.c:2303 +#: emit-rtl.c:2232 #, fuzzy msgid "Invalid rtl sharing found in the insn" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: emit-rtl.c:2305 +#: emit-rtl.c:2234 msgid "Shared rtx" msgstr "" -#: emit-rtl.c:2307 +#: emit-rtl.c:2236 msgid "Internal consistency failure" msgstr "" -#: emit-rtl.c:3343 +#: emit-rtl.c:3301 msgid "ICE: emit_insn used where emit_jump_insn needed:\n" msgstr "" -#: errors.c:133 java/jv-scan.c:294 +#: errors.c:133 java/jv-scan.c:272 #, c-format msgid "abort in %s, at %s:%d" msgstr "сżÑ‹½µ½° ў %s, ğя %s:%d" @@ -4607,7 +4599,7 @@ msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½Ñ msgid "__builtin_eh_return not supported on this target" msgstr "" -#: explow.c:1355 +#: explow.c:1301 msgid "stack limits not supported on this target" msgstr "" @@ -4657,177 +4649,177 @@ msgstr "" #. handle them. #. We can't handle floating point constants; #. PRINT_OPERAND must handle them. -#: final.c:3305 vmsdbgout.c:487 config/i386/i386.c:5836 +#: final.c:3305 vmsdbgout.c:487 config/i386/i386.c:5931 #: config/pdp11/pdp11.c:1690 msgid "floating constant misused" msgstr "" -#: final.c:3361 vmsdbgout.c:544 config/i386/i386.c:5914 +#: final.c:3361 vmsdbgout.c:544 config/i386/i386.c:6009 #: config/pdp11/pdp11.c:1737 msgid "invalid expression as operand" msgstr "" -#: flow.c:495 flow.c:519 flow.c:541 +#: flow.c:494 flow.c:518 flow.c:540 #, fuzzy msgid "internal consistency failure" msgstr "у½ÑƒÑ‚Ñ€°½°Ñ ż°ĵыğş°" -#: flow.c:1578 +#: flow.c:1689 msgid "Attempt to delete prologue/epilogue insn:" msgstr "" -#: fold-const.c:3186 fold-const.c:3197 +#: fold-const.c:3220 fold-const.c:3231 #, c-format msgid "comparison is always %d due to width of bit-field" msgstr "" -#: fold-const.c:4755 fold-const.c:4770 +#: fold-const.c:4789 fold-const.c:4804 #, c-format msgid "comparison is always %d" msgstr "" -#: fold-const.c:4899 +#: fold-const.c:4933 msgid "% of unmatched not-equal tests is always 1" msgstr "" -#: fold-const.c:4904 +#: fold-const.c:4938 msgid "% of mutually exclusive equal-tests is always 0" msgstr "" -#: fold-const.c:9334 +#: fold-const.c:9870 msgid "fold check: original tree changed by fold" msgstr "" -#: function.c:831 varasm.c:1569 +#: function.c:832 varasm.c:1584 #, fuzzy msgid "%Jsize of variable %qD is too large" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" ²µğьĵі ²ÑğіşÑ–" -#: function.c:1442 +#: function.c:1443 #, fuzzy msgid "impossible constraint in %" msgstr "½µĵ°³Ñ‡Ñ‹ĵы °żÑÑ€°Ñ‚°Ñ€ '%s'" -#: function.c:3495 +#: function.c:3633 msgid "%Jvariable %qD might be clobbered by % or %" msgstr "" -#: function.c:3516 +#: function.c:3654 msgid "%Jargument %qD might be clobbered by % or %" msgstr "" -#: function.c:3907 +#: function.c:4045 msgid "function returns an aggregate" msgstr "" -#: function.c:4249 +#: function.c:4368 #, fuzzy msgid "%Junused parameter %qD" msgstr "½µ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°µĵы ż°Ñ€°ĵµÑ‚Ñ€ \"%s\"" -#: gcc.c:1242 +#: gcc.c:1237 #, c-format msgid "ambiguous abbreviation %s" msgstr "" -#: gcc.c:1269 +#: gcc.c:1264 #, fuzzy, c-format msgid "incomplete '%s' option" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:1280 +#: gcc.c:1275 #, fuzzy, c-format msgid "missing argument to '%s' option" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:1293 +#: gcc.c:1288 #, fuzzy, c-format msgid "extraneous argument to '%s' option" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:1637 +#: gcc.c:1632 msgid "Using built-in specs.\n" msgstr "" -#: gcc.c:1825 +#: gcc.c:1815 #, c-format msgid "" "Setting spec %s to '%s'\n" "\n" msgstr "" -#: gcc.c:1934 +#: gcc.c:1924 #, c-format msgid "Reading specs from %s\n" msgstr "" -#: gcc.c:2030 gcc.c:2049 +#: gcc.c:2020 gcc.c:2039 #, c-format msgid "specs %%include syntax malformed after %ld characters" msgstr "" -#: gcc.c:2057 +#: gcc.c:2047 #, fuzzy, c-format msgid "could not find specs file %s\n" msgstr "½µ ĵ°³Ñƒ ·½°ıсці şÑ€Ñ‹½Ñ–цу %s\n" -#: gcc.c:2074 gcc.c:2082 gcc.c:2091 gcc.c:2100 +#: gcc.c:2064 gcc.c:2072 gcc.c:2081 gcc.c:2090 #, c-format msgid "specs %%rename syntax malformed after %ld characters" msgstr "" -#: gcc.c:2109 +#: gcc.c:2099 #, c-format msgid "specs %s spec was not found to be renamed" msgstr "" -#: gcc.c:2116 +#: gcc.c:2106 #, c-format msgid "%s: attempt to rename spec '%s' to already defined spec '%s'" msgstr "" -#: gcc.c:2121 +#: gcc.c:2111 #, c-format msgid "rename spec %s to %s\n" msgstr "" -#: gcc.c:2123 +#: gcc.c:2113 #, c-format msgid "" "spec is '%s'\n" "\n" msgstr "" -#: gcc.c:2136 +#: gcc.c:2126 #, c-format msgid "specs unknown %% command after %ld characters" msgstr "" -#: gcc.c:2147 gcc.c:2160 +#: gcc.c:2137 gcc.c:2150 #, c-format msgid "specs file malformed after %ld characters" msgstr "" -#: gcc.c:2213 +#: gcc.c:2203 msgid "spec file has no spec for linking" msgstr "" -#: gcc.c:2635 +#: gcc.c:2625 #, c-format msgid "system path '%s' is not absolute" msgstr "" -#: gcc.c:2698 +#: gcc.c:2688 msgid "-pipe not supported" msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°" -#: gcc.c:2760 +#: gcc.c:2750 msgid "" "\n" "Go ahead? (y or n) " msgstr "" -#: gcc.c:2885 +#: gcc.c:2875 #, c-format msgid "" "Internal error: %s (program %s)\n" @@ -4835,165 +4827,165 @@ msgid "" "See %s for instructions." msgstr "" -#: gcc.c:2903 +#: gcc.c:2893 #, c-format msgid "# %s %.2f %.2f\n" msgstr "# %s %.2f %.2f\n" -#: gcc.c:3033 +#: gcc.c:3023 #, c-format msgid "Usage: %s [options] file...\n" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ: %s [²Ñ‹ħ°Ñ€Ñ‹] ф°ığ...\n" -#: gcc.c:3034 +#: gcc.c:3024 msgid "Options:\n" msgstr "’Ñ‹ħ°Ñ€Ñ‹:\n" -#: gcc.c:3036 +#: gcc.c:3026 msgid " -pass-exit-codes Exit with highest error code from a phase\n" msgstr "" -#: gcc.c:3037 +#: gcc.c:3027 msgid " --help Display this information\n" msgstr " --help ´ğюстр°²°Ñ†ÑŒ ³ÑÑ‚у і½Ñ„°Ñ€ĵ°Ñ†Ñ‹ÑŽ\n" -#: gcc.c:3038 +#: gcc.c:3028 msgid " --target-help Display target specific command line options\n" msgstr "" -#: gcc.c:3040 +#: gcc.c:3030 msgid " (Use '-v --help' to display command line options of sub-processes)\n" msgstr "" -#: gcc.c:3041 +#: gcc.c:3031 msgid " -dumpspecs Display all of the built in spec strings\n" msgstr "" -#: gcc.c:3042 +#: gcc.c:3032 msgid " -dumpversion Display the version of the compiler\n" msgstr " -dumpversion ´ğюстр°²°Ñ†ÑŒ ²µÑ€ÑÑ–ÑŽ ş°ĵżÑ–ğят°Ñ€°\n" -#: gcc.c:3043 +#: gcc.c:3033 msgid " -dumpmachine Display the compiler's target processor\n" msgstr "" -#: gcc.c:3044 +#: gcc.c:3034 msgid " -print-search-dirs Display the directories in the compiler's search path\n" msgstr "" -#: gcc.c:3045 +#: gcc.c:3035 msgid " -print-libgcc-file-name Display the name of the compiler's companion library\n" msgstr "" -#: gcc.c:3046 +#: gcc.c:3036 msgid " -print-file-name= Display the full path to library \n" msgstr "" -#: gcc.c:3047 +#: gcc.c:3037 msgid " -print-prog-name= Display the full path to compiler component \n" msgstr "" -#: gcc.c:3048 +#: gcc.c:3038 msgid " -print-multi-directory Display the root directory for versions of libgcc\n" msgstr "" -#: gcc.c:3049 +#: gcc.c:3039 msgid "" " -print-multi-lib Display the mapping between command line options and\n" " multiple library search directories\n" msgstr "" -#: gcc.c:3052 +#: gcc.c:3042 msgid " -print-multi-os-directory Display the relative path to OS libraries\n" msgstr "" -#: gcc.c:3053 +#: gcc.c:3043 msgid " -Wa, Pass comma-separated on to the assembler\n" msgstr "" -#: gcc.c:3054 +#: gcc.c:3044 msgid " -Wp, Pass comma-separated on to the preprocessor\n" msgstr "" -#: gcc.c:3055 +#: gcc.c:3045 msgid " -Wl, Pass comma-separated on to the linker\n" msgstr "" -#: gcc.c:3056 +#: gcc.c:3046 msgid " -Xassembler Pass on to the assembler\n" msgstr "" -#: gcc.c:3057 +#: gcc.c:3047 msgid " -Xpreprocessor Pass on to the preprocessor\n" msgstr "" -#: gcc.c:3058 +#: gcc.c:3048 msgid " -Xlinker Pass on to the linker\n" msgstr "" -#: gcc.c:3059 +#: gcc.c:3049 #, fuzzy msgid " -combine Pass multiple source files to compiler at once\n" msgstr " -o <ф°ığ> Ÿ°ĵясціць ²Ñ‹²°´ у <ф°ığ>\n" -#: gcc.c:3060 +#: gcc.c:3050 msgid " -save-temps Do not delete intermediate files\n" msgstr "" -#: gcc.c:3061 +#: gcc.c:3051 msgid " -pipe Use pipes rather than intermediate files\n" msgstr "" -#: gcc.c:3062 +#: gcc.c:3052 msgid " -time Time the execution of each subprocess\n" msgstr "" -#: gcc.c:3063 +#: gcc.c:3053 #, fuzzy msgid " -specs= Override built-in specs with the contents of \n" msgstr " -o <ф°ığ> Ÿ°ĵясціць ²Ñ‹²°´ у <ф°ığ>\n" -#: gcc.c:3064 +#: gcc.c:3054 msgid " -std= Assume that the input sources are for \n" msgstr "" -#: gcc.c:3065 +#: gcc.c:3055 msgid " -B Add to the compiler's search paths\n" msgstr "" -#: gcc.c:3066 +#: gcc.c:3056 msgid " -b Run gcc for target , if installed\n" msgstr "" -#: gcc.c:3067 +#: gcc.c:3057 msgid " -V Run gcc version number , if installed\n" msgstr "" -#: gcc.c:3068 +#: gcc.c:3058 msgid " -v Display the programs invoked by the compiler\n" msgstr "" -#: gcc.c:3069 +#: gcc.c:3059 msgid " -### Like -v but options quoted and commands not executed\n" msgstr "" -#: gcc.c:3070 +#: gcc.c:3060 msgid " -E Preprocess only; do not compile, assemble or link\n" msgstr "" -#: gcc.c:3071 +#: gcc.c:3061 msgid " -S Compile only; do not assemble or link\n" msgstr "" -#: gcc.c:3072 +#: gcc.c:3062 msgid " -c Compile and assemble, but do not link\n" msgstr "" -#: gcc.c:3073 +#: gcc.c:3063 msgid " -o Place the output into \n" msgstr " -o <ф°ığ> Ÿ°ĵясціць ²Ñ‹²°´ у <ф°ığ>\n" -#: gcc.c:3074 +#: gcc.c:3064 msgid "" " -x Specify the language of the following input files\n" " Permissible languages include: c c++ assembler none\n" @@ -5001,7 +4993,7 @@ msgid "" " guessing the language based on the file's extension\n" msgstr "" -#: gcc.c:3081 +#: gcc.c:3071 #, c-format msgid "" "\n" @@ -5010,28 +5002,28 @@ msgid "" " other options on to these processes the -W options must be used.\n" msgstr "" -#: gcc.c:3201 +#: gcc.c:3191 #, c-format msgid "'-%c' option must have argument" msgstr "" -#: gcc.c:3223 +#: gcc.c:3213 #, c-format msgid "couldn't run '%s': %s" msgstr "" #. translate_options () has turned --version into -fversion. -#: gcc.c:3408 +#: gcc.c:3398 #, c-format msgid "%s (GCC) %s\n" msgstr "" -#: gcc.c:3410 gcov.c:412 java/gjavah.c:2368 java/jcf-dump.c:916 +#: gcc.c:3400 gcov.c:412 java/gjavah.c:2376 java/jcf-dump.c:916 #: java/jv-scan.c:128 msgid "(C)" msgstr "" -#: gcc.c:3411 java/gjavah.c:2369 java/jcf-dump.c:917 java/jv-scan.c:129 +#: gcc.c:3401 java/gjavah.c:2377 java/jcf-dump.c:917 java/jv-scan.c:129 #, c-format msgid "" "This is free software; see the source for copying conditions. There is NO\n" @@ -5039,95 +5031,95 @@ msgid "" "\n" msgstr "" -#: gcc.c:3512 +#: gcc.c:3502 #, fuzzy msgid "argument to '-Xlinker' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-x\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:3520 +#: gcc.c:3510 #, fuzzy msgid "argument to '-Xpreprocessor' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:3527 +#: gcc.c:3517 #, fuzzy msgid "argument to '-Xassembler' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-x\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:3534 +#: gcc.c:3524 #, fuzzy msgid "argument to '-l' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-x\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:3555 +#: gcc.c:3545 #, fuzzy msgid "argument to '-specs' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:3569 +#: gcc.c:3559 #, fuzzy msgid "argument to '-specs=' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:3606 +#: gcc.c:3596 #, c-format msgid "'-%c' must come at the start of the command line" msgstr "" -#: gcc.c:3615 +#: gcc.c:3605 #, fuzzy msgid "argument to '-B' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-x\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:3788 +#: gcc.c:3778 msgid "warning: -pipe ignored because -save-temps specified" msgstr "" -#: gcc.c:3792 +#: gcc.c:3782 msgid "warning: -pipe ignored because -time specified" msgstr "" -#: gcc.c:4004 +#: gcc.c:3994 #, fuzzy msgid "argument to '-x' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-x\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:4032 +#: gcc.c:4022 #, fuzzy, c-format msgid "argument to '-%s' is missing" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"-%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: gcc.c:4093 +#: gcc.c:4083 #, c-format msgid "warning: '-x %s' after last input file has no effect" msgstr "" -#: gcc.c:4370 +#: gcc.c:4360 #, c-format msgid "switch '%s' does not start with '-'" msgstr "" -#: gcc.c:4597 +#: gcc.c:4587 #, c-format msgid "spec '%s' invalid" msgstr "" -#: gcc.c:4663 +#: gcc.c:4653 #, c-format msgid "%s\n" msgstr "%s\n" -#: gcc.c:4736 +#: gcc.c:4726 #, fuzzy, c-format msgid "spec '%s' has invalid '%%0%c'" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: gcc.c:4933 +#: gcc.c:4923 #, fuzzy, c-format msgid "spec '%s' has invalid '%%W%c" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: gcc.c:4964 +#: gcc.c:4954 #, fuzzy, c-format msgid "spec '%s' has invalid '%%x%c'" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" @@ -5135,89 +5127,89 @@ msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" #. 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:5176 +#: gcc.c:5149 #, c-format msgid "spec failure: '%%*' has not been initialized by pattern match" msgstr "" -#: gcc.c:5185 +#: gcc.c:5158 #, c-format msgid "warning: use of obsolete %%[ operator in specs" msgstr "" -#: gcc.c:5203 +#: gcc.c:5176 #, c-format msgid "Processing spec %c%s%c, which is '%s'\n" msgstr "" -#: gcc.c:5266 +#: gcc.c:5239 #, fuzzy, c-format msgid "spec failure: unrecognized spec option '%c'" msgstr "½µÑ€°Ñż°·½°½Ñ‹ ²Ñ‹ħ°Ñ€ \"-%s\"" -#: gcc.c:5345 +#: gcc.c:5318 #, fuzzy, c-format msgid "unknown spec function '%s'" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: gcc.c:5364 +#: gcc.c:5337 #, fuzzy, c-format msgid "error in args to spec function '%s'" msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵэ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– `%s'" -#: gcc.c:5412 +#: gcc.c:5385 msgid "malformed spec function name" msgstr "" #. ) -#: gcc.c:5415 +#: gcc.c:5388 #, fuzzy msgid "no arguments for spec function" msgstr "½µ х°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: gcc.c:5434 +#: gcc.c:5407 msgid "malformed spec function arguments" msgstr "" -#: gcc.c:5657 +#: gcc.c:5646 #, c-format msgid "braced spec '%s' is invalid at '%c'" msgstr "" -#: gcc.c:5745 +#: gcc.c:5734 #, c-format msgid "braced spec body '%s' is invalid" msgstr "" -#: gcc.c:6171 +#: gcc.c:6160 msgid "spec failure: more than one arg to SYSROOT_SUFFIX_SPEC." msgstr "" -#: gcc.c:6181 +#: gcc.c:6170 msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC." msgstr "" -#: gcc.c:6274 +#: gcc.c:6263 #, fuzzy, c-format msgid "unrecognized option '-%s'" msgstr "½µÑ€°Ñż°·½°½Ñ‹ ²Ñ‹ħ°Ñ€ \"-%s\"" -#: gcc.c:6280 +#: gcc.c:6269 #, c-format msgid "install: %s%s\n" msgstr "" -#: gcc.c:6281 +#: gcc.c:6270 #, c-format msgid "programs: %s\n" msgstr "żÑ€°³Ñ€°ĵы: %s\n" -#: gcc.c:6282 +#: gcc.c:6271 #, c-format msgid "libraries: %s\n" msgstr "ħіħğіятэşÑ–: %s\n" -#: gcc.c:6339 +#: gcc.c:6328 #, c-format msgid "" "\n" @@ -5226,72 +5218,77 @@ msgstr "" "\n" "†½ÑÑ‚руşÑ†Ñ‹Ñ– ´ğя ż°²µ´°ĵ𵽽яў °ħ ż°ĵыğş°Ñ… ³ğя´·Ñ–цµ тут:\n" -#: gcc.c:6355 +#: gcc.c:6344 +#, fuzzy, c-format +msgid "Target: %s\n" +msgstr "ħіħğіятэşÑ–: %s\n" + +#: gcc.c:6345 #, c-format msgid "Configured with: %s\n" msgstr "" -#: gcc.c:6369 +#: gcc.c:6359 #, c-format msgid "Thread model: %s\n" msgstr "" -#: gcc.c:6380 +#: gcc.c:6370 #, c-format msgid "gcc version %s\n" msgstr "²µÑ€ÑÑ–я gcc %s\n" -#: gcc.c:6382 +#: gcc.c:6372 #, c-format msgid "gcc driver version %s executing gcc version %s\n" msgstr "" -#: gcc.c:6390 +#: gcc.c:6380 #, fuzzy msgid "no input files" msgstr "½Ñĵ° ў²°Ñ…´·ÑÑ‡Ñ‹Ñ… ф°ığ°Ñž" -#: gcc.c:6461 gcc.c:6524 +#: gcc.c:6451 gcc.c:6514 #, c-format msgid "%s: %s compiler not installed on this system" msgstr "%s: %s ş°ĵżÑ–ğят°Ñ€ ½µ ўст°ğя²°½Ñ‹ ½° ³ÑÑ‚°ı сістэĵµ" -#: gcc.c:6470 +#: gcc.c:6460 #, fuzzy, c-format msgid "spec '%s' is invalid" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: gcc.c:6607 +#: gcc.c:6596 #, c-format msgid "%s: linker input file unused because linking not done" msgstr "" -#: gcc.c:6647 +#: gcc.c:6636 #, c-format msgid "language %s not recognized" msgstr "ĵ²° %s ½µ р°Ñż°·½°½°" -#: gcc.c:6718 +#: gcc.c:6707 #, c-format msgid "%s: %s" msgstr "" -#: gcc.c:6938 +#: gcc.c:6927 #, fuzzy, c-format msgid "multilib spec '%s' is invalid" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: gcc.c:7130 +#: gcc.c:7119 #, c-format msgid "multilib exclusions '%s' is invalid" msgstr "" -#: gcc.c:7188 gcc.c:7329 +#: gcc.c:7177 gcc.c:7318 #, fuzzy, c-format msgid "multilib select '%s' is invalid" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: gcc.c:7367 +#: gcc.c:7356 #, c-format msgid "multilib exclusion '%s' is invalid" msgstr "" @@ -5572,27 +5569,27 @@ msgid "%s:source file is newer than graph file '%s'\n" msgstr "" #. Return if there's nothing to do, or it is too expensive. -#: gcse.c:711 +#: gcse.c:689 msgid "GCSE disabled" msgstr "" #. Return if there's nothing to do, or it is too expensive. -#: gcse.c:6536 +#: gcse.c:6474 msgid "jump bypassing disabled" msgstr "" -#: gcse.c:6597 +#: gcse.c:6535 #, c-format msgid "%s: %d basic blocks and %d edges/basic block" msgstr "" -#: gcse.c:6610 +#: gcse.c:6548 #, c-format msgid "%s: %d basic blocks and %d registers" msgstr "" #: ggc-common.c:397 ggc-common.c:405 ggc-common.c:473 ggc-common.c:494 -#: ggc-page.c:2203 ggc-page.c:2235 ggc-page.c:2242 ggc-zone.c:1582 +#: ggc-page.c:2209 ggc-page.c:2240 ggc-page.c:2247 ggc-zone.c:1582 #: ggc-zone.c:1588 ggc-zone.c:1597 #, fuzzy, c-format msgid "can't write PCH file: %m" @@ -5609,7 +5606,7 @@ msgid "can't write padding to PCH file: %m" msgstr "½µ ĵ°³Ñƒ ·°żÑ–с°Ñ†ÑŒ ў %s" #: ggc-common.c:550 ggc-common.c:558 ggc-common.c:565 ggc-common.c:568 -#: ggc-common.c:578 ggc-common.c:581 ggc-page.c:2329 ggc-zone.c:1607 +#: ggc-common.c:578 ggc-common.c:581 ggc-page.c:2334 ggc-zone.c:1607 #, fuzzy, c-format msgid "can't read PCH file: %m" msgstr "½µ ĵ°³Ñƒ żÑ€°Ñ‡Ñ‹Ñ‚°Ñ†ÑŒ · %s" @@ -5618,12 +5615,12 @@ msgstr "½µ ĵ°³Ñƒ żÑ€°Ñ‡Ñ‹Ñ‚°Ñ†ÑŒ · %s" msgid "had to relocate PCH" msgstr "" -#: ggc-page.c:1448 +#: ggc-page.c:1454 #, c-format msgid "open /dev/zero: %m" msgstr "" -#: ggc-page.c:2220 ggc-page.c:2226 +#: ggc-page.c:2225 ggc-page.c:2231 #, fuzzy msgid "can't write PCH file" msgstr "½µ ĵ°³Ñƒ ·°żÑ–с°Ñ†ÑŒ ў %s" @@ -5632,27 +5629,27 @@ msgstr "½µ ĵ°³Ñƒ ·°żÑ–с°Ñ†ÑŒ ў %s" msgid "unexpected node" msgstr "" -#: gimplify.c:3137 +#: gimplify.c:3317 #, c-format msgid "invalid lvalue in asm output %d" msgstr "" -#: gimplify.c:3185 +#: gimplify.c:3364 #, c-format msgid "memory input %d is not directly addressable" msgstr "" -#: gimplify.c:4032 +#: gimplify.c:4219 msgid "gimplification failed" msgstr "" -#: global.c:373 global.c:386 global.c:400 +#: global.c:371 global.c:384 global.c:398 #, fuzzy, c-format msgid "%s cannot be used in asm here" msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: graph.c:403 passes.c:131 java/jcf-parse.c:1040 java/jcf-parse.c:1180 -#: java/lex.c:1842 objc/objc-act.c:550 +#: graph.c:403 passes.c:131 java/jcf-parse.c:1047 java/jcf-parse.c:1194 +#: java/lex.c:1846 objc/objc-act.c:552 #, fuzzy, c-format msgid "can't open %s: %m" msgstr "½µĵ°³Ñ‡Ñ‹ĵ° °´Ñ‡Ñ‹½Ñ–ць %s" @@ -5712,90 +5709,100 @@ msgstr "żµÑ€ÑˆÑ‹ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"int\" msgid "unrecognized command line option \"%s\"" msgstr "µÑ€°Ñż°·½°½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: opts.c:632 +#: opts.c:634 msgid "-Wuninitialized is not supported without -O" msgstr "" -#: opts.c:646 +#: opts.c:648 msgid "-freorder-blocks-and-partition does not work with exceptions" msgstr "" -#: opts.c:659 +#: opts.c:661 msgid "-freorder-blocks-and-partition does not work with -g (currently)" msgstr "" -#: opts.c:820 +#: opts.c:821 #, c-format msgid "structure alignment must be a small power of two, not %d" msgstr "" -#: opts.c:885 +#: opts.c:886 #, fuzzy, c-format msgid "unrecognised visibility value \"%s\"" msgstr "½µÑ€°Ñż°·½°½°Ñ ½°·²° сэşÑ†Ñ‹Ñ– \"%s\"" -#: opts.c:937 +#: opts.c:938 #, fuzzy, c-format msgid "unrecognized register name \"%s\"" msgstr "½µÑ€°Ñż°·½°½°Ñ ½°·²° сэşÑ†Ñ‹Ñ– \"%s\"" -#: opts.c:957 +#: opts.c:962 #, fuzzy, c-format msgid "unknown tls-model \"%s\"" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: opts.c:1032 +#: opts.c:1037 #, c-format msgid "%s: --param arguments should be of the form NAME=VALUE" msgstr "" -#: opts.c:1037 +#: opts.c:1042 #, fuzzy, c-format msgid "invalid --param value %qs" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ --param : %s" -#: opts.c:1133 +#: opts.c:1139 #, fuzzy msgid "target system does not support debug output" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ цэğ°ğіş°²Ñ‹Ñ тыżÑ‹" -#: opts.c:1140 +#: opts.c:1146 #, fuzzy, c-format msgid "debug format \"%s\" conflicts with prior selection" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: opts.c:1156 +#: opts.c:1162 #, fuzzy, c-format msgid "unrecognised debug output level \"%s\"" msgstr "½µÑ€°Ñż°·½°½°Ñ ½°·²° сэşÑ†Ñ‹Ñ– \"%s\"" -#: opts.c:1158 +#: opts.c:1164 #, c-format msgid "debug output level %s is too high" msgstr "" -#: opts.c:1177 +#: opts.c:1183 msgid "The following options are language-independent:\n" msgstr "" -#: opts.c:1184 +#: opts.c:1190 #, c-format msgid "" "The %s front end recognizes the following options:\n" "\n" msgstr "" -#: opts.c:1198 +#: opts.c:1204 msgid "The --param option recognizes the following as parameters:\n" msgstr "" +#: params.c:72 +#, fuzzy, c-format +msgid "minimum value of parameter %qs is %u" +msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ż°Ñ€°ĵэтр `%s'" + +#: params.c:77 +#, c-format +msgid "maximum value of parameter %qs is %u" +msgstr "" + #. If we didn't find this parameter, issue an error message. -#: params.c:76 +#: params.c:86 #, fuzzy, c-format msgid "invalid parameter %qs" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ż°Ñ€°ĵэтр `%s'" -#: passes.c:1250 +#: passes.c:1200 msgid "branch target register load optimization is not intended to be run twice" msgstr "" @@ -6133,92 +6140,88 @@ msgstr "" msgid "%s: input file names must have .c suffixes: %s\n" msgstr "%s: ф°ığ у²´Ñƒ ż°²Ñ–½µ½ ĵµÑ†ÑŒ суфіşÑ .c: %s\n" -#: ra.c:774 -msgid "Didn't find a coloring.\n" -msgstr "" - -#: reg-stack.c:621 +#: reg-stack.c:622 #, c-format msgid "output constraint %d must specify a single register" msgstr "" -#: reg-stack.c:631 +#: reg-stack.c:632 #, c-format msgid "output constraint %d cannot be specified together with \"%s\" clobber" msgstr "" -#: reg-stack.c:654 +#: reg-stack.c:655 msgid "output regs must be grouped at top of stack" msgstr "" -#: reg-stack.c:691 +#: reg-stack.c:692 msgid "implicitly popped regs must be grouped at top of stack" msgstr "" -#: reg-stack.c:710 +#: reg-stack.c:711 msgid "output operand %d must use %<&%> constraint" msgstr "" -#: regclass.c:762 +#: regclass.c:766 #, c-format msgid "can't use '%s' as a %s register" msgstr "" -#: regclass.c:777 config/ia64/ia64.c:4136 config/ia64/ia64.c:4143 -#: config/pa/pa.c:328 config/pa/pa.c:335 +#: regclass.c:781 config/ia64/ia64.c:4568 config/ia64/ia64.c:4575 +#: config/pa/pa.c:336 config/pa/pa.c:343 #, c-format msgid "unknown register name: %s" msgstr "½µ²Ñ´ĵ°Ñ ½°·²° рэ³Ñ–стр°: %s" -#: regclass.c:787 +#: regclass.c:791 msgid "global register variable follows a function definition" msgstr "" -#: regclass.c:791 +#: regclass.c:795 msgid "register used for two global register variables" msgstr "" -#: regclass.c:796 +#: regclass.c:800 msgid "call-clobbered register used for global register variable" msgstr "" -#: regrename.c:1876 +#: regrename.c:1872 #, c-format msgid "validate_value_data: [%u] Bad next_regno for empty chain (%u)" msgstr "" -#: regrename.c:1888 +#: regrename.c:1884 #, c-format msgid "validate_value_data: Loop in regno chain (%u)" msgstr "" -#: regrename.c:1891 +#: regrename.c:1887 #, c-format msgid "validate_value_data: [%u] Bad oldest_regno (%u)" msgstr "" -#: regrename.c:1903 +#: regrename.c:1899 #, c-format msgid "validate_value_data: [%u] Non-empty reg in chain (%s %u %i)" msgstr "" -#: reload.c:1252 +#: reload.c:1270 msgid "cannot reload integer constant operand in %" msgstr "" -#: reload.c:1275 +#: reload.c:1293 msgid "impossible register constraint in %" msgstr "" -#: reload.c:3513 +#: reload.c:3535 msgid "%<&%> constraint used with no register class" msgstr "" -#: reload.c:3679 +#: reload.c:3705 msgid "unable to generate reloads for:" msgstr "" -#: reload.c:3680 reload.c:3912 +#: reload.c:3706 reload.c:3938 msgid "inconsistent operand constraints in an %" msgstr "" @@ -6230,39 +6233,39 @@ msgstr "" msgid "try reducing the number of local variables" msgstr "" -#: reload1.c:1866 +#: reload1.c:1865 msgid "can't find a register in class %qs while reloading %" msgstr "" -#: reload1.c:1871 +#: reload1.c:1870 #, c-format msgid "unable to find a register to spill in class %qs" msgstr "" -#: reload1.c:1873 +#: reload1.c:1872 msgid "this is the insn:" msgstr "" -#: reload1.c:3864 +#: reload1.c:3863 msgid "% operand requires impossible reload" msgstr "" #. It's the compiler's fault. -#: reload1.c:4983 +#: reload1.c:4982 #, fuzzy msgid "could not find a spill register" msgstr "µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ рэ³Ñ–стр° sb" -#: reload1.c:4988 +#: reload1.c:4987 msgid "% operand constraint incompatible with operand size" msgstr "" #. It's the compiler's fault. -#: reload1.c:6606 +#: reload1.c:6614 msgid "VOIDmode on an output" msgstr "" -#: reload1.c:6607 +#: reload1.c:6615 msgid "output operand is constant in %" msgstr "" @@ -6275,146 +6278,146 @@ msgstr "½µÑ€°Ñż°·½°½Ñ‹ ²Ñ‹ħ°Ñ€ \"-%s\"" msgid "insn does not satisfy its constraints:" msgstr "" -#: rtl.c:472 +#: rtl.c:471 #, c-format msgid "RTL check: access of elt %d of '%s' with last elt %d in %s, at %s:%d" msgstr "" -#: rtl.c:482 +#: rtl.c:481 #, c-format msgid "RTL check: expected elt %d type '%c', have '%c' (rtx %s) in %s, at %s:%d" msgstr "" -#: rtl.c:492 +#: rtl.c:491 #, c-format msgid "RTL check: expected elt %d type '%c' or '%c', have '%c' (rtx %s) in %s, at %s:%d" msgstr "" -#: rtl.c:501 +#: rtl.c:500 #, c-format msgid "RTL check: expected code '%s', have '%s' in %s, at %s:%d" msgstr "" -#: rtl.c:511 +#: rtl.c:510 #, c-format msgid "RTL check: expected code '%s' or '%s', have '%s' in %s, at %s:%d" msgstr "" -#: rtl.c:522 +#: rtl.c:521 #, c-format msgid "RTL check: access of elt %d of vector with last elt %d in %s, at %s:%d" msgstr "" -#: rtl.c:533 +#: rtl.c:532 #, c-format msgid "RTL flag check: %s used with unexpected rtx code '%s' in %s, at %s:%d" msgstr "" -#: stmt.c:316 +#: stmt.c:317 msgid "output operand constraint lacks %<=%>" msgstr "" -#: stmt.c:331 +#: stmt.c:332 #, c-format msgid "output constraint %qc for operand %d is not at the beginning" msgstr "" -#: stmt.c:354 +#: stmt.c:355 msgid "operand constraint contains incorrectly positioned %<+%> or %<=%>" msgstr "" -#: stmt.c:361 stmt.c:460 +#: stmt.c:362 stmt.c:461 msgid "%<%%%> constraint used with last operand" msgstr "" -#: stmt.c:380 +#: stmt.c:381 msgid "matching constraint not valid in output operand" msgstr "" -#: stmt.c:451 +#: stmt.c:452 #, c-format msgid "input operand constraint contains %qc" msgstr "" -#: stmt.c:493 +#: stmt.c:494 msgid "matching constraint references invalid operand number" msgstr "" -#: stmt.c:531 +#: stmt.c:532 #, fuzzy, c-format msgid "invalid punctuation %qc in constraint" msgstr "`%E' - ½µÑ€ÑÑ‡°Ñ–с½°Ñ ½Ñ·ÑŒĵµ½½°Ñ тыżÑƒ string" -#: stmt.c:555 +#: stmt.c:556 msgid "matching constraint does not allow a register" msgstr "" -#: stmt.c:583 +#: stmt.c:584 #, c-format msgid "asm-specifier for variable %qs conflicts with asm clobber list" msgstr "" -#: stmt.c:672 +#: stmt.c:673 #, fuzzy msgid "unknown register name %qs in %" msgstr "½µ²Ñ´ĵ°Ñ ½°·²° рэ³Ñ–стр°: %s" -#: stmt.c:680 +#: stmt.c:681 msgid "PIC register %qs clobbered in %" msgstr "" -#: stmt.c:727 +#: stmt.c:728 msgid "more than %d operands in %" msgstr "" -#: stmt.c:790 +#: stmt.c:791 #, c-format msgid "output number %d not directly addressable" msgstr "" -#: stmt.c:869 +#: stmt.c:870 msgid "asm operand %d probably doesn%'t match constraints" msgstr "" -#: stmt.c:879 +#: stmt.c:880 #, c-format msgid "use of memory input without lvalue in asm operand %d is deprecated" msgstr "" -#: stmt.c:1026 +#: stmt.c:1027 #, fuzzy msgid "asm clobber conflict with output operand" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: stmt.c:1031 +#: stmt.c:1032 #, fuzzy msgid "asm clobber conflict with input operand" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: stmt.c:1108 +#: stmt.c:1109 #, fuzzy msgid "too many alternatives in %" msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– \"%s\"" -#: stmt.c:1120 +#: stmt.c:1121 msgid "operand constraints for % differ in number of alternatives" msgstr "" -#: stmt.c:1173 +#: stmt.c:1174 #, fuzzy, c-format msgid "duplicate asm operand name %qs" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: stmt.c:1271 +#: stmt.c:1272 msgid "missing close brace for named operand" msgstr "" -#: stmt.c:1299 +#: stmt.c:1300 #, fuzzy, c-format msgid "undefined named operand %qs" msgstr "½µÑ€°Ñż°·½°½Ñ‹ °żµÑ€°Ñ‚°Ñ€ %s" -#: stmt.c:1464 +#: stmt.c:1465 msgid "%Hvalue computed is not used" msgstr "" @@ -6525,101 +6528,101 @@ msgstr "" msgid "ld returned %d exit status" msgstr "" -#: toplev.c:465 +#: toplev.c:469 #, c-format msgid "%s " msgstr "" -#: toplev.c:467 +#: toplev.c:471 #, c-format msgid " %s" msgstr "" -#: toplev.c:532 +#: toplev.c:536 #, fuzzy, c-format msgid "invalid option argument %qs" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: toplev.c:602 +#: toplev.c:606 #, fuzzy msgid "unrecoverable error" msgstr "у½ÑƒÑ‚Ñ€°½°Ñ ż°ĵыğş°" -#: toplev.c:622 +#: toplev.c:626 #, c-format msgid "getting core file size maximum limit: %m" msgstr "" -#: toplev.c:625 +#: toplev.c:629 #, c-format msgid "setting core file size limit to maximum: %m" msgstr "" -#: toplev.c:846 +#: toplev.c:850 msgid "%J%qF declared % but never defined" msgstr "" -#: toplev.c:872 +#: toplev.c:876 #, fuzzy msgid "%J%qD defined but not used" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹·½°Ñ‡°½°, °ğµ ½µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°µÑ†Ñ†°" -#: toplev.c:895 toplev.c:918 +#: toplev.c:899 toplev.c:922 #, c-format msgid "%qs is deprecated (declared at %s:%d)" msgstr "" -#: toplev.c:921 +#: toplev.c:925 #, c-format msgid "type is deprecated (declared at %s:%d)" msgstr "" -#: toplev.c:927 +#: toplev.c:931 #, c-format msgid "%qs is deprecated" msgstr "" -#: toplev.c:929 +#: toplev.c:933 msgid "type is deprecated" msgstr "" -#: toplev.c:1075 +#: toplev.c:1087 #, c-format msgid "" "\n" "Target specific options:\n" msgstr "" -#: toplev.c:1089 toplev.c:1108 +#: toplev.c:1101 toplev.c:1120 #, c-format msgid " -m%-23s [undocumented]\n" msgstr "" -#: toplev.c:1117 +#: toplev.c:1129 #, c-format msgid "" "\n" "There are undocumented target specific options as well.\n" msgstr "" -#: toplev.c:1119 +#: toplev.c:1131 #, c-format msgid " They exist, but they are not documented.\n" msgstr "" -#: toplev.c:1163 +#: toplev.c:1175 #, c-format msgid "unrecognized gcc debugging option: %c" msgstr "" #. Handle -mfix-and-continue. -#: toplev.c:1225 config/rs6000/rs6000.c:1384 config/rs6000/rs6000.c:1395 +#: toplev.c:1237 config/rs6000/rs6000.c:1400 config/rs6000/rs6000.c:1411 #: config/rs6000/darwin.h:106 #, fuzzy, c-format msgid "invalid option %qs" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ %s" -#: toplev.c:1240 +#: toplev.c:1252 #, c-format msgid "" "%s%s%s version %s (%s)\n" @@ -6630,339 +6633,349 @@ msgstr "" "%s\t·ş°ĵżÑ–ğя²°½° GNU C ²µÑ€ÑÑ–я %s.\n" "%s%s%s ²µÑ€ÑÑ–я %s (%s) ·ş°ĵżÑ–ğя²°½° CC.\n" -#: toplev.c:1247 +#: toplev.c:1259 #, c-format msgid "%s%sGGC heuristics: --param ggc-min-expand=%d --param ggc-min-heapsize=%d\n" msgstr "" -#: toplev.c:1299 +#: toplev.c:1311 msgid "options passed: " msgstr "" -#: toplev.c:1328 +#: toplev.c:1340 msgid "options enabled: " msgstr "²Ñ‹ħ°Ñ€Ñ‹ ўşğюч°½Ñ‹:" -#: toplev.c:1402 +#: toplev.c:1414 #, fuzzy msgid "can%'t open %s for writing: %m" msgstr "½µĵ°³Ñ‡Ñ‹ĵ° °´Ñ‡Ñ‹½Ñ–ць %s ´ğя ·°żÑ–су" -#: toplev.c:1485 config/sh/sh.c:7306 +#: toplev.c:1492 config/sh/sh.c:7334 msgid "created and used with different settings of -fpic" msgstr "" -#: toplev.c:1487 config/sh/sh.c:7308 +#: toplev.c:1494 config/sh/sh.c:7336 msgid "created and used with different settings of -fpie" msgstr "" -#: toplev.c:1538 config/sh/sh.c:7358 +#: toplev.c:1545 config/sh/sh.c:7386 #, c-format msgid "created and used with differing settings of '-m%s'" msgstr "" -#: toplev.c:1541 config/sh/sh.c:7361 +#: toplev.c:1548 config/sh/sh.c:7389 msgid "out of memory" msgstr "" -#: toplev.c:1736 +#: toplev.c:1756 msgid "instruction scheduling not supported on this target machine" msgstr "" -#: toplev.c:1740 +#: toplev.c:1760 msgid "this target machine does not have delayed branches" msgstr "" -#: toplev.c:1744 +#: toplev.c:1764 msgid "value-based profiling not yet implemented in trees." msgstr "" -#: toplev.c:1757 +#: toplev.c:1777 #, c-format msgid "-f%sleading-underscore not supported on this target machine" msgstr "" -#: toplev.c:1831 +#: toplev.c:1851 #, c-format msgid "target system does not support the \"%s\" debug format" msgstr "" -#: toplev.c:1843 +#: toplev.c:1863 msgid "variable tracking requested, but useless unless producing debug info" msgstr "" -#: toplev.c:1846 +#: toplev.c:1866 msgid "variable tracking requested, but not supported by this debug format" msgstr "" -#: toplev.c:1866 +#: toplev.c:1886 #, fuzzy msgid "can%'t open %s: %m" msgstr "½µĵ°³Ñ‡Ñ‹ĵ° °´Ñ‡Ñ‹½Ñ–ць %s" -#: toplev.c:1873 +#: toplev.c:1893 #, fuzzy msgid "-ffunction-sections not supported for this target" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: toplev.c:1878 +#: toplev.c:1898 #, fuzzy msgid "-fdata-sections not supported for this target" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: toplev.c:1885 +#: toplev.c:1905 msgid "-ffunction-sections disabled; it makes profiling impossible" msgstr "" -#: toplev.c:1892 +#: toplev.c:1912 #, fuzzy msgid "-fprefetch-loop-arrays not supported for this target" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: toplev.c:1898 +#: toplev.c:1918 #, fuzzy msgid "-fspeculative-prefetching not supported for this target" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: toplev.c:1904 +#: toplev.c:1924 msgid "-fprefetch-loop-arrays not supported for this target (try -march switches)" msgstr "" -#: toplev.c:1910 +#: toplev.c:1930 #, fuzzy msgid "-fspeculative-prefetching not supported for this target (try -march switches)" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: toplev.c:1919 +#: toplev.c:1939 msgid "-fprefetch-loop-arrays is not supported with -Os" msgstr "" -#: toplev.c:1925 +#: toplev.c:1945 msgid "-ffunction-sections may affect debugging on some targets" msgstr "" -#: toplev.c:2034 +#: toplev.c:2057 #, fuzzy, c-format msgid "error writing to %s: %m" msgstr "ż°ĵÑ‹ğş° ·°żÑ–су ў %s" -#: toplev.c:2036 java/jcf-parse.c:1059 java/jcf-write.c:3525 +#: toplev.c:2059 java/jcf-parse.c:1066 java/jcf-write.c:3538 #, fuzzy, c-format msgid "error closing %s: %m" msgstr "ż°ĵÑ‹ğş° ·°żÑ–су ў %s" -#: tree-cfg.c:1325 tree-cfg.c:2036 tree-cfg.c:2038 +#: tree-cfg.c:1355 tree-cfg.c:2073 tree-cfg.c:2075 msgid "%Hwill never be executed" msgstr "" -#: tree-cfg.c:3221 +#: tree-cfg.c:3289 msgid "SSA name in freelist but still referenced" msgstr "" -#: tree-cfg.c:3231 +#: tree-cfg.c:3299 msgid "GIMPLE register modified with BIT_FIELD_REF" msgstr "" -#: tree-cfg.c:3251 +#: tree-cfg.c:3327 msgid "address taken, but ADDRESSABLE bit not set" msgstr "" -#: tree-cfg.c:3260 +#: tree-cfg.c:3336 msgid "non-boolean used in condition" msgstr "" -#: tree-cfg.c:3316 +#: tree-cfg.c:3391 msgid "Invalid reference prefix." msgstr "" -#: tree-cfg.c:3381 +#: tree-cfg.c:3456 msgid "Is not a valid GIMPLE statement." msgstr "" -#: tree-cfg.c:3401 +#: tree-cfg.c:3476 msgid "Statement marked for throw, but doesn%'t." msgstr "" -#: tree-cfg.c:3406 +#: tree-cfg.c:3481 msgid "Statement marked for throw in middle of block." msgstr "" -#: tree-cfg.c:3509 +#: tree-cfg.c:3585 msgid "PHI def is not a GIMPLE value" msgstr "" -#: tree-cfg.c:3525 tree-cfg.c:3541 +#: tree-cfg.c:3601 tree-cfg.c:3617 msgid "Incorrect sharing of tree nodes" msgstr "" -#: tree-cfg.c:3550 +#: tree-cfg.c:3626 msgid "verify_stmts failed." msgstr "" -#: tree-cfg.c:3571 +#: tree-cfg.c:3647 msgid "ENTRY_BLOCK has a statement list associated with it\n" msgstr "" -#: tree-cfg.c:3577 +#: tree-cfg.c:3653 msgid "EXIT_BLOCK has a statement list associated with it\n" msgstr "" -#: tree-cfg.c:3584 +#: tree-cfg.c:3660 #, c-format msgid "Fallthru to exit from bb %d\n" msgstr "" -#: tree-cfg.c:3601 +#: tree-cfg.c:3682 +#, c-format +msgid "Nonlocal label %s is not first in a sequence of labels in bb %d" +msgstr "" + +#: tree-cfg.c:3691 #, c-format msgid "Label %s to block does not match in bb %d\n" msgstr "" -#: tree-cfg.c:3611 +#: tree-cfg.c:3700 #, c-format msgid "Label %s has incorrect context in bb %d\n" msgstr "" -#: tree-cfg.c:3625 +#: tree-cfg.c:3714 #, c-format msgid "Control flow in the middle of basic block %d\n" msgstr "" -#: tree-cfg.c:3635 +#: tree-cfg.c:3724 #, c-format msgid "Label %s in the middle of basic block %d\n" msgstr "" -#: tree-cfg.c:3652 +#: tree-cfg.c:3741 #, c-format msgid "Fallthru edge after a control statement in bb %d \n" msgstr "" -#: tree-cfg.c:3667 +#: tree-cfg.c:3756 #, c-format msgid "Structured COND_EXPR at the end of bb %d\n" msgstr "" -#: tree-cfg.c:3680 tree-cfg.c:3718 tree-cfg.c:3730 tree-cfg.c:3801 +#: tree-cfg.c:3769 tree-cfg.c:3807 tree-cfg.c:3819 tree-cfg.c:3890 #, c-format msgid "Wrong outgoing edge flags at end of bb %d\n" msgstr "" -#: tree-cfg.c:3688 +#: tree-cfg.c:3777 msgid "% label does not match edge at end of bb %d\n" msgstr "" -#: tree-cfg.c:3696 +#: tree-cfg.c:3785 msgid "% label does not match edge at end of bb %d\n" msgstr "" -#: tree-cfg.c:3706 +#: tree-cfg.c:3795 #, c-format msgid "Explicit goto at end of bb %d\n" msgstr "" -#: tree-cfg.c:3735 +#: tree-cfg.c:3824 #, c-format msgid "Return edge does not point to exit in bb %d\n" msgstr "" -#: tree-cfg.c:3768 +#: tree-cfg.c:3857 msgid "Found default case not at end of case vector" msgstr "" -#: tree-cfg.c:3774 +#: tree-cfg.c:3863 msgid "" "Case labels not sorted:\n" " " msgstr "" -#: tree-cfg.c:3785 +#: tree-cfg.c:3874 msgid "No default case found at end of case vector" msgstr "" -#: tree-cfg.c:3793 +#: tree-cfg.c:3882 #, c-format msgid "Extra outgoing edge %d->%d\n" msgstr "" -#: tree-cfg.c:3815 +#: tree-cfg.c:3904 #, fuzzy, c-format msgid "Missing edge %i->%i" msgstr "ŸÑ€°żÑƒÑˆÑ‡°½ і´Ñ½Ñ‚Ñ‹Ñ„Ñ–ş°Ñ‚°Ñ€" -#: tree-cfg.c:5516 +#: tree-cfg.c:5707 msgid "%Jfunction might be possible candidate for attribute %" msgstr "" -#: tree-cfg.c:5543 tree-cfg.c:5547 +#: tree-cfg.c:5734 tree-cfg.c:5738 msgid "%H% function does return" msgstr "" -#: tree-cfg.c:5567 tree-cfg.c:5572 +#: tree-cfg.c:5759 tree-cfg.c:5764 msgid "%Hcontrol reaches end of non-void function" msgstr "" -#: tree-dump.c:847 +#: tree-dump.c:849 #, fuzzy, c-format msgid "could not open dump file %qs: %s" msgstr "µĵ°³Ñ‡Ñ‹ĵ° °´Ñ‡Ñ‹½Ñ–ць ф°ığ · ´°´·µ½Ñ‹ĵі %s.\n" -#: tree-dump.c:960 +#: tree-dump.c:965 msgid "ignoring unknown option %q.*s in %<-fdump-%s%>" msgstr "" -#: tree-inline.c:945 +#: tree-inline.c:969 msgid "%Jfunction %qF can never be inlined because it uses alloca (override using the always_inline attribute)" msgstr "" -#: tree-inline.c:957 +#: tree-inline.c:981 msgid "%Jfunction %qF can never be inlined because it uses setjmp" msgstr "" -#: tree-inline.c:971 +#: tree-inline.c:995 msgid "%Jfunction %qF can never be inlined because it uses variable argument lists" msgstr "" -#: tree-inline.c:982 +#: tree-inline.c:1006 msgid "%Jfunction %qF can never be inlined because it uses setjmp-longjmp exception handling" msgstr "" -#: tree-inline.c:989 +#: tree-inline.c:1013 msgid "%Jfunction %qF can never be inlined because it uses non-local goto" msgstr "" -#: tree-inline.c:1008 +#: tree-inline.c:1032 msgid "%Jfunction %qF can never be inlined because it contains a computed goto" msgstr "" -#: tree-inline.c:1022 +#: tree-inline.c:1046 msgid "%Jfunction %qF can never be inlined because it receives a non-local goto" msgstr "" -#: tree-inline.c:1044 +#: tree-inline.c:1071 msgid "%Jfunction %qF can never be inlined because it uses variable sized variables" msgstr "" -#: tree-inline.c:1463 +#: tree-inline.c:1495 msgid "originally indirect function call not considered for inlining" msgstr "" -#: tree-inline.c:1473 tree-inline.c:1481 +#: tree-inline.c:1505 tree-inline.c:1513 msgid "%Jinlining failed in call to %qF: %s" msgstr "" -#: tree-inline.c:1474 tree-inline.c:1482 +#: tree-inline.c:1506 tree-inline.c:1514 msgid "called from here" msgstr "²Ñ‹şğіş°½° °´ÑÑŽğь" -#: tree-mudflap.c:851 +#: tree-inline.c:1628 +msgid "control may reach end of non-void function %qD being inlined" +msgstr "" + +#: tree-mudflap.c:857 msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF" msgstr "" -#: tree-mudflap.c:1042 -msgid "mudflap ran off end of BIND_EXPR body" +#: tree-mudflap.c:1048 +#, c-format +msgid "mudflap cannot track %qs in stub function" msgstr "" -#: tree-mudflap.c:1270 +#: tree-mudflap.c:1279 #, c-format msgid "mudflap cannot track unknown size extern %qs" msgstr "" @@ -6972,38 +6985,38 @@ msgstr "" msgid "mudflap: this language is not supported" msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°" -#: tree-optimize.c:698 +#: tree-optimize.c:720 #, fuzzy msgid "%Jsize of return value of %qD is %u bytes" msgstr "ż°ĵµÑ€ ²ÑÑ€Ñ‚°µĵ°³° ·½°Ñ‡Ñ½½Ñ \"%s\" %u ħ°ıт" -#: tree-optimize.c:701 +#: tree-optimize.c:723 #, fuzzy msgid "%Jsize of return value of %qD is larger than %wd bytes" msgstr "ż°ĵµÑ€ ²ÑÑ€Ñ‚°µĵ°³° ·½°Ñ‡Ñ½½Ñ \"%s\" ħğьш чыĵ %d ħ°ıт" -#: tree-outof-ssa.c:600 tree-outof-ssa.c:615 tree-outof-ssa.c:629 -#: tree-outof-ssa.c:650 tree-outof-ssa.c:1023 tree-outof-ssa.c:1834 +#: tree-outof-ssa.c:610 tree-outof-ssa.c:625 tree-outof-ssa.c:639 +#: tree-outof-ssa.c:661 tree-outof-ssa.c:1029 tree-outof-ssa.c:1865 #: tree-ssa-live.c:417 tree-ssa-live.c:1799 msgid "SSA corruption" msgstr "" -#: tree-outof-ssa.c:2239 +#: tree-outof-ssa.c:2270 #, c-format msgid " Pending stmts not issued on PRED edge (%d, %d)\n" msgstr "" -#: tree-outof-ssa.c:2245 +#: tree-outof-ssa.c:2276 #, c-format msgid " Pending stmts not issued on SUCC edge (%d, %d)\n" msgstr "" -#: tree-outof-ssa.c:2252 +#: tree-outof-ssa.c:2283 #, c-format msgid " Pending stmts not issued on ENTRY edge (%d, %d)\n" msgstr "" -#: tree-outof-ssa.c:2258 +#: tree-outof-ssa.c:2289 #, c-format msgid " Pending stmts not issued on EXIT edge (%d, %d)\n" msgstr "" @@ -7013,294 +7026,299 @@ msgstr "" msgid "unimplemented functionality" msgstr "²µğьĵі шĵ°Ñ‚ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ–" -#: tree-ssa-operands.c:1260 +#: tree-ssa-operands.c:1273 msgid "internal error" msgstr "у½ÑƒÑ‚Ñ€°½°Ñ ż°ĵыğş°" -#: tree-ssa.c:117 +#: tree-ssa.c:113 msgid "Expected an SSA_NAME object" msgstr "" -#: tree-ssa.c:123 +#: tree-ssa.c:119 msgid "Type mismatch between an SSA_NAME and its symbol." msgstr "" -#: tree-ssa.c:129 +#: tree-ssa.c:125 msgid "Found an SSA_NAME that had been released into the free pool" msgstr "" -#: tree-ssa.c:135 +#: tree-ssa.c:131 msgid "Found a virtual definition for a GIMPLE register" msgstr "" -#: tree-ssa.c:141 +#: tree-ssa.c:137 msgid "Found a real definition for a non-register" msgstr "" -#: tree-ssa.c:170 +#: tree-ssa.c:166 #, c-format msgid "SSA_NAME created in two different blocks %i and %i" msgstr "" -#: tree-ssa.c:179 +#: tree-ssa.c:175 msgid "SSA_NAME_DEF_STMT is wrong" msgstr "" -#: tree-ssa.c:230 +#: tree-ssa.c:227 #, fuzzy msgid "Missing definition" msgstr "ŸÑ€°żÑƒÑˆÑ‡°½ і´Ñ½Ñ‚Ñ‹Ñ„Ñ–ş°Ñ‚°Ñ€" -#: tree-ssa.c:236 +#: tree-ssa.c:233 #, c-format msgid "Definition in block %i does not dominate use in block %i" msgstr "" -#: tree-ssa.c:244 +#: tree-ssa.c:241 #, c-format msgid "Definition in block %i follows the use" msgstr "" -#: tree-ssa.c:251 +#: tree-ssa.c:248 msgid "SSA_NAME_OCCURS_IN_ABNORMAL_PHI should be set" msgstr "" -#: tree-ssa.c:283 +#: tree-ssa.c:280 msgid "Incoming edge count does not match number of PHI arguments\n" msgstr "" -#: tree-ssa.c:296 +#: tree-ssa.c:293 #, fuzzy, c-format msgid "PHI argument is missing for edge %d->%d\n" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: tree-ssa.c:305 +#: tree-ssa.c:302 msgid "PHI argument is not SSA_NAME, or invariant" msgstr "" -#: tree-ssa.c:317 +#: tree-ssa.c:314 #, c-format msgid "Wrong edge %d->%d for PHI argument\n" msgstr "" -#: tree-ssa.c:367 +#: tree-ssa.c:364 msgid "Non-addressable variable inside an alias set." msgstr "" -#: tree-ssa.c:385 +#: tree-ssa.c:382 msgid "Addressable variable that is an alias tag but is not in any alias set." msgstr "" -#: tree-ssa.c:395 +#: tree-ssa.c:392 msgid "verify_flow_insensitive_alias_info failed." msgstr "" -#: tree-ssa.c:437 +#: tree-ssa.c:434 msgid "Dereferenced pointers should have a name or a type tag" msgstr "" -#: tree-ssa.c:445 +#: tree-ssa.c:442 msgid "Pointers with a memory tag, should have points-to sets or point to malloc" msgstr "" -#: tree-ssa.c:453 +#: tree-ssa.c:450 msgid "Pointer escapes but its name tag is not call-clobbered." msgstr "" -#: tree-ssa.c:462 +#: tree-ssa.c:459 msgid "verify_flow_sensitive_alias_info failed." msgstr "" -#: tree-ssa.c:513 +#: tree-ssa.c:535 +msgid "Alias set of a pointer's type tag should be a superset of the corresponding name tag" +msgstr "" + +#: tree-ssa.c:551 msgid "Two different pointers with identical points-to sets but different name tags" msgstr "" -#: tree-ssa.c:540 +#: tree-ssa.c:580 msgid "verify_name_tags failed" msgstr "" -#: tree-ssa.c:605 +#: tree-ssa.c:647 #, c-format msgid "AUX pointer initialized for edge %d->%d\n" msgstr "" -#: tree-ssa.c:630 +#: tree-ssa.c:672 msgid "Statement makes aliased stores, but has no V_MAY_DEFS" msgstr "" -#: tree-ssa.c:668 +#: tree-ssa.c:710 msgid "verify_ssa failed." msgstr "" -#: tree-ssa.c:1329 +#: tree-ssa.c:1376 #, fuzzy msgid "%H%qD is used uninitialized in this function" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: tree-ssa.c:1354 +#: tree-ssa.c:1401 msgid "%H%qD may be used uninitialized in this function" msgstr "" -#: tree-vectorizer.c:2138 +#: tree-vect-transform.c:598 msgid "no support for reduction/induction" msgstr "" -#: tree-vectorizer.c:2164 +#: tree-vect-transform.c:624 #, fuzzy msgid "unsupported defining stmt" msgstr "½µż°´Ñ‚рыĵğі²°µĵ°Ñ ²µÑ€ÑÑ–я" -#: tree.c:3258 +#: tree.c:3272 msgid "%Jfunction %qD definition is marked dllimport." msgstr "" -#: tree.c:3266 +#: tree.c:3280 msgid "%Jvariable %qD definition is marked dllimport." msgstr "" -#: tree.c:3286 +#: tree.c:3300 msgid "%Jexternal linkage required for symbol %qD because of %qs attribute." msgstr "" -#: tree.c:4428 +#: tree.c:4453 msgid "arrays of functions are not meaningful" msgstr "" -#: tree.c:4480 +#: tree.c:4505 msgid "function return type cannot be function" msgstr "" -#: tree.c:5362 +#: tree.c:5398 msgid "invalid initializer for bit string" msgstr "" -#: tree.c:5446 +#: tree.c:5482 #, c-format msgid "tree check: %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:5483 +#: tree.c:5519 #, c-format msgid "tree check: expected none of %s, have %s in %s, at %s:%d" msgstr "" -#: tree.c:5496 +#: tree.c:5532 #, c-format msgid "tree check: expected class %qs, have %qs (%s) in %s, at %s:%d" msgstr "" -#: tree.c:5510 +#: tree.c:5546 #, c-format msgid "tree check: accessed elt %d of tree_vec with %d elts in %s, at %s:%d" msgstr "" -#: tree.c:5522 +#: tree.c:5558 #, c-format msgid "tree check: accessed elt %d of phi_node with %d elts in %s, at %s:%d" msgstr "" -#: tree.c:5534 +#: tree.c:5570 #, c-format msgid "tree check: accessed operand %d of %s with %d operands in %s, at %s:%d" msgstr "" -#: varasm.c:476 +#: varasm.c:477 msgid "%J%D causes a section type conflict" msgstr "" -#: varasm.c:910 +#: varasm.c:911 msgid "%Jregister name not specified for %qD" msgstr "" -#: varasm.c:912 +#: varasm.c:913 #, fuzzy msgid "%Jinvalid register name for %qD" msgstr "½µÑ€ÑÑ‡°Ñ–с½°Ñ ½°·²° рэ³Ñ–стр° `%s'" -#: varasm.c:914 +#: varasm.c:915 msgid "%Jdata type of %qD isn%'t suitable for a register" msgstr "" -#: varasm.c:917 +#: varasm.c:918 msgid "%Jregister specified for %qD isn%'t suitable for data type" msgstr "" -#: varasm.c:927 +#: varasm.c:928 msgid "global register variable has initial value" msgstr "" -#: varasm.c:930 +#: varasm.c:931 msgid "volatile register variables don%'t work as you might wish" msgstr "" -#: varasm.c:963 +#: varasm.c:968 msgid "%Jregister name given for non-register variable %qD" msgstr "" -#: varasm.c:1038 +#: varasm.c:1046 #, fuzzy msgid "global destructors not supported on this target" msgstr "__buitin_saveregs ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†° ³ÑÑ‚°ı ĵэт°ı" -#: varasm.c:1099 +#: varasm.c:1107 #, fuzzy msgid "global constructors not supported on this target" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" -#: varasm.c:1592 +#: varasm.c:1607 msgid "%Jalignment of %qD is greater than maximum object file alignment. Using %d" msgstr "" -#: varasm.c:1641 +#: varasm.c:1646 msgid "thread-local COMMON data not implemented" msgstr "" -#: varasm.c:1666 +#: varasm.c:1671 msgid "%Jrequested alignment for %qD is greater than implemented alignment of %d" msgstr "" -#: varasm.c:3736 +#: varasm.c:3772 msgid "initializer for integer value is too complicated" msgstr "" -#: varasm.c:3741 +#: varasm.c:3777 msgid "initializer for floating value is not a floating constant" msgstr "" -#: varasm.c:3807 -msgid "unknown set constructor type" -msgstr "" - -#: varasm.c:4026 +#: varasm.c:4046 #, fuzzy, c-format msgid "invalid initial value for member %qs" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: varasm.c:4213 varasm.c:4257 +#: varasm.c:4233 varasm.c:4277 msgid "%Jweak declaration of %qD must precede definition" msgstr "" -#: varasm.c:4221 +#: varasm.c:4241 msgid "%Jweak declaration of %qD after first use results in unspecified behavior" msgstr "" -#: varasm.c:4255 +#: varasm.c:4275 msgid "%Jweak declaration of %qD must be public" msgstr "" -#: varasm.c:4264 +#: varasm.c:4284 msgid "%Jweak declaration of %qD not supported" msgstr "" -#: varasm.c:4293 varasm.c:4386 +#: varasm.c:4313 varasm.c:4462 msgid "only weak aliases are supported in this configuration" msgstr "" -#: varasm.c:4389 +#: varasm.c:4465 msgid "alias definitions not supported in this configuration; ignored" msgstr "" -#: varasm.c:4418 +#: varasm.c:4504 +#, fuzzy +msgid "%qD aliased to undefined symbol %qE" +msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" + +#: varasm.c:4532 #, fuzzy msgid "visibility attribute not supported in this configuration; ignored" msgstr "°Ñ‚рыħуты сµşÑ†Ñ‹Ñ– ½µ ż°´Ñ‚рыĵğі²°ÑŽÑ†Ñ†° ´ğя ³ÑÑ‚°ı ĵэты" @@ -7366,11 +7384,11 @@ msgid "debug: " msgstr "" #: params.def:44 -msgid "The maximum structure size (in bytes) at which GCC will do block copies." +msgid "The maximum structure size (in bytes) at which GCC will do block copies" msgstr "" #: params.def:54 -msgid "The threshold ratio between instantiated fields and the total structure size." +msgid "The threshold ratio between instantiated fields and the total structure size" msgstr "" #: params.def:72 @@ -7397,203 +7415,211 @@ msgstr "" msgid "The maximum depth of recursive inlining for non-inline functions" msgstr "" -#: params.def:114 -msgid "The maximum number of instructions for the RTL inliner" -msgstr "" - -#: params.def:121 +#: params.def:111 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:134 +#: params.def:124 msgid "The maximum number of instructions to consider to fill a delay slot" msgstr "" -#: params.def:145 +#: params.def:135 msgid "The maximum number of instructions to consider to find accurate live register information" msgstr "" -#: params.def:155 +#: params.def:145 msgid "The maximum length of scheduling's pending operations list" msgstr "" -#: params.def:160 +#: params.def:150 msgid "The size of function body to be considered large" msgstr "" -#: params.def:164 +#: params.def:154 msgid "Maximal growth due to inlining of large function (in percent)" msgstr "" -#: params.def:168 +#: params.def:158 msgid "how much can given compilation unit grow because of the inlining (in percent)" msgstr "" -#: params.def:175 +#: params.def:165 msgid "The maximum amount of memory to be allocated by GCSE" msgstr "" -#: params.def:180 +#: params.def:170 msgid "The maximum number of passes to make when doing GCSE" msgstr "" -#: params.def:190 -msgid "The threshold ratio for performing partial redundancy elimination after reload." +#: params.def:180 +msgid "The threshold ratio for performing partial redundancy elimination after reload." msgstr "" -#: params.def:198 -msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload." +#: params.def:187 +msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload." msgstr "" -#: params.def:210 +#: params.def:198 msgid "The maximum number of instructions to consider to unroll in a loop" msgstr "" -#: params.def:216 +#: params.def:204 msgid "The maximum number of instructions to consider to unroll in a loop on average" msgstr "" -#: params.def:221 +#: params.def:209 msgid "The maximum number of unrollings of a single loop" msgstr "" -#: params.def:226 +#: params.def:214 msgid "The maximum number of insns of a peeled loop" msgstr "" -#: params.def:231 +#: params.def:219 msgid "The maximum number of peelings of a single loop" msgstr "" -#: params.def:236 +#: params.def:224 msgid "The maximum number of insns of a completely peeled loop" msgstr "" -#: params.def:241 +#: params.def:229 msgid "The maximum number of peelings of a single loop that is peeled completely" msgstr "" -#: params.def:246 +#: params.def:234 msgid "The maximum number of insns of a peeled loop that rolls only once" msgstr "" -#: params.def:252 +#: params.def:240 msgid "The maximum number of insns of an unswitched loop" msgstr "" -#: params.def:257 +#: params.def:245 msgid "The maximum number of unswitchings in a single loop" msgstr "" -#: params.def:264 -msgid "Bound on the number of iterations the brute force # of iterations \t analysis algorithm evaluates" +#: params.def:252 +msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates" msgstr "" -#: params.def:270 -msgid "Maximum number of loops to perform swing modulo scheduling on \t (mainly for debugging)" +#: params.def:257 +msgid "Maximum number of loops to perform swing modulo scheduling on (mainly for debugging)" msgstr "" -#: params.def:277 -msgid "A factor for tuning the upper bound that swing modulo scheduler uses \t for scheduling a loop" +#: params.def:263 +msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop" msgstr "" -#: params.def:282 +#: params.def:267 msgid "The number of cycles the swing modulo scheduler considers when \t checking conflicts using DFA" msgstr "" -#: params.def:287 -msgid "A threshold on the average loop count considered by the swing modulo \t scheduler" +#: params.def:272 +msgid "A threshold on the average loop count considered by the swing modulo scheduler" msgstr "" -#: params.def:293 +#: params.def:277 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:298 +#: params.def:281 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:303 +#: params.def:285 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:308 +#: params.def:289 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:313 +#: params.def:293 msgid "Maximal code growth caused by tail duplication (in percent)" msgstr "" -#: params.def:317 +#: params.def:297 msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)" msgstr "" -#: params.def:322 +#: params.def:301 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:327 +#: params.def:305 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:334 +#: params.def:311 msgid "The maximum number of incoming edges to consider for crossjumping" msgstr "" -#: params.def:340 +#: params.def:317 msgid "The minimum number of matching instructions to consider for crossjumping" msgstr "" -#: params.def:346 +#: params.def:323 +msgid "The maximum number of insns to duplicate when unfactoring computed gotos" +msgstr "" + +#: params.def:329 msgid "The maximum length of path considered in cse" msgstr "" -#: params.def:353 +#: params.def:336 msgid "The minimum cost of an expensive expression in the loop invariant motion" msgstr "" -#: params.def:362 +#: params.def:345 msgid "Bound on number of candidates below that all candidates are considered in iv optimizations" msgstr "" -#: params.def:370 +#: params.def:353 msgid "Bound on number of iv uses in loop optimized in iv optimizations" msgstr "" -#: params.def:377 +#: params.def:361 +msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization" +msgstr "" + +#: params.def:368 msgid "Given N calls and V call-clobbered vars in a function. Use .GLOBAL_VAR if NxV is larger than this limit" msgstr "" -#: params.def:382 +#: params.def:373 msgid "The maximum memory locations recorded by cselib" msgstr "" -#: params.def:395 +#: params.def:386 msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap" msgstr "" -#: params.def:401 +#: params.def:391 msgid "Minimum heap size before we start collecting garbage, in kilobytes" msgstr "" -#: params.def:409 +#: params.def:399 msgid "The maximum number of instructions to search backward when looking for equivalent reload" msgstr "" -#: params.def:414 +#: params.def:404 msgid "The maximum number of virtual operands allowed to represent aliases before triggering alias grouping." msgstr "" -#: params.def:419 +#: params.def:409 msgid "The maximum number of blocks in a region to be considered for interblock scheduling" msgstr "" -#: params.def:424 +#: params.def:414 msgid "The maximum number of insns in a region to be considered for interblock scheduling" msgstr "" -#: params.def:432 +#: params.def:419 +msgid "The maximum number of RTL nodes that can be recorded as combiner's last value" +msgstr "" + +#: params.def:427 msgid "The upper bound for sharing integer constants" msgstr "" @@ -7631,8 +7657,8 @@ msgstr "" msgid "subframework include %s conflicts with framework include" msgstr "" -#: config/darwin.c:1332 -msgid "internal and protected visibility attributes not supportedin this configuration; ignored" +#: config/darwin.c:1350 +msgid "internal and protected visibility attributes not supported in this configuration; ignored" msgstr "" #: config/sol2-c.c:94 config/sol2-c.c:110 @@ -7683,16 +7709,16 @@ msgstr "" msgid "%Jignoring %<#pragma align%> for explicitly aligned %<%D%>" msgstr "" -#: config/darwin.h:152 +#: config/darwin.h:155 msgid "Set sizeof(bool) to 1" msgstr "" -#: config/darwin.h:154 +#: config/darwin.h:157 #, fuzzy msgid "Generate code suitable for fast turn around debugging" msgstr "Ħт²°Ñ€Ñ‹Ñ†ÑŒ ş´ ´ğя DLL" -#: config/darwin.h:156 +#: config/darwin.h:159 #, fuzzy msgid "Don't generate code suitable for fast turn around debugging" msgstr "µ ³µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ сіĵ²°ğь½Ñ‹Ñ і½ÑÑ‚руşÑ†Ñ‹Ñ–" @@ -7702,7 +7728,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:388 +#: config/darwin.h:395 #, fuzzy msgid "alias definitions not supported in Mach-O; ignored" msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°" @@ -7753,7 +7779,7 @@ msgstr "" msgid "bad value %qs for -mfp-trap-mode switch" msgstr "" -#: config/alpha/alpha.c:347 config/rs6000/rs6000.c:1705 +#: config/alpha/alpha.c:347 config/rs6000/rs6000.c:1720 #, c-format msgid "bad value %qs for -mtls-size switch" msgstr "" @@ -7793,91 +7819,91 @@ msgstr "" msgid "bad value %qs for -mmemory-latency" msgstr "" -#: config/alpha/alpha.c:4598 +#: config/alpha/alpha.c:4764 #, c-format msgid "invalid %%H value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%H" -#: config/alpha/alpha.c:4619 +#: config/alpha/alpha.c:4785 #, fuzzy, c-format msgid "invalid %%J value" msgstr "´Ñ€Ñ½½°µ %%Q ·½°Ñ‡Ñ½½µ" -#: config/alpha/alpha.c:4635 config/ia64/ia64.c:3739 +#: config/alpha/alpha.c:4801 config/ia64/ia64.c:4133 #, c-format msgid "invalid %%r value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%r" -#: config/alpha/alpha.c:4645 config/rs6000/rs6000.c:10711 +#: config/alpha/alpha.c:4811 config/rs6000/rs6000.c:10799 #: config/xtensa/xtensa.c:1951 #, c-format msgid "invalid %%R value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%R" -#: config/alpha/alpha.c:4651 config/rs6000/rs6000.c:10630 +#: config/alpha/alpha.c:4817 config/rs6000/rs6000.c:10718 #: config/xtensa/xtensa.c:1918 #, c-format msgid "invalid %%N value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%N" -#: config/alpha/alpha.c:4659 config/rs6000/rs6000.c:10658 +#: config/alpha/alpha.c:4825 config/rs6000/rs6000.c:10746 #, c-format msgid "invalid %%P value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%P" -#: config/alpha/alpha.c:4667 +#: config/alpha/alpha.c:4833 #, c-format msgid "invalid %%h value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%h" -#: config/alpha/alpha.c:4675 config/xtensa/xtensa.c:1944 +#: config/alpha/alpha.c:4841 config/xtensa/xtensa.c:1944 #, c-format msgid "invalid %%L value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%L" -#: config/alpha/alpha.c:4714 config/rs6000/rs6000.c:10612 +#: config/alpha/alpha.c:4880 config/rs6000/rs6000.c:10700 #, c-format msgid "invalid %%m value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%m" -#: config/alpha/alpha.c:4722 config/rs6000/rs6000.c:10620 +#: config/alpha/alpha.c:4888 config/rs6000/rs6000.c:10708 #, c-format msgid "invalid %%M value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%M" -#: config/alpha/alpha.c:4766 +#: config/alpha/alpha.c:4932 #, c-format msgid "invalid %%U value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%U" -#: config/alpha/alpha.c:4778 config/alpha/alpha.c:4792 -#: config/rs6000/rs6000.c:10719 +#: config/alpha/alpha.c:4944 config/alpha/alpha.c:4958 +#: config/rs6000/rs6000.c:10807 #, c-format msgid "invalid %%s value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%v" -#: config/alpha/alpha.c:4815 +#: config/alpha/alpha.c:4981 #, c-format msgid "invalid %%C value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%C" -#: config/alpha/alpha.c:4852 config/rs6000/rs6000.c:10449 -#: config/rs6000/rs6000.c:10469 +#: config/alpha/alpha.c:5018 config/rs6000/rs6000.c:10537 +#: config/rs6000/rs6000.c:10557 #, c-format msgid "invalid %%E value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%E" -#: config/alpha/alpha.c:4877 config/alpha/alpha.c:4925 +#: config/alpha/alpha.c:5043 config/alpha/alpha.c:5091 msgid "unknown relocation unspec" msgstr "" -#: config/alpha/alpha.c:4886 config/rs6000/rs6000.c:11037 +#: config/alpha/alpha.c:5052 config/rs6000/rs6000.c:11125 #, c-format msgid "invalid %%xn code" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%xn" -#: config/alpha/alpha.c:5846 config/alpha/alpha.c:5849 config/s390/s390.c:7776 -#: config/s390/s390.c:7779 +#: config/alpha/alpha.c:6037 config/alpha/alpha.c:6040 config/s390/s390.c:8030 +#: config/s390/s390.c:8033 msgid "bad builtin fcode" msgstr "" @@ -7894,14 +7920,14 @@ msgstr "" #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. -#: config/alpha/alpha.h:293 config/i386/i386.h:336 config/i386/i386.h:338 -#: config/i386/i386.h:340 config/ns32k/ns32k.h:140 config/s390/s390.h:134 -#: config/sparc/sparc.h:616 config/sparc/sparc.h:621 +#: config/alpha/alpha.h:293 config/i386/i386.h:335 config/i386/i386.h:337 +#: config/i386/i386.h:339 config/ns32k/ns32k.h:140 config/s390/s390.h:134 +#: config/sparc/sparc.h:622 config/sparc/sparc.h:627 msgid "Use hardware fp" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ °ż°Ñ€°Ñ‚½ÑƒÑŽ żğ°²°ÑŽÑ‡ÑƒÑŽ şÑ€żşÑƒ" -#: config/alpha/alpha.h:294 config/i386/i386.h:337 config/i386/i386.h:339 -#: config/sparc/sparc.h:618 config/sparc/sparc.h:623 +#: config/alpha/alpha.h:294 config/i386/i386.h:336 config/i386/i386.h:338 +#: config/sparc/sparc.h:624 config/sparc/sparc.h:629 msgid "Do not use hardware fp" msgstr "µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ °ż°Ñ€°Ñ‚½ÑƒÑŽ żğ°²°ÑŽÑ‡ÑƒÑŽ şÑ€żşÑƒ" @@ -8021,7 +8047,7 @@ msgstr "" msgid "Tune expected memory latency" msgstr "" -#: config/alpha/alpha.h:376 config/ia64/ia64.h:284 config/rs6000/sysv4.h:90 +#: config/alpha/alpha.h:376 config/ia64/ia64.h:278 config/rs6000/sysv4.h:90 msgid "Specify bit size of immediate TLS offsets" msgstr "" @@ -8040,17 +8066,17 @@ msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½Ñ msgid "argument of %qs attribute is not \"ilink1\" or \"ilink2\"" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: config/arc/arc.c:1739 config/m32r/m32r.c:2130 +#: config/arc/arc.c:1739 config/m32r/m32r.c:2141 #, fuzzy, c-format msgid "invalid operand to %%R code" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%-ş´" -#: config/arc/arc.c:1771 config/m32r/m32r.c:2153 +#: config/arc/arc.c:1771 config/m32r/m32r.c:2164 #, fuzzy, c-format msgid "invalid operand to %%H/%%L code" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%-ş´" -#: config/arc/arc.c:1794 config/m32r/m32r.c:2224 +#: config/arc/arc.c:1794 config/m32r/m32r.c:2235 #, fuzzy, c-format msgid "invalid operand to %%U code" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%-ş´" @@ -8062,167 +8088,167 @@ msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%-ş´" #. Unknown flag. #. Undocumented flag. -#: config/arc/arc.c:1812 config/m32r/m32r.c:2251 config/sparc/sparc.c:7507 +#: config/arc/arc.c:1812 config/m32r/m32r.c:2262 config/sparc/sparc.c:7517 msgid "invalid operand output code" msgstr "" -#: config/arm/arm.c:786 +#: config/arm/arm.c:800 #, c-format msgid "switch -mcpu=%s conflicts with -march= switch" msgstr "" -#: config/arm/arm.c:796 config/rs6000/rs6000.c:1220 config/sparc/sparc.c:641 +#: config/arm/arm.c:810 config/rs6000/rs6000.c:1230 config/sparc/sparc.c:648 #, c-format msgid "bad value (%s) for %s switch" msgstr "" -#: config/arm/arm.c:905 +#: config/arm/arm.c:919 msgid "target CPU does not support interworking" msgstr "" -#: config/arm/arm.c:911 +#: config/arm/arm.c:925 #, fuzzy msgid "target CPU does not support THUMB instructions" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ цэğ°ğіş°²Ñ‹Ñ тыżÑ‹" -#: config/arm/arm.c:925 +#: config/arm/arm.c:939 msgid "enabling backtrace support is only meaningful when compiling for the Thumb" msgstr "" -#: config/arm/arm.c:928 +#: config/arm/arm.c:942 msgid "enabling callee interworking support is only meaningful when compiling for the Thumb" msgstr "" -#: config/arm/arm.c:931 +#: config/arm/arm.c:945 msgid "enabling caller interworking support is only meaningful when compiling for the Thumb" msgstr "" -#: config/arm/arm.c:935 +#: config/arm/arm.c:949 msgid "-mapcs-stack-check incompatible with -mno-apcs-frame" msgstr "" -#: config/arm/arm.c:943 +#: config/arm/arm.c:957 msgid "-fpic and -mapcs-reent are incompatible" msgstr "" -#: config/arm/arm.c:946 +#: config/arm/arm.c:960 msgid "APCS reentrant code not supported. Ignored" msgstr "" -#: config/arm/arm.c:954 +#: config/arm/arm.c:968 msgid "-g with -mno-apcs-frame may not give sensible debugging" msgstr "" -#: config/arm/arm.c:962 +#: config/arm/arm.c:976 msgid "passing floating point arguments in fp regs not yet supported" msgstr "" -#: config/arm/arm.c:1004 +#: config/arm/arm.c:1018 #, fuzzy, c-format msgid "invalid ABI option: -mabi=%s" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ %s" -#: config/arm/arm.c:1010 +#: config/arm/arm.c:1024 msgid "iwmmxt requires an AAPCS compatible ABI for proper operation" msgstr "" -#: config/arm/arm.c:1013 +#: config/arm/arm.c:1027 msgid "iwmmxt abi requires an iwmmxt capable cpu" msgstr "" -#: config/arm/arm.c:1023 +#: config/arm/arm.c:1037 #, c-format msgid "invalid floating point emulation option: -mfpe=%s" msgstr "" -#: config/arm/arm.c:1040 +#: config/arm/arm.c:1054 #, fuzzy, c-format msgid "invalid floating point option: -mfpu=%s" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ --param : %s" -#: config/arm/arm.c:1081 +#: config/arm/arm.c:1095 #, c-format msgid "invalid floating point abi: -mfloat-abi=%s" msgstr "" -#: config/arm/arm.c:1096 +#: config/arm/arm.c:1110 msgid "-mfloat-abi=hard and VFP" msgstr "" -#: config/arm/arm.c:1122 +#: config/arm/arm.c:1136 #, c-format msgid "structure size boundary can only be set to %s" msgstr "" -#: config/arm/arm.c:1131 +#: config/arm/arm.c:1145 msgid "-mpic-register= is useless without -fpic" msgstr "" -#: config/arm/arm.c:1138 +#: config/arm/arm.c:1152 #, c-format msgid "unable to use '%s' for PIC register" msgstr "" -#: config/arm/arm.c:2613 config/arm/arm.c:2631 config/avr/avr.c:4533 -#: config/c4x/c4x.c:4499 config/h8300/h8300.c:5755 config/i386/i386.c:1697 -#: config/i386/i386.c:1743 config/ip2k/ip2k.c:3181 -#: config/m68hc11/m68hc11.c:1350 config/m68k/m68k.c:288 -#: config/mcore/mcore.c:3375 config/ns32k/ns32k.c:1068 -#: config/rs6000/rs6000.c:17129 config/sh/sh.c:7160 config/sh/sh.c:7181 -#: config/sh/sh.c:7216 config/stormy16/stormy16.c:2413 config/v850/v850.c:2207 +#: config/arm/arm.c:2669 config/arm/arm.c:2687 config/avr/avr.c:4620 +#: config/c4x/c4x.c:4499 config/h8300/h8300.c:5755 config/i386/i386.c:1704 +#: config/i386/i386.c:1750 config/ip2k/ip2k.c:3182 +#: config/m68hc11/m68hc11.c:1348 config/m68k/m68k.c:288 +#: config/mcore/mcore.c:3379 config/ns32k/ns32k.c:1073 +#: config/rs6000/rs6000.c:17260 config/sh/sh.c:7188 config/sh/sh.c:7209 +#: config/sh/sh.c:7244 config/stormy16/stormy16.c:2413 config/v850/v850.c:2210 #, fuzzy, c-format msgid "%qs attribute only applies to functions" msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: config/arm/arm.c:10385 config/arm/arm.c:10403 +#: config/arm/arm.c:10454 config/arm/arm.c:10472 #, fuzzy msgid "predicated Thumb instruction" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: config/arm/arm.c:10391 +#: config/arm/arm.c:10460 msgid "predicated instruction in conditional sequence" msgstr "" -#: config/arm/arm.c:10499 config/arm/arm.c:10509 config/arm/arm.c:10519 -#: config/arm/arm.c:10545 config/arm/arm.c:10563 config/arm/arm.c:10598 -#: config/arm/arm.c:10617 config/arm/arm.c:10632 config/arm/arm.c:10658 -#: config/arm/arm.c:10665 config/arm/arm.c:10672 +#: config/arm/arm.c:10568 config/arm/arm.c:10578 config/arm/arm.c:10588 +#: config/arm/arm.c:10614 config/arm/arm.c:10632 config/arm/arm.c:10667 +#: config/arm/arm.c:10686 config/arm/arm.c:10701 config/arm/arm.c:10727 +#: config/arm/arm.c:10734 config/arm/arm.c:10741 #, fuzzy, c-format msgid "invalid operand for code '%c'" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: config/arm/arm.c:10558 +#: config/arm/arm.c:10627 msgid "instruction never exectued" msgstr "" -#: config/arm/arm.c:10683 +#: config/arm/arm.c:10752 #, fuzzy msgid "missing operand" msgstr "żÑ€°żÑƒÑˆÑ‡°½ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: config/arm/arm.c:11449 +#: config/arm/arm.c:11518 msgid "unable to compute real location of stacked parameter" msgstr "" #. @@@ better error message -#: config/arm/arm.c:12082 config/arm/arm.c:12119 +#: config/arm/arm.c:12151 config/arm/arm.c:12188 msgid "selector must be an immediate" msgstr "" #. @@@ better error message -#: config/arm/arm.c:12162 config/i386/i386.c:13369 config/i386/i386.c:13403 +#: config/arm/arm.c:12231 config/i386/i386.c:14446 config/i386/i386.c:14480 msgid "mask must be an immediate" msgstr "" -#: config/arm/arm.c:12838 +#: config/arm/arm.c:12907 msgid "no low registers available for popping high registers" msgstr "" -#: config/arm/arm.c:13056 +#: config/arm/arm.c:13125 msgid "interrupt Service Routines cannot be coded in Thumb mode" msgstr "" -#: config/arm/pe.c:171 config/mcore/mcore.c:3241 +#: config/arm/pe.c:171 config/mcore/mcore.c:3245 msgid "%Jinitialized variable '%D' is marked dllimport" msgstr "" @@ -8330,7 +8356,7 @@ msgstr "" msgid "Specify the register to be used for PIC addressing" msgstr "" -#: config/arm/arm.h:396 config/mips/mips.h:780 +#: config/arm/arm.h:396 config/mips/mips.h:784 msgid "Specify an ABI" msgstr "" @@ -8346,56 +8372,66 @@ msgstr "" msgid "Ignore dllimport attribute for functions" msgstr "" -#: config/avr/avr.c:520 +#: config/avr/avr.c:532 #, c-format msgid "large frame pointer change (%d) with -mtiny-stack" msgstr "" -#: config/avr/avr.c:1107 +#: config/avr/avr.c:1119 msgid "bad address, not (reg+disp):" msgstr "" -#: config/avr/avr.c:1115 +#: config/avr/avr.c:1127 msgid "internal compiler error. Bad address:" msgstr "" -#: config/avr/avr.c:1128 +#: config/avr/avr.c:1140 msgid "internal compiler error. Unknown mode:" msgstr "" -#: config/avr/avr.c:1750 config/avr/avr.c:2411 +#: config/avr/avr.c:1763 config/avr/avr.c:2424 #, fuzzy msgid "invalid insn:" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ %s" -#: config/avr/avr.c:1784 config/avr/avr.c:1867 config/avr/avr.c:1916 -#: config/avr/avr.c:1925 config/avr/avr.c:2020 config/avr/avr.c:2189 -#: config/avr/avr.c:2445 config/avr/avr.c:2553 +#: config/avr/avr.c:1797 config/avr/avr.c:1880 config/avr/avr.c:1929 +#: config/avr/avr.c:1938 config/avr/avr.c:2033 config/avr/avr.c:2202 +#: config/avr/avr.c:2458 config/avr/avr.c:2566 msgid "incorrect insn:" msgstr "" -#: config/avr/avr.c:1944 config/avr/avr.c:2105 config/avr/avr.c:2260 -#: config/avr/avr.c:2597 +#: config/avr/avr.c:1957 config/avr/avr.c:2118 config/avr/avr.c:2273 +#: config/avr/avr.c:2610 msgid "unknown move insn:" msgstr "" -#: config/avr/avr.c:2820 +#: config/avr/avr.c:2840 msgid "bad shift insn:" msgstr "" -#: config/avr/avr.c:2933 config/avr/avr.c:3354 config/avr/avr.c:3725 +#: config/avr/avr.c:2956 config/avr/avr.c:3404 config/avr/avr.c:3790 msgid "internal compiler error. Incorrect shift:" msgstr "" -#: config/avr/avr.c:4507 config/ip2k/ip2k.c:3156 +#: config/avr/avr.c:4594 config/ip2k/ip2k.c:3157 msgid "only initialized variables can be placed into program memory area" msgstr "" -#: config/avr/avr.c:4601 +#: config/avr/avr.c:4637 +#, c-format +msgid "`%s' appears to be a misspelled interrupt handler" +msgstr "" + +#: config/avr/avr.c:4645 +#, c-format +msgid "`%s' appears to be a misspelled signal handler" +msgstr "" + +#: config/avr/avr.c:4714 msgid "only uninitialized variables can be placed in the .noinit section" msgstr "" -#: config/avr/avr.c:4615 +#: config/avr/avr.c:4728 #, c-format msgid "MCU %qs supported for assembler only" msgstr "" @@ -8783,245 +8819,236 @@ msgstr "" msgid "Select CPU to generate code for" msgstr "" -#: config/cris/cris.c:620 +#: config/cris/cris.c:630 msgid "unexpected index-type in cris_print_index" msgstr "" -#: config/cris/cris.c:634 +#: config/cris/cris.c:644 msgid "unexpected base-type in cris_print_base" msgstr "" -#: config/cris/cris.c:927 +#: config/cris/cris.c:945 #, c-format msgid "stackframe too big: %d bytes" msgstr "" -#: config/cris/cris.c:1238 +#: config/cris/cris.c:1256 msgid "allocated but unused delay list in epilogue" msgstr "" -#: config/cris/cris.c:1248 +#: config/cris/cris.c:1266 msgid "unexpected function type needing stack adjustment for __builtin_eh_return" msgstr "" -#: config/cris/cris.c:1324 +#: config/cris/cris.c:1342 msgid "invalid operand for 'b' modifier" msgstr "" -#: config/cris/cris.c:1337 +#: config/cris/cris.c:1355 msgid "invalid operand for 'v' modifier" msgstr "" -#: config/cris/cris.c:1347 +#: config/cris/cris.c:1365 msgid "invalid operand for 'P' modifier" msgstr "" -#: config/cris/cris.c:1354 +#: config/cris/cris.c:1372 msgid "invalid operand for 'p' modifier" msgstr "" -#: config/cris/cris.c:1393 +#: config/cris/cris.c:1411 msgid "invalid operand for 'z' modifier" msgstr "" -#: config/cris/cris.c:1441 config/cris/cris.c:1471 +#: config/cris/cris.c:1459 config/cris/cris.c:1489 msgid "invalid operand for 'H' modifier" msgstr "" -#: config/cris/cris.c:1447 +#: config/cris/cris.c:1465 msgid "bad register" msgstr "" -#: config/cris/cris.c:1485 +#: config/cris/cris.c:1503 msgid "invalid operand for 'e' modifier" msgstr "" -#: config/cris/cris.c:1502 +#: config/cris/cris.c:1520 msgid "invalid operand for 'm' modifier" msgstr "" -#: config/cris/cris.c:1527 +#: config/cris/cris.c:1545 msgid "invalid operand for 'A' modifier" msgstr "" -#: config/cris/cris.c:1535 +#: config/cris/cris.c:1553 msgid "invalid operand for 'D' modifier" msgstr "" -#: config/cris/cris.c:1549 +#: config/cris/cris.c:1567 msgid "invalid operand for 'T' modifier" msgstr "" -#: config/cris/cris.c:1558 +#: config/cris/cris.c:1576 msgid "invalid operand modifier letter" msgstr "" -#: config/cris/cris.c:1566 +#: config/cris/cris.c:1584 #, c-format msgid "internal error: bad register: %d" msgstr "у½ÑƒÑ‚Ñ€°½°Ñ ż°ĵыğş°: ´Ñ€Ñ½½Ñ‹ рэ³Ñ–стр: %d" -#: config/cris/cris.c:1614 +#: config/cris/cris.c:1632 msgid "unexpected multiplicative operand" msgstr "" -#: config/cris/cris.c:1634 +#: config/cris/cris.c:1652 msgid "unexpected operand" msgstr "" -#: config/cris/cris.c:1667 config/cris/cris.c:1677 +#: config/cris/cris.c:1685 config/cris/cris.c:1695 msgid "unrecognized address" msgstr "½µÑ€°Ñż°·½°½Ñ‹ °´Ñ€°Ñ" -#: config/cris/cris.c:2036 +#: config/cris/cris.c:2048 msgid "internal error: sideeffect-insn affecting main effect" msgstr "" #. If we get here, the caller got its initial tests wrong. -#: config/cris/cris.c:2429 +#: config/cris/cris.c:2421 msgid "internal error: cris_side_effect_mode_ok with bad operands" msgstr "" -#: config/cris/cris.c:2506 config/cris/cris.c:2567 +#: config/cris/cris.c:2498 config/cris/cris.c:2559 #, fuzzy msgid "unrecognized supposed constant" msgstr "½µÑ€°Ñż°·½°½Ñ‹ ²Ñ‹ħ°Ñ€ \"-%s\"" -#: config/cris/cris.c:2611 +#: config/cris/cris.c:2603 msgid "unrecognized supposed constant in cris_global_pic_symbol" msgstr "" -#: config/cris/cris.c:2630 +#: config/cris/cris.c:2622 #, c-format msgid "-max-stackframe=%d is not usable, not between 0 and %d" msgstr "" -#: config/cris/cris.c:2658 +#: config/cris/cris.c:2650 #, c-format msgid "unknown CRIS version specification in -march= or -mcpu= : %s" msgstr "" -#: config/cris/cris.c:2694 +#: config/cris/cris.c:2686 #, c-format msgid "unknown CRIS cpu version specification in -mtune= : %s" msgstr "" -#: config/cris/cris.c:2712 +#: config/cris/cris.c:2704 msgid "-fPIC and -fpic are not supported in this configuration" msgstr "" -#: config/cris/cris.c:2727 +#: config/cris/cris.c:2719 msgid "that particular -g option is invalid with -maout and -melinux" msgstr "" -#: config/cris/cris.c:2902 config/cris/cris.c:2947 +#: config/cris/cris.c:2894 config/cris/cris.c:2939 msgid "unexpected side-effects in address" msgstr "" -#. Labels are never marked as global symbols. -#: config/cris/cris.c:3042 config/cris/cris.c:3073 +#: config/cris/cris.c:3008 msgid "unexpected PIC symbol" msgstr "" -#: config/cris/cris.c:3046 +#: config/cris/cris.c:3012 msgid "PIC register isn't set up" msgstr "" -#: config/cris/cris.c:3059 config/cris/cris.c:3142 -msgid "unexpected address expression" -msgstr "" - -#: config/cris/cris.c:3077 +#: config/cris/cris.c:3033 msgid "emitting PIC operand, but PIC register isn't set up" msgstr "" -#: config/cris/cris.c:3086 -msgid "unexpected NOTE as addr_const:" -msgstr "" - -#: config/cris/aout.h:108 +#: config/cris/aout.h:85 msgid "Compile for the MMU-less Etrax 100-based elinux system" msgstr "" -#: config/cris/aout.h:115 +#: config/cris/aout.h:92 msgid "For elinux, request a specified stack-size for this program" msgstr "" -#: config/cris/cris.h:362 +#: config/cris/cris.h:354 msgid "Work around bug in multiplication instruction" msgstr "" #. No "no-etrax" as it does not really imply any model. On the other hand, "etrax" implies the common (and large) subset matching all models. -#: config/cris/cris.h:368 +#: config/cris/cris.h:360 msgid "Compile for ETRAX 4 (CRIS v3)" msgstr "" -#: config/cris/cris.h:373 +#: config/cris/cris.h:365 msgid "Compile for ETRAX 100 (CRIS v8)" msgstr "" -#: config/cris/cris.h:377 +#: config/cris/cris.h:369 msgid "Emit verbose debug information in assembly code" msgstr "" -#: config/cris/cris.h:380 +#: config/cris/cris.h:372 #, fuzzy msgid "Do not use condition codes from normal instructions" msgstr "µ ³µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ сіĵ²°ğь½Ñ‹Ñ і½ÑÑ‚руşÑ†Ñ‹Ñ–" -#: config/cris/cris.h:384 +#: config/cris/cris.h:376 msgid "Do not emit addressing modes with side-effect assignment" msgstr "" -#: config/cris/cris.h:387 +#: config/cris/cris.h:379 msgid "Do not tune stack alignment" msgstr "" -#: config/cris/cris.h:390 +#: config/cris/cris.h:382 msgid "Do not tune writable data alignment" msgstr "" -#: config/cris/cris.h:393 +#: config/cris/cris.h:385 msgid "Do not tune code and read-only data alignment" msgstr "" -#: config/cris/cris.h:402 +#: config/cris/cris.h:394 msgid "Align code and data to 32 bits" msgstr "" -#: config/cris/cris.h:415 +#: config/cris/cris.h:407 msgid "Don't align items in code or data" msgstr "" -#: config/cris/cris.h:418 +#: config/cris/cris.h:410 msgid "Do not emit function prologue or epilogue" msgstr "" #. We have to handle this m-option here since we can't wash it off in both CC1_SPEC and CC1PLUS_SPEC. -#: config/cris/cris.h:422 +#: config/cris/cris.h:414 msgid "Use the most feature-enabling options allowed by other options" msgstr "" #. We must call it "override-" since calling it "no-" will cause gcc.c to forget it, if there's a "later" -mbest-lib-options. Kludgy, but needed for some multilibbed files. -#: config/cris/cris.h:428 +#: config/cris/cris.h:420 msgid "Override -mbest-lib-options" msgstr "" -#: config/cris/cris.h:460 +#: config/cris/cris.h:452 #, fuzzy msgid "Generate code for the specified chip or CPU version" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя ´°´·µ½°³° ĤŸ" -#: config/cris/cris.h:462 +#: config/cris/cris.h:454 msgid "Tune alignment for the specified chip or CPU version" msgstr "" -#: config/cris/cris.h:464 +#: config/cris/cris.h:456 msgid "Warn when a stackframe is larger than the specified size" msgstr "" #. Node: Profiling -#: config/cris/cris.h:1031 +#: config/cris/cris.h:1016 msgid "no FUNCTION_PROFILER for CRIS" msgstr "" @@ -9029,46 +9056,46 @@ msgstr "" msgid "Together with -fpic and -fPIC, do not use GOTPLT references" msgstr "" -#: config/fr30/fr30.c:463 +#: config/fr30/fr30.c:468 msgid "fr30_print_operand_address: unhandled address" msgstr "" -#: config/fr30/fr30.c:487 +#: config/fr30/fr30.c:492 #, c-format msgid "fr30_print_operand: unrecognized %%p code" msgstr "" -#: config/fr30/fr30.c:507 +#: config/fr30/fr30.c:512 #, c-format msgid "fr30_print_operand: unrecognized %%b code" msgstr "" -#: config/fr30/fr30.c:528 +#: config/fr30/fr30.c:533 #, c-format msgid "fr30_print_operand: unrecognized %%B code" msgstr "" -#: config/fr30/fr30.c:536 +#: config/fr30/fr30.c:541 #, c-format msgid "fr30_print_operand: invalid operand to %%A code" msgstr "" -#: config/fr30/fr30.c:553 +#: config/fr30/fr30.c:558 #, c-format msgid "fr30_print_operand: invalid %%x code" msgstr "" -#: config/fr30/fr30.c:560 +#: config/fr30/fr30.c:565 #, c-format msgid "fr30_print_operand: invalid %%F code" msgstr "" -#: config/fr30/fr30.c:577 +#: config/fr30/fr30.c:582 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:611 config/fr30/fr30.c:620 config/fr30/fr30.c:631 +#: config/fr30/fr30.c:644 msgid "fr30_print_operand: unhandled MEM" msgstr "" @@ -9076,141 +9103,137 @@ msgstr "" msgid "Assume small address space" msgstr "" -#: config/frv/frv.c:563 config/frv/frv.c:590 +#: config/frv/frv.c:576 config/frv/frv.c:603 #, c-format msgid "Unknown cpu: -mcpu=%s" msgstr "" -#: config/frv/frv.c:2513 +#: config/frv/frv.c:2539 msgid "Bad insn to frv_print_operand_address:" msgstr "" -#: config/frv/frv.c:2524 +#: config/frv/frv.c:2550 msgid "Bad register to frv_print_operand_memory_reference_reg:" msgstr "" -#: config/frv/frv.c:2563 config/frv/frv.c:2573 config/frv/frv.c:2582 -#: config/frv/frv.c:2603 config/frv/frv.c:2608 +#: config/frv/frv.c:2589 config/frv/frv.c:2599 config/frv/frv.c:2608 +#: config/frv/frv.c:2629 config/frv/frv.c:2634 msgid "Bad insn to frv_print_operand_memory_reference:" msgstr "" -#: config/frv/frv.c:2747 -msgid "Bad insn in frv_print_operand, bad const_double" -msgstr "" - -#: config/frv/frv.c:2792 -msgid "Bad insn to frv_print_operand, 'C' modifier:" +#: config/frv/frv.c:2721 +msgid "bad condition code" msgstr "" -#: config/frv/frv.c:2815 -msgid "Bad insn to frv_print_operand, 'c' modifier:" +#: config/frv/frv.c:2796 +msgid "Bad insn in frv_print_operand, bad const_double" msgstr "" -#: config/frv/frv.c:2840 +#: config/frv/frv.c:2857 msgid "Bad insn to frv_print_operand, 'e' modifier:" msgstr "" -#: config/frv/frv.c:2848 +#: config/frv/frv.c:2865 msgid "Bad insn to frv_print_operand, 'F' modifier:" msgstr "" -#: config/frv/frv.c:2864 +#: config/frv/frv.c:2881 msgid "Bad insn to frv_print_operand, 'f' modifier:" msgstr "" -#: config/frv/frv.c:2878 +#: config/frv/frv.c:2895 msgid "Bad insn to frv_print_operand, 'g' modifier:" msgstr "" -#: config/frv/frv.c:2926 +#: config/frv/frv.c:2943 msgid "Bad insn to frv_print_operand, 'L' modifier:" msgstr "" -#: config/frv/frv.c:2939 +#: config/frv/frv.c:2956 msgid "Bad insn to frv_print_operand, 'M/N' modifier:" msgstr "" -#: config/frv/frv.c:2960 +#: config/frv/frv.c:2977 msgid "Bad insn to frv_print_operand, 'O' modifier:" msgstr "" -#: config/frv/frv.c:2978 +#: config/frv/frv.c:2995 msgid "Bad insn to frv_print_operand, P modifier:" msgstr "" -#: config/frv/frv.c:2998 +#: config/frv/frv.c:3015 msgid "Bad insn in frv_print_operand, z case" msgstr "" -#: config/frv/frv.c:3029 +#: config/frv/frv.c:3046 msgid "Bad insn in frv_print_operand, 0 case" msgstr "" -#: config/frv/frv.c:3034 +#: config/frv/frv.c:3051 msgid "frv_print_operand: unknown code" msgstr "" -#: config/frv/frv.c:5835 +#: config/frv/frv.c:5944 msgid "Bad output_move_single operand" msgstr "" -#: config/frv/frv.c:5962 +#: config/frv/frv.c:6071 msgid "Bad output_move_double operand" msgstr "" -#: config/frv/frv.c:6104 +#: config/frv/frv.c:6213 msgid "Bad output_condmove_single operand" msgstr "" -#: config/frv/frv.c:9618 +#: config/frv/frv.c:9774 msgid "accumulator is not a constant integer" msgstr "" -#: config/frv/frv.c:9623 +#: config/frv/frv.c:9779 msgid "accumulator number is out of bounds" msgstr "" -#: config/frv/frv.c:9634 +#: config/frv/frv.c:9790 #, c-format msgid "inappropriate accumulator for %qs" msgstr "" -#: config/frv/frv.c:9700 +#: config/frv/frv.c:9856 #, fuzzy msgid "invalid IACC argument" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%C" -#: config/frv/frv.c:9723 +#: config/frv/frv.c:9879 #, c-format msgid "%qs expects a constant argument" msgstr "" -#: config/frv/frv.c:9728 +#: config/frv/frv.c:9884 #, c-format msgid "constant argument out of range for %qs" msgstr "" -#: config/frv/frv.c:10125 +#: config/frv/frv.c:10319 msgid "media functions are not available unless -mmedia is used" msgstr "" -#: config/frv/frv.c:10137 +#: config/frv/frv.c:10331 msgid "this media function is only available on the fr500" msgstr "" -#: config/frv/frv.c:10165 +#: config/frv/frv.c:10359 msgid "this media function is only available on the fr400 and fr550" msgstr "" -#: config/frv/frv.c:10184 +#: config/frv/frv.c:10378 msgid "this builtin function is only available on the fr405 and fr450" msgstr "" -#: config/frv/frv.c:10193 +#: config/frv/frv.c:10387 msgid "this builtin function is only available on the fr500 and fr550" msgstr "" -#: config/frv/frv.c:10205 +#: config/frv/frv.c:10399 msgid "this builtin function is only available on the fr450" msgstr "" @@ -9223,7 +9246,7 @@ msgstr "" #. #else #. #define TARGET_VERSION fprintf (stderr, " (68k, MIT syntax)"); #. #endif -#: config/frv/frv.h:542 +#: config/frv/frv.h:550 #, c-format msgid " (frv)" msgstr "" @@ -9308,179 +9331,187 @@ msgstr "" msgid "Use H8/300 alignment rules" msgstr "" -#: config/i386/i386.c:1246 +#: config/i386/i386.c:1242 #, c-format msgid "code model %s not supported in PIC mode" msgstr "" -#: config/i386/i386.c:1256 config/sparc/sparc.c:604 +#: config/i386/i386.c:1252 config/sparc/sparc.c:611 #, c-format msgid "bad value (%s) for -mcmodel= switch" msgstr "" -#: config/i386/i386.c:1271 +#: config/i386/i386.c:1267 #, c-format msgid "bad value (%s) for -masm= switch" msgstr "" -#: config/i386/i386.c:1274 +#: config/i386/i386.c:1270 #, fuzzy, c-format msgid "code model %qs not supported in the %s bit mode" msgstr "__buitin_saveregs ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†° ³ÑÑ‚°ı ĵэт°ı" -#: config/i386/i386.c:1277 +#: config/i386/i386.c:1273 msgid "code model % not supported yet" msgstr "" -#: config/i386/i386.c:1279 +#: config/i386/i386.c:1275 #, c-format msgid "%i-bit mode not compiled in" msgstr "" -#: config/i386/i386.c:1309 config/i386/i386.c:1333 +#: config/i386/i386.c:1305 config/i386/i386.c:1329 #, fuzzy msgid "CPU you selected does not support x86-64 instruction set" msgstr "ISO C ½µ ż°´Ñ‚рыĵğі²°µ şĵğµşÑ½Ñ‹Ñ цэğ°ğіş°²Ñ‹Ñ тыżÑ‹" -#: config/i386/i386.c:1315 config/iq2000/iq2000.c:1671 +#: config/i386/i386.c:1311 config/iq2000/iq2000.c:1673 #, c-format msgid "bad value (%s) for -march= switch" msgstr "" -#: config/i386/i386.c:1346 +#: config/i386/i386.c:1342 #, c-format msgid "bad value (%s) for -mtune= switch" msgstr "" -#: config/i386/i386.c:1363 +#: config/i386/i386.c:1359 #, c-format msgid "-mregparm=%d is not between 0 and %d" msgstr "" -#: config/i386/i386.c:1376 +#: config/i386/i386.c:1372 msgid "-malign-loops is obsolete, use -falign-loops" msgstr "" -#: config/i386/i386.c:1381 config/i386/i386.c:1394 config/i386/i386.c:1407 +#: config/i386/i386.c:1377 config/i386/i386.c:1390 config/i386/i386.c:1403 #, c-format msgid "-malign-loops=%d is not between 0 and %d" msgstr "" -#: config/i386/i386.c:1389 +#: config/i386/i386.c:1385 msgid "-malign-jumps is obsolete, use -falign-jumps" msgstr "" -#: config/i386/i386.c:1402 +#: config/i386/i386.c:1398 msgid "-malign-functions is obsolete, use -falign-functions" msgstr "" -#: config/i386/i386.c:1440 +#: config/i386/i386.c:1436 #, c-format msgid "-mpreferred-stack-boundary=%d is not between %d and 12" msgstr "" -#: config/i386/i386.c:1452 +#: config/i386/i386.c:1448 #, c-format msgid "-mbranch-cost=%d is not between 0 and 5" msgstr "" -#: config/i386/i386.c:1464 +#: config/i386/i386.c:1460 #, c-format msgid "bad value (%s) for -mtls-dialect= switch" msgstr "" -#: config/i386/i386.c:1498 +#: config/i386/i386.c:1507 msgid "-malign-double makes no sense in the 64bit mode" msgstr "" -#: config/i386/i386.c:1500 +#: config/i386/i386.c:1509 msgid "-mrtd calling convention not supported in the 64bit mode" msgstr "" -#: config/i386/i386.c:1522 config/i386/i386.c:1533 +#: config/i386/i386.c:1538 config/i386/i386.c:1549 msgid "SSE instruction set disabled, using 387 arithmetics" msgstr "" -#: config/i386/i386.c:1538 +#: config/i386/i386.c:1554 msgid "387 instruction set disabled, using SSE arithmetics" msgstr "" -#: config/i386/i386.c:1545 +#: config/i386/i386.c:1561 #, c-format msgid "bad value (%s) for -mfpmath= switch" msgstr "" -#: config/i386/i386.c:1707 config/i386/i386.c:1718 +#: config/i386/i386.c:1714 config/i386/i386.c:1725 msgid "fastcall and stdcall attributes are not compatible" msgstr "" -#: config/i386/i386.c:1711 config/i386/i386.c:1767 +#: config/i386/i386.c:1718 config/i386/i386.c:1774 msgid "fastcall and regparm attributes are not compatible" msgstr "" -#: config/i386/i386.c:1754 +#: config/i386/i386.c:1761 #, c-format msgid "%qs attribute requires an integer constant argument" msgstr "" -#: config/i386/i386.c:1760 +#: config/i386/i386.c:1767 #, fuzzy, c-format msgid "argument to %qs attribute larger than %d" msgstr "ż°ĵµÑ€ \"%s\" ħğьш ч°ĵ %d ħ°ıт" -#: config/i386/i386.c:2776 +#: config/i386/i386.c:2565 +msgid "SSE register return with SSE disabled" +msgstr "" + +#: config/i386/i386.c:2567 +msgid "SSE register argument with SSE disabled" +msgstr "" + +#: config/i386/i386.c:2862 msgid "SSE vector argument without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.c:2792 +#: config/i386/i386.c:2879 msgid "MMX vector argument without MMX enabled changes the ABI" msgstr "" -#: config/i386/i386.c:3038 +#: config/i386/i386.c:3127 msgid "SSE vector return without SSE enabled changes the ABI" msgstr "" -#: config/i386/i386.c:5908 +#: config/i386/i386.c:6003 msgid "invalid UNSPEC as operand" msgstr "" -#: config/i386/i386.c:6146 +#: config/i386/i386.c:6241 msgid "extended registers have no high halves" msgstr "" -#: config/i386/i386.c:6161 +#: config/i386/i386.c:6256 msgid "unsupported operand size for extended register" msgstr "" -#: config/i386/i386.c:6476 +#: config/i386/i386.c:6572 msgid "operand is neither a constant nor a condition code, invalid operand code 'c'" msgstr "" -#: config/i386/i386.c:6522 +#: config/i386/i386.c:6625 #, fuzzy, c-format msgid "invalid operand code '%c'" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: config/i386/i386.c:6565 +#: config/i386/i386.c:6668 #, fuzzy msgid "invalid constraints for operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%c °żµÑ€°½´" -#: config/i386/i386.c:11301 +#: config/i386/i386.c:11919 #, fuzzy msgid "unknown insn mode" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: config/i386/i386.c:13171 config/i386/i386.c:13207 +#: config/i386/i386.c:14174 #, c-format msgid "selector must be an integer constant in the range 0..%i" msgstr "" -#: config/i386/i386.c:13435 +#: config/i386/i386.c:14512 msgid "shift must be an immediate" msgstr "" -#: config/i386/i386.c:14489 +#: config/i386/i386.c:15634 #, fuzzy, c-format msgid "%qs incompatible attribute ignored" msgstr "\"%s\" °Ñ‚рыħут і³½°Ñ€Ñ‹Ñ€ÑƒµÑ†Ñ†°" @@ -9583,166 +9614,166 @@ msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°" #. Deprecated. #. Deprecated. #. Deprecated. -#: config/i386/i386.h:348 +#: config/i386/i386.h:347 msgid "Alternate calling convention" msgstr "" -#: config/i386/i386.h:350 config/m68k/m68k.h:336 config/ns32k/ns32k.h:144 +#: config/i386/i386.h:349 config/m68k/m68k.h:336 config/ns32k/ns32k.h:144 msgid "Use normal calling convention" msgstr "" -#: config/i386/i386.h:352 +#: config/i386/i386.h:351 msgid "Align some doubles on dword boundary" msgstr "" -#: config/i386/i386.h:354 +#: config/i386/i386.h:353 msgid "Align doubles on word boundary" msgstr "" -#: config/i386/i386.h:356 +#: config/i386/i386.h:355 msgid "Uninitialized locals in .bss" msgstr "" -#: config/i386/i386.h:358 +#: config/i386/i386.h:357 msgid "Uninitialized locals in .data" msgstr "" -#: config/i386/i386.h:360 config/m68k/linux.h:42 config/ns32k/ns32k.h:167 +#: config/i386/i386.h:359 config/m68k/linux.h:42 config/ns32k/ns32k.h:167 msgid "Use IEEE math for fp comparisons" msgstr "" -#: config/i386/i386.h:362 config/ns32k/ns32k.h:169 +#: config/i386/i386.h:361 config/ns32k/ns32k.h:169 msgid "Do not use IEEE math for fp comparisons" msgstr "" -#: config/i386/i386.h:364 +#: config/i386/i386.h:363 msgid "Return values of functions in FPU registers" msgstr "" -#: config/i386/i386.h:366 +#: config/i386/i386.h:365 msgid "Do not return values of functions in FPU registers" msgstr "" -#: config/i386/i386.h:368 +#: config/i386/i386.h:367 msgid "Do not generate sin, cos, sqrt for FPU" msgstr "" -#: config/i386/i386.h:370 +#: config/i386/i386.h:369 msgid "Generate sin, cos, sqrt for FPU" msgstr "" -#: config/i386/i386.h:372 +#: config/i386/i386.h:371 msgid "Omit the frame pointer in leaf functions" msgstr "" -#: config/i386/i386.h:375 +#: config/i386/i386.h:374 msgid "Enable stack probing" msgstr "" #. undocumented #. undocumented -#: config/i386/i386.h:380 +#: config/i386/i386.h:379 msgid "Align destination of the string operations" msgstr "" -#: config/i386/i386.h:382 +#: config/i386/i386.h:381 msgid "Do not align destination of the string operations" msgstr "" -#: config/i386/i386.h:384 +#: config/i386/i386.h:383 msgid "Inline all known string operations" msgstr "" -#: config/i386/i386.h:386 +#: config/i386/i386.h:385 msgid "Do not inline all known string operations" msgstr "" -#: config/i386/i386.h:388 config/i386/i386.h:392 +#: config/i386/i386.h:387 config/i386/i386.h:391 msgid "Use push instructions to save outgoing arguments" msgstr "" -#: config/i386/i386.h:390 config/i386/i386.h:394 +#: config/i386/i386.h:389 config/i386/i386.h:393 msgid "Do not use push instructions to save outgoing arguments" msgstr "" -#: config/i386/i386.h:396 +#: config/i386/i386.h:395 msgid "Support MMX built-in functions" msgstr "" -#: config/i386/i386.h:398 +#: config/i386/i386.h:397 msgid "Do not support MMX built-in functions" msgstr "" -#: config/i386/i386.h:400 +#: config/i386/i386.h:399 msgid "Support 3DNow! built-in functions" msgstr "" -#: config/i386/i386.h:402 +#: config/i386/i386.h:401 msgid "Do not support 3DNow! built-in functions" msgstr "" -#: config/i386/i386.h:404 +#: config/i386/i386.h:403 msgid "Support MMX and SSE built-in functions and code generation" msgstr "" -#: config/i386/i386.h:406 +#: config/i386/i386.h:405 msgid "Do not support MMX and SSE built-in functions and code generation" msgstr "" -#: config/i386/i386.h:408 +#: config/i386/i386.h:407 msgid "Support MMX, SSE and SSE2 built-in functions and code generation" msgstr "" -#: config/i386/i386.h:410 +#: config/i386/i386.h:409 msgid "Do not support MMX, SSE and SSE2 built-in functions and code generation" msgstr "" -#: config/i386/i386.h:412 +#: config/i386/i386.h:411 msgid "Support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgstr "" -#: config/i386/i386.h:414 +#: config/i386/i386.h:413 msgid "Do not support MMX, SSE, SSE2 and SSE3 built-in functions and code generation" msgstr "" -#: config/i386/i386.h:416 +#: config/i386/i386.h:415 msgid "sizeof(long double) is 16" msgstr "" -#: config/i386/i386.h:418 +#: config/i386/i386.h:417 msgid "sizeof(long double) is 12" msgstr "" -#: config/i386/i386.h:420 +#: config/i386/i386.h:419 msgid "Generate 64bit x86-64 code" msgstr "" -#: config/i386/i386.h:422 +#: config/i386/i386.h:421 msgid "Generate 32bit i386 code" msgstr "" -#: config/i386/i386.h:424 +#: config/i386/i386.h:423 msgid "Use native (MS) bitfield layout" msgstr "" -#: config/i386/i386.h:426 +#: config/i386/i386.h:425 msgid "Use gcc default bitfield layout" msgstr "" -#: config/i386/i386.h:428 +#: config/i386/i386.h:427 msgid "Use red-zone in the x86-64 code" msgstr "" -#: config/i386/i386.h:430 +#: config/i386/i386.h:429 msgid "Do not use red-zone in the x86-64 code" msgstr "" -#: config/i386/i386.h:432 +#: config/i386/i386.h:431 #, c-format msgid "Use direct references against %gs when accessing tls data" msgstr "" -#: config/i386/i386.h:434 +#: config/i386/i386.h:433 #, c-format msgid "Do not use direct references against %gs when accessing tls data" msgstr "" @@ -9756,54 +9787,54 @@ msgstr "" #. variable, type `char *', is set to the variable part of the given #. option if the fixed part matches. The actual option name is made #. by appending `-m' to the specified name. -#: config/i386/i386.h:472 config/ia64/ia64.h:286 config/rs6000/rs6000.h:453 -#: config/s390/s390.h:158 config/sparc/sparc.h:711 +#: config/i386/i386.h:471 config/ia64/ia64.h:280 config/rs6000/rs6000.h:453 +#: config/s390/s390.h:158 config/sparc/sparc.h:717 msgid "Schedule code for given CPU" msgstr "" -#: config/i386/i386.h:474 +#: config/i386/i386.h:473 msgid "Generate floating point mathematics using given instruction set" msgstr "" -#: config/i386/i386.h:476 config/s390/s390.h:160 +#: config/i386/i386.h:475 config/s390/s390.h:160 msgid "Generate code for given CPU" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя ´°´·µ½°³° ĤŸ" -#: config/i386/i386.h:478 +#: config/i386/i386.h:477 msgid "Number of registers used to pass integer arguments" msgstr "" -#: config/i386/i386.h:480 +#: config/i386/i386.h:479 msgid "Loop code aligned to this power of 2" msgstr "" -#: config/i386/i386.h:482 +#: config/i386/i386.h:481 msgid "Jump targets are aligned to this power of 2" msgstr "" -#: config/i386/i386.h:484 +#: config/i386/i386.h:483 msgid "Function starts are aligned to this power of 2" msgstr "" -#: config/i386/i386.h:487 +#: config/i386/i386.h:486 msgid "Attempt to keep stack aligned to this power of 2" msgstr "" -#: config/i386/i386.h:489 +#: config/i386/i386.h:488 msgid "Branches are this expensive (1-5, arbitrary units)" msgstr "" -#: config/i386/i386.h:491 +#: config/i386/i386.h:490 msgid "Use given x86-64 code model" msgstr "" #. Undocumented. #. Undocumented. -#: config/i386/i386.h:497 +#: config/i386/i386.h:496 msgid "Use given assembler dialect" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°Ñ†ÑŒ ·°´°´·µ½Ñ‹ ´Ñ‹ÑğµşÑ‚ °ÑÑĵħğµÑ€°" -#: config/i386/i386.h:499 +#: config/i386/i386.h:498 #, fuzzy msgid "Use given thread-local storage dialect" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°Ñ†ÑŒ ·°´°´·µ½Ñ‹ ´Ñ‹ÑğµşÑ‚ °ÑÑĵħğµÑ€°" @@ -9845,60 +9876,60 @@ msgstr "" msgid "malformed #pragma builtin" msgstr "" -#: config/ia64/ia64.c:480 config/m32r/m32r.c:356 +#: config/ia64/ia64.c:494 config/m32r/m32r.c:360 #, fuzzy, c-format msgid "invalid argument of %qs attribute" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: config/ia64/ia64.c:492 +#: config/ia64/ia64.c:506 msgid "%Jan address area attribute cannot be specified for local variables" msgstr "" -#: config/ia64/ia64.c:499 +#: config/ia64/ia64.c:513 #, fuzzy msgid "%Jaddress area of '%s' conflicts with previous declaration" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: config/ia64/ia64.c:506 +#: config/ia64/ia64.c:520 #, fuzzy msgid "%Jaddress area attribute cannot be specified for functions" msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: config/ia64/ia64.c:3784 +#: config/ia64/ia64.c:4183 msgid "ia64_print_operand: unknown code" msgstr "" -#: config/ia64/ia64.c:4124 config/pa/pa.c:316 +#: config/ia64/ia64.c:4556 config/pa/pa.c:324 msgid "value of -mfixed-range must have form REG1-REG2" msgstr "" -#: config/ia64/ia64.c:4151 config/pa/pa.c:343 +#: config/ia64/ia64.c:4583 config/pa/pa.c:351 #, c-format msgid "%s-%s is an empty range" msgstr "" -#: config/ia64/ia64.c:4202 +#: config/ia64/ia64.c:4634 msgid "cannot optimize floating point division for both latency and throughput" msgstr "" -#: config/ia64/ia64.c:4219 +#: config/ia64/ia64.c:4651 msgid "cannot optimize integer division for both latency and throughput" msgstr "" -#: config/ia64/ia64.c:4236 +#: config/ia64/ia64.c:4668 msgid "cannot optimize square root for both latency and throughput" msgstr "" -#: config/ia64/ia64.c:4250 +#: config/ia64/ia64.c:4682 msgid "not yet implemented: latency-optimized inline square root" msgstr "" -#: config/ia64/ia64.c:4262 +#: config/ia64/ia64.c:4694 #, c-format msgid "bad value (%s) for -mtls-size= switch" msgstr "" -#: config/ia64/ia64.c:4278 +#: config/ia64/ia64.c:4710 #, c-format msgid "bad value (%s) for -tune= switch" msgstr "" @@ -9906,172 +9937,168 @@ msgstr "" #. This macro defines names of command options to set and clear bits in #. `target_flags'. Its definition is an initializer with a subgrouping for #. each command option. -#: config/ia64/ia64.h:182 +#: config/ia64/ia64.h:178 msgid "Generate big endian code" msgstr "" -#: config/ia64/ia64.h:184 config/mcore/mcore.h:146 +#: config/ia64/ia64.h:180 config/mcore/mcore.h:146 msgid "Generate little endian code" msgstr "" -#: config/ia64/ia64.h:186 +#: config/ia64/ia64.h:182 msgid "Generate code for GNU as" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя GNU as" -#: config/ia64/ia64.h:188 +#: config/ia64/ia64.h:184 msgid "Generate code for Intel as" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя Intel as" -#: config/ia64/ia64.h:190 +#: config/ia64/ia64.h:186 msgid "Generate code for GNU ld" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя GNU ld" -#: config/ia64/ia64.h:192 +#: config/ia64/ia64.h:188 msgid "Generate code for Intel ld" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя Intel ld" -#: config/ia64/ia64.h:194 +#: config/ia64/ia64.h:190 msgid "Generate code without GP reg" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ħµ· GP reg" -#: config/ia64/ia64.h:196 +#: config/ia64/ia64.h:192 msgid "Emit stop bits before and after volatile extended asms" msgstr "" -#: config/ia64/ia64.h:198 +#: config/ia64/ia64.h:194 msgid "Don't emit stop bits before and after volatile extended asms" msgstr "" -#: config/ia64/ia64.h:200 -msgid "Emit code for Itanium (TM) processor B step" -msgstr "" - -#: config/ia64/ia64.h:202 +#: config/ia64/ia64.h:196 msgid "Use in/loc/out register names" msgstr "" -#: config/ia64/ia64.h:204 +#: config/ia64/ia64.h:198 msgid "Disable use of sdata/scommon/sbss" msgstr "" -#: config/ia64/ia64.h:206 +#: config/ia64/ia64.h:200 msgid "Enable use of sdata/scommon/sbss" msgstr "" -#: config/ia64/ia64.h:208 +#: config/ia64/ia64.h:202 msgid "gp is constant (but save/restore gp on indirect calls)" msgstr "" -#: config/ia64/ia64.h:210 +#: config/ia64/ia64.h:204 msgid "Generate self-relocatable code" msgstr "" -#: config/ia64/ia64.h:212 +#: config/ia64/ia64.h:206 msgid "Generate inline floating point division, optimize for latency" msgstr "" -#: config/ia64/ia64.h:214 +#: config/ia64/ia64.h:208 msgid "Generate inline floating point division, optimize for throughput" msgstr "" -#: config/ia64/ia64.h:217 +#: config/ia64/ia64.h:211 msgid "Do not inline floating point division" msgstr "" -#: config/ia64/ia64.h:219 +#: config/ia64/ia64.h:213 msgid "Generate inline integer division, optimize for latency" msgstr "" -#: config/ia64/ia64.h:221 +#: config/ia64/ia64.h:215 msgid "Generate inline integer division, optimize for throughput" msgstr "" -#: config/ia64/ia64.h:223 +#: config/ia64/ia64.h:217 msgid "Do not inline integer division" msgstr "" -#: config/ia64/ia64.h:225 +#: config/ia64/ia64.h:219 msgid "Generate inline square root, optimize for latency" msgstr "" -#: config/ia64/ia64.h:227 +#: config/ia64/ia64.h:221 msgid "Generate inline square root, optimize for throughput" msgstr "" -#: config/ia64/ia64.h:229 +#: config/ia64/ia64.h:223 msgid "Do not inline square root" msgstr "" -#: config/ia64/ia64.h:231 +#: config/ia64/ia64.h:225 msgid "Enable Dwarf 2 line debug info via GNU as" msgstr "" -#: config/ia64/ia64.h:233 +#: config/ia64/ia64.h:227 msgid "Disable Dwarf 2 line debug info via GNU as" msgstr "" -#: config/ia64/ia64.h:235 +#: config/ia64/ia64.h:229 msgid "Enable earlier placing stop bits for better scheduling" msgstr "" -#: config/ia64/ia64.h:237 +#: config/ia64/ia64.h:231 msgid "Disable earlier placing stop bits" msgstr "" -#: config/ia64/ia64.h:282 +#: config/ia64/ia64.h:276 msgid "Specify range of registers to make fixed" msgstr "" -#: config/ip2k/ip2k.c:1086 +#: config/ip2k/ip2k.c:1087 #, fuzzy msgid "bad operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%f °żµÑ€°½´" -#: config/iq2000/iq2000.c:1647 +#: config/iq2000/iq2000.c:1649 #, c-format msgid "bad value (%s) for -mcpu= switch" msgstr "" -#: config/iq2000/iq2000.c:1676 +#: config/iq2000/iq2000.c:1678 #, fuzzy, c-format msgid "The compiler does not support -march=%s." msgstr "%s ½µ ż°´Ñ‚рыĵğі²°µ %s" -#: config/iq2000/iq2000.c:2063 +#: config/iq2000/iq2000.c:2065 #, c-format msgid "gp_offset (%ld) or end_offset (%ld) is less than zero." msgstr "" -#: config/iq2000/iq2000.c:2845 +#: config/iq2000/iq2000.c:2847 #, fuzzy, c-format msgid "argument %qd is not a constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: config/iq2000/iq2000.c:3148 config/xtensa/xtensa.c:2033 +#: config/iq2000/iq2000.c:3150 config/xtensa/xtensa.c:2033 msgid "PRINT_OPERAND_ADDRESS, null pointer" msgstr "" -#: config/iq2000/iq2000.c:3303 +#: config/iq2000/iq2000.c:3305 #, c-format msgid "PRINT_OPERAND: Unknown punctuation '%c'" msgstr "" -#: config/iq2000/iq2000.c:3312 config/mips/mips.c:4821 +#: config/iq2000/iq2000.c:3314 config/mips/mips.c:4832 #: config/xtensa/xtensa.c:1887 msgid "PRINT_OPERAND null pointer" msgstr "" -#: config/iq2000/iq2000.c:3381 +#: config/iq2000/iq2000.c:3383 #, fuzzy, c-format msgid "invalid %%P operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%-ş´" -#: config/iq2000/iq2000.c:3389 config/rs6000/rs6000.c:10648 +#: config/iq2000/iq2000.c:3391 config/rs6000/rs6000.c:10736 #, c-format msgid "invalid %%p value" msgstr "" -#: config/iq2000/iq2000.c:3453 config/mips/mips.c:4947 +#: config/iq2000/iq2000.c:3455 config/mips/mips.c:4958 #, c-format msgid "invalid use of %%d, %%x, or %%X" msgstr "" @@ -10088,87 +10115,87 @@ msgstr "" msgid "Don't use GP relative sdata/sbss sections" msgstr "" -#: config/iq2000/iq2000.h:78 config/mips/mips.h:585 +#: config/iq2000/iq2000.h:78 config/mips/mips.h:589 msgid "Use ROM instead of RAM" msgstr "" -#: config/iq2000/iq2000.h:80 config/mips/mips.h:587 +#: config/iq2000/iq2000.h:80 config/mips/mips.h:591 msgid "Don't use ROM instead of RAM" msgstr "" -#: config/iq2000/iq2000.h:82 config/mips/mips.h:589 +#: config/iq2000/iq2000.h:82 config/mips/mips.h:593 msgid "Put uninitialized constants in ROM (needs -membedded-data)" msgstr "" -#: config/iq2000/iq2000.h:84 config/mips/mips.h:591 +#: config/iq2000/iq2000.h:84 config/mips/mips.h:595 msgid "Don't put uninitialized constants in ROM" msgstr "" -#: config/iq2000/iq2000.h:106 config/mips/mips.h:776 +#: config/iq2000/iq2000.h:106 config/mips/mips.h:780 msgid "Specify CPU for scheduling purposes" msgstr "" -#: config/iq2000/iq2000.h:108 config/mips/mips.h:778 +#: config/iq2000/iq2000.h:108 config/mips/mips.h:782 msgid "Specify CPU for code generation purposes" msgstr "" -#: config/m32r/m32r.c:174 +#: config/m32r/m32r.c:178 #, c-format msgid "bad value (%s) for -mmodel switch" msgstr "" -#: config/m32r/m32r.c:183 +#: config/m32r/m32r.c:187 #, c-format msgid "bad value (%s) for -msdata switch" msgstr "" -#: config/m32r/m32r.c:190 +#: config/m32r/m32r.c:194 #, c-format msgid "bad value (%s) for -flush-trap=n (0= and % attributes are not compatible, ignoring %" msgstr "" -#: config/m68hc11/m68hc11.c:1441 +#: config/m68hc11/m68hc11.c:1439 msgid "% attribute is already used" msgstr "" #. !!!! SCz wrong here. -#: config/m68hc11/m68hc11.c:3400 config/m68hc11/m68hc11.c:3784 +#: config/m68hc11/m68hc11.c:3398 config/m68hc11/m68hc11.c:3782 msgid "move insn not handled" msgstr "" -#: config/m68hc11/m68hc11.c:3632 config/m68hc11/m68hc11.c:3716 -#: config/m68hc11/m68hc11.c:3987 +#: config/m68hc11/m68hc11.c:3630 config/m68hc11/m68hc11.c:3714 +#: config/m68hc11/m68hc11.c:3985 msgid "invalid register in the move instruction" msgstr "" -#: config/m68hc11/m68hc11.c:3666 +#: config/m68hc11/m68hc11.c:3664 msgid "invalid operand in the instruction" msgstr "" -#: config/m68hc11/m68hc11.c:3961 +#: config/m68hc11/m68hc11.c:3959 #, fuzzy msgid "invalid register in the instruction" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: config/m68hc11/m68hc11.c:3994 +#: config/m68hc11/m68hc11.c:3992 msgid "operand 1 must be a hard register" msgstr "" -#: config/m68hc11/m68hc11.c:4008 +#: config/m68hc11/m68hc11.c:4006 #, fuzzy msgid "invalid rotate insn" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ %s" -#: config/m68hc11/m68hc11.c:4432 +#: config/m68hc11/m68hc11.c:4430 msgid "registers IX, IY and Z used in the same INSN" msgstr "" -#: config/m68hc11/m68hc11.c:4769 config/m68hc11/m68hc11.c:5069 +#: config/m68hc11/m68hc11.c:4767 config/m68hc11/m68hc11.c:5067 msgid "cannot do z-register replacement" msgstr "" -#: config/m68hc11/m68hc11.c:5132 +#: config/m68hc11/m68hc11.c:5130 msgid "invalid Z register replacement for insn" msgstr "" @@ -10357,7 +10384,7 @@ msgstr "" msgid "-fPIC is not currently supported on the 68000 or 68010\n" msgstr "" -#: config/m68k/m68k.c:543 config/rs6000/rs6000.c:13479 +#: config/m68k/m68k.c:547 config/rs6000/rs6000.c:13592 msgid "stack limit expression is not supported" msgstr "" @@ -10499,7 +10526,7 @@ msgstr "" msgid "ID of shared library to build" msgstr "" -#: config/mcore/mcore.c:2987 +#: config/mcore/mcore.c:2992 #, fuzzy msgid "invalid option %<-mstack-increment=%s%>" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" @@ -10556,136 +10583,137 @@ msgstr "" msgid "Maximum amount for a single stack increment operation" msgstr "" -#: config/mips/mips.c:4018 +#: config/mips/mips.c:4025 #, c-format msgid "bad value (%s) for -mabi= switch" msgstr "" -#: config/mips/mips.c:4041 +#: config/mips/mips.c:4048 #, c-format msgid "-mips%s conflicts with the other architecture options, which specify a MIPS%d processor" msgstr "" -#: config/mips/mips.c:4060 +#: config/mips/mips.c:4067 #, c-format msgid "-march=%s is not compatible with the selected ABI" msgstr "" -#: config/mips/mips.c:4075 +#: config/mips/mips.c:4082 msgid "-mgp64 used with a 32-bit processor" msgstr "" -#: config/mips/mips.c:4077 +#: config/mips/mips.c:4084 msgid "-mgp32 used with a 64-bit ABI" msgstr "" -#: config/mips/mips.c:4079 +#: config/mips/mips.c:4086 msgid "-mgp64 used with a 32-bit ABI" msgstr "" -#: config/mips/mips.c:4097 config/mips/mips.c:4099 config/mips/mips.c:4101 -#: config/mips/mips.c:4181 +#: config/mips/mips.c:4104 config/mips/mips.c:4106 config/mips/mips.c:4108 +#: config/mips/mips.c:4192 #, fuzzy, c-format msgid "unsupported combination: %s" msgstr "½µż°´Ñ‚рыĵğі²°µĵ°Ñ ²µÑ€ÑÑ–я" -#: config/mips/mips.c:4176 +#: config/mips/mips.c:4136 +msgid "-mint64 is a deprecated option" +msgstr "" + +#: config/mips/mips.c:4187 msgid "generation of Branch Likely instructions enabled, but not supported by architecture" msgstr "" -#: config/mips/mips.c:4193 +#: config/mips/mips.c:4204 msgid "-G is incompatible with PIC code which is the default" msgstr "" -#: config/mips/mips.c:4260 +#: config/mips/mips.c:4271 msgid "-mips3d requires -mpaired-single" msgstr "" -#: config/mips/mips.c:4269 +#: config/mips/mips.c:4280 msgid "-mips3d/-mpaired-single must be used with -mfp64 -mhard-float" msgstr "" -#: config/mips/mips.c:4274 +#: config/mips/mips.c:4285 msgid "-mips3d/-mpaired-single must be used with -mips64" msgstr "" -#: config/mips/mips.c:4632 +#: config/mips/mips.c:4643 msgid "mips_debugger_offset called with non stack/frame/arg pointer" msgstr "" -#: config/mips/mips.c:4758 +#: config/mips/mips.c:4769 #, c-format msgid "internal error: %%) found without a %%( in assembler pattern" msgstr "" -#: config/mips/mips.c:4772 +#: config/mips/mips.c:4783 #, c-format msgid "internal error: %%] found without a %%[ in assembler pattern" msgstr "" -#: config/mips/mips.c:4785 +#: config/mips/mips.c:4796 #, c-format msgid "internal error: %%> found without a %%< in assembler pattern" msgstr "" -#: config/mips/mips.c:4798 +#: config/mips/mips.c:4809 #, c-format msgid "internal error: %%} found without a %%{ in assembler pattern" msgstr "" -#: config/mips/mips.c:4812 +#: config/mips/mips.c:4823 #, c-format msgid "PRINT_OPERAND: unknown punctuation '%c'" msgstr "" -#: config/mips/mips.c:4841 +#: config/mips/mips.c:4852 #, c-format msgid "PRINT_OPERAND, invalid insn for %%C" msgstr "" -#: config/mips/mips.c:4858 +#: config/mips/mips.c:4869 #, c-format msgid "PRINT_OPERAND, invalid insn for %%N" msgstr "" -#: config/mips/mips.c:4867 +#: config/mips/mips.c:4878 #, c-format msgid "PRINT_OPERAND, invalid insn for %%F" msgstr "" -#: config/mips/mips.c:4876 +#: config/mips/mips.c:4887 #, c-format msgid "PRINT_OPERAND, invalid insn for %%W" msgstr "" -#: config/mips/mips.c:4897 +#: config/mips/mips.c:4908 #, fuzzy, c-format msgid "invalid %%Y value" msgstr "´Ñ€Ñ½½°µ %%Q ·½°Ñ‡Ñ½½µ" -#: config/mips/mips.c:4975 +#: config/mips/mips.c:4986 msgid "PRINT_OPERAND, invalid operand for relocation" msgstr "" -#: config/mips/mips.c:7561 +#: config/mips/mips.c:7573 #, c-format msgid "cannot handle inconsistent calls to %qs" msgstr "" -#: config/mips/mips.c:8951 +#: config/mips/mips.c:8963 msgid "the cpu name must be lower case" msgstr "" -#: config/mips/mips.c:8973 +#: config/mips/mips.c:8985 #, c-format msgid "bad value (%s) for %s" msgstr "" -#: config/mips/linux64.h:39 -msgid "Same as -mabi=32, just trickier" -msgstr "" - #. Target CPU builtins. +#. Everyone but IRIX defines this to mips. #. We do this here because __mips is defined below and so we can't use builtin_define_std. #. Treat _R3000 and _R4000 like register-size defines, which is how they've historically been used. #. Macros dependent on the C dialect. @@ -10695,64 +10723,64 @@ msgstr "" #. each pair being { "NAME", VALUE } #. where VALUE is the bits to set or minus the bits to clear. #. An empty string NAME is used to identify the default VALUE. -#: config/mips/mips.h:533 +#: config/mips/mips.h:537 msgid "Use 64-bit int type" msgstr "" -#: config/mips/mips.h:535 +#: config/mips/mips.h:539 msgid "Use 64-bit long type" msgstr "" -#: config/mips/mips.h:537 +#: config/mips/mips.h:541 msgid "Use 32-bit long type" msgstr "" -#: config/mips/mips.h:539 +#: config/mips/mips.h:543 msgid "Optimize lui/addiu address loads" msgstr "" -#: config/mips/mips.h:541 +#: config/mips/mips.h:545 msgid "Don't optimize lui/addiu address loads" msgstr "" -#: config/mips/mips.h:543 +#: config/mips/mips.h:547 msgid "Use GNU as (now ignored)" msgstr "" -#: config/mips/mips.h:545 config/mips/mips.h:547 +#: config/mips/mips.h:549 config/mips/mips.h:551 msgid "Use GP relative sdata/sbss sections (now ignored)" msgstr "" -#: config/mips/mips.h:549 config/mips/mips.h:551 +#: config/mips/mips.h:553 config/mips/mips.h:555 msgid "Don't use GP relative sdata/sbss sections (now ignored)" msgstr "" -#: config/mips/mips.h:553 +#: config/mips/mips.h:557 #, fuzzy msgid "Output compiler statistics (now ignored)" msgstr "’Ñ‹²µÑÑ†Ñ– ст°Ñ‚ыстыşÑƒ ş°żÑ–ğят°Ñ€°" -#: config/mips/mips.h:555 +#: config/mips/mips.h:559 msgid "Don't output compiler statistics" msgstr "µ ²Ñ‹²´·Ñ–ць ст°Ñ‚ыстыşÑƒ ş°ĵżÑ–ğят°Ñ€°" -#: config/mips/mips.h:557 +#: config/mips/mips.h:561 msgid "Don't optimize block moves" msgstr "" -#: config/mips/mips.h:559 +#: config/mips/mips.h:563 msgid "Optimize block moves" msgstr "" -#: config/mips/mips.h:561 +#: config/mips/mips.h:565 msgid "Use mips-tfile asm postpass" msgstr "" -#: config/mips/mips.h:563 +#: config/mips/mips.h:567 msgid "Don't use mips-tfile asm postpass" msgstr "" -#: config/mips/mips.h:565 config/pa/pa.h:288 +#: config/mips/mips.h:569 config/pa/pa.h:288 msgid "Use software floating point" msgstr "" @@ -10762,198 +10790,198 @@ msgstr "" #. where VALUE is the bits to set or minus the bits to clear and DOC #. is the documentation for --help (NULL if intentionally undocumented). #. An empty string NAME is used to identify the default VALUE. -#: config/mips/mips.h:567 config/pdp11/pdp11.h:61 config/rs6000/rs6000.h:329 +#: config/mips/mips.h:571 config/pdp11/pdp11.h:61 config/rs6000/rs6000.h:329 msgid "Use hardware floating point" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ °ż°Ñ€°Ñ‚½ÑƒÑŽ \"żğ°²°ÑŽÑ‡ÑƒÑŽ şÑ€żşÑƒ\"" -#: config/mips/mips.h:569 +#: config/mips/mips.h:573 msgid "Use 64-bit FP registers" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ 64-ħіт½Ñ‹Ñ FP-рэ³Ñ–стры" -#: config/mips/mips.h:571 +#: config/mips/mips.h:575 msgid "Use 32-bit FP registers" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ 32-ħіт½Ñ‹Ñ FP-рэ³Ñ–стры" -#: config/mips/mips.h:573 +#: config/mips/mips.h:577 msgid "Use 64-bit general registers" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ 64-ħіт½Ñ‹Ñ ³°ğў½Ñ‹Ñ рэ³Ñ–стры" -#: config/mips/mips.h:575 +#: config/mips/mips.h:579 msgid "Use 32-bit general registers" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ 32-ħіт½Ñ‹Ñ ³°ğў½Ñ‹Ñ рэ³Ñ–стры" -#: config/mips/mips.h:577 +#: config/mips/mips.h:581 msgid "Use Irix PIC" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ Irix PIC" -#: config/mips/mips.h:579 +#: config/mips/mips.h:583 msgid "Don't use Irix PIC" msgstr "µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ Irix PIC" -#: config/mips/mips.h:581 +#: config/mips/mips.h:585 msgid "Use indirect calls" msgstr "" -#: config/mips/mips.h:583 +#: config/mips/mips.h:587 msgid "Don't use indirect calls" msgstr "" -#: config/mips/mips.h:593 +#: config/mips/mips.h:597 msgid "Use big-endian byte order" msgstr "" -#: config/mips/mips.h:595 +#: config/mips/mips.h:599 msgid "Use little-endian byte order" msgstr "" -#: config/mips/mips.h:597 +#: config/mips/mips.h:601 msgid "Use single (32-bit) FP only" msgstr "" -#: config/mips/mips.h:599 +#: config/mips/mips.h:603 msgid "Don't use single (32-bit) FP only" msgstr "" -#: config/mips/mips.h:601 config/mips/mips.h:603 +#: config/mips/mips.h:605 config/mips/mips.h:607 #, fuzzy msgid "Use paired-single floating point instructions" msgstr "’Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°Ñ†ÑŒ °ż°Ñ€°Ñ‚½ÑƒÑŽ \"żğ°²°ÑŽÑ‡ÑƒÑŽ şÑ€żşÑƒ\"" -#: config/mips/mips.h:605 config/mips/mips.h:607 +#: config/mips/mips.h:609 config/mips/mips.h:611 msgid "Use MIPS-3D instructions" msgstr "" -#: config/mips/mips.h:609 +#: config/mips/mips.h:613 msgid "Use multiply accumulate" msgstr "" -#: config/mips/mips.h:611 +#: config/mips/mips.h:615 msgid "Don't use multiply accumulate" msgstr "" -#: config/mips/mips.h:613 +#: config/mips/mips.h:617 msgid "Don't generate fused multiply/add instructions" msgstr "" -#: config/mips/mips.h:615 config/rs6000/rs6000.h:345 +#: config/mips/mips.h:619 config/rs6000/rs6000.h:345 msgid "Generate fused multiply/add instructions" msgstr "" -#: config/mips/mips.h:617 +#: config/mips/mips.h:621 msgid "Perform VR4130-specific alignment optimizations" msgstr "" -#: config/mips/mips.h:619 +#: config/mips/mips.h:623 msgid "Don't perform VR4130-specific alignment optimizations" msgstr "" -#: config/mips/mips.h:621 +#: config/mips/mips.h:625 msgid "Work around early 4300 hardware bug" msgstr "" -#: config/mips/mips.h:623 +#: config/mips/mips.h:627 msgid "Don't work around early 4300 hardware bug" msgstr "" -#: config/mips/mips.h:625 +#: config/mips/mips.h:629 msgid "Work around errata for early SB-1 revision 2 cores" msgstr "" -#: config/mips/mips.h:627 +#: config/mips/mips.h:631 msgid "Don't work around errata for early SB-1 revision 2 cores" msgstr "" -#: config/mips/mips.h:629 +#: config/mips/mips.h:633 msgid "Work around R4000 errata" msgstr "" -#: config/mips/mips.h:631 +#: config/mips/mips.h:635 msgid "Don't work around R4000 errata" msgstr "" -#: config/mips/mips.h:633 +#: config/mips/mips.h:637 msgid "Work around R4400 errata" msgstr "" -#: config/mips/mips.h:635 +#: config/mips/mips.h:639 msgid "Don't work around R4400 errata" msgstr "" -#: config/mips/mips.h:637 +#: config/mips/mips.h:641 msgid "Work around certain VR4120 errata" msgstr "" -#: config/mips/mips.h:639 +#: config/mips/mips.h:643 msgid "Don't work around certain VR4120 errata" msgstr "" -#: config/mips/mips.h:641 +#: config/mips/mips.h:645 msgid "Trap on integer divide by zero" msgstr "" -#: config/mips/mips.h:643 +#: config/mips/mips.h:647 msgid "Don't trap on integer divide by zero" msgstr "" -#: config/mips/mips.h:645 +#: config/mips/mips.h:649 msgid "Use trap to check for integer divide by zero" msgstr "" -#: config/mips/mips.h:647 +#: config/mips/mips.h:651 msgid "Use break to check for integer divide by zero" msgstr "" -#: config/mips/mips.h:649 +#: config/mips/mips.h:653 msgid "Use Branch Likely instructions, overriding default for arch" msgstr "" -#: config/mips/mips.h:651 +#: config/mips/mips.h:655 msgid "Don't use Branch Likely instructions, overriding default for arch" msgstr "" -#: config/mips/mips.h:653 +#: config/mips/mips.h:657 msgid "Use NewABI-style %reloc() assembly operators" msgstr "" -#: config/mips/mips.h:655 +#: config/mips/mips.h:659 msgid "Use assembler macros instead of relocation operators" msgstr "" -#: config/mips/mips.h:657 +#: config/mips/mips.h:661 #, fuzzy msgid "Generate mips16 code" msgstr "Ħт²°Ñ€Ñ‹Ñ†ÑŒ ş´ ´ğя DLL" -#: config/mips/mips.h:659 +#: config/mips/mips.h:663 #, fuzzy msgid "Generate normal-mode code" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя GNU ld" -#: config/mips/mips.h:661 +#: config/mips/mips.h:665 msgid "Lift restrictions on GOT size" msgstr "" -#: config/mips/mips.h:663 +#: config/mips/mips.h:667 msgid "Do not lift restrictions on GOT size" msgstr "" -#: config/mips/mips.h:665 +#: config/mips/mips.h:669 #, fuzzy msgid "FP exceptions are enabled" msgstr "²Ñ‹ħ°Ñ€Ñ‹ ўşğюч°½Ñ‹:" -#: config/mips/mips.h:667 +#: config/mips/mips.h:671 #, fuzzy msgid "FP exceptions are not enabled" msgstr "²Ñ‹ħ°Ñ€Ñ‹ ўşğюч°½Ñ‹:" -#: config/mips/mips.h:782 +#: config/mips/mips.h:786 msgid "Specify a Standard MIPS ISA" msgstr "" #. Output assembler code to FILE to increment profiler label # LABELNO #. for profiling a function entry. -#: config/mips/mips.h:2321 +#: config/mips/mips.h:2318 msgid "mips16 function profiling" msgstr "" @@ -10980,70 +11008,70 @@ msgstr "" msgid "MMIX Internal: Last named vararg would not fit in a register" msgstr "" -#: config/mmix/mmix.c:1462 config/mmix/mmix.c:1592 +#: config/mmix/mmix.c:1471 config/mmix/mmix.c:1601 msgid "MMIX Internal: Expected a CONST_INT, not this" msgstr "" -#: config/mmix/mmix.c:1470 config/mmix/mmix.c:1494 config/mmix/mmix.c:1610 +#: config/mmix/mmix.c:1479 config/mmix/mmix.c:1503 config/mmix/mmix.c:1619 #, c-format msgid "MMIX Internal: Bad register: %d" msgstr "" -#: config/mmix/mmix.c:1541 +#: config/mmix/mmix.c:1550 msgid "MMIX Internal: Bad value for 'm', not a CONST_INT" msgstr "" -#: config/mmix/mmix.c:1560 +#: config/mmix/mmix.c:1569 msgid "MMIX Internal: Expected a register, not this" msgstr "" -#: config/mmix/mmix.c:1570 +#: config/mmix/mmix.c:1579 msgid "MMIX Internal: Expected a constant, not this" msgstr "" #. Presumably there's a missing case above if we get here. -#: config/mmix/mmix.c:1602 +#: config/mmix/mmix.c:1611 #, c-format msgid "MMIX Internal: Missing %qc case in mmix_print_operand" msgstr "" #. We need the original here. -#: config/mmix/mmix.c:1654 +#: config/mmix/mmix.c:1663 msgid "MMIX Internal: Cannot decode this operand" msgstr "" -#: config/mmix/mmix.c:1711 +#: config/mmix/mmix.c:1720 msgid "MMIX Internal: This is not a recognized address" msgstr "" -#: config/mmix/mmix.c:1888 +#: config/mmix/mmix.c:1897 #, c-format msgid "stack frame not a multiple of 8 bytes: %d" msgstr "" -#: config/mmix/mmix.c:2127 +#: config/mmix/mmix.c:2133 #, c-format msgid "stack frame not a multiple of octabyte: %d" msgstr "" -#: config/mmix/mmix.c:2601 config/mmix/mmix.c:2665 +#: config/mmix/mmix.c:2606 config/mmix/mmix.c:2670 #, c-format msgid "MMIX Internal: %s is not a shiftable int" msgstr "" -#: config/mmix/mmix.c:2781 +#: config/mmix/mmix.c:2786 msgid "MMIX Internal: Trying to output invalidly reversed condition:" msgstr "" -#: config/mmix/mmix.c:2788 +#: config/mmix/mmix.c:2793 msgid "MMIX Internal: What's the CC of this?" msgstr "" -#: config/mmix/mmix.c:2792 +#: config/mmix/mmix.c:2797 msgid "MMIX Internal: What is the CC of this?" msgstr "" -#: config/mmix/mmix.c:2862 +#: config/mmix/mmix.c:2867 msgid "MMIX Internal: This is not a constant:" msgstr "" @@ -11117,16 +11145,16 @@ msgstr "" msgid "Do not generate a single exit point for each function" msgstr "µ ³µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ сіĵ²°ğь½Ñ‹Ñ і½ÑÑ‚руşÑ†Ñ‹Ñ–" -#: config/mn10300/linux.h:60 config/mn10300/mn10300.h:71 +#: config/mn10300/linux.h:45 config/mn10300/mn10300.h:71 msgid "Target the AM33 processor" msgstr "œÑÑ‚° - AM33 żÑ€°Ñ†ÑÑ°Ñ€" -#: config/mn10300/linux.h:61 config/mn10300/mn10300.h:75 +#: config/mn10300/linux.h:46 config/mn10300/mn10300.h:75 #, fuzzy msgid "Target the AM33/2.0 processor" msgstr "œÑÑ‚° - AM33 żÑ€°Ñ†ÑÑ°Ñ€" -#: config/mn10300/linux.h:62 config/mn10300/mn10300.h:78 +#: config/mn10300/linux.h:47 config/mn10300/mn10300.h:78 msgid "Enable linker relaxations" msgstr "" @@ -11211,63 +11239,68 @@ msgstr "" msgid "No \"Small register classes\" kludge" msgstr "" -#: config/pa/pa.c:404 +#: config/pa/pa.c:412 #, c-format msgid "" "unknown -mschedule= option (%s).\n" "Valid options are 700, 7100, 7100LC, 7200, 7300, and 8000\n" msgstr "" -#: config/pa/pa.c:429 +#: config/pa/pa.c:437 #, c-format msgid "" "unknown -march= option (%s).\n" "Valid options are 1.0, 1.1, and 2.0\n" msgstr "" -#: config/pa/pa.c:449 +#: config/pa/pa.c:457 #, c-format msgid "" "unknown -munix= option (%s).\n" "Valid options are 93, 95 and 98.\n" msgstr "" -#: config/pa/pa.c:454 +#: config/pa/pa.c:462 #, c-format msgid "" "unknown -munix= option (%s).\n" "Valid options are 93 and 95.\n" msgstr "" -#: config/pa/pa.c:458 +#: config/pa/pa.c:466 #, c-format msgid "" "unknown -munix= option (%s).\n" "Valid option is 93.\n" msgstr "" -#: config/pa/pa.c:475 +#: config/pa/pa.c:483 msgid "PIC code generation is not supported in the portable runtime model\n" msgstr "" -#: config/pa/pa.c:480 +#: config/pa/pa.c:488 msgid "PIC code generation is not compatible with fast indirect calls\n" msgstr "" -#: config/pa/pa.c:485 +#: config/pa/pa.c:493 msgid "-g is only supported when using GAS on this processor," msgstr "" -#: config/pa/pa.c:486 +#: config/pa/pa.c:494 msgid "-g option disabled" msgstr "" -#: config/pa/pa-hpux.h:96 config/pa/pa64-hpux.h:25 +#: config/pa/pa.c:8338 +#, c-format +msgid "alignment (%u) for %s exceeds maximum alignment for global common data. Using %u" +msgstr "" + +#: config/pa/pa-hpux.h:96 config/pa/pa64-hpux.h:26 #, fuzzy msgid "Generate cpp defines for server IO" msgstr "“µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ ş´ ´ğя ´°´·µ½°³° ĤŸ" -#: config/pa/pa-hpux.h:97 config/pa/pa64-hpux.h:27 +#: config/pa/pa-hpux.h:97 config/pa/pa64-hpux.h:28 #, fuzzy msgid "Generate cpp defines for workstation IO" msgstr "Ħт²°Ñ€Ñ‹Ñ†ÑŒ ş´ ´ğя DLL" @@ -11427,11 +11460,11 @@ msgstr "" msgid "Specify CPU for scheduling purposes." msgstr "" -#: config/pa/pa64-hpux.h:29 +#: config/pa/pa64-hpux.h:30 msgid "Assume code will be linked by GNU ld" msgstr "" -#: config/pa/pa64-hpux.h:31 +#: config/pa/pa64-hpux.h:32 msgid "Assume code will be linked by HP ld" msgstr "" @@ -11571,218 +11604,246 @@ msgstr "" msgid "junk at end of #pragma longcall" msgstr "" -#: config/rs6000/rs6000.c:1244 +#: config/rs6000/rs6000.c:1254 msgid "-mmultiple is not supported on little endian systems" msgstr "" -#: config/rs6000/rs6000.c:1251 +#: config/rs6000/rs6000.c:1261 msgid "-mstring is not supported on little endian systems" msgstr "" -#: config/rs6000/rs6000.c:1265 +#: config/rs6000/rs6000.c:1275 #, c-format msgid "unknown -mdebug-%s switch" msgstr "" -#: config/rs6000/rs6000.c:1277 +#: config/rs6000/rs6000.c:1287 msgid "unknown -mtraceback arg %qs; expecting %, % or %" msgstr "" -#: config/rs6000/rs6000.c:1288 +#: config/rs6000/rs6000.c:1298 #, c-format msgid "Unknown switch -mlong-double-%s" msgstr "" -#: config/rs6000/rs6000.c:1338 +#: config/rs6000/rs6000.c:1354 msgid "AltiVec and E500 instructions cannot coexist" msgstr "" -#: config/rs6000/rs6000.c:1616 +#: config/rs6000/rs6000.c:1622 #, fuzzy, c-format msgid "unknown -m%s= option specified: '%s'" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: config/rs6000/rs6000.c:1637 +#: config/rs6000/rs6000.c:1643 #, c-format msgid "not configured for ABI: '%s'" msgstr "" -#: config/rs6000/rs6000.c:1645 +#: config/rs6000/rs6000.c:1651 msgid "Using darwin64 ABI" msgstr "" -#: config/rs6000/rs6000.c:1650 +#: config/rs6000/rs6000.c:1656 msgid "Using old darwin ABI" msgstr "" -#: config/rs6000/rs6000.c:1656 +#: config/rs6000/rs6000.c:1662 #, fuzzy, c-format msgid "unknown ABI specified: '%s'" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: config/rs6000/rs6000.c:1673 +#: config/rs6000/rs6000.c:1679 #, fuzzy msgid "invalid option for -mfloat-gprs" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: config/rs6000/rs6000.c:1687 +#: config/rs6000/rs6000.c:1695 +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:1702 #, fuzzy, c-format msgid "unknown -malign-XXXXX option specified: '%s'" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: config/rs6000/rs6000.c:4658 +#: config/rs6000/rs6000.c:4756 msgid "GCC vector returned by reference: non-standard ABI extension with no compatibility guarantee" msgstr "" -#: config/rs6000/rs6000.c:4731 +#: config/rs6000/rs6000.c:4829 msgid "Cannot return value in vector register because altivec instructions are disabled, use -maltivec to enable them." msgstr "" -#: config/rs6000/rs6000.c:4920 +#: config/rs6000/rs6000.c:5018 msgid "Cannot pass argument in vector register because altivec instructions are disabled, use -maltivec to enable them." msgstr "" -#: config/rs6000/rs6000.c:5712 +#: config/rs6000/rs6000.c:5809 msgid "GCC vector passed by reference: non-standard ABI extension with no compatibility guarantee" msgstr "" -#: config/rs6000/rs6000.c:6605 +#: config/rs6000/rs6000.c:6704 #, fuzzy msgid "argument 1 must be a 5-bit signed literal" msgstr "żµÑ€ÑˆÑ‹ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"int\"" -#: config/rs6000/rs6000.c:6708 config/rs6000/rs6000.c:7378 +#: config/rs6000/rs6000.c:6807 config/rs6000/rs6000.c:7477 #, fuzzy msgid "argument 2 must be a 5-bit unsigned literal" msgstr "żµÑ€ÑˆÑ‹ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"int\"" -#: config/rs6000/rs6000.c:6748 +#: config/rs6000/rs6000.c:6847 #, fuzzy msgid "argument 1 of __builtin_altivec_predicate must be a constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: config/rs6000/rs6000.c:6802 +#: config/rs6000/rs6000.c:6901 #, fuzzy msgid "argument 1 of __builtin_altivec_predicate is out of range" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ²Ñ‹ıш°Ñž ·° ĵµĥы" -#: config/rs6000/rs6000.c:6964 +#: config/rs6000/rs6000.c:7063 #, fuzzy msgid "argument 3 must be a 4-bit unsigned literal" msgstr "żµÑ€ÑˆÑ‹ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"int\"" -#: config/rs6000/rs6000.c:7136 +#: config/rs6000/rs6000.c:7235 #, fuzzy, c-format msgid "argument to %qs must be a 2-bit unsigned literal" msgstr "żµÑ€ÑˆÑ‹ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"int\"" -#: config/rs6000/rs6000.c:7249 +#: config/rs6000/rs6000.c:7348 #, fuzzy msgid "argument to dss must be a 2-bit unsigned literal" msgstr "żµÑ€ÑˆÑ‹ĵ °Ñ€³Ñƒĵµ½Ñ‚°ĵ \"%s\" ż°²Ñ–½µ½ ħыць \"int\"" -#: config/rs6000/rs6000.c:7264 +#: config/rs6000/rs6000.c:7363 #, c-format msgid "invalid parameter combination for %qs AltiVec intrinsic" msgstr "" -#: config/rs6000/rs6000.c:7498 +#: config/rs6000/rs6000.c:7597 #, fuzzy msgid "argument 1 of __builtin_spe_predicate must be a constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" -#: config/rs6000/rs6000.c:7571 +#: config/rs6000/rs6000.c:7670 #, fuzzy msgid "argument 1 of __builtin_spe_predicate is out of range" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ²Ñ‹ıш°Ñž ·° ĵµĥы" -#: config/rs6000/rs6000.c:10478 +#: config/rs6000/rs6000.c:10566 #, c-format msgid "invalid %%f value" msgstr "" -#: config/rs6000/rs6000.c:10487 +#: config/rs6000/rs6000.c:10575 #, c-format msgid "invalid %%F value" msgstr "" -#: config/rs6000/rs6000.c:10496 +#: config/rs6000/rs6000.c:10584 #, c-format msgid "invalid %%G value" msgstr "" -#: config/rs6000/rs6000.c:10531 +#: config/rs6000/rs6000.c:10619 #, c-format msgid "invalid %%j code" msgstr "" -#: config/rs6000/rs6000.c:10541 +#: config/rs6000/rs6000.c:10629 #, c-format msgid "invalid %%J code" msgstr "" -#: config/rs6000/rs6000.c:10551 +#: config/rs6000/rs6000.c:10639 #, c-format msgid "invalid %%k value" msgstr "" -#: config/rs6000/rs6000.c:10571 config/xtensa/xtensa.c:1937 +#: config/rs6000/rs6000.c:10659 config/xtensa/xtensa.c:1937 #, c-format msgid "invalid %%K value" msgstr "" -#: config/rs6000/rs6000.c:10638 +#: config/rs6000/rs6000.c:10726 #, c-format msgid "invalid %%O value" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ·½°Ñ‡Ñ½ÑŒ½µ %%O" -#: config/rs6000/rs6000.c:10685 +#: config/rs6000/rs6000.c:10773 #, c-format msgid "invalid %%q value" msgstr "" -#: config/rs6000/rs6000.c:10729 +#: config/rs6000/rs6000.c:10817 #, c-format msgid "invalid %%S value" msgstr "" -#: config/rs6000/rs6000.c:10771 +#: config/rs6000/rs6000.c:10859 #, c-format msgid "invalid %%T value" msgstr "" -#: config/rs6000/rs6000.c:10781 +#: config/rs6000/rs6000.c:10869 #, c-format msgid "invalid %%u value" msgstr "" -#: config/rs6000/rs6000.c:10790 config/xtensa/xtensa.c:1907 +#: config/rs6000/rs6000.c:10878 config/xtensa/xtensa.c:1907 #, c-format msgid "invalid %%v value" msgstr "" -#: config/rs6000/rs6000.c:13442 +#: config/rs6000/rs6000.c:13555 #, fuzzy msgid "stack frame too large" msgstr "%s - ²µğьĵі ²ÑğіşÑ–" -#: config/rs6000/rs6000.c:15958 +#: config/rs6000/rs6000.c:16073 msgid "no profiling of 64-bit code for this ABI" msgstr "" -#: config/rs6000/rs6000.c:17044 -msgid "use of 'long' in AltiVec types is deprecated; use 'int'" +#: config/rs6000/rs6000.c:17163 +msgid "use of % in AltiVec types is invalid for 64-bit code" +msgstr "" + +#: config/rs6000/rs6000.c:17165 +msgid "use of % in AltiVec types is deprecated; use %" +msgstr "" + +#: config/rs6000/rs6000.c:17169 +msgid "use of % in AltiVec types is invalid" +msgstr "" + +#: config/rs6000/rs6000.c:17171 +msgid "use of % in AltiVec types is invalid" +msgstr "" + +#: config/rs6000/rs6000.c:17173 +msgid "use of % in AltiVec types is invalid" +msgstr "" + +#: config/rs6000/rs6000.c:17175 +msgid "use of boolean types in AltiVec types is invalid" +msgstr "" + +#: config/rs6000/rs6000.c:17177 +msgid "use of % in AltiVec types is invalid" msgstr "" -#: config/rs6000/aix.h:203 config/rs6000/beos.h:32 -msgid "Always pass floating-point arguments in memory" +#: config/rs6000/aix.h:204 +msgid "Conform more closely to IBM XLC semantics" msgstr "" -#: config/rs6000/aix.h:205 config/rs6000/beos.h:34 -msgid "Don't always pass floating-point arguments in memory" +#: config/rs6000/aix.h:206 +msgid "Default GCC semantics that differ from IBM XLC" msgstr "" -#: config/rs6000/aix41.h:27 config/rs6000/aix43.h:32 config/rs6000/aix51.h:31 +#: config/rs6000/aix41.h:28 config/rs6000/aix43.h:32 config/rs6000/aix51.h:31 #: config/rs6000/aix52.h:31 msgid "Support message passing with the Parallel Environment" msgstr "" @@ -11845,15 +11906,15 @@ msgstr "" msgid "-m64 not supported in this configuration" msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°" -#: config/rs6000/linux64.h:106 +#: config/rs6000/linux64.h:109 msgid "-m64 requires a PowerPC64 cpu" msgstr "" -#: config/rs6000/linux64.h:216 +#: config/rs6000/linux64.h:221 msgid "Call mcount for profiling before a function prologue" msgstr "" -#: config/rs6000/linux64.h:218 +#: config/rs6000/linux64.h:223 msgid "Call mcount for profiling after a function prologue" msgstr "" @@ -12007,7 +12068,7 @@ msgstr "µ ³µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ сіĵ²°ğь½Ñ‹Ñ і½ÑÑ‚руşÑ†Ñ‹Ñ–" msgid "Do not generate single field mfcr instruction" msgstr "µ ³µ½µÑ€Ñ‹Ñ€°²°Ñ†ÑŒ сіĵ²°ğь½Ñ‹Ñ і½ÑÑ‚руşÑ†Ñ‹Ñ–" -#: config/rs6000/rs6000.h:451 config/sparc/sparc.h:709 +#: config/rs6000/rs6000.h:451 config/sparc/sparc.h:715 msgid "Use features of and schedule code for given CPU" msgstr "" @@ -12079,7 +12140,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:1829 +#: config/rs6000/rs6000.h:1830 msgid "RETURN_ADDRESS_OFFSET not supported" msgstr "" @@ -12231,80 +12292,84 @@ msgstr "" msgid "-m%s not supported in this configuration" msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°" -#: config/s390/s390.c:1293 +#: config/s390/s390.c:1406 #, c-format msgid "Unknown cpu used in -march=%s." msgstr "" -#: config/s390/s390.c:1312 +#: config/s390/s390.c:1425 #, c-format msgid "Unknown cpu used in -mtune=%s." msgstr "" -#: config/s390/s390.c:1317 +#: config/s390/s390.c:1430 #, fuzzy, c-format msgid "z/Architecture mode not supported on %s." msgstr "-pipe ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†°" -#: config/s390/s390.c:1319 +#: config/s390/s390.c:1432 msgid "64-bit ABI not supported in ESA/390 mode." msgstr "" -#: config/s390/s390.c:1325 +#: config/s390/s390.c:1443 +msgid "-mbackchain -mpacked-stack -mhard-float are not supported in combination." +msgstr "" + +#: config/s390/s390.c:1450 msgid "invalid value for -mwarn-framesize" msgstr "" -#: config/s390/s390.c:1335 +#: config/s390/s390.c:1460 #, fuzzy msgid "invalid value for -mstack-size" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: config/s390/s390.c:1338 +#: config/s390/s390.c:1463 msgid "stack size must be an exact power of 2" msgstr "" -#: config/s390/s390.c:1344 +#: config/s390/s390.c:1469 msgid "invalid value for -mstack-guard" msgstr "" -#: config/s390/s390.c:1347 +#: config/s390/s390.c:1472 msgid "stack size must be greater than the stack guard value" msgstr "" -#: config/s390/s390.c:1350 +#: config/s390/s390.c:1475 msgid "stack guard value must be an exact power of 2" msgstr "" -#: config/s390/s390.c:1353 +#: config/s390/s390.c:1478 msgid "-mstack-size implies use of -mstack-guard" msgstr "" -#: config/s390/s390.c:1357 +#: config/s390/s390.c:1482 msgid "-mstack-guard implies use of -mstack-size" msgstr "" -#: config/s390/s390.c:4046 +#: config/s390/s390.c:4310 msgid "Cannot decompose address." msgstr "" -#: config/s390/s390.c:4238 +#: config/s390/s390.c:4502 msgid "UNKNOWN in print_operand !?" msgstr "" -#: config/s390/s390.c:6285 +#: config/s390/s390.c:6549 msgid "Total size of local variables exceeds architecture limit." msgstr "" -#: config/s390/s390.c:6823 +#: config/s390/s390.c:7085 #, fuzzy, c-format msgid "frame size of %qs is " msgstr "ż°ĵµÑ€ \"%s\" - %d ħ°ıт" -#: config/s390/s390.c:6823 +#: config/s390/s390.c:7085 msgid " bytes" msgstr "" -#: config/s390/s390.c:6827 +#: config/s390/s390.c:7089 #, c-format msgid "%qs uses dynamic stack allocation" msgstr "" @@ -12400,30 +12465,30 @@ msgstr "" msgid "Set the max. number of bytes which has to be left to stack size before a trap instruction is triggered" msgstr "" -#: config/sh/sh.c:6197 +#: config/sh/sh.c:6201 #, fuzzy msgid "__builtin_saveregs not supported by this subtarget" msgstr "__buitin_saveregs ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†° ³ÑÑ‚°ı ĵэт°ı" -#: config/sh/sh.c:7166 +#: config/sh/sh.c:7194 msgid "attribute interrupt_handler is not compatible with -m5-compact" msgstr "" #. The sp_switch attribute only has meaning for interrupt functions. #. The trap_exit attribute only has meaning for interrupt functions. -#: config/sh/sh.c:7188 config/sh/sh.c:7223 +#: config/sh/sh.c:7216 config/sh/sh.c:7251 #, fuzzy, c-format msgid "%qs attribute only applies to interrupt functions" msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" #. The argument must be a constant string. -#: config/sh/sh.c:7195 +#: config/sh/sh.c:7223 #, fuzzy, c-format msgid "%qs attribute argument not a string constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" #. The argument must be a constant integer. -#: config/sh/sh.c:7230 +#: config/sh/sh.c:7258 #, fuzzy, c-format msgid "%qs attribute argument not an integer constant" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ `__builtin_args_info' ż°²Ñ–½µ½ ħыць ş°½ÑÑ‚°½Ñ‚°ı" @@ -12456,7 +12521,7 @@ msgstr "" msgid "%Hexternal linkage required for symbol '%D' because of '%s' attribute." msgstr "" -#: config/sh/symbian.c:892 cp/tree.c:2346 +#: config/sh/symbian.c:892 cp/tree.c:2286 #, c-format msgid "lang_* check: failed in %s, at %s:%d" msgstr "" @@ -12469,183 +12534,183 @@ msgstr "" msgid "Profiling is not supported on this target." msgstr "__buitin_saveregs ½µ ż°´Ñ‚рыĵğі²°µÑ†Ñ†° ³ÑÑ‚°ı ĵэт°ı" -#: config/sparc/sparc.c:577 +#: config/sparc/sparc.c:584 #, c-format msgid "%s is not supported by this configuration" msgstr "" -#: config/sparc/sparc.c:584 +#: config/sparc/sparc.c:591 msgid "-mlong-double-64 not allowed with -m64" msgstr "" -#: config/sparc/sparc.c:609 +#: config/sparc/sparc.c:616 msgid "-mcmodel= is not supported on 32 bit systems" msgstr "" -#: config/sparc/sparc.c:7315 config/sparc/sparc.c:7321 +#: config/sparc/sparc.c:7325 config/sparc/sparc.c:7331 #, c-format msgid "invalid %%Y operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%Y °żµÑ€°½´" -#: config/sparc/sparc.c:7391 +#: config/sparc/sparc.c:7401 #, c-format msgid "invalid %%A operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%A °żµÑ€°½´" -#: config/sparc/sparc.c:7401 +#: config/sparc/sparc.c:7411 #, c-format msgid "invalid %%B operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%B °żµÑ€°½´" -#: config/sparc/sparc.c:7440 +#: config/sparc/sparc.c:7450 #, c-format msgid "invalid %%c operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%c °żµÑ€°½´" -#: config/sparc/sparc.c:7441 +#: config/sparc/sparc.c:7451 #, c-format msgid "invalid %%C operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%C °żµÑ€°½´" -#: config/sparc/sparc.c:7462 +#: config/sparc/sparc.c:7472 #, c-format msgid "invalid %%d operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%d °żµÑ€°½´" -#: config/sparc/sparc.c:7463 +#: config/sparc/sparc.c:7473 #, c-format msgid "invalid %%D operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%D °żµÑ€°½´" -#: config/sparc/sparc.c:7479 +#: config/sparc/sparc.c:7489 #, c-format msgid "invalid %%f operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%f °żµÑ€°½´" -#: config/sparc/sparc.c:7493 +#: config/sparc/sparc.c:7503 #, fuzzy, c-format msgid "invalid %%s operand" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ %%f °żµÑ€°½´" -#: config/sparc/sparc.c:7547 +#: config/sparc/sparc.c:7557 msgid "long long constant not a valid immediate operand" msgstr "" -#: config/sparc/sparc.c:7550 +#: config/sparc/sparc.c:7560 msgid "floating point constant not a valid immediate operand" msgstr "" #: config/sparc/freebsd.h:77 config/sparc/linux.h:91 -#: config/sparc/linux64.h:111 config/sparc/netbsd-elf.h:211 +#: config/sparc/linux64.h:111 config/sparc/netbsd-elf.h:201 msgid "Use 64 bit long doubles" msgstr "" #: config/sparc/freebsd.h:78 config/sparc/linux.h:92 -#: config/sparc/linux64.h:112 config/sparc/netbsd-elf.h:212 +#: config/sparc/linux64.h:112 config/sparc/netbsd-elf.h:202 msgid "Use 128 bit long doubles" msgstr "" -#: config/sparc/sp64-elf.h:90 +#: config/sparc/sp64-elf.h:87 msgid "Generate code for big endian" msgstr "" -#: config/sparc/sp64-elf.h:91 +#: config/sparc/sp64-elf.h:88 msgid "Generate code for little endian" msgstr "" -#: config/sparc/sp86x-elf.h:68 +#: config/sparc/sp86x-elf.h:61 msgid "Use little-endian byte order for data" msgstr "" -#: config/sparc/sparc.h:626 +#: config/sparc/sparc.h:632 msgid "Assume possible double misalignment" msgstr "" -#: config/sparc/sparc.h:628 +#: config/sparc/sparc.h:634 msgid "Assume all doubles are aligned" msgstr "" -#: config/sparc/sparc.h:630 +#: config/sparc/sparc.h:636 msgid "Pass -assert pure-text to linker" msgstr "" -#: config/sparc/sparc.h:632 +#: config/sparc/sparc.h:638 msgid "Do not pass -assert pure-text to linker" msgstr "" -#: config/sparc/sparc.h:634 +#: config/sparc/sparc.h:640 msgid "Use ABI reserved registers" msgstr "" -#: config/sparc/sparc.h:636 +#: config/sparc/sparc.h:642 msgid "Do not use ABI reserved registers" msgstr "" -#: config/sparc/sparc.h:638 +#: config/sparc/sparc.h:644 msgid "Use hardware quad fp instructions" msgstr "" -#: config/sparc/sparc.h:640 +#: config/sparc/sparc.h:646 msgid "Do not use hardware quad fp instructions" msgstr "" -#: config/sparc/sparc.h:642 +#: config/sparc/sparc.h:648 msgid "Compile for v8plus ABI" msgstr "" -#: config/sparc/sparc.h:644 +#: config/sparc/sparc.h:650 msgid "Do not compile for v8plus ABI" msgstr "" -#: config/sparc/sparc.h:646 +#: config/sparc/sparc.h:652 msgid "Utilize Visual Instruction Set" msgstr "" -#: config/sparc/sparc.h:648 +#: config/sparc/sparc.h:654 msgid "Do not utilize Visual Instruction Set" msgstr "" -#: config/sparc/sparc.h:650 +#: config/sparc/sparc.h:656 msgid "Pointers are 64-bit" msgstr "" -#: config/sparc/sparc.h:652 +#: config/sparc/sparc.h:658 msgid "Pointers are 32-bit" msgstr "" -#: config/sparc/sparc.h:654 +#: config/sparc/sparc.h:660 msgid "Use 32-bit ABI" msgstr "" -#: config/sparc/sparc.h:656 +#: config/sparc/sparc.h:662 msgid "Use 64-bit ABI" msgstr "" -#: config/sparc/sparc.h:658 +#: config/sparc/sparc.h:664 msgid "Use stack bias" msgstr "" -#: config/sparc/sparc.h:660 +#: config/sparc/sparc.h:666 msgid "Do not use stack bias" msgstr "" -#: config/sparc/sparc.h:662 +#: config/sparc/sparc.h:668 msgid "Use structs on stronger alignment for double-word copies" msgstr "" -#: config/sparc/sparc.h:664 +#: config/sparc/sparc.h:670 msgid "Do not use structs on stronger alignment for double-word copies" msgstr "" -#: config/sparc/sparc.h:666 +#: config/sparc/sparc.h:672 msgid "Optimize tail call instructions in assembler and linker" msgstr "" -#: config/sparc/sparc.h:668 +#: config/sparc/sparc.h:674 msgid "Do not optimize tail call instructions in assembler or linker" msgstr "" -#: config/sparc/sparc.h:713 +#: config/sparc/sparc.h:719 msgid "Use given SPARC code model" msgstr "" @@ -12758,64 +12823,64 @@ msgstr "" msgid "junk at end of #pragma ghs endzda" msgstr "" -#: config/v850/v850.c:163 +#: config/v850/v850.c:168 #, c-format msgid "%s=%s is not numeric" msgstr "" -#: config/v850/v850.c:170 +#: config/v850/v850.c:175 #, c-format msgid "%s=%s is too large" msgstr "%s=%s ²µğьĵі ²ÑğіşÑ–" -#: config/v850/v850.c:336 +#: config/v850/v850.c:339 msgid "const_double_split got a bad insn:" msgstr "" -#: config/v850/v850.c:901 +#: config/v850/v850.c:904 msgid "output_move_single:" msgstr "" -#: config/v850/v850.c:2243 +#: config/v850/v850.c:2246 msgid "%Jdata area attributes cannot be specified for local variables" msgstr "" -#: config/v850/v850.c:2254 +#: config/v850/v850.c:2257 #, fuzzy msgid "%Jdata area of '%D' conflicts with previous declaration" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: config/v850/v850.c:2453 +#: config/v850/v850.c:2456 #, c-format msgid "bogus JR construction: %d\n" msgstr "" -#: config/v850/v850.c:2474 config/v850/v850.c:2677 +#: config/v850/v850.c:2477 config/v850/v850.c:2680 #, c-format msgid "bad amount of stack space removal: %d" msgstr "" -#: config/v850/v850.c:2653 +#: config/v850/v850.c:2656 #, c-format msgid "bogus JARL construction: %d\n" msgstr "" -#: config/v850/v850.c:3023 +#: config/v850/v850.c:3026 #, c-format msgid "Bogus DISPOSE construction: %d\n" msgstr "" -#: config/v850/v850.c:3045 +#: config/v850/v850.c:3048 #, c-format msgid "Too much stack space to dispose of: %d" msgstr "" -#: config/v850/v850.c:3218 +#: config/v850/v850.c:3221 #, c-format msgid "Bogus PREPEARE construction: %d\n" msgstr "" -#: config/v850/v850.c:3240 +#: config/v850/v850.c:3243 #, c-format msgid "Too much stack space to prepare: %d" msgstr "" @@ -12999,12 +13064,12 @@ msgstr "" msgid "Use direct CALLn instructions for fast calls" msgstr "" -#: ada/misc.c:258 +#: ada/misc.c:257 #, fuzzy, c-format msgid "missing argument to \"-%s\"" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: ada/misc.c:299 +#: ada/misc.c:298 msgid "%<-gnat%> misspelled as %<-gant%>" msgstr "" @@ -13012,549 +13077,566 @@ msgstr "" msgid "unable to call pointer to member function here" msgstr "" -#: cp/call.c:2369 +#: cp/call.c:2376 msgid "%s %D(%T, %T, %T) " msgstr "" -#: cp/call.c:2374 +#: cp/call.c:2381 msgid "%s %D(%T, %T) " msgstr "" -#: cp/call.c:2378 +#: cp/call.c:2385 msgid "%s %D(%T) " msgstr "" -#: cp/call.c:2382 +#: cp/call.c:2389 msgid "%s %T " msgstr "" -#: cp/call.c:2384 +#: cp/call.c:2391 msgid "%J%s %+#D " msgstr "" -#: cp/call.c:2386 +#: cp/call.c:2393 msgid "%J%s %+#D" msgstr "" -#: cp/call.c:2421 +#: cp/call.c:2428 msgid "candidates are:" msgstr "" -#: cp/call.c:2607 +#: cp/call.c:2614 #, fuzzy msgid "conversion from %qT to %qT is ambiguous" msgstr "żµÑ€°ÑžÑ‚²°Ñ€Ñ½ÑŒ½µ · `%T' у `%T'" -#: cp/call.c:2761 cp/call.c:2819 +#: cp/call.c:2767 cp/call.c:2825 msgid "no matching function for call to %<%D(%A)%>" msgstr "" -#: cp/call.c:2764 cp/call.c:2822 +#: cp/call.c:2770 cp/call.c:2828 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:2890 +#: cp/call.c:2896 #, c-format msgid "pointer-to-member function %E cannot be called without an object; consider using .* or ->*" msgstr "" -#: cp/call.c:2959 +#: cp/call.c:2965 msgid "no match for call to %<(%T) (%A)%>" msgstr "" -#: cp/call.c:2968 +#: cp/call.c:2974 #, fuzzy msgid "call of %<(%T) (%A)%> is ambiguous" msgstr "ż°ĵµÑ€ \"%s\" - %d ħ°ıт" -#: cp/call.c:3005 +#: cp/call.c:3012 msgid "%s for ternary % in %<%E ? %E : %E%>" msgstr "" -#: cp/call.c:3011 +#: cp/call.c:3018 msgid "%s for % in %<%E%s%>" msgstr "" -#: cp/call.c:3015 +#: cp/call.c:3022 msgid "%s for % in %<%E[%E]%>" msgstr "" -#: cp/call.c:3020 +#: cp/call.c:3027 msgid "%s for %qs in %<%s %E%>" msgstr "" -#: cp/call.c:3025 +#: cp/call.c:3032 msgid "%s for % in %<%E %s %E%>" msgstr "" -#: cp/call.c:3028 +#: cp/call.c:3035 msgid "%s for % in %<%s%E%>" msgstr "" -#: cp/call.c:3118 +#: cp/call.c:3125 msgid "ISO C++ forbids omitting the middle term of a ?: expression" msgstr "" -#: cp/call.c:3195 +#: cp/call.c:3202 msgid "%qE has type % and is not a throw-expression" msgstr "" -#: cp/call.c:3234 cp/call.c:3444 +#: cp/call.c:3241 cp/call.c:3451 msgid "operands to ?: have different types" msgstr "" -#: cp/call.c:3398 +#: cp/call.c:3405 msgid "enumeral mismatch in conditional expression: %qT vs %qT" msgstr "" -#: cp/call.c:3405 +#: cp/call.c:3412 msgid "enumeral and non-enumeral type in conditional expression" msgstr "" -#: cp/call.c:3700 +#: cp/call.c:3706 msgid "no %<%D(int)%> declared for postfix %qs, trying prefix operator instead" msgstr "" -#: cp/call.c:3753 +#: cp/call.c:3759 msgid "using synthesized %q#D for copy assignment" msgstr "" -#: cp/call.c:3755 +#: cp/call.c:3761 msgid " where cfront would use %q#D" msgstr "" -#: cp/call.c:3787 +#: cp/call.c:3793 msgid "comparison between %q#T and %q#T" msgstr "" -#: cp/call.c:4044 +#: cp/call.c:4052 #, fuzzy msgid "no suitable % for %qT" msgstr "½µĵ°³Ñ‡Ñ‹ĵы °żÑÑ€°Ñ‚°Ñ€ '%s'" -#: cp/call.c:4061 +#: cp/call.c:4069 msgid "%q+#D is private" msgstr "" -#: cp/call.c:4063 +#: cp/call.c:4071 msgid "%q+#D is protected" msgstr "" -#: cp/call.c:4065 +#: cp/call.c:4073 msgid "%q+#D is inaccessible" msgstr "" -#: cp/call.c:4066 +#: cp/call.c:4074 msgid "within this context" msgstr "" -#: cp/call.c:4154 cp/cvt.c:263 +#: cp/call.c:4163 cp/cvt.c:263 #, fuzzy msgid "invalid conversion from %qT to %qT" msgstr "żµÑ€°ÑžÑ‚²°Ñ€Ñ½ÑŒ½µ · `%T' у `%T'" -#: cp/call.c:4156 +#: cp/call.c:4165 msgid " initializing argument %P of %qD" msgstr "" -#: cp/call.c:4300 +#: cp/call.c:4177 +msgid "passing NULL to non-pointer argument %P of %qD" +msgstr "" + +#: cp/call.c:4180 +msgid "converting to non-pointer type %qT from NULL" +msgstr "" + +#: cp/call.c:4188 +msgid "passing %qT for argument %P to %qD" +msgstr "" + +#: cp/call.c:4191 +#, fuzzy +msgid "converting to %qT from %qT" +msgstr "żµÑ€°ÑžÑ‚²°Ñ€Ñ½ÑŒ½µ · `%T' у `%T'" + +#: cp/call.c:4200 +msgid "passing negative value %qE for argument %P to %qD" +msgstr "" + +#: cp/call.c:4203 +msgid "converting negative value %qE to %qT" +msgstr "" + +#: cp/call.c:4345 #, fuzzy msgid "cannot bind bitfield %qE to %qT" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/call.c:4303 +#: cp/call.c:4348 cp/call.c:4364 msgid "cannot bind packed field %qE to %qT" msgstr "" -#: cp/call.c:4306 +#: cp/call.c:4351 #, fuzzy msgid "cannot bind rvalue %qE to %qT" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/call.c:4401 +#: cp/call.c:4460 msgid "cannot pass objects of non-POD type %q#T through %<...%>; call will abort at runtime" msgstr "" #. Undefined behavior [expr.call] 5.2.2/7. -#: cp/call.c:4427 +#: cp/call.c:4486 msgid "cannot receive objects of non-POD type %q#T through %<...%>; call will abort at runtime" msgstr "" -#: cp/call.c:4470 +#: cp/call.c:4529 msgid "the default argument for parameter %d of %qD has not yet been parsed" msgstr "" -#: cp/call.c:4675 +#: cp/call.c:4734 msgid "passing %qT as % argument of %q#D discards qualifiers" msgstr "" -#: cp/call.c:4694 +#: cp/call.c:4753 msgid "%qT is not an accessible base of %qT" msgstr "" -#: cp/call.c:4944 +#: cp/call.c:5003 msgid "could not find class$ field in java interface type %qT" msgstr "" -#: cp/call.c:5206 +#: cp/call.c:5263 msgid "call to non-function %qD" msgstr "" -#: cp/call.c:5231 +#: cp/call.c:5288 msgid "request for member %qD in %qE, which is of non-aggregate type %qT" msgstr "" -#: cp/call.c:5310 +#: cp/call.c:5367 msgid "no matching function for call to %<%T::%s(%A)%#V%>" msgstr "" -#: cp/call.c:5328 +#: cp/call.c:5385 msgid "call of overloaded %<%s(%A)%> is ambiguous" msgstr "" -#: cp/call.c:5352 +#: cp/call.c:5409 msgid "cannot call member function %qD without object" msgstr "" -#: cp/call.c:5957 +#: cp/call.c:6014 msgid "passing %qT chooses %qT over %qT" msgstr "" -#: cp/call.c:5959 cp/name-lookup.c:4110 +#: cp/call.c:6016 cp/name-lookup.c:4104 msgid " in call to %qD" msgstr "" -#: cp/call.c:6016 +#: cp/call.c:6073 msgid "choosing %qD over %qD" msgstr "" -#: cp/call.c:6017 +#: cp/call.c:6074 #, fuzzy msgid " for conversion from %qT to %qT" msgstr "żµÑ€°ÑžÑ‚²°Ñ€Ñ½ÑŒ½µ · `%T' у `%T'" -#: cp/call.c:6019 +#: cp/call.c:6076 msgid " because conversion sequence for the argument is better" msgstr "" -#: cp/call.c:6140 +#: cp/call.c:6197 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:6144 +#: cp/call.c:6201 msgid "candidate 1:" msgstr "" -#: cp/call.c:6145 +#: cp/call.c:6202 msgid "candidate 2:" msgstr "" -#: cp/call.c:6281 +#: cp/call.c:6338 msgid "could not convert %qE to %qT" msgstr "" -#: cp/call.c:6411 +#: cp/call.c:6469 msgid "invalid initialization of non-const reference of type %qT from a temporary of type %qT" msgstr "" -#: cp/call.c:6415 +#: cp/call.c:6473 msgid "invalid initialization of reference of type %qT from expression of type %qT" msgstr "" -#: cp/class.c:273 +#: cp/class.c:272 msgid "cannot convert from base %qT to derived type %qT via virtual base %qT" msgstr "" -#: cp/class.c:898 -msgid "Java class %qT cannot have an implicit non-trivial destructor" +#: cp/class.c:929 +msgid "Java class %qT cannot have a destructor" msgstr "" -#: cp/class.c:899 -msgid "Java class %qT cannot have a destructor" +#: cp/class.c:931 +msgid "Java class %qT cannot have an implicit non-trivial destructor" msgstr "" -#: cp/class.c:998 +#: cp/class.c:1031 msgid "%q#D and %q#D cannot be overloaded" msgstr "" -#: cp/class.c:1055 +#: cp/class.c:1088 msgid "conflicting access specifications for method %qD, ignored" msgstr "" -#: cp/class.c:1058 +#: cp/class.c:1091 #, c-format msgid "conflicting access specifications for field %qE, ignored" msgstr "" -#: cp/class.c:1108 +#: cp/class.c:1141 #, fuzzy msgid "%qD names constructor" msgstr "£ ş°½ÑÑ‚руşÑ†Ñ‹Ñ–" -#: cp/class.c:1113 +#: cp/class.c:1146 #, fuzzy msgid "%qD invalid in %qT" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: cp/class.c:1121 +#: cp/class.c:1154 msgid "no members matching %qD in %q#T" msgstr "" -#: cp/class.c:1153 cp/class.c:1161 +#: cp/class.c:1186 cp/class.c:1194 #, fuzzy msgid "%qD invalid in %q#T" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" -#: cp/class.c:1154 +#: cp/class.c:1187 msgid " because of local method %q#D with same name" msgstr "" -#: cp/class.c:1162 +#: cp/class.c:1195 msgid " because of local member %q#D with same name" msgstr "" -#: cp/class.c:1207 +#: cp/class.c:1237 msgid "base class %q#T has a non-virtual destructor" msgstr "" -#: cp/class.c:1226 -msgid "base %qT with only non-default constructor in class without a constructor" -msgstr "" - -#: cp/class.c:1534 +#: cp/class.c:1551 msgid "all member functions in class %qT are private" msgstr "" -#: cp/class.c:1545 +#: cp/class.c:1562 msgid "%q#T only defines a private destructor and has no friends" msgstr "" -#: cp/class.c:1585 +#: cp/class.c:1602 msgid "%q#T only defines private constructors and has no friends" msgstr "" -#: cp/class.c:1923 +#: cp/class.c:1935 msgid "no unique final overrider for %qD in %qT" msgstr "" #. Here we know it is a hider, and no overrider exists. -#: cp/class.c:2379 +#: cp/class.c:2409 msgid "%qD was hidden" msgstr "" -#: cp/class.c:2380 +#: cp/class.c:2410 msgid " by %qD" msgstr "" -#: cp/class.c:2421 cp/decl2.c:1142 +#: cp/class.c:2451 cp/decl2.c:1100 msgid "%q#D invalid; an anonymous union can only have non-static data members" msgstr "" -#: cp/class.c:2428 cp/decl2.c:1149 +#: cp/class.c:2458 cp/decl2.c:1107 msgid "private member %q#D in anonymous union" msgstr "" -#: cp/class.c:2431 cp/decl2.c:1151 +#: cp/class.c:2461 cp/decl2.c:1109 msgid "protected member %q#D in anonymous union" msgstr "" -#: cp/class.c:2545 -msgid "vtable layout for class %qT may not be ABI-compliant and may change in a future version of GCC due to implicit virtual destructor" -msgstr "" - -#: cp/class.c:2603 +#: cp/class.c:2628 #, fuzzy msgid "bit-field %q#D with non-integral type" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: cp/class.c:2623 +#: cp/class.c:2645 #, fuzzy msgid "bit-field %qD width not an integer constant" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: cp/class.c:2629 +#: cp/class.c:2651 msgid "negative width in bit-field %qD" msgstr "" -#: cp/class.c:2634 +#: cp/class.c:2656 msgid "zero width for bit-field %qD" msgstr "" -#: cp/class.c:2640 +#: cp/class.c:2662 msgid "width of %qD exceeds its type" msgstr "" -#: cp/class.c:2649 +#: cp/class.c:2671 msgid "%qD is too small to hold all values of %q#T" msgstr "" -#: cp/class.c:2711 +#: cp/class.c:2731 msgid "member %q#D with constructor not allowed in union" msgstr "" -#: cp/class.c:2714 +#: cp/class.c:2734 msgid "member %q#D with destructor not allowed in union" msgstr "" -#: cp/class.c:2717 +#: cp/class.c:2737 msgid "member %q#D with copy assignment operator not allowed in union" msgstr "" -#: cp/class.c:2744 +#: cp/class.c:2760 msgid "multiple fields in union %qT initialized" msgstr "" -#: cp/class.c:2810 +#: cp/class.c:2821 msgid "ignoring packed attribute on unpacked non-POD field %q#D" msgstr "" -#: cp/class.c:2870 +#: cp/class.c:2881 msgid "%qD may not be static because it is a member of a union" msgstr "" -#: cp/class.c:2875 +#: cp/class.c:2886 msgid "%qD may not have reference type %qT because it is a member of a union" msgstr "" -#: cp/class.c:2884 +#: cp/class.c:2895 msgid "field %qD in local class cannot be static" msgstr "" -#: cp/class.c:2890 +#: cp/class.c:2901 #, fuzzy msgid "field %qD invalidly declared function type" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: cp/class.c:2896 +#: cp/class.c:2907 #, fuzzy msgid "field %qD invalidly declared method type" msgstr "ħіт°²°µ żğµ \"%s\" ĵ°µ ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ тыż" -#: cp/class.c:2929 +#: cp/class.c:2939 msgid "non-static reference %q#D in class without a constructor" msgstr "" -#: cp/class.c:2977 +#: cp/class.c:2986 msgid "non-static const member %q#D in class without a constructor" msgstr "" -#: cp/class.c:2992 +#: cp/class.c:3001 msgid "field %q#D with same name as class" msgstr "" -#: cp/class.c:3026 +#: cp/class.c:3034 msgid "%q#T has pointer data members" msgstr "" -#: cp/class.c:3030 +#: cp/class.c:3038 msgid " but does not override %<%T(const %T&)%>" msgstr "" -#: cp/class.c:3032 +#: cp/class.c:3040 msgid " or %" msgstr "" -#: cp/class.c:3035 +#: cp/class.c:3043 msgid " but does not override %" msgstr "" -#: cp/class.c:3468 +#: cp/class.c:3476 msgid "offset of empty base %qT may not be ABI-compliant and maychange in a future version of GCC" msgstr "" -#: cp/class.c:3580 +#: cp/class.c:3588 msgid "class %qT will be considered nearly empty in a future version of GCC" msgstr "" -#: cp/class.c:3662 +#: cp/class.c:3670 #, fuzzy msgid "initializer specified for non-virtual method %qD" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/class.c:4321 +#: cp/class.c:4333 msgid "offset of virtual base %qT is not ABI-compliant and may change in a future version of GCC" msgstr "" -#: cp/class.c:4420 +#: cp/class.c:4432 msgid "direct base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: cp/class.c:4432 +#: cp/class.c:4444 msgid "virtual base %qT inaccessible in %qT due to ambiguity" msgstr "" -#: cp/class.c:4603 +#: cp/class.c:4621 msgid "size assigned to %qT may not be ABI-compliant and may change in a future version of GCC" msgstr "" #. Versions of G++ before G++ 3.4 did not reset the #. DECL_MODE. -#: cp/class.c:4642 +#: cp/class.c:4660 msgid "the offset of %qD may not be ABI-compliant and may change in a future version of GCC" msgstr "" -#: cp/class.c:4665 +#: cp/class.c:4683 msgid "offset of %qD is not ABI-compliant and may change in a future version of GCC" msgstr "" -#: cp/class.c:4675 +#: cp/class.c:4693 msgid "%qD contains empty classes which may cause base classes to be placed at different locations in a future version of GCC" msgstr "" -#: cp/class.c:4734 +#: cp/class.c:4753 msgid "layout of classes derived from empty class %qT may change in a future version of GCC" msgstr "" -#: cp/class.c:4875 cp/semantics.c:2100 +#: cp/class.c:4894 cp/parser.c:12849 #, fuzzy msgid "redefinition of %q#T" msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ `%#T'" -#: cp/class.c:5019 +#: cp/class.c:5042 msgid "%q#T has virtual functions but non-virtual destructor" msgstr "" -#: cp/class.c:5114 +#: cp/class.c:5139 msgid "trying to finish struct, but kicked out due to previous parse errors" msgstr "" -#: cp/class.c:5530 +#: cp/class.c:5555 #, fuzzy msgid "language string %<\"%E\"%> not recognized" msgstr "ĵ²° %s ½µ р°Ñż°·½°½°" -#: cp/class.c:5617 +#: cp/class.c:5642 msgid "cannot resolve overloaded function %qD based on conversion to type %qT" msgstr "" -#: cp/class.c:5742 +#: cp/class.c:5767 msgid "no matches converting function %qD to type %q#T" msgstr "" -#: cp/class.c:5765 +#: cp/class.c:5790 msgid "converting overloaded function %qD to type %q#T is ambiguous" msgstr "" -#: cp/class.c:5791 +#: cp/class.c:5816 #, fuzzy msgid "assuming pointer to member %qD" msgstr "żÑ€°żÑƒÑˆÑ‡°½ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: cp/class.c:5794 +#: cp/class.c:5819 msgid "(a pointer to member can only be formed with %<&%E%>)" msgstr "" -#: cp/class.c:5839 cp/class.c:5870 cp/class.c:6022 cp/class.c:6029 +#: cp/class.c:5864 cp/class.c:5895 cp/class.c:6047 cp/class.c:6054 msgid "not enough type information" msgstr "" -#: cp/class.c:5856 +#: cp/class.c:5881 msgid "argument of type %qT does not match %qT" msgstr "" -#: cp/class.c:6006 +#: cp/class.c:6031 msgid "invalid operation on uninstantiated type" msgstr "" @@ -13563,12 +13645,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:6272 cp/decl.c:1231 cp/name-lookup.c:508 cp/pt.c:2223 +#: cp/class.c:6268 cp/decl.c:1096 cp/name-lookup.c:508 cp/pt.c:2198 #, fuzzy msgid "declaration of %q#D" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ `%#D'" -#: cp/class.c:6273 +#: cp/class.c:6269 msgid "changes meaning of %qD from %q+#D" msgstr "" @@ -13589,181 +13671,189 @@ msgstr "" msgid "pointer to member cast from %qT to %qT is via virtual base" msgstr "" -#: cp/cvt.c:499 +#: cp/cvt.c:497 msgid "conversion from %qT to %qT discards qualifiers" msgstr "" -#: cp/cvt.c:517 cp/typeck.c:4879 +#: cp/cvt.c:515 cp/typeck.c:4840 msgid "casting %qT to %qT does not dereference pointer" msgstr "" -#: cp/cvt.c:544 +#: cp/cvt.c:542 #, fuzzy msgid "cannot convert type %qT to type %qT" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/cvt.c:671 +#: cp/cvt.c:670 #, fuzzy msgid "conversion from %q#T to %q#T" msgstr "żµÑ€°ÑžÑ‚²°Ñ€Ñ½ÑŒ½µ · `%T' у `%T'" -#: cp/cvt.c:683 cp/cvt.c:703 +#: cp/cvt.c:682 cp/cvt.c:702 msgid "%q#T used where a %qT was expected" msgstr "" -#: cp/cvt.c:718 +#: cp/cvt.c:717 msgid "%q#T used where a floating point value was expected" msgstr "" -#: cp/cvt.c:765 +#: cp/cvt.c:764 msgid "conversion from %qT to non-scalar type %qT requested" msgstr "" -#: cp/cvt.c:853 +#: cp/cvt.c:798 +msgid "pseudo-destructor is not called" +msgstr "" + +#: cp/cvt.c:857 msgid "object of incomplete type %qT will not be accessed in %s" msgstr "" -#: cp/cvt.c:856 +#: cp/cvt.c:860 msgid "object of type %qT will not be accessed in %s" msgstr "" -#: cp/cvt.c:872 +#: cp/cvt.c:876 msgid "object %qE of incomplete type %qT will not be accessed in %s" msgstr "" #. [over.over] enumerates the places where we can take the address #. of an overloaded function, and this is not one of them. -#: cp/cvt.c:888 +#: cp/cvt.c:892 #, c-format msgid "%s cannot resolve address of overloaded function" msgstr "" #. Only warn when there is no &. -#: cp/cvt.c:894 +#: cp/cvt.c:898 #, c-format msgid "%s is a reference, not call, to function %qE" msgstr "" -#: cp/cvt.c:902 +#: cp/cvt.c:909 #, c-format msgid "%s has no effect" msgstr "" -#: cp/cvt.c:1013 +#: cp/cvt.c:941 +msgid "value computed is not used" +msgstr "" + +#: cp/cvt.c:1049 msgid "converting NULL to non-pointer type" msgstr "" -#: cp/cvt.c:1086 +#: cp/cvt.c:1121 msgid "ambiguous default type conversion from %qT" msgstr "" -#: cp/cvt.c:1088 +#: cp/cvt.c:1123 msgid " candidate conversions include %qD and %qD" msgstr "" -#: cp/decl.c:368 +#: cp/decl.c:361 #, fuzzy msgid "label %qD used but not defined" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°µÑ†Ñ†°, °ğµ ½Ñ ²Ñ‹·½°Ñ‡°½°" -#: cp/decl.c:379 +#: cp/decl.c:372 #, fuzzy msgid "label %qD defined but not used" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹·½°Ñ‡°½°, °ğµ ½µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²°µÑ†Ñ†°" -#: cp/decl.c:1138 +#: cp/decl.c:1003 msgid "%qD was declared % and later %" msgstr "" -#: cp/decl.c:1139 cp/decl.c:1604 +#: cp/decl.c:1004 cp/decl.c:1469 #, fuzzy msgid "previous declaration of %qD" msgstr "ż°żÑÑ€Ñ´½Ñµ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ `%D'" -#: cp/decl.c:1187 +#: cp/decl.c:1052 #, fuzzy msgid "%Jfunction %qD redeclared as inline" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/decl.c:1188 +#: cp/decl.c:1053 #, fuzzy msgid "%Jprevious declaration of %qD with attribute noinline" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1195 +#: cp/decl.c:1060 #, fuzzy msgid "%Jfunction %qD redeclared with attribute noinline" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/decl.c:1197 +#: cp/decl.c:1062 #, fuzzy msgid "%Jprevious declaration of %qD was inline" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1218 cp/decl.c:1289 +#: cp/decl.c:1083 cp/decl.c:1154 #, fuzzy msgid "shadowing %s function %q#D" msgstr "у фу½şÑ†Ñ‹Ñ– \"%s\":" -#: cp/decl.c:1227 +#: cp/decl.c:1092 msgid "library function %q#D redeclared as non-function %q#D" msgstr "" -#: cp/decl.c:1232 +#: cp/decl.c:1097 #, fuzzy msgid "conflicts with built-in declaration %q#D" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:1284 cp/decl.c:1393 cp/decl.c:1409 +#: cp/decl.c:1149 cp/decl.c:1258 cp/decl.c:1274 #, fuzzy msgid "new declaration %q#D" msgstr "½²°µ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ `%#D'" -#: cp/decl.c:1285 +#: cp/decl.c:1150 #, fuzzy msgid "ambiguates built-in declaration %q#D" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:1356 +#: cp/decl.c:1221 msgid "%q#D redeclared as different kind of symbol" msgstr "" -#: cp/decl.c:1359 +#: cp/decl.c:1224 #, fuzzy msgid "previous declaration of %q#D" msgstr "ż°żÑÑ€Ñ´½Ñµ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ `%#D'" -#: cp/decl.c:1378 +#: cp/decl.c:1243 #, fuzzy msgid "declaration of template %q#D" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" -#: cp/decl.c:1379 cp/name-lookup.c:509 +#: cp/decl.c:1244 cp/name-lookup.c:509 #, fuzzy msgid "conflicts with previous declaration %q#D" msgstr "ş°½Ñ„ğіşÑ‚ · ż°żÑÑ€Ñ´½Ñ–ĵ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µĵ `%#D'" -#: cp/decl.c:1394 cp/decl.c:1410 +#: cp/decl.c:1259 cp/decl.c:1275 #, fuzzy msgid "ambiguates old declaration %q#D" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:1402 +#: cp/decl.c:1267 #, fuzzy msgid "declaration of C function %q#D conflicts with" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1404 +#: cp/decl.c:1269 #, fuzzy msgid "previous declaration %q#D here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1417 +#: cp/decl.c:1282 #, fuzzy msgid "conflicting declaration %q#D" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:1418 +#: cp/decl.c:1283 #, fuzzy msgid "%qD has a previous declaration as %q#D" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" @@ -13775,77 +13865,77 @@ msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" #. 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:1471 +#: cp/decl.c:1336 #, fuzzy msgid "declaration of namespace %qD conflicts with" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" -#: cp/decl.c:1472 +#: cp/decl.c:1337 #, fuzzy msgid "previous declaration of namespace %qD here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1484 +#: cp/decl.c:1349 #, fuzzy msgid "%q#D previously defined here" msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ" -#: cp/decl.c:1485 +#: cp/decl.c:1350 #, fuzzy msgid "%q#D previously declared here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" #. Prototype decl follows defn w/o prototype. -#: cp/decl.c:1494 +#: cp/decl.c:1359 #, fuzzy msgid "prototype for %q#D" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° żÑ€°Ñ‚°Ñ‚Ñ‹ż° ´ğя \"%s\"" -#: cp/decl.c:1495 +#: cp/decl.c:1360 #, fuzzy msgid "%Jfollows non-prototype definition here" msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ" -#: cp/decl.c:1507 +#: cp/decl.c:1372 #, fuzzy msgid "previous declaration of %q#D with %qL linkage" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1509 +#: cp/decl.c:1374 #, fuzzy msgid "conflicts with new declaration with %qL linkage" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: cp/decl.c:1532 cp/decl.c:1539 +#: cp/decl.c:1397 cp/decl.c:1404 #, fuzzy msgid "default argument given for parameter %d of %q#D" msgstr "½µÑ…°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– \"%s\"" -#: cp/decl.c:1534 cp/decl.c:1541 +#: cp/decl.c:1399 cp/decl.c:1406 #, fuzzy msgid "after previous specification in %q#D" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1550 +#: cp/decl.c:1415 msgid "%q#D was used before it was declared inline" msgstr "" -#: cp/decl.c:1551 +#: cp/decl.c:1416 #, fuzzy msgid "%Jprevious non-inline declaration here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:1603 +#: cp/decl.c:1468 #, fuzzy msgid "redundant redeclaration of %qD in same scope" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:1697 +#: cp/decl.c:1562 #, c-format msgid "declaration of %qF throws different exceptions" msgstr "" -#: cp/decl.c:1699 +#: cp/decl.c:1564 #, fuzzy, c-format msgid "than previous declaration %qF" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" @@ -13858,232 +13948,232 @@ msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" #. that specialization that would cause an implicit #. instantiation to take place, in every translation unit in #. which such a use occurs. -#: cp/decl.c:1852 +#: cp/decl.c:1724 #, fuzzy msgid "explicit specialization of %qD after first use" msgstr "і½Ñ–Ñ†Ñ‹Ñğі·°Ñ†Ñ‹Ñ" -#: cp/decl.c:1931 +#: cp/decl.c:1803 msgid "%J%qD: visibility attribute ignored because it" msgstr "" -#: cp/decl.c:1933 +#: cp/decl.c:1805 #, fuzzy msgid "%Jconflicts with previous declaration here" msgstr "ş°½Ñ„ğіşÑ‚ · ż°żÑÑ€Ñ´½Ñ–ĵ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µĵ `%#D'" -#: cp/decl.c:2161 +#: cp/decl.c:2048 #, c-format msgid "label %qE referenced outside of any function" msgstr "" -#: cp/decl.c:2257 cp/decl.c:2281 cp/decl.c:2369 +#: cp/decl.c:2144 cp/decl.c:2168 cp/decl.c:2256 #, fuzzy msgid "jump to label %qD" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"%s\"" -#: cp/decl.c:2259 cp/decl.c:2283 +#: cp/decl.c:2146 cp/decl.c:2170 msgid "jump to case label" msgstr "" -#: cp/decl.c:2262 cp/decl.c:2286 +#: cp/decl.c:2149 cp/decl.c:2173 #, fuzzy msgid "%H from here" msgstr " °´ÑÑŽğь" -#: cp/decl.c:2267 +#: cp/decl.c:2154 #, fuzzy msgid " crosses initialization of %q#D" msgstr "і½Ñ–Ñ†Ñ‹Ñğі·°Ñ†Ñ‹Ñ" -#: cp/decl.c:2270 cp/decl.c:2385 +#: cp/decl.c:2157 cp/decl.c:2272 msgid " enters scope of non-POD %q#D" msgstr "" -#: cp/decl.c:2290 cp/decl.c:2389 +#: cp/decl.c:2177 cp/decl.c:2276 msgid " enters try block" msgstr "" -#: cp/decl.c:2292 cp/decl.c:2391 +#: cp/decl.c:2179 cp/decl.c:2278 msgid " enters catch block" msgstr "" -#: cp/decl.c:2370 +#: cp/decl.c:2257 msgid " from here" msgstr " °´ÑÑŽğь" #. Can't skip init of __exception_info. -#: cp/decl.c:2381 +#: cp/decl.c:2268 msgid "%J enters catch block" msgstr "" -#: cp/decl.c:2383 +#: cp/decl.c:2270 #, fuzzy msgid " skips initialization of %q#D" msgstr "і½Ñ–Ñ†Ñ‹Ñğі·°Ñ†Ñ‹Ñ" -#: cp/decl.c:2417 +#: cp/decl.c:2304 msgid "label named wchar_t" msgstr "" -#: cp/decl.c:2420 +#: cp/decl.c:2307 #, fuzzy msgid "duplicate label %qD" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"%s\"" -#: cp/decl.c:2651 cp/parser.c:3437 +#: cp/decl.c:2555 cp/parser.c:3514 #, fuzzy msgid "%qD used without template parameters" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: cp/decl.c:2661 cp/decl.c:2676 cp/decl.c:2767 +#: cp/decl.c:2572 cp/decl.c:2663 msgid "no class template named %q#T in %q#T" msgstr "" -#: cp/decl.c:2697 cp/decl.c:2707 cp/decl.c:2727 +#: cp/decl.c:2593 cp/decl.c:2603 cp/decl.c:2623 #, fuzzy msgid "no type named %q#T in %q#T" msgstr "²ÑÑ€Ñ‚°µĵы тыż \"%s\" ½µ \"int\"" -#: cp/decl.c:2776 +#: cp/decl.c:2672 #, fuzzy msgid "template parameters do not match template" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:2777 cp/friend.c:317 cp/friend.c:325 +#: cp/decl.c:2673 cp/friend.c:317 cp/friend.c:325 #, fuzzy msgid "%qD declared here" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/decl.c:3448 +#: cp/decl.c:3344 msgid "%Jan anonymous union cannot have function members" msgstr "" -#: cp/decl.c:3466 +#: cp/decl.c:3362 msgid "member %q#D with constructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:3470 +#: cp/decl.c:3366 msgid "member %q#D with destructor not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:3474 +#: cp/decl.c:3370 msgid "member %q#D with copy assignment operator not allowed in anonymous aggregate" msgstr "" -#: cp/decl.c:3500 +#: cp/decl.c:3396 msgid "multiple types in one declaration" msgstr "" -#: cp/decl.c:3504 +#: cp/decl.c:3400 #, fuzzy msgid "redeclaration of C++ built-in type %qT" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:3540 +#: cp/decl.c:3437 msgid "missing type-name in typedef-declaration" msgstr "" -#: cp/decl.c:3548 +#: cp/decl.c:3445 msgid "ISO C++ prohibits anonymous structs" msgstr "" -#: cp/decl.c:3555 +#: cp/decl.c:3452 #, fuzzy, c-format msgid "%qs can only be specified for functions" msgstr "\"%s\" ·²Ñ‹Ñ‡°ı½° фу½şÑ†Ñ‹Ñ" -#: cp/decl.c:3561 +#: cp/decl.c:3458 msgid "% can only be specified inside a class" msgstr "" -#: cp/decl.c:3563 +#: cp/decl.c:3460 msgid "% can only be specified for constructors" msgstr "" -#: cp/decl.c:3565 +#: cp/decl.c:3462 msgid "a storage class can only be specified for objects and functions" msgstr "" -#: cp/decl.c:3571 +#: cp/decl.c:3468 msgid "qualifiers can only be specified for objects and functions" msgstr "" -#: cp/decl.c:3601 +#: cp/decl.c:3498 #, fuzzy msgid "attribute ignored in declaration of %q#T" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:3602 +#: cp/decl.c:3499 msgid "attribute for %q#T must follow the %qs keyword" msgstr "" -#: cp/decl.c:3723 +#: cp/decl.c:3622 msgid "function %q#D is initialized like a variable" msgstr "" -#: cp/decl.c:3735 +#: cp/decl.c:3634 msgid "declaration of %q#D has % and is initialized" msgstr "" -#: cp/decl.c:3766 +#: cp/decl.c:3665 msgid "%q#D is not a static member of %q#T" msgstr "" -#: cp/decl.c:3772 +#: cp/decl.c:3671 msgid "ISO C++ does not permit %<%T::%D%> to be defined as %<%T::%D%>" msgstr "" -#: cp/decl.c:3781 +#: cp/decl.c:3680 msgid "template header not allowed in member definition of explicitly specialized class" msgstr "" -#: cp/decl.c:3789 +#: cp/decl.c:3688 #, fuzzy msgid "duplicate initialization of %qD" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:3822 +#: cp/decl.c:3726 msgid "declaration of %q#D outside of class is not definition" msgstr "" -#: cp/decl.c:3871 +#: cp/decl.c:3775 #, fuzzy msgid "variable %q#D has initializer but incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/decl.c:3878 cp/decl.c:4502 +#: cp/decl.c:3782 cp/decl.c:4411 #, fuzzy msgid "elements of array %q#D have incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/decl.c:3894 +#: cp/decl.c:3798 msgid "aggregate %q#D has incomplete type and cannot be defined" msgstr "" -#: cp/decl.c:3944 +#: cp/decl.c:3848 msgid "%qD declared as reference but not initialized" msgstr "" -#: cp/decl.c:3950 +#: cp/decl.c:3854 msgid "ISO C++ forbids use of initializer list to initialize reference %qD" msgstr "" -#: cp/decl.c:3979 +#: cp/decl.c:3880 #, fuzzy msgid "cannot initialize %qT from %qT" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/decl.c:4011 +#: cp/decl.c:3912 msgid "initializer fails to determine size of %qD" msgstr "" -#: cp/decl.c:4016 +#: cp/decl.c:3917 #, fuzzy msgid "array size missing in %qD" msgstr "żÑ€°żÑƒÑˆÑ‡°½ ż°ĵµÑ€ ĵ°ÑÑ–²° ў `%D'" -#: cp/decl.c:4028 +#: cp/decl.c:3929 #, fuzzy msgid "zero-size array %qD" msgstr "½Ñƒğя²Ñ‹ ż°ĵµÑ€ ĵ°ÑÑ–²° `%D'" @@ -14091,632 +14181,653 @@ msgstr "½Ñƒğя²Ñ‹ ż°ĵµÑ€ ĵ°ÑÑ–²° `%D'" #. 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:4065 +#: cp/decl.c:3966 msgid "storage size of %qD isn't known" msgstr "" -#: cp/decl.c:4087 +#: cp/decl.c:3988 #, fuzzy msgid "storage size of %qD isn't constant" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: cp/decl.c:4142 +#: cp/decl.c:4043 msgid "sorry: semantics of inline function static data %q#D are wrong (you'll wind up with multiple copies)" msgstr "" -#: cp/decl.c:4145 +#: cp/decl.c:4046 msgid "%J you can work around this by removing the initializer" msgstr "" -#: cp/decl.c:4172 +#: cp/decl.c:4073 #, fuzzy msgid "uninitialized const %qD" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/decl.c:4232 +#: cp/decl.c:4133 msgid "name %qD used in a GNU-style designated initializer for an array" msgstr "" -#: cp/decl.c:4242 +#: cp/decl.c:4143 #, c-format msgid "Designated initializer %qE larger than array size" msgstr "" -#: cp/decl.c:4313 +#: cp/decl.c:4215 msgid "brace-enclosed initializer used to initialize %qT" msgstr "" -#: cp/decl.c:4376 +#: cp/decl.c:4280 msgid "initializer for %qT must be brace-enclosed" msgstr "" -#: cp/decl.c:4392 +#: cp/decl.c:4296 msgid "ISO C++ does not allow designated initializers" msgstr "" -#: cp/decl.c:4396 +#: cp/decl.c:4300 msgid "%qT has no non-static data member named %qD" msgstr "" -#: cp/decl.c:4458 +#: cp/decl.c:4364 #, fuzzy msgid "too many initializers for %qT" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/decl.c:4496 +#: cp/decl.c:4405 msgid "variable-sized object %qD may not be initialized" msgstr "" -#: cp/decl.c:4507 +#: cp/decl.c:4416 #, fuzzy msgid "%qD has incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/decl.c:4561 +#: cp/decl.c:4470 msgid "%qD must be initialized by constructor, not by %<{...}%>" msgstr "" -#: cp/decl.c:4606 +#: cp/decl.c:4506 +msgid "array %qD initialized by parenthesized string literal %qE" +msgstr "" + +#: cp/decl.c:4521 #, fuzzy msgid "structure %qD with uninitialized const members" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: cp/decl.c:4608 +#: cp/decl.c:4523 #, fuzzy msgid "structure %qD with uninitialized reference members" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: cp/decl.c:4803 +#: cp/decl.c:4723 msgid "assignment (not initialization) in declaration" msgstr "" -#: cp/decl.c:4820 +#: cp/decl.c:4740 #, fuzzy msgid "cannot initialize %qD to namespace %qD" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/decl.c:4863 +#: cp/decl.c:4781 #, fuzzy msgid "shadowing previous type declaration of %q#D" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:4900 +#: cp/decl.c:4815 msgid "%qD cannot be thread-local because it has non-POD type %qT" msgstr "" -#: cp/decl.c:4915 +#: cp/decl.c:4830 msgid "%qD is thread-local and so cannot be dynamically initialized" msgstr "" -#: cp/decl.c:5523 +#: cp/decl.c:5447 msgid "destructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.c:5525 +#: cp/decl.c:5449 msgid "constructor for alien class %qT cannot be a member" msgstr "" -#: cp/decl.c:5546 +#: cp/decl.c:5470 msgid "%qD declared as a % %s" msgstr "" -#: cp/decl.c:5548 +#: cp/decl.c:5472 msgid "%qD declared as an % %s" msgstr "" -#: cp/decl.c:5550 +#: cp/decl.c:5474 msgid "% and % function specifiers on %qD invalid in %s declaration" msgstr "" -#: cp/decl.c:5554 +#: cp/decl.c:5478 msgid "%qD declared as a friend" msgstr "" -#: cp/decl.c:5560 +#: cp/decl.c:5484 #, fuzzy msgid "%qD declared with an exception specification" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/decl.c:5643 +#: cp/decl.c:5570 msgid "cannot declare %<::main%> to be a template" msgstr "" -#: cp/decl.c:5645 +#: cp/decl.c:5572 msgid "cannot declare %<::main%> to be inline" msgstr "" -#: cp/decl.c:5647 +#: cp/decl.c:5574 msgid "cannot declare %<::main%> to be static" msgstr "" -#: cp/decl.c:5651 +#: cp/decl.c:5578 #, fuzzy msgid "%<::main%> must return %" msgstr "`main' ż°²Ñ–½½° ²ÑÑ€Ñ‚°Ñ†ÑŒ `int'" -#: cp/decl.c:5681 +#: cp/decl.c:5608 msgid "non-local function %q#D uses anonymous type" msgstr "" -#: cp/decl.c:5684 cp/decl.c:6029 +#: cp/decl.c:5611 cp/decl.c:5947 msgid "%q#D does not refer to the unqualified type, so it is not used for linkage" msgstr "" -#: cp/decl.c:5690 +#: cp/decl.c:5617 msgid "non-local function %q#D uses local type %qT" msgstr "" -#: cp/decl.c:5713 +#: cp/decl.c:5640 #, fuzzy msgid "%smember function %qD cannot have cv-qualifier" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:5737 +#: cp/decl.c:5664 #, fuzzy msgid "defining explicit specialization %qD in friend declaration" msgstr "і½Ñ–Ñ†Ñ‹Ñğі·°Ñ†Ñ‹Ñ" #. Something like `template friend void f()'. -#: cp/decl.c:5747 +#: cp/decl.c:5674 #, fuzzy msgid "invalid use of template-id %qD in declaration of primary template" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: cp/decl.c:5775 +#: cp/decl.c:5702 msgid "default arguments are not allowed in declaration of friend template specialization %qD" msgstr "" -#: cp/decl.c:5783 +#: cp/decl.c:5710 msgid "% is not allowed in declaration of friend template specialization %qD" msgstr "" -#: cp/decl.c:5850 +#: cp/decl.c:5776 msgid "definition of implicitly-declared %qD" msgstr "" -#: cp/decl.c:5870 cp/decl2.c:715 +#: cp/decl.c:5796 cp/decl2.c:712 msgid "no %q#D member function declared in class %qT" msgstr "" -#. It's a typedef referring to an anonymous type. -#: cp/decl.c:6026 +#. 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:5944 msgid "non-local variable %q#D uses anonymous type" msgstr "" -#: cp/decl.c:6035 +#: cp/decl.c:5953 msgid "non-local variable %q#D uses local type %qT" msgstr "" -#: cp/decl.c:6150 +#: cp/decl.c:6070 msgid "invalid in-class initialization of static data member of non-integral type %qT" msgstr "" -#: cp/decl.c:6160 +#: cp/decl.c:6080 msgid "ISO C++ forbids in-class initialization of non-const static member %qD" msgstr "" -#: cp/decl.c:6164 +#: cp/decl.c:6084 msgid "ISO C++ forbids initialization of member constant %qD of non-integral type %qT" msgstr "" -#: cp/decl.c:6184 +#: cp/decl.c:6104 #, fuzzy msgid "size of array %qD has non-integral type %qT" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° `%D' ½µ цэğ°ğіş°²Ñ‹ тыż" -#: cp/decl.c:6186 +#: cp/decl.c:6106 #, fuzzy msgid "size of array has non-integral type %qT" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" °´ĵў½Ñ‹" -#: cp/decl.c:6222 +#: cp/decl.c:6142 #, fuzzy msgid "size of array %qD is negative" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° `%D' - °´ĵў½Ñ‹" -#: cp/decl.c:6224 +#: cp/decl.c:6144 msgid "size of array is negative" msgstr "°´ĵў½Ñ‹ ż°ĵµÑ€ ĵ°ÑÑ–²° " -#: cp/decl.c:6232 +#: cp/decl.c:6152 #, fuzzy msgid "ISO C++ forbids zero-size array %qD" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: cp/decl.c:6234 +#: cp/decl.c:6154 #, fuzzy msgid "ISO C++ forbids zero-size array" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: cp/decl.c:6241 +#: cp/decl.c:6161 #, fuzzy msgid "size of array %qD is not an integral constant-expression" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" °´ĵў½Ñ‹" -#: cp/decl.c:6244 +#: cp/decl.c:6164 msgid "size of array is not an integral constant-expression" msgstr "" -#: cp/decl.c:6249 +#: cp/decl.c:6169 #, fuzzy msgid "ISO C++ forbids variable-size array %qD" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: cp/decl.c:6251 +#: cp/decl.c:6171 #, fuzzy msgid "ISO C++ forbids variable-size array" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: cp/decl.c:6281 +#: cp/decl.c:6201 msgid "overflow in array dimension" msgstr "" -#: cp/decl.c:6356 +#: cp/decl.c:6275 #, fuzzy msgid "declaration of %qD as %s" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ `%#D'" -#: cp/decl.c:6358 +#: cp/decl.c:6277 #, c-format msgid "creating %s" msgstr "" -#: cp/decl.c:6370 +#: cp/decl.c:6289 msgid "declaration of %qD as multidimensional array must have bounds for all dimensions except the first" msgstr "" -#: cp/decl.c:6374 +#: cp/decl.c:6293 msgid "multidimensional array must have bounds for all dimensions except the first" msgstr "" -#: cp/decl.c:6409 +#: cp/decl.c:6328 msgid "return type specification for constructor invalid" msgstr "" -#: cp/decl.c:6419 +#: cp/decl.c:6338 msgid "return type specification for destructor invalid" msgstr "" -#: cp/decl.c:6432 +#: cp/decl.c:6351 msgid "operator %qT declared to return %qT" msgstr "" -#: cp/decl.c:6434 +#: cp/decl.c:6353 msgid "return type specified for %" msgstr "" -#: cp/decl.c:6456 +#: cp/decl.c:6375 msgid "unnamed variable or field declared void" msgstr "" -#: cp/decl.c:6460 +#: cp/decl.c:6379 #, fuzzy, c-format msgid "variable or field %qE declared void" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: cp/decl.c:6463 +#: cp/decl.c:6382 msgid "variable or field declared void" msgstr "" -#: cp/decl.c:6629 +#: cp/decl.c:6537 msgid "type %qT is not derived from type %qT" msgstr "" -#: cp/decl.c:6674 -msgid "declarator-id missing; using reserved word %qD" -msgstr "" - -#: cp/decl.c:6730 cp/decl.c:7824 +#: cp/decl.c:6557 cp/decl.c:6649 cp/decl.c:7792 #, fuzzy msgid "declaration of %qD as non-function" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/decl.c:6763 +#: cp/decl.c:6563 +#, fuzzy +msgid "declaration of %qD as non-member" +msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ `%#D'" + +#: cp/decl.c:6593 +msgid "declarator-id missing; using reserved word %qD" +msgstr "" + +#: cp/decl.c:6682 #, fuzzy, c-format msgid "two or more data types in declaration of %qs" msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½½µ" -#: cp/decl.c:6806 +#: cp/decl.c:6725 #, fuzzy msgid "ISO C++ does not support %" msgstr "ISO C++ ½µ ż°´Ñ‚рыĵğі²°µ \"long long\"" -#: cp/decl.c:6866 cp/decl.c:6868 +#: cp/decl.c:6785 cp/decl.c:6787 #, fuzzy, c-format msgid "ISO C++ forbids declaration of %qs with no type" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: cp/decl.c:6893 +#: cp/decl.c:6812 #, fuzzy, c-format msgid "short, signed or unsigned invalid for %qs" msgstr "long, short, signed ці unsigned ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ´ğя \"%s\"" -#: cp/decl.c:6895 +#: cp/decl.c:6814 #, fuzzy, c-format msgid "long, short, signed or unsigned invalid for %qs" msgstr "long, short, signed ці unsigned ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ´ğя \"%s\"" -#: cp/decl.c:6897 +#: cp/decl.c:6816 #, c-format msgid "long and short specified together for %qs" msgstr "" -#: cp/decl.c:6899 +#: cp/decl.c:6818 #, c-format msgid "long or short specified with char for %qs" msgstr "" -#: cp/decl.c:6901 +#: cp/decl.c:6820 #, c-format msgid "long or short specified with floating type for %qs" msgstr "" -#: cp/decl.c:6903 +#: cp/decl.c:6822 #, c-format msgid "signed and unsigned given together for %qs" msgstr "" -#: cp/decl.c:6909 +#: cp/decl.c:6828 #, fuzzy, c-format msgid "long, short, signed or unsigned used invalidly for %qs" msgstr "long, short, signed ці unsigned ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ´ğя \"%s\"" -#: cp/decl.c:6974 +#: cp/decl.c:6893 #, fuzzy, c-format msgid "complex invalid for %qs" msgstr "complex ½µÑ€ÑÑ‡°Ñ–с½Ñ‹ ´ğя \"%s\"" -#: cp/decl.c:7003 +#: cp/decl.c:6922 msgid "qualifiers are not allowed on declaration of %" msgstr "" -#: cp/decl.c:7024 +#: cp/decl.c:6934 cp/typeck.c:6404 +#, fuzzy +msgid "ignoring %qV qualifiers added to function type %qT" +msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ \"%s\"" + +#: cp/decl.c:6957 msgid "member %qD cannot be declared both virtual and static" msgstr "" -#: cp/decl.c:7031 +#: cp/decl.c:6964 #, fuzzy msgid "%<%T::%D%> is not a valid declarator" msgstr "\"%s\" - ³ÑÑ‚° ½µ ż°Ñ‡°Ñ‚°ş ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ–" -#: cp/decl.c:7039 +#: cp/decl.c:6972 msgid "typedef declaration invalid in parameter declaration" msgstr "" -#: cp/decl.c:7043 +#: cp/decl.c:6976 msgid "storage class specifiers invalid in parameter declarations" msgstr "" -#: cp/decl.c:7050 +#: cp/decl.c:6983 msgid "virtual outside class declaration" msgstr "" -#: cp/decl.c:7063 cp/decl.c:7070 +#: cp/decl.c:6996 cp/decl.c:7003 #, fuzzy, c-format msgid "multiple storage classes in declaration of %qs" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ °´ĵµÑ†Ñ–½Ñ‹ `%s'" -#: cp/decl.c:7113 +#: cp/decl.c:7046 #, c-format msgid "storage class specified for %s %qs" msgstr "" -#: cp/decl.c:7150 +#: cp/decl.c:7083 msgid "top-level declaration of %qs specifies %" msgstr "" -#: cp/decl.c:7162 +#: cp/decl.c:7095 msgid "storage class specifiers invalid in friend function declarations" msgstr "" -#: cp/decl.c:7289 +#: cp/decl.c:7220 msgid "destructor cannot be static member function" msgstr "" -#: cp/decl.c:7292 +#: cp/decl.c:7223 msgid "destructors may not be cv-qualified" msgstr "" -#: cp/decl.c:7312 +#: cp/decl.c:7243 msgid "constructor cannot be static member function" msgstr "" -#: cp/decl.c:7315 +#: cp/decl.c:7246 msgid "constructors cannot be declared virtual" msgstr "" -#: cp/decl.c:7320 +#: cp/decl.c:7251 msgid "constructors may not be cv-qualified" msgstr "" -#: cp/decl.c:7340 +#: cp/decl.c:7271 #, fuzzy, c-format msgid "can't initialize friend function %qs" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" #. Cannot be both friend and virtual. -#: cp/decl.c:7344 +#: cp/decl.c:7275 msgid "virtual functions cannot be friends" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:7348 +#: cp/decl.c:7279 msgid "friend declaration not in class definition" msgstr "" -#: cp/decl.c:7350 +#: cp/decl.c:7281 #, fuzzy, c-format msgid "can't define friend function %qs in a local class definition" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/decl.c:7363 +#: cp/decl.c:7294 msgid "destructors may not have parameters" msgstr "" -#: cp/decl.c:7381 cp/decl.c:7388 +#: cp/decl.c:7313 cp/decl.c:7320 #, fuzzy msgid "cannot declare reference to %q#T" msgstr "µ ĵ°³Ñƒ ·½°ıсці ф°ığ ´ğя şğ°Ñ° %s." -#: cp/decl.c:7382 +#: cp/decl.c:7314 #, fuzzy msgid "cannot declare pointer to %q#T" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/decl.c:7390 +#: cp/decl.c:7322 msgid "cannot declare pointer to %q#T member" msgstr "" -#: cp/decl.c:7446 +#: cp/decl.c:7361 +msgid "%qD is a namespace" +msgstr "" + +#: cp/decl.c:7400 msgid "template-id %qD used as a declarator" msgstr "" -#: cp/decl.c:7497 +#: cp/decl.c:7447 msgid "extra qualification %<%T::%> on member %qs ignored" msgstr "" -#: cp/decl.c:7516 +#: cp/decl.c:7466 msgid "cannot declare member function %<%T::%s%> within %<%T%>" msgstr "" -#: cp/decl.c:7531 +#: cp/decl.c:7481 msgid "cannot declare member %<%T::%s%> within %qT" msgstr "" -#: cp/decl.c:7570 +#: cp/decl.c:7520 msgid "data member may not have variably modified type %qT" msgstr "" -#: cp/decl.c:7572 +#: cp/decl.c:7522 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:7580 +#: cp/decl.c:7530 msgid "only declarations of constructors can be %" msgstr "" -#: cp/decl.c:7588 +#: cp/decl.c:7538 #, fuzzy msgid "non-member %qs cannot be declared %" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:7593 +#: cp/decl.c:7543 msgid "non-object member %qs cannot be declared %" msgstr "" -#: cp/decl.c:7599 +#: cp/decl.c:7549 #, fuzzy msgid "function %qs cannot be declared %" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:7604 +#: cp/decl.c:7554 #, fuzzy msgid "static %qs cannot be declared %" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:7609 +#: cp/decl.c:7559 #, fuzzy msgid "const %qs cannot be declared %" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:7627 -msgid "ISO C++ forbids nested type %qD with same name as enclosing class" +#: cp/decl.c:7579 +msgid "%Jtypedef name may not be a nested-name-specifier" msgstr "" -#: cp/decl.c:7636 -msgid "%Jtypedef name may not be a nested-name-specifier" +#: cp/decl.c:7595 +msgid "ISO C++ forbids nested type %qD with same name as enclosing class" msgstr "" -#: cp/decl.c:7689 -#, fuzzy -msgid "%Jinvalid type qualifier for non-member function type" -msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" +#: cp/decl.c:7694 +#, fuzzy, c-format +msgid "qualified function types cannot be used to declare %s functions" +msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:7752 +#: cp/decl.c:7720 msgid "type qualifiers specified for friend class declaration" msgstr "" -#: cp/decl.c:7757 +#: cp/decl.c:7725 #, fuzzy msgid "% specified for friend class declaration" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:7765 +#: cp/decl.c:7733 #, fuzzy msgid "template parameters cannot be friends" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:7767 +#: cp/decl.c:7735 msgid "friend declaration requires class-key, i.e. %" msgstr "" -#: cp/decl.c:7771 +#: cp/decl.c:7739 msgid "friend declaration requires class-key, i.e. %" msgstr "" -#: cp/decl.c:7784 +#: cp/decl.c:7752 msgid "trying to make class %qT a friend of global scope" msgstr "" -#: cp/decl.c:7795 +#: cp/decl.c:7763 msgid "invalid qualifiers on non-member function type" msgstr "" -#: cp/decl.c:7814 +#: cp/decl.c:7782 msgid "abstract declarator %qT used as declaration" msgstr "" -#: cp/decl.c:7839 +#: cp/decl.c:7807 #, fuzzy msgid "cannot use %<::%> in parameter declaration" msgstr "µ ĵ°³Ñƒ ·½°ıсці ´Ñşğ°Ñ€°Ñ†Ñ‹ÑŽ żÑ€°Ñ‚°şğ° ´ğя \"%s\"" #. Something like struct S { int N::j; }; -#: cp/decl.c:7884 +#: cp/decl.c:7852 #, fuzzy msgid "invalid use of %<::%>" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½ÑŒ½µ `::'" -#: cp/decl.c:7896 -#, fuzzy -msgid "function %qD cannot be declared friend" -msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" - -#: cp/decl.c:7908 +#: cp/decl.c:7867 msgid "can't make %qD into a method -- not in a class" msgstr "" -#: cp/decl.c:7917 +#: cp/decl.c:7876 #, fuzzy msgid "function %qD declared virtual inside a union" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/decl.c:7926 +#: cp/decl.c:7885 msgid "%qD cannot be declared virtual, since it is always static" msgstr "" -#: cp/decl.c:8006 +#: cp/decl.c:7903 +#, fuzzy +msgid "declaration of %qD as member of %qT" +msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" + +#: cp/decl.c:7979 #, fuzzy msgid "field %qD has incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/decl.c:8008 +#: cp/decl.c:7981 #, fuzzy msgid "name %qT has incomplete type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/decl.c:8017 +#: cp/decl.c:7990 #, fuzzy msgid " in instantiation of template %qT" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" -#: cp/decl.c:8027 +#: cp/decl.c:8000 #, fuzzy, c-format msgid "%qE is neither function nor member function; cannot be declared friend" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl.c:8038 +#: cp/decl.c:8011 msgid "member functions are implicitly friends of their class" msgstr "" @@ -14732,82 +14843,82 @@ 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:8078 +#: cp/decl.c:8051 #, fuzzy msgid "ISO C++ forbids initialization of member %qD" msgstr "і½Ñ–Ñ†Ñ‹Ñğі·°Ñ†Ñ‹Ñ" -#: cp/decl.c:8080 +#: cp/decl.c:8053 msgid "making %qD static" msgstr "" -#: cp/decl.c:8138 +#: cp/decl.c:8111 msgid "storage class % invalid for function %qs" msgstr "" -#: cp/decl.c:8140 +#: cp/decl.c:8113 msgid "storage class % invalid for function %qs" msgstr "" -#: cp/decl.c:8142 +#: cp/decl.c:8115 msgid "storage class %<__thread%> invalid for function %qs" msgstr "" -#: cp/decl.c:8153 +#: cp/decl.c:8126 msgid "% specified invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:8156 +#: cp/decl.c:8129 msgid "% specifier invalid for function %qs declared out of global scope" msgstr "" -#: cp/decl.c:8164 +#: cp/decl.c:8137 #, c-format msgid "virtual non-class function %qs" msgstr "" -#: cp/decl.c:8195 +#: cp/decl.c:8168 msgid "cannot declare member function %qD to have static linkage" msgstr "" #. FIXME need arm citation -#: cp/decl.c:8202 +#: cp/decl.c:8175 msgid "cannot declare static function inside another function" msgstr "" -#: cp/decl.c:8231 +#: cp/decl.c:8204 msgid "% may not be used when defining (as opposed to declaring) a static data member" msgstr "" -#: cp/decl.c:8238 +#: cp/decl.c:8211 msgid "static member %qD declared %" msgstr "" -#: cp/decl.c:8243 +#: cp/decl.c:8216 msgid "cannot explicitly declare member %q#D to have extern linkage" msgstr "" -#: cp/decl.c:8386 +#: cp/decl.c:8359 #, fuzzy msgid "default argument for %q#D has type %qT" msgstr "·²Ñ‹Ñ‡°ı½Ñ‹ °Ñ€³Ñƒĵэ½Ñ‚ ´ğя `%#D' ĵ°µ тыż `%T'" -#: cp/decl.c:8389 +#: cp/decl.c:8362 #, fuzzy msgid "default argument for parameter of type %qT has type %qT" msgstr "·²Ñ‹Ñ‡°ı½Ñ‹ °Ñ€³Ñƒĵэ½Ñ‚ ´ğя `%#D' ĵ°µ тыż `%T'" -#: cp/decl.c:8406 +#: cp/decl.c:8379 #, fuzzy msgid "default argument %qE uses local variable %qD" msgstr "½µÑ…°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– \"%s\"" -#: cp/decl.c:8474 +#: cp/decl.c:8447 #, fuzzy msgid "parameter %qD invalidly declared method type" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: cp/decl.c:8498 +#: cp/decl.c:8471 msgid "parameter %qD includes %s to array of unknown bound %qT" msgstr "" @@ -14826,115 +14937,115 @@ 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:8657 +#: cp/decl.c:8630 msgid "invalid constructor; you probably meant %<%T (const %T&)%>" msgstr "" -#: cp/decl.c:8781 +#: cp/decl.c:8754 #, fuzzy msgid "%qD may not be declared within a namespace" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/decl.c:8783 +#: cp/decl.c:8756 #, fuzzy msgid "%qD may not be declared as static" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/decl.c:8803 +#: cp/decl.c:8776 msgid "%qD must be a nonstatic member function" msgstr "" -#: cp/decl.c:8809 +#: cp/decl.c:8782 msgid "%qD must be either a non-static member function or a non-member function" msgstr "" -#: cp/decl.c:8827 +#: cp/decl.c:8800 msgid "%qD must have an argument of class or enumerated type" msgstr "" -#: cp/decl.c:8862 +#: cp/decl.c:8835 #, c-format msgid "conversion to %s%s will never use a type conversion operator" msgstr "" #. 13.4.0.3 -#: cp/decl.c:8870 +#: cp/decl.c:8843 msgid "ISO C++ prohibits overloading operator ?:" msgstr "" -#: cp/decl.c:8920 +#: cp/decl.c:8893 msgid "postfix %qD must take % as its argument" msgstr "" -#: cp/decl.c:8924 +#: cp/decl.c:8897 msgid "postfix %qD must take % as its second argument" msgstr "" -#: cp/decl.c:8931 +#: cp/decl.c:8904 msgid "%qD must take either zero or one argument" msgstr "" -#: cp/decl.c:8933 +#: cp/decl.c:8906 msgid "%qD must take either one or two arguments" msgstr "" -#: cp/decl.c:8954 +#: cp/decl.c:8927 msgid "prefix %qD should return %qT" msgstr "" -#: cp/decl.c:8960 +#: cp/decl.c:8933 msgid "postfix %qD should return %qT" msgstr "" -#: cp/decl.c:8969 +#: cp/decl.c:8942 msgid "%qD must take %" msgstr "" -#: cp/decl.c:8971 cp/decl.c:8979 +#: cp/decl.c:8944 cp/decl.c:8952 msgid "%qD must take exactly one argument" msgstr "" -#: cp/decl.c:8981 +#: cp/decl.c:8954 msgid "%qD must take exactly two arguments" msgstr "" -#: cp/decl.c:8989 +#: cp/decl.c:8962 msgid "user-defined %qD always evaluates both arguments" msgstr "" -#: cp/decl.c:9003 +#: cp/decl.c:8976 msgid "%qD should return by value" msgstr "" -#: cp/decl.c:9015 cp/decl.c:9018 +#: cp/decl.c:8988 cp/decl.c:8991 #, fuzzy msgid "%qD cannot have default arguments" msgstr "½µÑ…°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– \"%s\"" -#: cp/decl.c:9072 +#: cp/decl.c:9049 #, fuzzy msgid "using template type parameter %qT after %qs" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: cp/decl.c:9086 +#: cp/decl.c:9064 msgid "using typedef-name %qD after %qs" msgstr "" -#: cp/decl.c:9087 +#: cp/decl.c:9065 #, fuzzy msgid "%qD has a previous declaration here" msgstr "³ÑÑ‚° ż°żÑÑ€Ñ´½Ñµ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ" -#: cp/decl.c:9094 +#: cp/decl.c:9073 msgid "%qT referred to as %qs" msgstr "" -#: cp/decl.c:9095 cp/decl.c:9102 +#: cp/decl.c:9074 cp/decl.c:9082 #, fuzzy msgid "%qT has a previous declaration here" msgstr "³ÑÑ‚° ż°żÑÑ€Ñ´½Ñµ °ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ" -#: cp/decl.c:9101 +#: cp/decl.c:9081 msgid "%qT referred to as enum" msgstr "" @@ -14945,52 +15056,56 @@ msgstr "" #. void f(class C); // No template header here #. #. then the required template argument is missing. -#: cp/decl.c:9117 +#: cp/decl.c:9097 #, fuzzy msgid "template argument required for %<%s %T%>" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: cp/decl.c:9279 +#: cp/decl.c:9133 cp/name-lookup.c:2595 +msgid "%qD has the same name as the class in which it is declared" +msgstr "" + +#: cp/decl.c:9271 #, fuzzy msgid "use of enum %q#D without previous declaration" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: cp/decl.c:9298 +#: cp/decl.c:9290 #, fuzzy msgid "redeclaration of %qT as a non-template" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" -#: cp/decl.c:9391 +#: cp/decl.c:9383 msgid "derived union %qT invalid" msgstr "" -#: cp/decl.c:9397 +#: cp/decl.c:9389 msgid "Java class %qT cannot have multiple bases" msgstr "" -#: cp/decl.c:9405 +#: cp/decl.c:9397 msgid "Java class %qT cannot have virtual bases" msgstr "" -#: cp/decl.c:9424 +#: cp/decl.c:9416 msgid "base type %qT fails to be a struct or class type" msgstr "" -#: cp/decl.c:9457 +#: cp/decl.c:9449 msgid "recursive type %qT undefined" msgstr "" -#: cp/decl.c:9459 +#: cp/decl.c:9451 #, fuzzy msgid "duplicate base type %qT invalid" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"restrict\"" -#: cp/decl.c:9529 +#: cp/decl.c:9521 #, fuzzy msgid "multiple definition of %q#T" msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ `%#T'" -#: cp/decl.c:9530 +#: cp/decl.c:9522 #, fuzzy msgid "%Jprevious definition here" msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ" @@ -14999,71 +15114,71 @@ msgstr "ż°żÑÑ€Ñ´½Ñµ ²Ñ‹·½°Ñ‡Ñ½ÑŒ½µ" #. #. IF no integral type can represent all the enumerator values, the #. enumeration is ill-formed. -#: cp/decl.c:9667 +#: cp/decl.c:9659 msgid "no integral type can represent all of the enumerator values for %qT" msgstr "" -#: cp/decl.c:9768 +#: cp/decl.c:9765 msgid "enumerator value for %qD not integer constant" msgstr "" -#: cp/decl.c:9795 +#: cp/decl.c:9792 msgid "overflow in enumeration values at %qD" msgstr "" -#: cp/decl.c:9866 +#: cp/decl.c:9863 #, fuzzy msgid "return type %q#T is incomplete" msgstr "²ÑÑ€Ñ‚°µĵы тыż \"%s\" ½µ \"int\"" -#: cp/decl.c:9981 cp/typeck.c:6274 +#: cp/decl.c:9978 cp/typeck.c:6163 msgid "% should return a reference to %<*this%>" msgstr "" -#: cp/decl.c:10304 +#: cp/decl.c:10301 #, fuzzy msgid "parameter %qD declared void" msgstr "тыż ż°Ñ€°ĵµÑ‚Ñ€° \"%s\" ½µ °ħ'яўğµ½Ñ‹" -#: cp/decl.c:10786 +#: cp/decl.c:10790 #, fuzzy msgid "invalid member function declaration" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl.c:10801 +#: cp/decl.c:10805 #, fuzzy msgid "%qD is already defined in class %qT" msgstr "½µ ·½ı´·µ½ şğ°Ñ \"%s\"" -#: cp/decl.c:11012 +#: cp/decl.c:11015 msgid "static member function %q#D declared with type qualifiers" msgstr "" -#: cp/decl2.c:280 +#: cp/decl2.c:279 msgid "name missing for member function" msgstr "" -#: cp/decl2.c:373 cp/decl2.c:387 +#: cp/decl2.c:372 cp/decl2.c:386 msgid "ambiguous conversion for array subscript" msgstr "" -#: cp/decl2.c:381 +#: cp/decl2.c:380 msgid "invalid types %<%T[%T]%> for array subscript" msgstr "" -#: cp/decl2.c:426 +#: cp/decl2.c:423 msgid "deleting array %q#D" msgstr "" -#: cp/decl2.c:432 +#: cp/decl2.c:429 msgid "type %q#T argument given to %, expected pointer" msgstr "" -#: cp/decl2.c:444 +#: cp/decl2.c:441 msgid "cannot delete a function. Only pointer-to-objects are valid arguments to %" msgstr "" -#: cp/decl2.c:452 +#: cp/decl2.c:449 #, fuzzy msgid "deleting %qT is undefined" msgstr "ĵµÑ‚ş° \"%s\" уĥы²°µÑ†Ñ†°, °ğµ ½µ ²Ñ‹·½°Ñ‡°½°" @@ -15071,179 +15186,173 @@ msgstr "ĵµÑ‚ş° \"%s\" уĥы²°µÑ†Ñ†°, °ğµ ½µ ²Ñ‹·½°Ñ‡°½°" #. 14.5.2.2 [temp.mem] #. #. A local class shall not have member templates. -#: cp/decl2.c:488 +#: cp/decl2.c:485 #, fuzzy msgid "invalid declaration of member template %q#D in local class" msgstr "°ħ²ÑÑˆÑ‡Ñ½ÑŒ½µ ш°ħğё½Ñƒ `%#D'" -#: cp/decl2.c:497 +#: cp/decl2.c:494 #, fuzzy msgid "invalid use of % in template declaration of %q#D" msgstr "ż°ÑžÑ‚Ñ€½°µ °ħ²ÑÑˆÑ‡Ñ½½µ ĵµÑ‚şÑ– \"%s\"" -#: cp/decl2.c:507 cp/pt.c:2990 +#: cp/decl2.c:504 cp/pt.c:2965 #, fuzzy msgid "template declaration of %q#D" msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½½µ" -#: cp/decl2.c:556 +#: cp/decl2.c:553 msgid "Java method %qD has non-Java return type %qT" msgstr "" -#: cp/decl2.c:572 +#: cp/decl2.c:569 msgid "Java method %qD has non-Java parameter type %qT" msgstr "" -#: cp/decl2.c:677 +#: cp/decl2.c:674 msgid "prototype for %q#D does not match any in class %qT" msgstr "" -#: cp/decl2.c:778 +#: cp/decl2.c:775 msgid "local class %q#T shall not have static data member %q#D" msgstr "" -#: cp/decl2.c:786 +#: cp/decl2.c:783 msgid "initializer invalid for static member with constructor" msgstr "" -#: cp/decl2.c:789 +#: cp/decl2.c:786 msgid "(an out of class initialization is required)" msgstr "" -#: cp/decl2.c:870 +#: cp/decl2.c:867 msgid "member %qD conflicts with virtual function table field name" msgstr "" -#: cp/decl2.c:890 +#: cp/decl2.c:886 +msgid "applying attributes to template parameters is not implemented" +msgstr "" + +#: cp/decl2.c:896 #, fuzzy msgid "%qD is already defined in %qT" msgstr "½µ ·½ı´·µ½ şğ°Ñ \"%s\"" -#: cp/decl2.c:936 +#: cp/decl2.c:944 msgid "field initializer is not constant" msgstr "" -#: cp/decl2.c:964 +#: cp/decl2.c:972 msgid "% specifiers are not permitted on non-static data members" msgstr "" -#: cp/decl2.c:1010 +#: cp/decl2.c:1018 #, fuzzy msgid "cannot declare %qD to be a bit-field type" msgstr "½µ ĵ°³Ñƒ °Ñ‚рыĵ°Ñ†ÑŒ °´Ñ€°Ñ ħіт°²°³° żğя \"%s\"" -#: cp/decl2.c:1020 +#: cp/decl2.c:1028 #, fuzzy msgid "cannot declare bit-field %qD with function type" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/decl2.c:1027 +#: cp/decl2.c:1035 #, fuzzy msgid "%qD is already defined in the class %qT" msgstr "½µ ·½ı´·µ½ şğ°Ñ \"%s\"" -#: cp/decl2.c:1034 +#: cp/decl2.c:1042 #, fuzzy msgid "static member %qD cannot be a bit-field" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/decl2.c:1093 -#, fuzzy -msgid "initializer specified for non-member function %qD" -msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" - -#: cp/decl2.c:1097 -#, fuzzy -msgid "invalid initializer for virtual method %qD" -msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" - -#: cp/decl2.c:1129 +#: cp/decl2.c:1087 msgid "anonymous struct not inside named type" msgstr "" -#: cp/decl2.c:1206 +#: cp/decl2.c:1164 msgid "namespace-scope anonymous aggregates must be static" msgstr "" -#: cp/decl2.c:1213 +#: cp/decl2.c:1171 msgid "anonymous union with no members" msgstr "" -#: cp/decl2.c:1249 +#: cp/decl2.c:1207 msgid "% must return type %qT" msgstr "" -#: cp/decl2.c:1258 +#: cp/decl2.c:1216 msgid "% takes type % (%qT) as first parameter" msgstr "" -#: cp/decl2.c:1287 +#: cp/decl2.c:1245 msgid "% must return type %qT" msgstr "" -#: cp/decl2.c:1296 +#: cp/decl2.c:1254 msgid "% takes type %qT as first parameter" msgstr "" -#: cp/decl2.c:3033 +#: cp/decl2.c:2992 #, fuzzy msgid "inline function %qD used but never defined" msgstr "°´ĵµÑ†Ñ–½° `%D' ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚Ñž²Ñ‹²°µÑ†Ñ†°, °ğµ ½Ñ ²Ñ‹·½°Ñ‡°½°" -#: cp/decl2.c:3178 +#: cp/decl2.c:3140 #, fuzzy msgid "default argument missing for parameter %P of %q+#D" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" #. damn ICE suppression -#: cp/error.c:2365 +#: cp/error.c:2371 #, c-format msgid "unexpected letter %qc in locate_error\n" msgstr "" #. Can't throw a reference. -#: cp/except.c:239 +#: cp/except.c:262 msgid "type %qT is disallowed in Java % or %" msgstr "" -#: cp/except.c:250 +#: cp/except.c:273 msgid "call to Java % or % with % undefined" msgstr "" #. Thrown object must be a Throwable. -#: cp/except.c:257 +#: cp/except.c:280 msgid "type %qT is not derived from %" msgstr "" -#: cp/except.c:320 +#: cp/except.c:343 msgid "mixing C++ and Java catches in a single translation unit" msgstr "" -#: cp/except.c:576 +#: cp/except.c:602 msgid "throwing NULL, which has integral, not pointer type" msgstr "" -#: cp/except.c:599 cp/init.c:1872 +#: cp/except.c:625 cp/init.c:1893 msgid "%qD should never be overloaded" msgstr "" -#: cp/except.c:666 +#: cp/except.c:692 msgid " in thrown expression" msgstr "" -#: cp/except.c:810 +#: cp/except.c:836 msgid "expression %qE of abstract class type %qT cannot be used in throw-expression" msgstr "" -#: cp/except.c:895 +#: cp/except.c:921 msgid "%Hexception of type %qT will be caught" msgstr "" -#: cp/except.c:897 +#: cp/except.c:923 msgid "%H by earlier handler for %qT" msgstr "" -#: cp/except.c:927 +#: cp/except.c:953 msgid "%H%<...%> handler must be the last handler for its try block" msgstr "" @@ -15325,194 +15434,202 @@ msgstr "" msgid "argument to '%s' missing\n" msgstr "°Ñ€³Ñƒĵµ½Ñ‚ ´ğя \"%s\" żÑ€°żÑƒÑˆÑ‡°½" -#: cp/init.c:316 +#: cp/init.c:326 #, fuzzy msgid "%J%qD should be initialized in the member initialization list" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: cp/init.c:363 +#: cp/init.c:373 msgid "%Jdefault-initialization of %q#D, which has reference type" msgstr "" -#: cp/init.c:369 +#: cp/init.c:379 #, fuzzy msgid "%Juninitialized reference member %qD" msgstr "żÑ€°żÑƒÑˆÑ‡°½ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: cp/init.c:372 +#: cp/init.c:382 msgid "%Juninitialized member %qD with % type %qT" msgstr "" -#: cp/init.c:515 +#: cp/init.c:525 msgid "%qD will be initialized after" msgstr "" -#: cp/init.c:518 +#: cp/init.c:528 #, fuzzy msgid "base %qT will be initialized after" msgstr "šğ°Ñ \"%s\" уĥ іс½Ñƒµ" -#: cp/init.c:521 +#: cp/init.c:531 msgid " %q#D" msgstr "" -#: cp/init.c:523 +#: cp/init.c:533 msgid " base %qT" msgstr "" -#: cp/init.c:524 +#: cp/init.c:534 #, fuzzy msgid "%J when initialized here" msgstr "ż°Ñ€°ĵµÑ‚Ñ€ \"%s\" і½Ñ–Ñ†Ñ‹Ñğі·°²°½Ñ‹" -#: cp/init.c:540 +#: cp/init.c:550 #, fuzzy msgid "%Jmultiple initializations given for %qD" msgstr "і½Ñ–Ñ†Ñ‹Ñğі·°Ñ†Ñ‹Ñ" -#: cp/init.c:543 +#: cp/init.c:553 msgid "%Jmultiple initializations given for base %qT" msgstr "" -#: cp/init.c:610 +#: cp/init.c:620 msgid "%Jinitializations for multiple members of %qT" msgstr "" -#: cp/init.c:667 +#: cp/init.c:677 msgid "%Jbase class %q#T should be explicitly initialized in the copy constructor" msgstr "" -#: cp/init.c:891 cp/init.c:910 +#: cp/init.c:901 cp/init.c:920 msgid "class %qT does not have any field named %qD" msgstr "" -#: cp/init.c:897 +#: cp/init.c:907 msgid "%q#D is a static data member; it can only be initialized at its definition" msgstr "" -#: cp/init.c:904 +#: cp/init.c:914 msgid "%q#D is not a non-static data member of %qT" msgstr "" -#: cp/init.c:943 +#: cp/init.c:953 msgid "unnamed initializer for %qT, which has no base classes" msgstr "" -#: cp/init.c:951 +#: cp/init.c:961 msgid "unnamed initializer for %qT, which uses multiple inheritance" msgstr "" -#: cp/init.c:997 +#: cp/init.c:1007 msgid "%qD is both a direct base and an indirect virtual base" msgstr "" -#: cp/init.c:1005 +#: cp/init.c:1015 msgid "type %qD is not a direct or virtual base of %qT" msgstr "" -#: cp/init.c:1008 +#: cp/init.c:1018 msgid "type %qD is not a direct base of %qT" msgstr "" -#: cp/init.c:1088 +#: cp/init.c:1098 #, fuzzy msgid "bad array initializer" msgstr "½µÑ€ÑÑ‡°Ñ–с½Ñ‹ і½Ñ–Ñ†Ñ‹Ñğі·°Ñ‚°Ñ€" -#: cp/init.c:1287 +#: cp/init.c:1297 #, fuzzy msgid "%qT is not an aggregate type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/init.c:1379 +#: cp/init.c:1389 msgid "qualified type %qT does not match destructor name %<~%T%>" msgstr "" -#: cp/init.c:1387 +#: cp/init.c:1397 msgid "incomplete type %qT does not have member %qD" msgstr "" -#: cp/init.c:1406 +#: cp/init.c:1416 #, fuzzy msgid "%qD is not a member of type %qT" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/init.c:1433 +#: cp/init.c:1443 #, fuzzy msgid "invalid pointer to bit-field %qD" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: cp/init.c:1535 +#: cp/init.c:1545 #, fuzzy msgid "invalid use of non-static member function %qD" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: cp/init.c:1541 cp/semantics.c:1293 +#: cp/init.c:1551 cp/semantics.c:1321 #, fuzzy msgid "invalid use of non-static data member %qD" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: cp/init.c:1641 +#: cp/init.c:1651 +msgid "size in array new must have integral type" +msgstr "" + +#: cp/init.c:1654 +msgid "zero size array reserves no space" +msgstr "" + +#: cp/init.c:1662 msgid "new cannot be applied to a reference type" msgstr "" -#: cp/init.c:1647 +#: cp/init.c:1668 msgid "new cannot be applied to a function type" msgstr "" -#: cp/init.c:1679 +#: cp/init.c:1700 msgid "call to Java constructor, while % undefined" msgstr "" -#: cp/init.c:1695 +#: cp/init.c:1716 #, fuzzy msgid "can't find class$" msgstr "µ ĵ°³Ñƒ ·½°ıсці şğ°Ñ \"%s\"" -#: cp/init.c:1823 +#: cp/init.c:1844 msgid "invalid type % for new" msgstr "" -#: cp/init.c:1833 +#: cp/init.c:1854 #, fuzzy msgid "uninitialized const in % of %q#T" msgstr "½µ ĵ°³Ñƒ і½Ñ–Ñ†Ñ‹Ñğі·°²°Ñ†ÑŒ сяħрўсşÑƒÑŽ фу½şÑ†Ñ‹ÑŽ \"%s\"" -#: cp/init.c:1867 +#: cp/init.c:1888 #, c-format msgid "call to Java constructor with %qs undefined" msgstr "" -#: cp/init.c:1907 +#: cp/init.c:1928 #, fuzzy msgid "request for member %qD is ambiguous" msgstr "ż°ĵµÑ€ \"%s\" - %d ħ°ıт" -#: cp/init.c:2040 +#: cp/init.c:2061 msgid "ISO C++ forbids initialization in array new" msgstr "" -#: cp/init.c:2510 +#: cp/init.c:2531 msgid "initializer ends prematurely" msgstr "" -#: cp/init.c:2563 +#: cp/init.c:2584 msgid "cannot initialize multi-dimensional array with initializer" msgstr "" -#: cp/init.c:2722 +#: cp/init.c:2741 msgid "possible problem detected in invocation of delete operator:" msgstr "" -#: cp/init.c:2725 +#: cp/init.c:2744 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:2746 +#: cp/init.c:2765 msgid "unknown array size in delete" msgstr "" -#: cp/init.c:3006 +#: cp/init.c:2998 msgid "type to vector delete is neither pointer or array type" msgstr "" @@ -15587,14 +15704,18 @@ msgstr "" msgid "generic thunk code fails for method %q#D which uses %<...%>" msgstr "" -#: cp/method.c:650 +#: cp/method.c:657 msgid "non-static const member %q#D, can't use default assignment operator" msgstr "" -#: cp/method.c:656 +#: cp/method.c:663 msgid "non-static reference member %q#D, can't use default assignment operator" msgstr "" +#: cp/method.c:1078 +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:693 #, fuzzy msgid "redeclaration of % as %qT" @@ -15693,65 +15814,59 @@ msgstr "%s: %s: " msgid "XXX is_class_level != (current_scope == class_scope)\n" msgstr "" -#: cp/name-lookup.c:1859 +#: cp/name-lookup.c:1864 #, fuzzy msgid "%q#D hides constructor for %q#T" msgstr "´ÑÑÑ‚руşÑ‚°Ñ€Ñƒ ½µ°ħх´½Ñ‹ \"%#D\"" -#: cp/name-lookup.c:1874 +#: cp/name-lookup.c:1879 #, fuzzy msgid "%q#D conflicts with previous using declaration %q#D" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" -#: cp/name-lookup.c:1886 +#: cp/name-lookup.c:1891 #, fuzzy msgid "previous non-function declaration %q#D" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/name-lookup.c:1887 +#: cp/name-lookup.c:1892 #, fuzzy msgid "conflicts with function declaration %q#D" msgstr "сµşÑ†Ñ‹Ñ \"%s\" ş°½Ñ„ğіşÑ‚уµ · ż°żÑÑ€Ñ´½Ñı ´Ñşğ°Ñ€°Ñ†Ñ‹Ñı" #. It's a nested name with template parameter dependent scope. #. This can only be using-declaration for class member. -#: cp/name-lookup.c:1965 cp/name-lookup.c:1990 cp/name-lookup.c:3163 +#: cp/name-lookup.c:1970 cp/name-lookup.c:1995 cp/name-lookup.c:3157 #, fuzzy msgid "%qT is not a namespace" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" #. 7.3.3/5 #. A using-declaration shall not name a template-id. -#: cp/name-lookup.c:1975 +#: cp/name-lookup.c:1980 msgid "a using-declaration cannot specify a template-id. Try %" msgstr "" -#: cp/name-lookup.c:1982 +#: cp/name-lookup.c:1987 #, fuzzy msgid "namespace %qD not allowed in using-declaration" msgstr "\"%s\" - ³ÑÑ‚° ½µ ż°Ñ‡°Ñ‚°ş ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ–" -#: cp/name-lookup.c:2018 +#: cp/name-lookup.c:2023 #, fuzzy msgid "%qD not declared" msgstr "YYDEBUG ½µ ²Ñ‹·½°Ñ‡°½." -#. If the OLD_FN was really declared, the -#. declarations don't match. -#: cp/name-lookup.c:2030 cp/name-lookup.c:2072 cp/name-lookup.c:2109 +#: cp/name-lookup.c:2035 cp/name-lookup.c:2080 cp/name-lookup.c:2114 #, fuzzy msgid "%qD is already declared in this scope" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/name-lookup.c:2115 +#: cp/name-lookup.c:2120 msgid "using declaration %qD introduced ambiguous type %qT" msgstr "" -#: cp/name-lookup.c:2594 -msgid "%qD has the same name as the class in which it is declared" -msgstr "" - -#: cp/name-lookup.c:2689 +#: cp/name-lookup.c:2691 msgid "using-declaration for non-member at class scope" msgstr "" @@ -15759,421 +15874,438 @@ msgstr "" msgid "using-declaration cannot name destructor" msgstr "" -#: cp/name-lookup.c:2775 +#: cp/name-lookup.c:2769 msgid "declaration of %qD not in a namespace surrounding %qD" msgstr "" -#: cp/name-lookup.c:2783 +#: cp/name-lookup.c:2777 #, fuzzy msgid "explicit qualification in declaration of `%D'" msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½½µ" -#: cp/name-lookup.c:2819 +#: cp/name-lookup.c:2813 msgid "%qD should have been declared inside %qD" msgstr "" -#: cp/name-lookup.c:2881 +#: cp/name-lookup.c:2875 #, fuzzy msgid "namespace alias %qD not allowed here, assuming %qD" msgstr "\"%s\" - ³ÑÑ‚° ½µ ż°Ñ‡°Ñ‚°ş ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ–" #. The parser did not find it, so it's not there. -#: cp/name-lookup.c:2996 +#: cp/name-lookup.c:2990 #, fuzzy msgid "unknown namespace %qD" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: cp/name-lookup.c:3157 +#: cp/name-lookup.c:3151 msgid "namespace %qT undeclared" msgstr "" -#: cp/name-lookup.c:3201 +#: cp/name-lookup.c:3195 msgid "strong using only meaningful at namespace scope" msgstr "" -#: cp/name-lookup.c:3208 +#: cp/name-lookup.c:3202 #, fuzzy msgid "%qD attribute directive ignored" msgstr "\"%s\" °Ñ‚рыħут і³½°Ñ€Ñ‹Ñ€ÑƒµÑ†Ñ†°" -#: cp/name-lookup.c:3342 +#: cp/name-lookup.c:3336 #, fuzzy msgid "use of %qD is ambiguous" msgstr "ż°ĵµÑ€ \"%s\" - %d ħ°ıт" -#: cp/name-lookup.c:3343 +#: cp/name-lookup.c:3337 #, fuzzy msgid " first declared as %q#D here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/name-lookup.c:3345 +#: cp/name-lookup.c:3339 #, fuzzy msgid " also declared as %q#D here" msgstr "½Ñĵ° ż°żÑÑ€Ñ´½Ñ³° °ħ'яў𵽽я ´ğя \"%s\"" -#: cp/name-lookup.c:3360 +#: cp/name-lookup.c:3354 msgid "%qD denotes an ambiguous type" msgstr "" -#: cp/name-lookup.c:3361 +#: cp/name-lookup.c:3355 #, fuzzy msgid "%J first type here" msgstr " °´ÑÑŽğь" -#: cp/name-lookup.c:3362 +#: cp/name-lookup.c:3356 msgid "%J other type here" msgstr "" #. This happens for A::B where B is a template, and there are no #. template arguments. -#: cp/name-lookup.c:3426 cp/typeck.c:1818 +#: cp/name-lookup.c:3420 cp/parser.c:4365 cp/typeck.c:1786 #, fuzzy msgid "invalid use of %qD" msgstr "½µÑ€ÑÑ‡°Ñ–с½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½ÑŒ½µ `%D'" -#: cp/name-lookup.c:3466 +#: cp/name-lookup.c:3460 #, fuzzy msgid "%<%D::%D%> is not a template" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/name-lookup.c:3482 +#: cp/name-lookup.c:3476 #, fuzzy msgid "%qD undeclared in namespace %qD" msgstr "½µ²Ñ´ĵы рэĥыĵ ĵ°ÑˆÑ‹½Ñ‹ \"%s\"" -#: cp/name-lookup.c:4108 +#: cp/name-lookup.c:4102 #, fuzzy msgid "%qD is not a function," msgstr "`%D' - ³ÑÑ‚° ½Ñ фу½şÑ†Ñ‹Ñ," -#: cp/name-lookup.c:4109 +#: cp/name-lookup.c:4103 msgid " conflict with %qD" msgstr "" -#: cp/name-lookup.c:4873 +#: cp/name-lookup.c:4868 msgid "XXX entering pop_everything ()\n" msgstr "" -#: cp/name-lookup.c:4882 +#: cp/name-lookup.c:4877 msgid "XXX leaving pop_everything ()\n" msgstr "" -#: cp/parser.c:1812 +#: cp/parser.c:1807 +#, fuzzy +msgid "%<#pragma%> is not allowed here" +msgstr "šğ°Ñ \"%s\" уĥ іс½Ñƒµ" + +#: cp/parser.c:1836 msgid "%<%D::%D%> has not been declared" msgstr "" -#: cp/parser.c:1815 cp/semantics.c:2318 +#: cp/parser.c:1839 cp/semantics.c:2375 msgid "%<::%D%> has not been declared" msgstr "" -#: cp/parser.c:1818 +#: cp/parser.c:1842 msgid "request for member %qD in non-class type %qT" msgstr "" -#: cp/parser.c:1821 +#: cp/parser.c:1845 #, fuzzy msgid "%<%T::%D%> has not been declared" msgstr "\"%s\" - ³ÑÑ‚° ½µ ż°Ñ‡°Ñ‚°ş ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ–" -#: cp/parser.c:1824 +#: cp/parser.c:1848 #, fuzzy msgid "%qD has not been declared" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/parser.c:1827 +#: cp/parser.c:1851 msgid "%<%D::%D%> %s" msgstr "" -#: cp/parser.c:1829 +#: cp/parser.c:1853 msgid "%<::%D%> %s" msgstr "" -#: cp/parser.c:1831 +#: cp/parser.c:1855 msgid "%qD %s" msgstr "" -#: cp/parser.c:1884 +#: cp/parser.c:1907 msgid "new types may not be defined in a return type" msgstr "" -#: cp/parser.c:1901 cp/pt.c:4364 +#: cp/parser.c:1908 +#, fuzzy +msgid "(perhaps a semicolon is missing after the definition of %qT)" +msgstr "µ ĵ°³Ñƒ ·½°ıсці ´Ñşğ°Ñ€°Ñ†Ñ‹ÑŽ і½Ñ‚эрфµıс° ´ğя \"%s\"" + +#: cp/parser.c:1927 cp/pt.c:4328 #, fuzzy msgid "%qT is not a template" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/parser.c:1903 +#: cp/parser.c:1929 #, fuzzy, c-format msgid "%qE is not a template" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/parser.c:1905 +#: cp/parser.c:1931 #, fuzzy msgid "invalid template-id" msgstr "µÑ€ÑÑ‡°Ñ–с½Ñ‹ ²Ñ‹ħ°Ñ€ %s" -#: cp/parser.c:1933 +#: cp/parser.c:1960 #, fuzzy, c-format msgid "%s cannot appear in a constant-expression" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" °´ĵў½Ñ‹" -#: cp/parser.c:1957 +#: cp/parser.c:1985 #, fuzzy, c-format msgid "invalid use of template-name %qE without an argument list" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" #. Issue an error message. -#: cp/parser.c:1962 +#: cp/parser.c:1990 #, fuzzy, c-format msgid "%qE does not name a type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/parser.c:1993 +#: cp/parser.c:2021 msgid "(perhaps % was intended)" msgstr "" -#: cp/parser.c:2008 +#: cp/parser.c:2036 #, c-format msgid "%qE in namespace %qE does not name a type" msgstr "" -#: cp/parser.c:2011 +#: cp/parser.c:2039 msgid "%qE in class %qT does not name a type" msgstr "" -#: cp/parser.c:2678 +#: cp/parser.c:2748 msgid "ISO C++ forbids braced-groups within expressions" msgstr "" -#: cp/parser.c:2687 +#: cp/parser.c:2757 msgid "statement-expressions are allowed only inside functions" msgstr "" -#: cp/parser.c:2738 +#: cp/parser.c:2808 #, fuzzy msgid "% may not be used in this context" msgstr "\"%s\" ½µ °ħ²µÑˆÑ‡°½ (żµÑ€Ñˆ°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ ў ³ÑÑ‚°ı фу½şÑ†Ñ‹Ñ–)" -#: cp/parser.c:2873 +#: cp/parser.c:2944 msgid "local variable %qD may not appear in this context" msgstr "" -#: cp/parser.c:3238 +#: cp/parser.c:3316 msgid "typedef-name %qD used as destructor declarator" msgstr "" -#: cp/parser.c:3886 +#: cp/parser.c:3965 #, fuzzy msgid "ISO C++ forbids compound-literals" msgstr "ISO C ½µ ´°·²°ğяµ ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ– ĵµÑ‚°ş (label)" -#: cp/parser.c:4786 +#: cp/parser.c:4885 msgid "array bound forbidden after parenthesized type-id" msgstr "" -#: cp/parser.c:4787 +#: cp/parser.c:4886 msgid "try removing the parentheses around the type-id" msgstr "" -#: cp/parser.c:4893 -msgid "size in array new must have integral type" -msgstr "" - -#: cp/parser.c:4896 -msgid "zero size array reserves no space" -msgstr "" - -#: cp/parser.c:4995 +#: cp/parser.c:5087 msgid "expression in new-declarator must have integral or enumeration type" msgstr "" -#: cp/parser.c:5177 +#: cp/parser.c:5276 msgid "use of old-style cast" msgstr "" -#: cp/parser.c:5932 +#: cp/parser.c:6041 #, c-format msgid "case label %qE not within a switch statement" msgstr "" -#: cp/parser.c:6476 +#: cp/parser.c:6584 msgid "ISO C++ forbids computed gotos" msgstr "" -#: cp/parser.c:6601 +#: cp/parser.c:6709 msgid "extra %<;%>" msgstr "" -#: cp/parser.c:6920 +#: cp/parser.c:7028 msgid "mixing declarations and function-definitions is forbidden" msgstr "" -#: cp/parser.c:7052 +#: cp/parser.c:7159 #, fuzzy msgid "duplicate %" msgstr "ż°ÑžÑ‚°Ñ€Ñ½ÑŒ½µ `%s'" -#: cp/parser.c:7221 +#: cp/parser.c:7328 #, fuzzy msgid "class definition may not be declared a friend" msgstr "²Ñ–рту°ğь½Ñ‹Ñ фу½şÑ†Ñ‹Ñ– ½µ ĵ³ÑƒÑ†ÑŒ ħыць сяħрўсşÑ–ĵі" -#: cp/parser.c:7534 +#: cp/parser.c:7641 msgid "only constructors take base initializers" msgstr "" -#: cp/parser.c:7585 +#: cp/parser.c:7692 msgid "anachronistic old-style base class initializer" msgstr "" -#: cp/parser.c:7626 +#: cp/parser.c:7734 msgid "keyword % not allowed in this context (a qualified member initializer is implicitly a type)" msgstr "" #. Warn that we do not support `export'. -#: cp/parser.c:7988 +#: cp/parser.c:8096 msgid "keyword % not implemented, and will be ignored" msgstr "" #. Otherwise, emit an error about the invalid digraph, but continue #. parsing because we got our argument list. -#: cp/parser.c:8358 +#: cp/parser.c:8469 msgid "%<<::%> cannot begin a template-argument list" msgstr "" -#: cp/parser.c:8359 +#: cp/parser.c:8470 msgid "%<<:%> is an alternate spelling for %<[%>. Insert whitespace between %<<%> and %<::%>" msgstr "" -#: cp/parser.c:8366 +#: cp/parser.c:8477 msgid "(if you use -fpermissive G++ will accept your code)" msgstr "" +#: cp/parser.c:8541 +msgid "parse error in template argument list" +msgstr "" + #. Explain what went wrong. -#: cp/parser.c:8536 +#: cp/parser.c:8654 msgid "non-template %qD used as template" msgstr "" -#: cp/parser.c:8537 +#: cp/parser.c:8655 msgid "use %<%T::template %D%> to indicate that it is a template" msgstr "" -#: cp/parser.c:9554 -msgid "using % outside of template" -msgstr "" +#: cp/parser.c:9245 cp/parser.c:15012 +#, fuzzy, c-format +msgid "template declaration of %qs" +msgstr "żÑƒÑÑ‚µ °ħ²ÑÑˆÑ‡Ñ½½µ" -#: cp/parser.c:9677 -msgid "expected type-name" +#: cp/parser.c:9688 +msgid "using % outside of template" msgstr "" -#: cp/parser.c:9748 +#: cp/parser.c:9883 msgid "type attributes are honored only at type definition" msgstr "" #. [namespace.udecl] #. #. A using declaration shall not name a template-id. -#: cp/parser.c:10130 +#: cp/parser.c:10265 #, fuzzy msgid "a template-id may not appear in a using-declaration" msgstr "\"%s\" - ³ÑÑ‚° ½µ ż°Ñ‡°Ñ‚°ş ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ–" -#: cp/parser.c:10461 +#: cp/parser.c:10595 msgid "an asm-specification is not allowed on a function-definition" msgstr "" -#: cp/parser.c:10463 +#: cp/parser.c:10597 #, fuzzy msgid "attributes are not allowed on a function-definition" msgstr "\"%s\" - ³ÑÑ‚° ½µ ż°Ñ‡°Ñ‚°ş ´Ñşğ°Ñ€°Ñ†Ñ‹Ñ–" -#: cp/parser.c:10594 +#: cp/parser.c:10728 msgid "attributes after parenthesized initializer ignored" msgstr "" -#: cp/parser.c:10976 +#: cp/parser.c:11113 #, fuzzy msgid "array bound is not an integer constant" msgstr "ż°ĵµÑ€ ĵ°ÑÑ–²° \"%s\" °´ĵў½Ñ‹" -#: cp/parser.c:11045 +#: cp/parser.c:11183 #, fuzzy msgid "%<%T::%D%> is not a type" msgstr "\"%s\" ĵ°µ ½µ·°²µÑ€Ñˆ°½Ñ‹ тыż" -#: cp/parser.c:11090 +#: cp/parser.c:11225 #, fuzzy msgid "invalid use of constructor as a template" msgstr "½Ñ²µÑ€½°µ ²Ñ‹ş°Ñ€Ñ‹ÑÑ‚°½½µ \"restict\"" -#: cp/parser.c:11091 +#: cp/parser.c:11226 msgid "use %<%T::%D%> instead of %<%T::%T%> to name the constructor in a qualified name" msgstr "" -#: cp/parser.c:11279 +#: cp/parser.c:11414 #, fuzzy msgid "duplicate cv-qualifier" msgstr "ż°ÑžÑ‚°Ñ€Ñ½½µ \"volatile\"" -#: cp/parser.c:11795 +#: cp/parser.c:11916 #, fuzzy msgid "file ends in default argument" msgstr "½µÑ…°ż°µ °Ñ€³Ñƒĵµ½Ñ‚°Ñž у фу½şÑ†Ñ‹Ñ– \"%s\"" -#: cp/parser.c:11855 +#: cp/parser.c:11977 msgid "deprecated use of default argument for parameter of non-function" msgstr "" -#: cp/parser.c:11858 +#: cp/parser.c:11980 msgid "default arguments are only permitted for function parameters" msgstr "" -#: cp/parser.c:12598 +#: cp/parser.c:12722 +#, fuzzy +msgid "invalid class name in declaration of %qD" +msgstr "µÑ€ÑÑ‡°Ñ–с½°µ °ħ²ÑÑˆÑ‡Ñ½½µ" + +#: cp/parser.c:12733 msgid "declaration of %qD in %qD which does not enclose %qD" msgstr "" -#: cp/parser.c:12611 +#: cp/parser.c:12746 msgid "extra qualification ignored" msgstr "" -#: cp/parser.c:12622 +#: cp/parser.c:12757 #, fuzzy msgid "an explicit specialization must be preceded by %